ZGlmZiAtLWdpdCBhL2NsYW5nLTI1NzcxMTMvQW5kcm9pZFZlcnNpb24udHh0IGIvY2xhbmctMjU3NzExMy9BbmRyb2lkVmVyc2lvbi50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcwMjZhNWYuLjAwMDAwMDAKLS0tIGEvY2xhbmctMjU3NzExMy9BbmRyb2lkVmVyc2lvbi50eHQKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi0zLjguMjU2MjI5CmRpZmYgLS1naXQgYS9jbGFuZy0yNTc3MTEzL01PRFVMRV9MSUNFTlNFX0JTRF9MSUtFIGIvY2xhbmctMjU3NzExMy9NT0RVTEVfTElDRU5TRV9CU0RfTElLRQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTY5ZGUyOS4uMDAwMDAwMAotLS0gYS9jbGFuZy0yNTc3MTEzL01PRFVMRV9MSUNFTlNFX0JTRF9MSUtFCisrKyAvZGV2L251bGwKZGlmZiAtLWdpdCBhL2NsYW5nLTI1NzcxMTMvTU9EVUxFX0xJQ0VOU0VfTUlUIGIvY2xhbmctMjU3NzExMy9NT0RVTEVfTElDRU5TRV9NSVQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2OWRlMjkuLjAwMDAwMDAKLS0tIGEvY2xhbmctMjU3NzExMy9NT0RVTEVfTElDRU5TRV9NSVQKKysrIC9kZXYvbnVsbApkaWZmIC0tZ2l0IGEvY2xhbmctMjU3NzExMy9OT1RJQ0UgYi9jbGFuZy0yNTc3MTEzL05PVElDRQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODNhZGRlZi4uMDAwMDAwMAotLS0gYS9jbGFuZy0yNTc3MTEzL05PVElDRQorKysgL2Rldi9udWxsCkBAIC0xLDQ1NyArMCwwIEBACi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLUxMVk0gUmVsZWFzZSBMaWNlbnNlCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLVVuaXZlcnNpdHkgb2YgSWxsaW5vaXMvTkNTQQotT3BlbiBTb3VyY2UgTGljZW5zZQotCi1Db3B5cmlnaHQgKGMpIDIwMDctMjAxNCBVbml2ZXJzaXR5IG9mIElsbGlub2lzIGF0IFVyYmFuYS1DaGFtcGFpZ24uCi1BbGwgcmlnaHRzIHJlc2VydmVkLgotCi1EZXZlbG9wZWQgYnk6Ci0KLSAgICBMTFZNIFRlYW0KLQotICAgIFVuaXZlcnNpdHkgb2YgSWxsaW5vaXMgYXQgVXJiYW5hLUNoYW1wYWlnbgotCi0gICAgaHR0cDovL2xsdm0ub3JnCi0KLVBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YKLXRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsIHdpdGgKLXRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8KLXVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzCi1vZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8KLXNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKLQotICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAotICAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcnMuCi0KLSAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKLSAgICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXJzIGluIHRoZQotICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLQotICAgICogTmVpdGhlciB0aGUgbmFtZXMgb2YgdGhlIExMVk0gVGVhbSwgVW5pdmVyc2l0eSBvZiBJbGxpbm9pcyBhdAotICAgICAgVXJiYW5hLUNoYW1wYWlnbiwgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvCi0gICAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgU29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYwotICAgICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotCi1USEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgotSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MKLUZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi1DT05UUklCVVRPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKLUxJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCi1PVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIFdJVEggVEhFCi1TT0ZUV0FSRS4KLQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1UaGUgTExWTSBzb2Z0d2FyZSBjb250YWlucyBjb2RlIHdyaXR0ZW4gYnkgdGhpcmQgcGFydGllcy4gIFN1Y2ggc29mdHdhcmUgd2lsbAotaGF2ZSBpdHMgb3duIGluZGl2aWR1YWwgTElDRU5TRS5UWFQgZmlsZSBpbiB0aGUgZGlyZWN0b3J5IGluIHdoaWNoIGl0IGFwcGVhcnMuCi1UaGlzIGZpbGUgd2lsbCBkZXNjcmliZSB0aGUgY29weXJpZ2h0cywgbGljZW5zZSwgYW5kIHJlc3RyaWN0aW9ucyB3aGljaCBhcHBseQotdG8gdGhhdCBjb2RlLgotCi1UaGUgZGlzY2xhaW1lciBvZiB3YXJyYW50eSBpbiB0aGUgVW5pdmVyc2l0eSBvZiBJbGxpbm9pcyBPcGVuIFNvdXJjZSBMaWNlbnNlCi1hcHBsaWVzIHRvIGFsbCBjb2RlIGluIHRoZSBMTFZNIERpc3RyaWJ1dGlvbiwgYW5kIG5vdGhpbmcgaW4gYW55IG9mIHRoZQotb3RoZXIgbGljZW5zZXMgZ2l2ZXMgcGVybWlzc2lvbiB0byB1c2UgdGhlIG5hbWVzIG9mIHRoZSBMTFZNIFRlYW0gb3IgdGhlCi1Vbml2ZXJzaXR5IG9mIElsbGlub2lzIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotU29mdHdhcmUuCi0KLVRoZSBmb2xsb3dpbmcgcGllY2VzIG9mIHNvZnR3YXJlIGhhdmUgYWRkaXRpb25hbCBvciBhbHRlcm5hdGUgY29weXJpZ2h0cywKLWxpY2Vuc2VzLCBhbmQvb3IgcmVzdHJpY3Rpb25zOgotCi1Qcm9ncmFtICAgICAgICAgICAgIERpcmVjdG9yeQotLS0tLS0tLSAgICAgICAgICAgICAtLS0tLS0tLS0KLTxub25lIHlldD4KLQotCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLWNvbXBpbGVyX3J0IExpY2Vuc2UKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1UaGUgY29tcGlsZXJfcnQgbGlicmFyeSBpcyBkdWFsIGxpY2Vuc2VkIHVuZGVyIGJvdGggdGhlIFVuaXZlcnNpdHkgb2YgSWxsaW5vaXMKLSJCU0QtTGlrZSIgbGljZW5zZSBhbmQgdGhlIE1JVCBsaWNlbnNlLiAgQXMgYSB1c2VyIG9mIHRoaXMgY29kZSB5b3UgbWF5IGNob29zZQotdG8gdXNlIGl0IHVuZGVyIGVpdGhlciBsaWNlbnNlLiAgQXMgYSBjb250cmlidXRvciwgeW91IGFncmVlIHRvIGFsbG93IHlvdXIgY29kZQotdG8gYmUgdXNlZCB1bmRlciBib3RoLgotCi1GdWxsIHRleHQgb2YgdGhlIHJlbGV2YW50IGxpY2Vuc2VzIGlzIGluY2x1ZGVkIGJlbG93LgotCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotVW5pdmVyc2l0eSBvZiBJbGxpbm9pcy9OQ1NBCi1PcGVuIFNvdXJjZSBMaWNlbnNlCi0KLUNvcHlyaWdodCAoYykgMjAwOS0yMDE0IGJ5IHRoZSBjb250cmlidXRvcnMgbGlzdGVkIGluIENSRURJVFMuVFhUCi0KLUFsbCByaWdodHMgcmVzZXJ2ZWQuCi0KLURldmVsb3BlZCBieToKLQotICAgIExMVk0gVGVhbQotCi0gICAgVW5pdmVyc2l0eSBvZiBJbGxpbm9pcyBhdCBVcmJhbmEtQ2hhbXBhaWduCi0KLSAgICBodHRwOi8vbGx2bS5vcmcKLQotUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZgotdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgd2l0aAotdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0bwotdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMKLW9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbwotc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgotCi0gICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCi0gICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVycy4KLQotICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAotICAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcnMgaW4gdGhlCi0gICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotCi0gICAgKiBOZWl0aGVyIHRoZSBuYW1lcyBvZiB0aGUgTExWTSBUZWFtLCBVbml2ZXJzaXR5IG9mIElsbGlub2lzIGF0Ci0gICAgICBVcmJhbmEtQ2hhbXBhaWduLCBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8KLSAgICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljCi0gICAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0KLVRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCi1JTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUwotRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLUNPTlRSSUJVVE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgotTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKLU9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgV0lUSCBUSEUKLVNPRlRXQVJFLgotCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotQ29weXJpZ2h0IChjKSAyMDA5LTIwMTQgYnkgdGhlIGNvbnRyaWJ1dG9ycyBsaXN0ZWQgaW4gQ1JFRElUUy5UWFQKLQotUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQotb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKLWluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKLXRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKLWNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcwotZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKLQotVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KLWFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgotCi1USEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgotSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCi1GSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLUFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKLUxJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCi1PVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCi1USEUgU09GVFdBUkUuCi0KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotQ29weXJpZ2h0cyBhbmQgTGljZW5zZXMgZm9yIFRoaXJkIFBhcnR5IFNvZnR3YXJlIERpc3RyaWJ1dGVkIHdpdGggTExWTToKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotVGhlIExMVk0gc29mdHdhcmUgY29udGFpbnMgY29kZSB3cml0dGVuIGJ5IHRoaXJkIHBhcnRpZXMuICBTdWNoIHNvZnR3YXJlIHdpbGwKLWhhdmUgaXRzIG93biBpbmRpdmlkdWFsIExJQ0VOU0UuVFhUIGZpbGUgaW4gdGhlIGRpcmVjdG9yeSBpbiB3aGljaCBpdCBhcHBlYXJzLgotVGhpcyBmaWxlIHdpbGwgZGVzY3JpYmUgdGhlIGNvcHlyaWdodHMsIGxpY2Vuc2UsIGFuZCByZXN0cmljdGlvbnMgd2hpY2ggYXBwbHkKLXRvIHRoYXQgY29kZS4KLQotVGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudHkgaW4gdGhlIFVuaXZlcnNpdHkgb2YgSWxsaW5vaXMgT3BlbiBTb3VyY2UgTGljZW5zZQotYXBwbGllcyB0byBhbGwgY29kZSBpbiB0aGUgTExWTSBEaXN0cmlidXRpb24sIGFuZCBub3RoaW5nIGluIGFueSBvZiB0aGUKLW90aGVyIGxpY2Vuc2VzIGdpdmVzIHBlcm1pc3Npb24gdG8gdXNlIHRoZSBuYW1lcyBvZiB0aGUgTExWTSBUZWFtIG9yIHRoZQotVW5pdmVyc2l0eSBvZiBJbGxpbm9pcyB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLVNvZnR3YXJlLgotCi0KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotbGliYysrIExpY2Vuc2UKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1UaGUgbGliYysrIGxpYnJhcnkgaXMgZHVhbCBsaWNlbnNlZCB1bmRlciBib3RoIHRoZSBVbml2ZXJzaXR5IG9mIElsbGlub2lzCi0iQlNELUxpa2UiIGxpY2Vuc2UgYW5kIHRoZSBNSVQgbGljZW5zZS4gIEFzIGEgdXNlciBvZiB0aGlzIGNvZGUgeW91IG1heSBjaG9vc2UKLXRvIHVzZSBpdCB1bmRlciBlaXRoZXIgbGljZW5zZS4gIEFzIGEgY29udHJpYnV0b3IsIHlvdSBhZ3JlZSB0byBhbGxvdyB5b3VyIGNvZGUKLXRvIGJlIHVzZWQgdW5kZXIgYm90aC4KLQotRnVsbCB0ZXh0IG9mIHRoZSByZWxldmFudCBsaWNlbnNlcyBpcyBpbmNsdWRlZCBiZWxvdy4KLQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLVVuaXZlcnNpdHkgb2YgSWxsaW5vaXMvTkNTQQotT3BlbiBTb3VyY2UgTGljZW5zZQotCi1Db3B5cmlnaHQgKGMpIDIwMDktMjAxNCBieSB0aGUgY29udHJpYnV0b3JzIGxpc3RlZCBpbiBDUkVESVRTLlRYVAotCi1BbGwgcmlnaHRzIHJlc2VydmVkLgotCi1EZXZlbG9wZWQgYnk6Ci0KLSAgICBMTFZNIFRlYW0KLQotICAgIFVuaXZlcnNpdHkgb2YgSWxsaW5vaXMgYXQgVXJiYW5hLUNoYW1wYWlnbgotCi0gICAgaHR0cDovL2xsdm0ub3JnCi0KLVBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YKLXRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsIHdpdGgKLXRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8KLXVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzCi1vZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8KLXNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKLQotICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAotICAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcnMuCi0KLSAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKLSAgICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXJzIGluIHRoZQotICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLQotICAgICogTmVpdGhlciB0aGUgbmFtZXMgb2YgdGhlIExMVk0gVGVhbSwgVW5pdmVyc2l0eSBvZiBJbGxpbm9pcyBhdAotICAgICAgVXJiYW5hLUNoYW1wYWlnbiwgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvCi0gICAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgU29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYwotICAgICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotCi1USEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgotSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MKLUZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi1DT05UUklCVVRPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKLUxJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCi1PVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIFdJVEggVEhFCi1TT0ZUV0FSRS4KLQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLUNvcHlyaWdodCAoYykgMjAwOS0yMDE0IGJ5IHRoZSBjb250cmlidXRvcnMgbGlzdGVkIGluIENSRURJVFMuVFhUCi0KLVBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKLW9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCi1pbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCi10byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCi1jb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKLWZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Ci0KLVRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCi1hbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KLQotVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKLUlNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAotRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi1BVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCi1MSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAotT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgotVEhFIFNPRlRXQVJFLgotCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLWxpYmMrK2FiaSBMaWNlbnNlCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotVGhlIGxpYmMrK2FiaSBsaWJyYXJ5IGlzIGR1YWwgbGljZW5zZWQgdW5kZXIgYm90aCB0aGUgVW5pdmVyc2l0eSBvZiBJbGxpbm9pcwotIkJTRC1MaWtlIiBsaWNlbnNlIGFuZCB0aGUgTUlUIGxpY2Vuc2UuICBBcyBhIHVzZXIgb2YgdGhpcyBjb2RlIHlvdSBtYXkgY2hvb3NlCi10byB1c2UgaXQgdW5kZXIgZWl0aGVyIGxpY2Vuc2UuICBBcyBhIGNvbnRyaWJ1dG9yLCB5b3UgYWdyZWUgdG8gYWxsb3cgeW91ciBjb2RlCi10byBiZSB1c2VkIHVuZGVyIGJvdGguCi0KLUZ1bGwgdGV4dCBvZiB0aGUgcmVsZXZhbnQgbGljZW5zZXMgaXMgaW5jbHVkZWQgYmVsb3cuCi0KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1Vbml2ZXJzaXR5IG9mIElsbGlub2lzL05DU0EKLU9wZW4gU291cmNlIExpY2Vuc2UKLQotQ29weXJpZ2h0IChjKSAyMDA5LTIwMTQgYnkgdGhlIGNvbnRyaWJ1dG9ycyBsaXN0ZWQgaW4gQ1JFRElUUy5UWFQKLQotQWxsIHJpZ2h0cyByZXNlcnZlZC4KLQotRGV2ZWxvcGVkIGJ5OgotCi0gICAgTExWTSBUZWFtCi0KLSAgICBVbml2ZXJzaXR5IG9mIElsbGlub2lzIGF0IFVyYmFuYS1DaGFtcGFpZ24KLQotICAgIGh0dHA6Ly9sbHZtLm9yZwotCi1QZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mCi10aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCB3aXRoCi10aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvCi11c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcwotb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvCi1zbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Ci0KLSAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKLSAgICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXJzLgotCi0gICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCi0gICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVycyBpbiB0aGUKLSAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0KLSAgICAqIE5laXRoZXIgdGhlIG5hbWVzIG9mIHRoZSBMTFZNIFRlYW0sIFVuaXZlcnNpdHkgb2YgSWxsaW5vaXMgYXQKLSAgICAgIFVyYmFuYS1DaGFtcGFpZ24sIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0bwotICAgICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMKLSAgICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLQotVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKLUlNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTCi1GT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotQ09OVFJJQlVUT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCi1MSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAotT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBXSVRIIFRIRQotU09GVFdBUkUuCi0KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1Db3B5cmlnaHQgKGMpIDIwMDktMjAxNCBieSB0aGUgY29udHJpYnV0b3JzIGxpc3RlZCBpbiBDUkVESVRTLlRYVAotCi1QZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5Ci1vZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAotaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cwotdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAotY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCi1mdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgotCi1UaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgotYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCi0KLVRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCi1JTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKLUZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgotTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKLU9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KLVRIRSBTT0ZUV0FSRS4KLQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1saWJjKythYmkgTGljZW5zZQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLVRoZSBsaWJjKythYmkgbGlicmFyeSBpcyBkdWFsIGxpY2Vuc2VkIHVuZGVyIGJvdGggdGhlIFVuaXZlcnNpdHkgb2YgSWxsaW5vaXMKLSJCU0QtTGlrZSIgbGljZW5zZSBhbmQgdGhlIE1JVCBsaWNlbnNlLiAgQXMgYSB1c2VyIG9mIHRoaXMgY29kZSB5b3UgbWF5IGNob29zZQotdG8gdXNlIGl0IHVuZGVyIGVpdGhlciBsaWNlbnNlLiAgQXMgYSBjb250cmlidXRvciwgeW91IGFncmVlIHRvIGFsbG93IHlvdXIgY29kZQotdG8gYmUgdXNlZCB1bmRlciBib3RoLgotCi1GdWxsIHRleHQgb2YgdGhlIHJlbGV2YW50IGxpY2Vuc2VzIGlzIGluY2x1ZGVkIGJlbG93LgotCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotVW5pdmVyc2l0eSBvZiBJbGxpbm9pcy9OQ1NBCi1PcGVuIFNvdXJjZSBMaWNlbnNlCi0KLUNvcHlyaWdodCAoYykgMjAwOS0yMDE1IGJ5IHRoZSBjb250cmlidXRvcnMgbGlzdGVkIGluIENSRURJVFMuVFhUCi0KLUFsbCByaWdodHMgcmVzZXJ2ZWQuCi0KLURldmVsb3BlZCBieToKLQotICAgIExMVk0gVGVhbQotCi0gICAgVW5pdmVyc2l0eSBvZiBJbGxpbm9pcyBhdCBVcmJhbmEtQ2hhbXBhaWduCi0KLSAgICBodHRwOi8vbGx2bS5vcmcKLQotUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZgotdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgd2l0aAotdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0bwotdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMKLW9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbwotc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgotCi0gICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCi0gICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVycy4KLQotICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAotICAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcnMgaW4gdGhlCi0gICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotCi0gICAgKiBOZWl0aGVyIHRoZSBuYW1lcyBvZiB0aGUgTExWTSBUZWFtLCBVbml2ZXJzaXR5IG9mIElsbGlub2lzIGF0Ci0gICAgICBVcmJhbmEtQ2hhbXBhaWduLCBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8KLSAgICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljCi0gICAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0KLVRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCi1JTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUwotRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLUNPTlRSSUJVVE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgotTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKLU9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgV0lUSCBUSEUKLVNPRlRXQVJFLgotCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotQ29weXJpZ2h0IChjKSAyMDA5LTIwMTQgYnkgdGhlIGNvbnRyaWJ1dG9ycyBsaXN0ZWQgaW4gQ1JFRElUUy5UWFQKLQotUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQotb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKLWluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKLXRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKLWNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcwotZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKLQotVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KLWFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgotCi1USEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgotSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCi1GSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLUFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKLUxJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCi1PVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCi1USEUgU09GVFdBUkUuCi0KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotTExWTSBSZWxlYXNlIExpY2Vuc2UKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotVW5pdmVyc2l0eSBvZiBJbGxpbm9pcy9OQ1NBCi1PcGVuIFNvdXJjZSBMaWNlbnNlCi0KLUNvcHlyaWdodCAoYykgMjAwMy0yMDE0IFVuaXZlcnNpdHkgb2YgSWxsaW5vaXMgYXQgVXJiYW5hLUNoYW1wYWlnbi4KLUFsbCByaWdodHMgcmVzZXJ2ZWQuCi0KLURldmVsb3BlZCBieToKLQotICAgIExMVk0gVGVhbQotCi0gICAgVW5pdmVyc2l0eSBvZiBJbGxpbm9pcyBhdCBVcmJhbmEtQ2hhbXBhaWduCi0KLSAgICBodHRwOi8vbGx2bS5vcmcKLQotUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZgotdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgd2l0aAotdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0bwotdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMKLW9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbwotc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgotCi0gICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCi0gICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVycy4KLQotICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAotICAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcnMgaW4gdGhlCi0gICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotCi0gICAgKiBOZWl0aGVyIHRoZSBuYW1lcyBvZiB0aGUgTExWTSBUZWFtLCBVbml2ZXJzaXR5IG9mIElsbGlub2lzIGF0Ci0gICAgICBVcmJhbmEtQ2hhbXBhaWduLCBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8KLSAgICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljCi0gICAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0KLVRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCi1JTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUwotRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLUNPTlRSSUJVVE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgotTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKLU9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgV0lUSCBUSEUKLVNPRlRXQVJFLgotCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLUNvcHlyaWdodHMgYW5kIExpY2Vuc2VzIGZvciBUaGlyZCBQYXJ0eSBTb2Z0d2FyZSBEaXN0cmlidXRlZCB3aXRoIExMVk06Ci09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLVRoZSBMTFZNIHNvZnR3YXJlIGNvbnRhaW5zIGNvZGUgd3JpdHRlbiBieSB0aGlyZCBwYXJ0aWVzLiAgU3VjaCBzb2Z0d2FyZSB3aWxsCi1oYXZlIGl0cyBvd24gaW5kaXZpZHVhbCBMSUNFTlNFLlRYVCBmaWxlIGluIHRoZSBkaXJlY3RvcnkgaW4gd2hpY2ggaXQgYXBwZWFycy4KLVRoaXMgZmlsZSB3aWxsIGRlc2NyaWJlIHRoZSBjb3B5cmlnaHRzLCBsaWNlbnNlLCBhbmQgcmVzdHJpY3Rpb25zIHdoaWNoIGFwcGx5Ci10byB0aGF0IGNvZGUuCi0KLVRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5IGluIHRoZSBVbml2ZXJzaXR5IG9mIElsbGlub2lzIE9wZW4gU291cmNlIExpY2Vuc2UKLWFwcGxpZXMgdG8gYWxsIGNvZGUgaW4gdGhlIExMVk0gRGlzdHJpYnV0aW9uLCBhbmQgbm90aGluZyBpbiBhbnkgb2YgdGhlCi1vdGhlciBsaWNlbnNlcyBnaXZlcyBwZXJtaXNzaW9uIHRvIHVzZSB0aGUgbmFtZXMgb2YgdGhlIExMVk0gVGVhbSBvciB0aGUKLVVuaXZlcnNpdHkgb2YgSWxsaW5vaXMgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi1Tb2Z0d2FyZS4KLQotVGhlIGZvbGxvd2luZyBwaWVjZXMgb2Ygc29mdHdhcmUgaGF2ZSBhZGRpdGlvbmFsIG9yIGFsdGVybmF0ZSBjb3B5cmlnaHRzLAotbGljZW5zZXMsIGFuZC9vciByZXN0cmljdGlvbnM6Ci0KLVByb2dyYW0gICAgICAgICAgICAgRGlyZWN0b3J5Ci0tLS0tLS0tICAgICAgICAgICAgIC0tLS0tLS0tLQotQXV0b2NvbmYgICAgICAgICAgICBsbHZtL2F1dG9jb25mCi0gICAgICAgICAgICAgICAgICAgIGxsdm0vcHJvamVjdHMvTW9kdWxlTWFrZXIvYXV0b2NvbmYKLUdvb2dsZSBUZXN0ICAgICAgICAgbGx2bS91dGlscy91bml0dGVzdC9nb29nbGV0ZXN0Ci1PcGVuQlNEIHJlZ2V4ICAgICAgIGxsdm0vbGliL1N1cHBvcnQve3JlZyosIENPUFlSSUdIVC5yZWdleH0KLXB5eWFtbCB0ZXN0cyAgICAgICAgbGx2bS90ZXN0L1lBTUxQYXJzZXIveyouZGF0YSwgTElDRU5TRS5UWFR9Ci1BUk0gY29udHJpYnV0aW9ucyAgIGxsdm0vbGliL1RhcmdldC9BUk0vTElDRU5TRS5UWFQKLW1kNSBjb250cmlidXRpb25zICAgbGx2bS9saWIvU3VwcG9ydC9NRDUuY3BwIGxsdm0vaW5jbHVkZS9sbHZtL1N1cHBvcnQvTUQ1LmgKZGlmZiAtLWdpdCBhL2NsYW5nLTI1NzcxMTMvYmluL2FybTY0LXY4YS9hbmFseXplciBiL2NsYW5nLTI1NzcxMTMvYmluL2FybTY0LXY4YS9hbmFseXplcgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzMyMGU2Yi4uMDAwMDAwMAotLS0gYS9jbGFuZy0yNTc3MTEzL2Jpbi9hcm02NC12OGEvYW5hbHl6ZXIKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLSMhL2Jpbi9iYXNoCi1pZiBbICIkMSIgIT0gIi1jYzEiIF07IHRoZW4KLSAgICBgZGlybmFtZSAkMGAvLi4vY2xhbmcgLXRhcmdldCBhYXJjaDY0LW5vbmUtbGludXgtYW5kcm9pZCAiJEAiCi1lbHNlCi0gICAgIyB0YXJnZXQvdHJpcGxlIGFscmVhZHkgc3BlbGxlZCBvdXQuCi0gICAgYGRpcm5hbWUgJDBgLy4uL2NsYW5nICIkQCIKLWZpCmRpZmYgLS1naXQgYS9jbGFuZy0yNTc3MTEzL2Jpbi9hcm02NC12OGEvYW5hbHl6ZXIrKyBiL2NsYW5nLTI1NzcxMTMvYmluL2FybTY0LXY4YS9hbmFseXplcisrCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OGEyZTIwLi4wMDAwMDAwCi0tLSBhL2NsYW5nLTI1NzcxMTMvYmluL2FybTY0LXY4YS9hbmFseXplcisrCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi0jIS9iaW4vYmFzaAotaWYgWyAiJDEiICE9ICItY2MxIiBdOyB0aGVuCi0gICAgYGRpcm5hbWUgJDBgLy4uL2NsYW5nKysgLXRhcmdldCBhYXJjaDY0LW5vbmUtbGludXgtYW5kcm9pZCAiJEAiCi1lbHNlCi0gICAgIyB0YXJnZXQvdHJpcGxlIGFscmVhZHkgc3BlbGxlZCBvdXQuCi0gICAgYGRpcm5hbWUgJDBgLy4uL2NsYW5nKysgIiRAIgotZmkKZGlmZiAtLWdpdCBhL2NsYW5nLTI1NzcxMTMvYmluL2FybWVhYmktdjdhLWhhcmQvYW5hbHl6ZXIgYi9jbGFuZy0yNTc3MTEzL2Jpbi9hcm1lYWJpLXY3YS1oYXJkL2FuYWx5emVyCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YTcwOGE3Li4wMDAwMDAwCi0tLSBhL2NsYW5nLTI1NzcxMTMvYmluL2FybWVhYmktdjdhLWhhcmQvYW5hbHl6ZXIKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLSMhL2Jpbi9iYXNoCi1pZiBbICIkMSIgIT0gIi1jYzEiIF07IHRoZW4KLSAgICBgZGlybmFtZSAkMGAvLi4vY2xhbmcgLXRhcmdldCBhcm12Ny1ub25lLWxpbnV4LWFuZHJvaWRlYWJpICIkQCIKLWVsc2UKLSAgICAjIHRhcmdldC90cmlwbGUgYWxyZWFkeSBzcGVsbGVkIG91dC4KLSAgICBgZGlybmFtZSAkMGAvLi4vY2xhbmcgIiRAIgotZmkKZGlmZiAtLWdpdCBhL2NsYW5nLTI1NzcxMTMvYmluL2FybWVhYmktdjdhLWhhcmQvYW5hbHl6ZXIrKyBiL2NsYW5nLTI1NzcxMTMvYmluL2FybWVhYmktdjdhLWhhcmQvYW5hbHl6ZXIrKwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzU0MTY3OS4uMDAwMDAwMAotLS0gYS9jbGFuZy0yNTc3MTEzL2Jpbi9hcm1lYWJpLXY3YS1oYXJkL2FuYWx5emVyKysKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLSMhL2Jpbi9iYXNoCi1pZiBbICIkMSIgIT0gIi1jYzEiIF07IHRoZW4KLSAgICBgZGlybmFtZSAkMGAvLi4vY2xhbmcrKyAtdGFyZ2V0IGFybXY3LW5vbmUtbGludXgtYW5kcm9pZGVhYmkgIiRAIgotZWxzZQotICAgICMgdGFyZ2V0L3RyaXBsZSBhbHJlYWR5IHNwZWxsZWQgb3V0LgotICAgIGBkaXJuYW1lICQwYC8uLi9jbGFuZysrICIkQCIKLWZpCmRpZmYgLS1naXQgYS9jbGFuZy0yNTc3MTEzL2Jpbi9hcm1lYWJpLXY3YS9hbmFseXplciBiL2NsYW5nLTI1NzcxMTMvYmluL2FybWVhYmktdjdhL2FuYWx5emVyCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YTcwOGE3Li4wMDAwMDAwCi0tLSBhL2NsYW5nLTI1NzcxMTMvYmluL2FybWVhYmktdjdhL2FuYWx5emVyCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi0jIS9iaW4vYmFzaAotaWYgWyAiJDEiICE9ICItY2MxIiBdOyB0aGVuCi0gICAgYGRpcm5hbWUgJDBgLy4uL2NsYW5nIC10YXJnZXQgYXJtdjctbm9uZS1saW51eC1hbmRyb2lkZWFiaSAiJEAiCi1lbHNlCi0gICAgIyB0YXJnZXQvdHJpcGxlIGFscmVhZHkgc3BlbGxlZCBvdXQuCi0gICAgYGRpcm5hbWUgJDBgLy4uL2NsYW5nICIkQCIKLWZpCmRpZmYgLS1naXQgYS9jbGFuZy0yNTc3MTEzL2Jpbi9hcm1lYWJpLXY3YS9hbmFseXplcisrIGIvY2xhbmctMjU3NzExMy9iaW4vYXJtZWFiaS12N2EvYW5hbHl6ZXIrKwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzU0MTY3OS4uMDAwMDAwMAotLS0gYS9jbGFuZy0yNTc3MTEzL2Jpbi9hcm1lYWJpLXY3YS9hbmFseXplcisrCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi0jIS9iaW4vYmFzaAotaWYgWyAiJDEiICE9ICItY2MxIiBdOyB0aGVuCi0gICAgYGRpcm5hbWUgJDBgLy4uL2NsYW5nKysgLXRhcmdldCBhcm12Ny1ub25lLWxpbnV4LWFuZHJvaWRlYWJpICIkQCIKLWVsc2UKLSAgICAjIHRhcmdldC90cmlwbGUgYWxyZWFkeSBzcGVsbGVkIG91dC4KLSAgICBgZGlybmFtZSAkMGAvLi4vY2xhbmcrKyAiJEAiCi1maQpkaWZmIC0tZ2l0IGEvY2xhbmctMjU3NzExMy9iaW4vYXJtZWFiaS9hbmFseXplciBiL2NsYW5nLTI1NzcxMTMvYmluL2FybWVhYmkvYW5hbHl6ZXIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE1MGFhODMuLjAwMDAwMDAKLS0tIGEvY2xhbmctMjU3NzExMy9iaW4vYXJtZWFiaS9hbmFseXplcgorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotIyEvYmluL2Jhc2gKLWlmIFsgIiQxIiAhPSAiLWNjMSIgXTsgdGhlbgotICAgIGBkaXJuYW1lICQwYC8uLi9jbGFuZyAtdGFyZ2V0IGFybXY1dGUtbm9uZS1saW51eC1hbmRyb2lkZWFiaSAiJEAiCi1lbHNlCi0gICAgIyB0YXJnZXQvdHJpcGxlIGFscmVhZHkgc3BlbGxlZCBvdXQuCi0gICAgYGRpcm5hbWUgJDBgLy4uL2NsYW5nICIkQCIKLWZpCmRpZmYgLS1naXQgYS9jbGFuZy0yNTc3MTEzL2Jpbi9hcm1lYWJpL2FuYWx5emVyKysgYi9jbGFuZy0yNTc3MTEzL2Jpbi9hcm1lYWJpL2FuYWx5emVyKysKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEzZjM3YmQuLjAwMDAwMDAKLS0tIGEvY2xhbmctMjU3NzExMy9iaW4vYXJtZWFiaS9hbmFseXplcisrCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi0jIS9iaW4vYmFzaAotaWYgWyAiJDEiICE9ICItY2MxIiBdOyB0aGVuCi0gICAgYGRpcm5hbWUgJDBgLy4uL2NsYW5nKysgLXRhcmdldCBhcm12NXRlLW5vbmUtbGludXgtYW5kcm9pZGVhYmkgIiRAIgotZWxzZQotICAgICMgdGFyZ2V0L3RyaXBsZSBhbHJlYWR5IHNwZWxsZWQgb3V0LgotICAgIGBkaXJuYW1lICQwYC8uLi9jbGFuZysrICIkQCIKLWZpCmRpZmYgLS1naXQgYS9jbGFuZy0yNTc3MTEzL2Jpbi9hc2FuX2RldmljZV9zZXR1cCBiL2NsYW5nLTI1NzcxMTMvYmluL2FzYW5fZGV2aWNlX3NldHVwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCA2Y2I3Yjk0Li4wMDAwMDAwCi0tLSBhL2NsYW5nLTI1NzcxMTMvYmluL2FzYW5fZGV2aWNlX3NldHVwCisrKyAvZGV2L251bGwKQEAgLTEsNDM0ICswLDAgQEAKLSMhL2Jpbi9iYXNoCi0jPT09LSBsaWIvYXNhbi9zY3JpcHRzL2FzYW5fZGV2aWNlX3NldHVwIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09IwotIwotIyAgICAgICAgICAgICAgICAgICAgIFRoZSBMTFZNIENvbXBpbGVyIEluZnJhc3RydWN0dXJlCi0jCi0jIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgVW5pdmVyc2l0eSBvZiBJbGxpbm9pcyBPcGVuIFNvdXJjZQotIyBMaWNlbnNlLiBTZWUgTElDRU5TRS5UWFQgZm9yIGRldGFpbHMuCi0jCi0jIFByZXBhcmUgQW5kcm9pZCBkZXZpY2UgdG8gcnVuIEFTYW4gYXBwbGljYXRpb25zLgotIwotIz09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PSMKLQotc2V0IC1lCi0KLUhFUkU9IiQoY2QgIiQoZGlybmFtZSAiJDAiKSIgJiYgcHdkKSIKLQotcmV2ZXJ0PW5vCi1leHRyYV9vcHRpb25zPQotZGV2aWNlPQotbGliPQotdXNlX3N1PTAKLQotZnVuY3Rpb24gdXNhZ2UgewotICAgIGVjaG8gInVzYWdlOiAkMCBbLS1yZXZlcnRdIFstLWRldmljZSBkZXZpY2UtaWRdIFstLWxpYiBwYXRoXSBbLS1leHRyYS1vcHRpb25zIG9wdGlvbnNdIgotICAgIGVjaG8gIiAgLS1yZXZlcnQ6IFVuaW5zdGFsbCBBU2FuIGZyb20gdGhlIGRldmljZS4iCi0gICAgZWNobyAiICAtLWxpYjogUGF0aCB0byBBU2FuIHJ1bnRpbWUgbGlicmFyeS4iCi0gICAgZWNobyAiICAtLWV4dHJhLW9wdGlvbnM6IEV4dHJhIEFTQU5fT1BUSU9OUy4iCi0gICAgZWNobyAiICAtLWRldmljZTogSW5zdGFsbCB0byB0aGUgZ2l2ZW4gZGV2aWNlLiBVc2UgJ2FkYiBkZXZpY2VzJyB0byBmaW5kIgotICAgIGVjaG8gIiAgICAgICAgICAgIGRldmljZS1pZC4iCi0gICAgZWNobyAiICAtLXVzZS1zdTogVXNlICdzdSAtYycgcHJlZml4IGZvciBldmVyeSBhZGIgY29tbWFuZCBpbnN0ZWFkIG9mIHVzaW5nIgotICAgIGVjaG8gIiAgICAgICAgICAgICdhZGIgcm9vdCcgb25jZS4iCi0gICAgZWNobwotICAgIGV4aXQgMQotfQotCi1mdW5jdGlvbiBhZGJfcHVzaCB7Ci0gIGlmIFsgJHVzZV9zdSAtZXEgMCBdOyB0aGVuCi0gICAgJEFEQiBwdXNoICIkMSIgIiQyIgotICBlbHNlCi0gICAgbG9jYWwgRklMRU5BTUU9JChiYXNlbmFtZSAkMSkKLSAgICAkQURCIHB1c2ggIiQxIiAiL2RhdGEvbG9jYWwvdG1wLyRGSUxFTkFNRSIKLSAgICAkQURCIHNoZWxsIHN1IC1jICJybSBcXFwiJDIvJEZJTEVOQU1FXFxcIiIgPiYvZGV2L251bGwKLSAgICAkQURCIHNoZWxsIHN1IC1jICJjYXQgXFxcIi9kYXRhL2xvY2FsL3RtcC8kRklMRU5BTUVcXFwiID4gXFxcIiQyLyRGSUxFTkFNRVxcXCIiCi0gICAgJEFEQiBzaGVsbCBzdSAtYyAicm0gXFxcIi9kYXRhL2xvY2FsL3RtcC8kRklMRU5BTUVcXFwiIgotICBmaQotfQotCi1mdW5jdGlvbiBhZGJfcmVtb3VudCB7Ci0gIGlmIFsgJHVzZV9zdSAtZXEgMCBdOyB0aGVuCi0gICAgJEFEQiByZW1vdW50Ci0gIGVsc2UKLSAgICBsb2NhbCBTVE9SQUdFPWAkQURCIHNoZWxsIG1vdW50IHwgZ3JlcCAvc3lzdGVtIHwgY3V0IC1kICcgJyAtZjFgCi0gICAgaWYgWyAiJFNUT1JBR0UiICE9ICIiIF07IHRoZW4KLSAgICAgIGVjaG8gUmVtb3VudGluZyAkU1RPUkFHRSBhdCAvc3lzdGVtCi0gICAgICAkQURCIHNoZWxsIHN1IC1jICJtb3VudCAtbyByZW1vdW50LHJ3ICRTVE9SQUdFIC9zeXN0ZW0iCi0gICAgZWxzZQotICAgICAgZWNobyBGYWlsZWQgdG8gZ2V0IHN0b3JhZ2UgZGV2aWNlIG5hbWUgZm9yICIvc3lzdGVtIiBtb3VudCBwb2ludAotICAgIGZpCi0gIGZpCi19Ci0KLWZ1bmN0aW9uIGFkYl9zaGVsbCB7Ci0gIGlmIFsgJHVzZV9zdSAtZXEgMCBdOyB0aGVuCi0gICAgJEFEQiBzaGVsbCAkQAotICBlbHNlCi0gICAgJEFEQiBzaGVsbCBzdSAtYyAiJCoiCi0gIGZpCi19Ci0KLWZ1bmN0aW9uIGFkYl9yb290IHsKLSAgaWYgWyAkdXNlX3N1IC1lcSAwIF07IHRoZW4KLSAgICAkQURCIHJvb3QKLSAgZmkKLX0KLQotZnVuY3Rpb24gYWRiX3dhaXRfZm9yX2RldmljZSB7Ci0gICRBREIgd2FpdC1mb3ItZGV2aWNlCi19Ci0KLWZ1bmN0aW9uIGFkYl9wdWxsIHsKLSAgaWYgWyAkdXNlX3N1IC1lcSAwIF07IHRoZW4KLSAgICAkQURCIHB1bGwgIiQxIiAiJDIiCi0gIGVsc2UKLSAgICBsb2NhbCBGSUxFTkFNRT0kKGJhc2VuYW1lICQxKQotICAgICRBREIgc2hlbGwgcm0gIi9kYXRhL2xvY2FsL3RtcC8kRklMRU5BTUUiID4mL2Rldi9udWxsCi0gICAgJEFEQiBzaGVsbCBzdSAtYyAiWyAtZiBcXFwiJDFcXFwiIF0gJiYgY2F0IFxcXCIkMVxcXCIgPiBcXFwiL2RhdGEvbG9jYWwvdG1wLyRGSUxFTkFNRVxcXCIgJiYgY2hvd24gcm9vdC5zaGVsbCBcXFwiL2RhdGEvbG9jYWwvdG1wLyRGSUxFTkFNRVxcXCIgJiYgY2htb2QgNzU1IFxcXCIvZGF0YS9sb2NhbC90bXAvJEZJTEVOQU1FXFxcIiIgJiYKLSAgICAkQURCIHB1bGwgIi9kYXRhL2xvY2FsL3RtcC8kRklMRU5BTUUiICIkMiIgPiYvZGV2L251bGwgJiYgJEFEQiBzaGVsbCAicm0gXCIvZGF0YS9sb2NhbC90bXAvJEZJTEVOQU1FXCIiCi0gIGZpCi19Ci0KLWZ1bmN0aW9uIGdldF9kZXZpY2VfYXJjaCB7ICMgT1VUIE9VVDY0Ci0gICAgbG9jYWwgX291dHZhcj0kMQotICAgIGxvY2FsIF9vdXR2YXI2ND0kMgotICAgIGxvY2FsIF9BQkk9JChhZGJfc2hlbGwgZ2V0cHJvcCByby5wcm9kdWN0LmNwdS5hYmkpCi0gICAgbG9jYWwgX0FSQ0g9Ci0gICAgbG9jYWwgX0FSQ0g2ND0KLSAgICBpZiBbWyAkX0FCSSA9PSB4ODYqIF1dOyB0aGVuCi0gICAgICAgIF9BUkNIPWk2ODYKLSAgICBlbGlmIFtbICRfQUJJID09IGFybWVhYmkqIF1dOyB0aGVuCi0gICAgICAgIF9BUkNIPWFybQotICAgIGVsaWYgW1sgJF9BQkkgPT0gYXJtNjQtdjhhKiBdXTsgdGhlbgotICAgICAgICBfQVJDSD1hcm0KLSAgICAgICAgX0FSQ0g2ND1hYXJjaDY0Ci0gICAgZWxzZQotICAgICAgICBlY2hvICJVbnJlY29nbml6ZWQgZGV2aWNlIEFCSTogJF9BQkkiCi0gICAgICAgIGV4aXQgMQotICAgIGZpCi0gICAgZXZhbCAkX291dHZhcj1cJF9BUkNICi0gICAgZXZhbCAkX291dHZhcjY0PVwkX0FSQ0g2NAotfQotCi13aGlsZSBbWyAkIyA+IDAgXV07IGRvCi0gIGNhc2UgJDEgaW4KLSAgICAtLXJldmVydCkKLSAgICAgIHJldmVydD15ZXMKLSAgICAgIDs7Ci0gICAgLS1leHRyYS1vcHRpb25zKQotICAgICAgc2hpZnQKLSAgICAgIGlmIFtbICQjID09IDAgXV07IHRoZW4KLSAgICAgICAgZWNobyAiLS1leHRyYS1vcHRpb25zIHJlcXVpcmVzIGFuIGFyZ3VtZW50LiIKLSAgICAgICAgZXhpdCAxCi0gICAgICBmaQotICAgICAgZXh0cmFfb3B0aW9ucz0iJDEiCi0gICAgICA7OwotICAgIC0tbGliKQotICAgICAgc2hpZnQKLSAgICAgIGlmIFtbICQjID09IDAgXV07IHRoZW4KLSAgICAgICAgZWNobyAiLS1saWIgcmVxdWlyZXMgYW4gYXJndW1lbnQuIgotICAgICAgICBleGl0IDEKLSAgICAgIGZpCi0gICAgICBsaWI9IiQxIgotICAgICAgOzsKLSAgICAtLWRldmljZSkKLSAgICAgIHNoaWZ0Ci0gICAgICBpZiBbWyAkIyA9PSAwIF1dOyB0aGVuCi0gICAgICAgIGVjaG8gIi0tZGV2aWNlIHJlcXVpcmVzIGFuIGFyZ3VtZW50LiIKLSAgICAgICAgZXhpdCAxCi0gICAgICBmaQotICAgICAgZGV2aWNlPSIkMSIKLSAgICAgIDs7Ci0gICAgLS11c2Utc3UpCi0gICAgICB1c2Vfc3U9MQotICAgICAgOzsKLSAgICAqKQotICAgICAgdXNhZ2UKLSAgICAgIDs7Ci0gIGVzYWMKLSAgc2hpZnQKLWRvbmUKLQotQURCPSR7QURCOi1hZGJ9Ci1pZiBbWyB4JGRldmljZSAhPSB4IF1dOyB0aGVuCi0gICAgQURCPSIkQURCIC1zICRkZXZpY2UiCi1maQotCi1pZiBbICR1c2Vfc3UgLWVxIDEgXTsgdGhlbgotICAjIFRlc3QgaWYgJ3N1JyBpcyBwcmVzZW50IG9uIHRoZSBkZXZpY2UKLSAgU1VfVEVTVF9PVVQ9YCRBREIgc2hlbGwgc3UgLWMgImVjaG8gZm9vIiAyPiYxIHwgc2VkICdzL1xyJC8vJ2AKLSAgaWYgWyAkPyAhPSAwIC1vICIkU1VfVEVTVF9PVVQiICE9ICJmb28iIF07IHRoZW4KLSAgICBlY2hvICJFUlJPUjogQ2Fubm90IHVzZSAnc3UgLWMnOiIKLSAgICBlY2hvICIkIGFkYiBzaGVsbCBzdSAtYyBcImVjaG8gZm9vXCIiCi0gICAgZWNobyAkU1VfVEVTVF9PVVQKLSAgICBlY2hvICJDaGVjayB0aGF0ICdzdScgYmluYXJ5IGlzIGNvcnJlY3RseSBpbnN0YWxsZWQgb24gdGhlIGRldmljZSBvciBvbWl0IgotICAgIGVjaG8gIiAgICAgICAgICAgIC0tdXNlLXN1IGZsYWciCi0gICAgZXhpdCAxCi0gIGZpCi1maQotCi1lY2hvICc+PiBSZW1vdW50aW5nIC9zeXN0ZW0gcncnCi1hZGJfd2FpdF9mb3JfZGV2aWNlCi1hZGJfcm9vdAotYWRiX3dhaXRfZm9yX2RldmljZQotYWRiX3JlbW91bnQKLWFkYl93YWl0X2Zvcl9kZXZpY2UKLQotZ2V0X2RldmljZV9hcmNoIEFSQ0ggQVJDSDY0Ci1lY2hvICJUYXJnZXQgYXJjaGl0ZWN0dXJlOiAkQVJDSCIKLUFTQU5fUlQ9ImxpYmNsYW5nX3J0LmFzYW4tJEFSQ0gtYW5kcm9pZC5zbyIKLWlmIFtbIC1uICRBUkNINjQgXV07IHRoZW4KLSAgZWNobyAiVGFyZ2V0IGFyY2hpdGVjdHVyZTogJEFSQ0g2NCIKLSAgQVNBTl9SVDY0PSJsaWJjbGFuZ19ydC5hc2FuLSRBUkNINjQtYW5kcm9pZC5zbyIKLWZpCi0KLWlmIFtbIHgkcmV2ZXJ0ID09IHh5ZXMgXV07IHRoZW4KLSAgICBlY2hvICc+PiBVbmluc3RhbGxpbmcgQVNhbicKLQotICAgIGlmICEgYWRiX3NoZWxsIGxzIC1sIC9zeXN0ZW0vYmluL2FwcF9wcm9jZXNzIHwgZ3JlcCAtbyAnXC0+LiphcHBfcHJvY2VzcycgPiYvZGV2L251bGw7IHRoZW4KLSAgICAgIGVjaG8gJz4+IFByZS1MIGRldmljZSBkZXRlY3RlZC4nCi0gICAgICBhZGJfc2hlbGwgbXYgL3N5c3RlbS9iaW4vYXBwX3Byb2Nlc3MucmVhbCAvc3lzdGVtL2Jpbi9hcHBfcHJvY2VzcwotICAgICAgYWRiX3NoZWxsIHJtIC9zeXN0ZW0vYmluL2FzYW53cmFwcGVyCi0gICAgZWxpZiAhIGFkYl9zaGVsbCBscyAtbCAvc3lzdGVtL2Jpbi9hcHBfcHJvY2VzczY0LnJlYWwgfCBncmVwIC1vICdObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5JyA+Ji9kZXYvbnVsbDsgdGhlbgotICAgICAgIyA2NC1iaXQgaW5zdGFsbGF0aW9uLgotICAgICAgYWRiX3NoZWxsIG12IC9zeXN0ZW0vYmluL2FwcF9wcm9jZXNzMzIucmVhbCAvc3lzdGVtL2Jpbi9hcHBfcHJvY2VzczMyCi0gICAgICBhZGJfc2hlbGwgbXYgL3N5c3RlbS9iaW4vYXBwX3Byb2Nlc3M2NC5yZWFsIC9zeXN0ZW0vYmluL2FwcF9wcm9jZXNzNjQKLSAgICAgIGFkYl9zaGVsbCBybSAvc3lzdGVtL2Jpbi9hc2Fud3JhcHBlcgotICAgICAgYWRiX3NoZWxsIHJtIC9zeXN0ZW0vYmluL2FzYW53cmFwcGVyNjQKLSAgICBlbHNlCi0gICAgICAjIDMyLWJpdCBpbnN0YWxsYXRpb24uCi0gICAgICBhZGJfc2hlbGwgcm0gL3N5c3RlbS9iaW4vYXBwX3Byb2Nlc3Mud3JhcAotICAgICAgYWRiX3NoZWxsIHJtIC9zeXN0ZW0vYmluL2FzYW53cmFwcGVyCi0gICAgICBhZGJfc2hlbGwgcm0gL3N5c3RlbS9iaW4vYXBwX3Byb2Nlc3MKLSAgICAgIGFkYl9zaGVsbCBsbiAtcyAvc3lzdGVtL2Jpbi9hcHBfcHJvY2VzczMyIC9zeXN0ZW0vYmluL2FwcF9wcm9jZXNzCi0gICAgZmkKLQotICAgIGVjaG8gJz4+IFJlc3RhcnRpbmcgc2hlbGwnCi0gICAgYWRiX3NoZWxsIHN0b3AKLSAgICBhZGJfc2hlbGwgc3RhcnQKLQotICAgICMgUmVtb3ZlIHRoZSBsaWJyYXJ5IG9uIHRoZSBsYXN0IHN0ZXAgdG8gZ2l2ZSBhIGNoYW5jZSB0byB0aGUgJ3N1JyBiaW5hcnkgdG8KLSAgICAjIGJlIGV4ZWN1dGVkIHdpdGhvdXQgcHJvYmxlbS4KLSAgICBhZGJfc2hlbGwgcm0gL3N5c3RlbS9saWIvJEFTQU5fUlQKLQotICAgIGVjaG8gJz4+IERvbmUnCi0gICAgZXhpdCAwCi1maQotCi1pZiBbWyAtZCAiJGxpYiIgXV07IHRoZW4KLSAgICBBU0FOX1JUX1BBVEg9IiRsaWIiCi1lbGlmIFtbIC1mICIkbGliIiAmJiAiJGxpYiIgPT0gKiIkQVNBTl9SVCIgXV07IHRoZW4KLSAgICBBU0FOX1JUX1BBVEg9JChkaXJuYW1lICIkbGliIikKLWVsaWYgW1sgLWYgIiRIRVJFLyRBU0FOX1JUIiBdXTsgdGhlbgotICAgIEFTQU5fUlRfUEFUSD0iJEhFUkUiCi1lbGlmIFtbICQoYmFzZW5hbWUgIiRIRVJFIikgPT0gImJpbiIgXV07IHRoZW4KLSAgICAjIFdlIGNvdWxkIGJlIGluIHRoZSB0b29sY2hhaW4ncyBiYXNlIGRpcmVjdG9yeS4KLSAgICAjIENvbnNpZGVyIC4uL2xpYiwgLi4vbGliL2FzYW4sIC4uL2xpYi9saW51eCwKLSAgICAjIC4uL2xpYi9jbGFuZy8kVkVSU0lPTi9saWIvbGludXgsIGFuZCAuLi9saWI2NC9jbGFuZy8kVkVSU0lPTi9saWIvbGludXguCi0gICAgUD0kKGxzICIkSEVSRSIvLi4vbGliLyIkQVNBTl9SVCIgXAotICAgICAgICAgICAiJEhFUkUiLy4uL2xpYi9hc2FuLyIkQVNBTl9SVCIgXAotICAgICAgICAgICAiJEhFUkUiLy4uL2xpYi9saW51eC8iJEFTQU5fUlQiIFwKLSAgICAgICAgICAgIiRIRVJFIi8uLi9saWIvY2xhbmcvKi9saWIvbGludXgvIiRBU0FOX1JUIiBcCi0gICAgICAgICAgICIkSEVSRSIvLi4vbGliNjQvY2xhbmcvKi9saWIvbGludXgvIiRBU0FOX1JUIiAyPi9kZXYvbnVsbCB8IHNvcnQgfCB0YWlsIC0xKQotICAgIGlmIFtbIC1uICIkUCIgXV07IHRoZW4KLSAgICAgICAgQVNBTl9SVF9QQVRIPSIkKGRpcm5hbWUgIiRQIikiCi0gICAgZmkKLWZpCi0KLWlmIFtbIC16ICIkQVNBTl9SVF9QQVRIIiB8fCAhIC1mICIkQVNBTl9SVF9QQVRILyRBU0FOX1JUIiBdXTsgdGhlbgotICAgIGVjaG8gIj4+IEFTYW4gcnVudGltZSBsaWJyYXJ5IG5vdCBmb3VuZCIKLSAgICBleGl0IDEKLWZpCi0KLWlmIFtbIC1uICIkQVNBTl9SVDY0IiBdXTsgdGhlbgotICBpZiBbWyAteiAiJEFTQU5fUlRfUEFUSCIgfHwgISAtZiAiJEFTQU5fUlRfUEFUSC8kQVNBTl9SVDY0IiBdXTsgdGhlbgotICAgIGVjaG8gIj4+IEFTYW4gcnVudGltZSBsaWJyYXJ5IG5vdCBmb3VuZCIKLSAgICBleGl0IDEKLSAgZmkKLWZpCi0KLVRNUERJUkJBU0U9JChta3RlbXAgLWQpCi1UTVBESVJPTEQ9IiRUTVBESVJCQVNFL29sZCIKLVRNUERJUj0iJFRNUERJUkJBU0UvbmV3IgotbWtkaXIgIiRUTVBESVJPTEQiCi0KLVJFTEVBU0U9JChhZGJfc2hlbGwgZ2V0cHJvcCByby5idWlsZC52ZXJzaW9uLnJlbGVhc2UpCi1QUkVfTD0wCi1pZiBlY2hvICIkUkVMRUFTRSIgfCBncmVwICdeNFwuJyA+Ji9kZXYvbnVsbDsgdGhlbgotICAgIFBSRV9MPTEKLWZpCi0KLWlmICEgYWRiX3NoZWxsIGxzIC1sIC9zeXN0ZW0vYmluL2FwcF9wcm9jZXNzIHwgZ3JlcCAtbyAnXC0+LiphcHBfcHJvY2VzcycgPiYvZGV2L251bGw7IHRoZW4KLQotICAgIGlmIGFkYl9wdWxsIC9zeXN0ZW0vYmluL2FwcF9wcm9jZXNzLnJlYWwgL2Rldi9udWxsID4mL2Rldi9udWxsOyB0aGVuCi0gICAgICAgIGVjaG8gJz4+IE9sZC1zdHlsZSBBU2FuIGluc3RhbGxhdGlvbiBkZXRlY3RlZC4gUmV2ZXJ0aW5nLicKLSAgICAgICAgYWRiX3NoZWxsIG12IC9zeXN0ZW0vYmluL2FwcF9wcm9jZXNzLnJlYWwgL3N5c3RlbS9iaW4vYXBwX3Byb2Nlc3MKLSAgICBmaQotCi0gICAgZWNobyAnPj4gUHJlLUwgZGV2aWNlIGRldGVjdGVkLiBTZXR0aW5nIHVwIGFwcF9wcm9jZXNzIHN5bWxpbmsuJwotICAgIGFkYl9zaGVsbCBtdiAvc3lzdGVtL2Jpbi9hcHBfcHJvY2VzcyAvc3lzdGVtL2Jpbi9hcHBfcHJvY2VzczMyCi0gICAgYWRiX3NoZWxsIGxuIC1zIC9zeXN0ZW0vYmluL2FwcF9wcm9jZXNzMzIgL3N5c3RlbS9iaW4vYXBwX3Byb2Nlc3MKLWZpCi0KLWVjaG8gJz4+IENvcHlpbmcgZmlsZXMgZnJvbSB0aGUgZGV2aWNlJwotaWYgW1sgLW4gIiRBU0FOX1JUNjQiIF1dOyB0aGVuCi0gIGFkYl9wdWxsIC9zeXN0ZW0vbGliLyIkQVNBTl9SVCIgIiRUTVBESVJPTEQiIHx8IHRydWUKLSAgYWRiX3B1bGwgL3N5c3RlbS9saWI2NC8iJEFTQU5fUlQ2NCIgIiRUTVBESVJPTEQiIHx8IHRydWUKLSAgYWRiX3B1bGwgL3N5c3RlbS9iaW4vYXBwX3Byb2Nlc3MzMiAiJFRNUERJUk9MRCIgfHwgdHJ1ZQotICBhZGJfcHVsbCAvc3lzdGVtL2Jpbi9hcHBfcHJvY2VzczMyLnJlYWwgIiRUTVBESVJPTEQiIHx8IHRydWUKLSAgYWRiX3B1bGwgL3N5c3RlbS9iaW4vYXBwX3Byb2Nlc3M2NCAiJFRNUERJUk9MRCIgfHwgdHJ1ZQotICBhZGJfcHVsbCAvc3lzdGVtL2Jpbi9hcHBfcHJvY2VzczY0LnJlYWwgIiRUTVBESVJPTEQiIHx8IHRydWUKLSAgYWRiX3B1bGwgL3N5c3RlbS9iaW4vYXNhbndyYXBwZXIgIiRUTVBESVJPTEQiIHx8IHRydWUKLSAgYWRiX3B1bGwgL3N5c3RlbS9iaW4vYXNhbndyYXBwZXI2NCAiJFRNUERJUk9MRCIgfHwgdHJ1ZQotZWxzZQotICBhZGJfcHVsbCAvc3lzdGVtL2xpYi8iJEFTQU5fUlQiICIkVE1QRElST0xEIiB8fCB0cnVlCi0gIGFkYl9wdWxsIC9zeXN0ZW0vYmluL2FwcF9wcm9jZXNzMzIgIiRUTVBESVJPTEQiIHx8IHRydWUKLSAgYWRiX3B1bGwgL3N5c3RlbS9iaW4vYXBwX3Byb2Nlc3Mud3JhcCAiJFRNUERJUk9MRCIgfHwgdHJ1ZQotICBhZGJfcHVsbCAvc3lzdGVtL2Jpbi9hc2Fud3JhcHBlciAiJFRNUERJUk9MRCIgfHwgdHJ1ZQotZmkKLWNwIC1yICIkVE1QRElST0xEIiAiJFRNUERJUiIKLQotaWYgW1sgLWYgIiRUTVBESVIvYXBwX3Byb2Nlc3Mud3JhcCIgfHwgLWYgIiRUTVBESVIvYXBwX3Byb2Nlc3M2NC5yZWFsIiBdXTsgdGhlbgotICAgIGVjaG8gIj4+IFByZXZpb3VzIGluc3RhbGxhdGlvbiBkZXRlY3RlZCIKLWVsc2UKLSAgICBlY2hvICI+PiBOZXcgaW5zdGFsbGF0aW9uIgotZmkKLQotZWNobyAnPj4gR2VuZXJhdGluZyB3cmFwcGVycycKLQotY3AgIiRBU0FOX1JUX1BBVEgvJEFTQU5fUlQiICIkVE1QRElSLyIKLWlmIFtbIC1uICIkQVNBTl9SVDY0IiBdXTsgdGhlbgotICBjcCAiJEFTQU5fUlRfUEFUSC8kQVNBTl9SVDY0IiAiJFRNUERJUi8iCi1maQotCi0jIEZJWE1FOiBhbGxvY19kZWFsbG9jX21pc21hdGNoPTAgcHJldmVudHMgYSBmYWlsdXJlIGluIGxpYmR2bSBzdGFydHVwLAotIyB3aGljaCBtYXkgb3IgbWF5IG5vdCBiZSBhIHJlYWwgYnVnIChwcm9iYWJseSBub3QpLgotQVNBTl9PUFRJT05TPXN0YXJ0X2RlYWN0aXZhdGVkPTEsYWxsb2NfZGVhbGxvY19taXNtYXRjaD0wLG1hbGxvY19jb250ZXh0X3NpemU9MAotCi1mdW5jdGlvbiBnZW5lcmF0ZV96eWdvdGVfd3JhcHBlciB7ICMgZnJvbSwgdG8sIGFzYW5fcnQKLSAgbG9jYWwgX2Zyb209JDEKLSAgbG9jYWwgX3RvPSQyCi0gIGxvY2FsIF9hc2FuX3J0PSQzCi0gIGNhdCA8PEVPRiA+IiRUTVBESVIvJF9mcm9tIgotIyEvc3lzdGVtL2Jpbi9zaC1mcm9tLXp5Z290ZQotQVNBTl9PUFRJT05TPSRBU0FOX09QVElPTlMgXFwKLUFTQU5fQUNUSVZBVElPTl9PUFRJT05TPWluY2x1ZGVfaWZfZXhpc3RzPS9kYXRhL2xvY2FsL3RtcC9hc2FuLm9wdGlvbnMuJWIgXFwKLUxEX1BSRUxPQUQ9XCRMRF9QUkVMT0FEOiRfYXNhbl9ydCBcXAotZXhlYyAkX3RvIFwkQAotCi1FT0YKLX0KLQotIyBPbiBBbmRyb2lkLUwgbm90IGFsbG93aW5nIHVzZXIgc2VndiBoYW5kbGVyIGJyZWFrcyBzb21lIGFwcGxpY2F0aW9ucy4KLWlmIFtbIFBSRV9MIC1lcSAwIF1dOyB0aGVuCi0gICAgQVNBTl9PUFRJT05TPSIkQVNBTl9PUFRJT05TLGFsbG93X3VzZXJfc2Vndl9oYW5kbGVyPTEiCi1maQotCi1pZiBbWyB4JGV4dHJhX29wdGlvbnMgIT0geCBdXSA7IHRoZW4KLSAgICBBU0FOX09QVElPTlM9IiRBU0FOX09QVElPTlMsJGV4dHJhX29wdGlvbnMiCi1maQotCi0jIFp5Z290ZSB3cmFwcGVyLgotaWYgW1sgLWYgIiRUTVBESVIvYXBwX3Byb2Nlc3M2NCIgXV07IHRoZW4KLSAgIyBBIDY0LWJpdCBkZXZpY2UuCi0gIGlmIFtbICEgLWYgIiRUTVBESVIvYXBwX3Byb2Nlc3M2NC5yZWFsIiBdXTsgdGhlbgotICAgICMgTmV3IGluc3RhbGxhdGlvbi4KLSAgICBtdiAiJFRNUERJUi9hcHBfcHJvY2VzczMyIiAiJFRNUERJUi9hcHBfcHJvY2VzczMyLnJlYWwiCi0gICAgbXYgIiRUTVBESVIvYXBwX3Byb2Nlc3M2NCIgIiRUTVBESVIvYXBwX3Byb2Nlc3M2NC5yZWFsIgotICBmaQotICBnZW5lcmF0ZV96eWdvdGVfd3JhcHBlciAiYXBwX3Byb2Nlc3MzMiIgIi9zeXN0ZW0vYmluL2FwcF9wcm9jZXNzMzIucmVhbCIgIiRBU0FOX1JUIgotICBnZW5lcmF0ZV96eWdvdGVfd3JhcHBlciAiYXBwX3Byb2Nlc3M2NCIgIi9zeXN0ZW0vYmluL2FwcF9wcm9jZXNzNjQucmVhbCIgIiRBU0FOX1JUNjQiCi1lbHNlCi0gICMgQSAzMi1iaXQgZGV2aWNlLgotICBnZW5lcmF0ZV96eWdvdGVfd3JhcHBlciAiYXBwX3Byb2Nlc3Mud3JhcCIgIi9zeXN0ZW0vYmluL2FwcF9wcm9jZXNzMzIiICIkQVNBTl9SVCIKLWZpCi0KLSMgR2VuZXJhbCBjb21tYW5kLWxpbmUgdG9vbCB3cmFwcGVyICh1c2UgZm9yIGFueXRoaW5nIHRoYXQncyBub3Qgc3RhcnRlZCBhcwotIyB6eWdvdGUpLgotY2F0IDw8RU9GID4iJFRNUERJUi9hc2Fud3JhcHBlciIKLSMhL3N5c3RlbS9iaW4vc2gKLUxEX1BSRUxPQUQ9JEFTQU5fUlQgXFwKLWV4ZWMgXCRACi0KLUVPRgotCi1pZiBbWyAtbiAiJEFTQU5fUlQ2NCIgXV07IHRoZW4KLSAgY2F0IDw8RU9GID4iJFRNUERJUi9hc2Fud3JhcHBlcjY0IgotIyEvc3lzdGVtL2Jpbi9zaAotTERfUFJFTE9BRD0kQVNBTl9SVDY0IFxcCi1leGVjIFwkQAotCi1FT0YKLWZpCi0KLWZ1bmN0aW9uIGluc3RhbGwgeyAjIGZyb20sIHRvLCBjaG1vZCwgY2hjb24KLSAgbG9jYWwgX2Zyb209JDEKLSAgbG9jYWwgX3RvPSQyCi0gIGxvY2FsIF9tb2RlPSQzCi0gIGxvY2FsIF9jb250ZXh0PSQ0Ci0gIGxvY2FsIF9iYXNlbmFtZT0iJChiYXNlbmFtZSAiJF9mcm9tIikiCi0gIGVjaG8gIkluc3RhbGxpbmcgJF90by8kX2Jhc2VuYW1lICRfbW9kZSAkX2NvbnRleHQiCi0gIGFkYl9wdXNoICIkX2Zyb20iICIkX3RvLyRfYmFzZW5hbWUiCi0gIGFkYl9zaGVsbCBjaG93biByb290LnNoZWxsICIkX3RvLyRfYmFzZW5hbWUiCi0gIGlmIFtbIC1uICIkX21vZGUiIF1dOyB0aGVuCi0gICAgYWRiX3NoZWxsIGNobW9kICIkX21vZGUiICIkX3RvLyRfYmFzZW5hbWUiCi0gIGZpCi0gIGlmIFtbIC1uICIkX2NvbnRleHQiIF1dOyB0aGVuCi0gICAgYWRiX3NoZWxsIGNoY29uICIkX2NvbnRleHQiICIkX3RvLyRfYmFzZW5hbWUiCi0gIGZpCi19Ci0KLWlmICEgKCBjZCAiJFRNUERJUkJBU0UiICYmIGRpZmYgLXFyIG9sZC8gbmV3LyApIDsgdGhlbgotICAgICMgTWFrZSBTRUxpbnV4IGhhcHB5IGJ5IGtlZXBpbmcgYXBwX3Byb2Nlc3Mgd3JhcHBlciBhbmQgdGhlIHNoZWxsCi0gICAgIyBpdCBydW5zIG9uIGluIHp5Z290ZSBkb21haW4uCi0gICAgRU5GT1JDSU5HPTAKLSAgICBpZiBhZGJfc2hlbGwgZ2V0ZW5mb3JjZSB8IGdyZXAgRW5mb3JjaW5nID4vZGV2L251bGw7IHRoZW4KLSAgICAgICAgIyBTb21ldGltZXMgc2hlbGwgaXMgbm90IGFsbG93ZWQgdG8gY2hhbmdlIGZpbGUgY29udGV4dHMuCi0gICAgICAgICMgVGVtcG9yYXJpbHkgc3dpdGNoIHRvIHBlcm1pc3NpdmUuCi0gICAgICAgIEVORk9SQ0lORz0xCi0gICAgICAgIGFkYl9zaGVsbCBzZXRlbmZvcmNlIDAKLSAgICBmaQotCi0gICAgaWYgW1sgUFJFX0wgLWVxIDEgXV07IHRoZW4KLSAgICAgICAgQ1RYPXU6b2JqZWN0X3I6c3lzdGVtX2ZpbGU6czAKLSAgICBlbHNlCi0gICAgICAgIENUWD11Om9iamVjdF9yOnp5Z290ZV9leGVjOnMwCi0gICAgZmkKLQotICAgIGVjaG8gJz4+IFB1c2hpbmcgZmlsZXMgdG8gdGhlIGRldmljZScKLQotICAgIGlmIFtbIC1uICIkQVNBTl9SVDY0IiBdXTsgdGhlbgotICAgICAgaW5zdGFsbCAiJFRNUERJUi8kQVNBTl9SVCIgL3N5c3RlbS9saWIgNjQ0Ci0gICAgICBpbnN0YWxsICIkVE1QRElSLyRBU0FOX1JUNjQiIC9zeXN0ZW0vbGliNjQgNjQ0Ci0gICAgICBpbnN0YWxsICIkVE1QRElSL2FwcF9wcm9jZXNzMzIiIC9zeXN0ZW0vYmluIDc1NSAkQ1RYCi0gICAgICBpbnN0YWxsICIkVE1QRElSL2FwcF9wcm9jZXNzMzIucmVhbCIgL3N5c3RlbS9iaW4gNzU1ICRDVFgKLSAgICAgIGluc3RhbGwgIiRUTVBESVIvYXBwX3Byb2Nlc3M2NCIgL3N5c3RlbS9iaW4gNzU1ICRDVFgKLSAgICAgIGluc3RhbGwgIiRUTVBESVIvYXBwX3Byb2Nlc3M2NC5yZWFsIiAvc3lzdGVtL2JpbiA3NTUgJENUWAotICAgICAgaW5zdGFsbCAiJFRNUERJUi9hc2Fud3JhcHBlciIgL3N5c3RlbS9iaW4gNzU1Ci0gICAgICBpbnN0YWxsICIkVE1QRElSL2FzYW53cmFwcGVyNjQiIC9zeXN0ZW0vYmluIDc1NQotICAgIGVsc2UKLSAgICAgIGluc3RhbGwgIiRUTVBESVIvJEFTQU5fUlQiIC9zeXN0ZW0vbGliIDY0NAotICAgICAgaW5zdGFsbCAiJFRNUERJUi9hcHBfcHJvY2VzczMyIiAvc3lzdGVtL2JpbiA3NTUgJENUWAotICAgICAgaW5zdGFsbCAiJFRNUERJUi9hcHBfcHJvY2Vzcy53cmFwIiAvc3lzdGVtL2JpbiA3NTUgJENUWAotICAgICAgaW5zdGFsbCAiJFRNUERJUi9hc2Fud3JhcHBlciIgL3N5c3RlbS9iaW4gNzU1ICRDVFgKLQotICAgICAgYWRiX3NoZWxsIHJtIC9zeXN0ZW0vYmluL2FwcF9wcm9jZXNzCi0gICAgICBhZGJfc2hlbGwgbG4gLXMgL3N5c3RlbS9iaW4vYXBwX3Byb2Nlc3Mud3JhcCAvc3lzdGVtL2Jpbi9hcHBfcHJvY2VzcwotICAgIGZpCi0KLSAgICBhZGJfc2hlbGwgY3AgL3N5c3RlbS9iaW4vc2ggL3N5c3RlbS9iaW4vc2gtZnJvbS16eWdvdGUKLSAgICBhZGJfc2hlbGwgY2hjb24gJENUWCAvc3lzdGVtL2Jpbi9zaC1mcm9tLXp5Z290ZQotCi0gICAgaWYgWyAkRU5GT1JDSU5HID09IDEgXTsgdGhlbgotICAgICAgICBhZGJfc2hlbGwgc2V0ZW5mb3JjZSAxCi0gICAgZmkKLQotICAgIGVjaG8gJz4+IFJlc3RhcnRpbmcgc2hlbGwgKGFzeW5jaHJvbm91cyknCi0gICAgYWRiX3NoZWxsIHN0b3AKLSAgICBhZGJfc2hlbGwgc3RhcnQKLQotICAgIGVjaG8gJz4+IFBsZWFzZSB3YWl0IHVudGlsIHRoZSBkZXZpY2UgcmVzdGFydHMnCi1lbHNlCi0gICAgZWNobyAnPj4gRGV2aWNlIGlzIHVwIHRvIGRhdGUnCi1maQotCi1ybSAtciAiJFRNUERJUkJBU0UiCmRpZmYgLS1naXQgYS9jbGFuZy0yNTc3MTEzL2Jpbi9jbGFuZysrLmV4ZSBiL2NsYW5nLTI1NzcxMTMvYmluL2NsYW5nKysuZXhlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCA4Yjg0ZmExLi4wMDAwMDAwCi0tLSBhL2NsYW5nLTI1NzcxMTMvYmluL2NsYW5nKysuZXhlCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY2xhbmctMjU3NzExMy9iaW4vY2xhbmcuZXhlIGIvY2xhbmctMjU3NzExMy9iaW4vY2xhbmcuZXhlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCA4Yjg0ZmExLi4wMDAwMDAwCi0tLSBhL2NsYW5nLTI1NzcxMTMvYmluL2NsYW5nLmV4ZQorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NsYW5nLTI1NzcxMTMvYmluL21pcHMvYW5hbHl6ZXIgYi9jbGFuZy0yNTc3MTEzL2Jpbi9taXBzL2FuYWx5emVyCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMTNkYmM3Li4wMDAwMDAwCi0tLSBhL2NsYW5nLTI1NzcxMTMvYmluL21pcHMvYW5hbHl6ZXIKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLSMhL2Jpbi9iYXNoCi1pZiBbICIkMSIgIT0gIi1jYzEiIF07IHRoZW4KLSAgICBgZGlybmFtZSAkMGAvLi4vY2xhbmcgLXRhcmdldCBtaXBzZWwtbm9uZS1saW51eC1hbmRyb2lkICIkQCIKLWVsc2UKLSAgICAjIHRhcmdldC90cmlwbGUgYWxyZWFkeSBzcGVsbGVkIG91dC4KLSAgICBgZGlybmFtZSAkMGAvLi4vY2xhbmcgIiRAIgotZmkKZGlmZiAtLWdpdCBhL2NsYW5nLTI1NzcxMTMvYmluL21pcHMvYW5hbHl6ZXIrKyBiL2NsYW5nLTI1NzcxMTMvYmluL21pcHMvYW5hbHl6ZXIrKwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjFhNTljYS4uMDAwMDAwMAotLS0gYS9jbGFuZy0yNTc3MTEzL2Jpbi9taXBzL2FuYWx5emVyKysKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLSMhL2Jpbi9iYXNoCi1pZiBbICIkMSIgIT0gIi1jYzEiIF07IHRoZW4KLSAgICBgZGlybmFtZSAkMGAvLi4vY2xhbmcrKyAtdGFyZ2V0IG1pcHNlbC1ub25lLWxpbnV4LWFuZHJvaWQgIiRAIgotZWxzZQotICAgICMgdGFyZ2V0L3RyaXBsZSBhbHJlYWR5IHNwZWxsZWQgb3V0LgotICAgIGBkaXJuYW1lICQwYC8uLi9jbGFuZysrICIkQCIKLWZpCmRpZmYgLS1naXQgYS9jbGFuZy0yNTc3MTEzL2Jpbi9taXBzNjQvYW5hbHl6ZXIgYi9jbGFuZy0yNTc3MTEzL2Jpbi9taXBzNjQvYW5hbHl6ZXIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNlMjc2Y2UuLjAwMDAwMDAKLS0tIGEvY2xhbmctMjU3NzExMy9iaW4vbWlwczY0L2FuYWx5emVyCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi0jIS9iaW4vYmFzaAotaWYgWyAiJDEiICE9ICItY2MxIiBdOyB0aGVuCi0gICAgYGRpcm5hbWUgJDBgLy4uL2NsYW5nIC10YXJnZXQgbWlwczY0ZWwtbm9uZS1saW51eC1hbmRyb2lkICIkQCIKLWVsc2UKLSAgICAjIHRhcmdldC90cmlwbGUgYWxyZWFkeSBzcGVsbGVkIG91dC4KLSAgICBgZGlybmFtZSAkMGAvLi4vY2xhbmcgIiRAIgotZmkKZGlmZiAtLWdpdCBhL2NsYW5nLTI1NzcxMTMvYmluL21pcHM2NC9hbmFseXplcisrIGIvY2xhbmctMjU3NzExMy9iaW4vbWlwczY0L2FuYWx5emVyKysKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIwOGRlZWIuLjAwMDAwMDAKLS0tIGEvY2xhbmctMjU3NzExMy9iaW4vbWlwczY0L2FuYWx5emVyKysKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLSMhL2Jpbi9iYXNoCi1pZiBbICIkMSIgIT0gIi1jYzEiIF07IHRoZW4KLSAgICBgZGlybmFtZSAkMGAvLi4vY2xhbmcrKyAtdGFyZ2V0IG1pcHM2NGVsLW5vbmUtbGludXgtYW5kcm9pZCAiJEAiCi1lbHNlCi0gICAgIyB0YXJnZXQvdHJpcGxlIGFscmVhZHkgc3BlbGxlZCBvdXQuCi0gICAgYGRpcm5hbWUgJDBgLy4uL2NsYW5nKysgIiRAIgotZmkKZGlmZiAtLWdpdCBhL2NsYW5nLTI1NzcxMTMvYmluL3g4Ni9hbmFseXplciBiL2NsYW5nLTI1NzcxMTMvYmluL3g4Ni9hbmFseXplcgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmZjYmZlYy4uMDAwMDAwMAotLS0gYS9jbGFuZy0yNTc3MTEzL2Jpbi94ODYvYW5hbHl6ZXIKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLSMhL2Jpbi9iYXNoCi1pZiBbICIkMSIgIT0gIi1jYzEiIF07IHRoZW4KLSAgICBgZGlybmFtZSAkMGAvLi4vY2xhbmcgLXRhcmdldCBpNjg2LW5vbmUtbGludXgtYW5kcm9pZCAiJEAiCi1lbHNlCi0gICAgIyB0YXJnZXQvdHJpcGxlIGFscmVhZHkgc3BlbGxlZCBvdXQuCi0gICAgYGRpcm5hbWUgJDBgLy4uL2NsYW5nICIkQCIKLWZpCmRpZmYgLS1naXQgYS9jbGFuZy0yNTc3MTEzL2Jpbi94ODYvYW5hbHl6ZXIrKyBiL2NsYW5nLTI1NzcxMTMvYmluL3g4Ni9hbmFseXplcisrCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmY2E2MmRmLi4wMDAwMDAwCi0tLSBhL2NsYW5nLTI1NzcxMTMvYmluL3g4Ni9hbmFseXplcisrCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi0jIS9iaW4vYmFzaAotaWYgWyAiJDEiICE9ICItY2MxIiBdOyB0aGVuCi0gICAgYGRpcm5hbWUgJDBgLy4uL2NsYW5nKysgLXRhcmdldCBpNjg2LW5vbmUtbGludXgtYW5kcm9pZCAiJEAiCi1lbHNlCi0gICAgIyB0YXJnZXQvdHJpcGxlIGFscmVhZHkgc3BlbGxlZCBvdXQuCi0gICAgYGRpcm5hbWUgJDBgLy4uL2NsYW5nKysgIiRAIgotZmkKZGlmZiAtLWdpdCBhL2NsYW5nLTI1NzcxMTMvYmluL3g4Nl82NC9hbmFseXplciBiL2NsYW5nLTI1NzcxMTMvYmluL3g4Nl82NC9hbmFseXplcgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTdkYjQ0My4uMDAwMDAwMAotLS0gYS9jbGFuZy0yNTc3MTEzL2Jpbi94ODZfNjQvYW5hbHl6ZXIKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLSMhL2Jpbi9iYXNoCi1pZiBbICIkMSIgIT0gIi1jYzEiIF07IHRoZW4KLSAgICBgZGlybmFtZSAkMGAvLi4vY2xhbmcgLXRhcmdldCB4ODZfNjQtbm9uZS1saW51eC1hbmRyb2lkICIkQCIKLWVsc2UKLSAgICAjIHRhcmdldC90cmlwbGUgYWxyZWFkeSBzcGVsbGVkIG91dC4KLSAgICBgZGlybmFtZSAkMGAvLi4vY2xhbmcgIiRAIgotZmkKZGlmZiAtLWdpdCBhL2NsYW5nLTI1NzcxMTMvYmluL3g4Nl82NC9hbmFseXplcisrIGIvY2xhbmctMjU3NzExMy9iaW4veDg2XzY0L2FuYWx5emVyKysKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVkOGQxNWIuLjAwMDAwMDAKLS0tIGEvY2xhbmctMjU3NzExMy9iaW4veDg2XzY0L2FuYWx5emVyKysKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLSMhL2Jpbi9iYXNoCi1pZiBbICIkMSIgIT0gIi1jYzEiIF07IHRoZW4KLSAgICBgZGlybmFtZSAkMGAvLi4vY2xhbmcrKyAtdGFyZ2V0IHg4Nl82NC1ub25lLWxpbnV4LWFuZHJvaWQgIiRAIgotZWxzZQotICAgICMgdGFyZ2V0L3RyaXBsZSBhbHJlYWR5IHNwZWxsZWQgb3V0LgotICAgIGBkaXJuYW1lICQwYC8uLi9jbGFuZysrICIkQCIKLWZpCmRpZmYgLS1naXQgYS9jbGFuZy0yNTc3MTEzL2xpYjY0L2NsYW5nLzMuOC4yNTYyMjkgYi9jbGFuZy0yNTc3MTEzL2xpYjY0L2NsYW5nLzMuOC4yNTYyMjkKZGVsZXRlZCBmaWxlIG1vZGUgMTIwMDAwCmluZGV4IDk4ZmNjZDYuLjAwMDAwMDAKLS0tIGEvY2xhbmctMjU3NzExMy9saWI2NC9jbGFuZy8zLjguMjU2MjI5CisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotMy44ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY2xhbmctMjU3NzExMy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9JbnRyaW4uaCBiL2NsYW5nLTI1NzcxMTMvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvSW50cmluLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZjMWQwZDEuLjAwMDAwMDAKLS0tIGEvY2xhbmctMjU3NzExMy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9JbnRyaW4uaAorKysgL2Rldi9udWxsCkBAIC0xLDk1OCArMCwwIEBACi0vKiA9PT0tLS0tLS0tLSBJbnRyaW4uaCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KLSAqCi0gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5Ci0gKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAotICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cwotICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAotICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCi0gKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgotICoKLSAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCi0gKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KLSAqCi0gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgotICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCi0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKLSAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCi0gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCi0gKiBUSEUgU09GVFdBUkUuCi0gKgotICo9PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQotICovCi0KLS8qIE9ubHkgaW5jbHVkZSB0aGlzIGlmIHdlJ3JlIGNvbXBpbGluZyBmb3IgdGhlIHdpbmRvd3MgcGxhdGZvcm0uICovCi0jaWZuZGVmIF9NU0NfVkVSCi0jaW5jbHVkZV9uZXh0IDxJbnRyaW4uaD4KLSNlbHNlCi0KLSNpZm5kZWYgX19JTlRSSU5fSAotI2RlZmluZSBfX0lOVFJJTl9ICi0KLS8qIEZpcnN0IGluY2x1ZGUgdGhlIHN0YW5kYXJkIGludHJpbnNpY3MuICovCi0jaWYgZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfX3g4Nl82NF9fKQotI2luY2x1ZGUgPHg4NmludHJpbi5oPgotI2VuZGlmCi0KLS8qIEZvciB0aGUgZGVmaW5pdGlvbiBvZiBqbXBfYnVmLiAqLwotI2lmIF9fU1REQ19IT1NURURfXwotI2luY2x1ZGUgPHNldGptcC5oPgotI2VuZGlmCi0KLS8qIERlZmluZSB0aGUgZGVmYXVsdCBhdHRyaWJ1dGVzIGZvciB0aGUgZnVuY3Rpb25zIGluIHRoaXMgZmlsZS4gKi8KLSNkZWZpbmUgX19ERUZBVUxUX0ZOX0FUVFJTIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXykpCi0KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIiB7Ci0jZW5kaWYKLQotI2lmIGRlZmluZWQoX19NTVhfXykKLS8qIEFuZCB0aGUgcmFuZG9tIG9uZXMgdGhhdCBhcmVuJ3QgaW4gdGhvc2UgZmlsZXMuICovCi1fX202NCBfbV9mcm9tX2Zsb2F0KGZsb2F0KTsKLWZsb2F0IF9tX3RvX2Zsb2F0KF9fbTY0KTsKLSNlbmRpZgotCi0vKiBPdGhlciBhc3NvcnRlZCBpbnN0cnVjdGlvbiBpbnRyaW5zaWNzLiAqLwotdm9pZCBfX2FkZGZzYnl0ZSh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBjaGFyKTsKLXZvaWQgX19hZGRmc2R3b3JkKHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpOwotdm9pZCBfX2FkZGZzd29yZCh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBzaG9ydCk7Ci12b2lkIF9fY29kZV9zZWcoY29uc3QgY2hhciAqKTsKLXN0YXRpYyBfX2lubGluZV9fCi12b2lkIF9fY3B1aWQoaW50WzRdLCBpbnQpOwotc3RhdGljIF9faW5saW5lX18KLXZvaWQgX19jcHVpZGV4KGludFs0XSwgaW50LCBpbnQpOwotdm9pZCBfX2RlYnVnYnJlYWsodm9pZCk7Ci1fX2ludDY0IF9fZW11bChpbnQsIGludCk7Ci11bnNpZ25lZCBfX2ludDY0IF9fZW11bHUodW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQpOwotdm9pZCBfX2NkZWNsIF9fZmFzdGZhaWwodW5zaWduZWQgaW50KTsKLXVuc2lnbmVkIGludCBfX2dldGNhbGxlcnNlZmxhZ3Modm9pZCk7Ci1zdGF0aWMgX19pbmxpbmVfXwotdm9pZCBfX2hhbHQodm9pZCk7Ci11bnNpZ25lZCBjaGFyIF9faW5ieXRlKHVuc2lnbmVkIHNob3J0KTsKLXZvaWQgX19pbmJ5dGVzdHJpbmcodW5zaWduZWQgc2hvcnQsIHVuc2lnbmVkIGNoYXIgKiwgdW5zaWduZWQgbG9uZyk7Ci12b2lkIF9faW5jZnNieXRlKHVuc2lnbmVkIGxvbmcpOwotdm9pZCBfX2luY2ZzZHdvcmQodW5zaWduZWQgbG9uZyk7Ci12b2lkIF9faW5jZnN3b3JkKHVuc2lnbmVkIGxvbmcpOwotdW5zaWduZWQgbG9uZyBfX2luZHdvcmQodW5zaWduZWQgc2hvcnQpOwotdm9pZCBfX2luZHdvcmRzdHJpbmcodW5zaWduZWQgc2hvcnQsIHVuc2lnbmVkIGxvbmcgKiwgdW5zaWduZWQgbG9uZyk7Ci12b2lkIF9faW50MmModm9pZCk7Ci12b2lkIF9faW52bHBnKHZvaWQgKik7Ci11bnNpZ25lZCBzaG9ydCBfX2lud29yZCh1bnNpZ25lZCBzaG9ydCk7Ci12b2lkIF9faW53b3Jkc3RyaW5nKHVuc2lnbmVkIHNob3J0LCB1bnNpZ25lZCBzaG9ydCAqLCB1bnNpZ25lZCBsb25nKTsKLXZvaWQgX19saWR0KHZvaWQgKik7Ci11bnNpZ25lZCBfX2ludDY0IF9fbGxfbHNoaWZ0KHVuc2lnbmVkIF9faW50NjQsIGludCk7Ci1fX2ludDY0IF9fbGxfcnNoaWZ0KF9faW50NjQsIGludCk7Ci12b2lkIF9fbGx3cGNiKHZvaWQgKik7Ci11bnNpZ25lZCBjaGFyIF9fbHdwaW5zMzIodW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCk7Ci12b2lkIF9fbHdwdmFsMzIodW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCk7Ci11bnNpZ25lZCBpbnQgX19semNudCh1bnNpZ25lZCBpbnQpOwotdW5zaWduZWQgc2hvcnQgX19semNudDE2KHVuc2lnbmVkIHNob3J0KTsKLXN0YXRpYyBfX2lubGluZV9fCi12b2lkIF9fbW92c2IodW5zaWduZWQgY2hhciAqLCB1bnNpZ25lZCBjaGFyIGNvbnN0ICosIHNpemVfdCk7Ci1zdGF0aWMgX19pbmxpbmVfXwotdm9pZCBfX21vdnNkKHVuc2lnbmVkIGxvbmcgKiwgdW5zaWduZWQgbG9uZyBjb25zdCAqLCBzaXplX3QpOwotc3RhdGljIF9faW5saW5lX18KLXZvaWQgX19tb3Zzdyh1bnNpZ25lZCBzaG9ydCAqLCB1bnNpZ25lZCBzaG9ydCBjb25zdCAqLCBzaXplX3QpOwotdm9pZCBfX25vcCh2b2lkKTsKLXZvaWQgX19udnJlZ19yZXN0b3JlX2ZlbmNlKHZvaWQpOwotdm9pZCBfX252cmVnX3NhdmVfZmVuY2Uodm9pZCk7Ci12b2lkIF9fb3V0Ynl0ZSh1bnNpZ25lZCBzaG9ydCwgdW5zaWduZWQgY2hhcik7Ci12b2lkIF9fb3V0Ynl0ZXN0cmluZyh1bnNpZ25lZCBzaG9ydCwgdW5zaWduZWQgY2hhciAqLCB1bnNpZ25lZCBsb25nKTsKLXZvaWQgX19vdXRkd29yZCh1bnNpZ25lZCBzaG9ydCwgdW5zaWduZWQgbG9uZyk7Ci12b2lkIF9fb3V0ZHdvcmRzdHJpbmcodW5zaWduZWQgc2hvcnQsIHVuc2lnbmVkIGxvbmcgKiwgdW5zaWduZWQgbG9uZyk7Ci12b2lkIF9fb3V0d29yZCh1bnNpZ25lZCBzaG9ydCwgdW5zaWduZWQgc2hvcnQpOwotdm9pZCBfX291dHdvcmRzdHJpbmcodW5zaWduZWQgc2hvcnQsIHVuc2lnbmVkIHNob3J0ICosIHVuc2lnbmVkIGxvbmcpOwotc3RhdGljIF9faW5saW5lX18KLXVuc2lnbmVkIGludCBfX3BvcGNudCh1bnNpZ25lZCBpbnQpOwotc3RhdGljIF9faW5saW5lX18KLXVuc2lnbmVkIHNob3J0IF9fcG9wY250MTYodW5zaWduZWQgc2hvcnQpOwotdW5zaWduZWQgbG9uZyBfX3JlYWRjcjAodm9pZCk7Ci11bnNpZ25lZCBsb25nIF9fcmVhZGNyMih2b2lkKTsKLXN0YXRpYyBfX2lubGluZV9fCi11bnNpZ25lZCBsb25nIF9fcmVhZGNyMyh2b2lkKTsKLXVuc2lnbmVkIGxvbmcgX19yZWFkY3I0KHZvaWQpOwotdW5zaWduZWQgbG9uZyBfX3JlYWRjcjgodm9pZCk7Ci11bnNpZ25lZCBpbnQgX19yZWFkZHIodW5zaWduZWQgaW50KTsKLSNpZmRlZiBfX2kzODZfXwotc3RhdGljIF9faW5saW5lX18KLXVuc2lnbmVkIGNoYXIgX19yZWFkZnNieXRlKHVuc2lnbmVkIGxvbmcpOwotc3RhdGljIF9faW5saW5lX18KLXVuc2lnbmVkIGxvbmcgX19yZWFkZnNkd29yZCh1bnNpZ25lZCBsb25nKTsKLXN0YXRpYyBfX2lubGluZV9fCi11bnNpZ25lZCBfX2ludDY0IF9fcmVhZGZzcXdvcmQodW5zaWduZWQgbG9uZyk7Ci1zdGF0aWMgX19pbmxpbmVfXwotdW5zaWduZWQgc2hvcnQgX19yZWFkZnN3b3JkKHVuc2lnbmVkIGxvbmcpOwotI2VuZGlmCi1zdGF0aWMgX19pbmxpbmVfXwotdW5zaWduZWQgX19pbnQ2NCBfX3JlYWRtc3IodW5zaWduZWQgbG9uZyk7Ci11bnNpZ25lZCBfX2ludDY0IF9fcmVhZHBtYyh1bnNpZ25lZCBsb25nKTsKLXVuc2lnbmVkIGxvbmcgX19zZWdtZW50bGltaXQodW5zaWduZWQgbG9uZyk7Ci12b2lkIF9fc2lkdCh2b2lkICopOwotdm9pZCAqX19zbHdwY2Iodm9pZCk7Ci1zdGF0aWMgX19pbmxpbmVfXwotdm9pZCBfX3N0b3NiKHVuc2lnbmVkIGNoYXIgKiwgdW5zaWduZWQgY2hhciwgc2l6ZV90KTsKLXN0YXRpYyBfX2lubGluZV9fCi12b2lkIF9fc3Rvc2QodW5zaWduZWQgbG9uZyAqLCB1bnNpZ25lZCBsb25nLCBzaXplX3QpOwotc3RhdGljIF9faW5saW5lX18KLXZvaWQgX19zdG9zdyh1bnNpZ25lZCBzaG9ydCAqLCB1bnNpZ25lZCBzaG9ydCwgc2l6ZV90KTsKLXZvaWQgX19zdm1fY2xnaSh2b2lkKTsKLXZvaWQgX19zdm1faW52bHBnYSh2b2lkICosIGludCk7Ci12b2lkIF9fc3ZtX3NraW5pdChpbnQpOwotdm9pZCBfX3N2bV9zdGdpKHZvaWQpOwotdm9pZCBfX3N2bV92bWxvYWQoc2l6ZV90KTsKLXZvaWQgX19zdm1fdm1ydW4oc2l6ZV90KTsKLXZvaWQgX19zdm1fdm1zYXZlKHNpemVfdCk7Ci12b2lkIF9fdWQyKHZvaWQpOwotdW5zaWduZWQgX19pbnQ2NCBfX3VsbF9yc2hpZnQodW5zaWduZWQgX19pbnQ2NCwgaW50KTsKLXZvaWQgX192bXhfb2ZmKHZvaWQpOwotdm9pZCBfX3ZteF92bXB0cnN0KHVuc2lnbmVkIF9faW50NjQgKik7Ci12b2lkIF9fd2JpbnZkKHZvaWQpOwotdm9pZCBfX3dyaXRlY3IwKHVuc2lnbmVkIGludCk7Ci1zdGF0aWMgX19pbmxpbmVfXwotdm9pZCBfX3dyaXRlY3IzKHVuc2lnbmVkIGludCk7Ci12b2lkIF9fd3JpdGVjcjQodW5zaWduZWQgaW50KTsKLXZvaWQgX193cml0ZWNyOCh1bnNpZ25lZCBpbnQpOwotdm9pZCBfX3dyaXRlZHIodW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQpOwotdm9pZCBfX3dyaXRlZnNieXRlKHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGNoYXIpOwotdm9pZCBfX3dyaXRlZnNkd29yZCh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKTsKLXZvaWQgX193cml0ZWZzcXdvcmQodW5zaWduZWQgbG9uZywgdW5zaWduZWQgX19pbnQ2NCk7Ci12b2lkIF9fd3JpdGVmc3dvcmQodW5zaWduZWQgbG9uZywgdW5zaWduZWQgc2hvcnQpOwotdm9pZCBfX3dyaXRlbXNyKHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIF9faW50NjQpOwotc3RhdGljIF9faW5saW5lX18KLXZvaWQgKl9BZGRyZXNzT2ZSZXR1cm5BZGRyZXNzKHZvaWQpOwotc3RhdGljIF9faW5saW5lX18KLXVuc2lnbmVkIGNoYXIgX0JpdFNjYW5Gb3J3YXJkKHVuc2lnbmVkIGxvbmcgKl9JbmRleCwgdW5zaWduZWQgbG9uZyBfTWFzayk7Ci1zdGF0aWMgX19pbmxpbmVfXwotdW5zaWduZWQgY2hhciBfQml0U2NhblJldmVyc2UodW5zaWduZWQgbG9uZyAqX0luZGV4LCB1bnNpZ25lZCBsb25nIF9NYXNrKTsKLXN0YXRpYyBfX2lubGluZV9fCi11bnNpZ25lZCBjaGFyIF9iaXR0ZXN0KGxvbmcgY29uc3QgKiwgbG9uZyk7Ci1zdGF0aWMgX19pbmxpbmVfXwotdW5zaWduZWQgY2hhciBfYml0dGVzdGFuZGNvbXBsZW1lbnQobG9uZyAqLCBsb25nKTsKLXN0YXRpYyBfX2lubGluZV9fCi11bnNpZ25lZCBjaGFyIF9iaXR0ZXN0YW5kcmVzZXQobG9uZyAqLCBsb25nKTsKLXN0YXRpYyBfX2lubGluZV9fCi11bnNpZ25lZCBjaGFyIF9iaXR0ZXN0YW5kc2V0KGxvbmcgKiwgbG9uZyk7Ci11bnNpZ25lZCBfX2ludDY0IF9fY2RlY2wgX2J5dGVzd2FwX3VpbnQ2NCh1bnNpZ25lZCBfX2ludDY0KTsKLXVuc2lnbmVkIGxvbmcgX19jZGVjbCBfYnl0ZXN3YXBfdWxvbmcodW5zaWduZWQgbG9uZyk7Ci11bnNpZ25lZCBzaG9ydCBfX2NkZWNsIF9ieXRlc3dhcF91c2hvcnQodW5zaWduZWQgc2hvcnQpOwotdm9pZCBfX2NkZWNsIF9kaXNhYmxlKHZvaWQpOwotdm9pZCBfX2NkZWNsIF9lbmFibGUodm9pZCk7Ci1sb25nIF9JbnRlcmxvY2tlZEFkZExhcmdlU3RhdGlzdGljKF9faW50NjQgdm9sYXRpbGUgKl9BZGRlbmQsIGxvbmcgX1ZhbHVlKTsKLXN0YXRpYyBfX2lubGluZV9fCi1sb25nIF9JbnRlcmxvY2tlZEFuZChsb25nIHZvbGF0aWxlICpfVmFsdWUsIGxvbmcgX01hc2spOwotc3RhdGljIF9faW5saW5lX18KLXNob3J0IF9JbnRlcmxvY2tlZEFuZDE2KHNob3J0IHZvbGF0aWxlICpfVmFsdWUsIHNob3J0IF9NYXNrKTsKLXN0YXRpYyBfX2lubGluZV9fCi1jaGFyIF9JbnRlcmxvY2tlZEFuZDgoY2hhciB2b2xhdGlsZSAqX1ZhbHVlLCBjaGFyIF9NYXNrKTsKLXVuc2lnbmVkIGNoYXIgX2ludGVybG9ja2VkYml0dGVzdGFuZHJlc2V0KGxvbmcgdm9sYXRpbGUgKiwgbG9uZyk7Ci1zdGF0aWMgX19pbmxpbmVfXwotdW5zaWduZWQgY2hhciBfaW50ZXJsb2NrZWRiaXR0ZXN0YW5kc2V0KGxvbmcgdm9sYXRpbGUgKiwgbG9uZyk7Ci1zdGF0aWMgX19pbmxpbmVfXwotbG9uZyBfX2NkZWNsIF9JbnRlcmxvY2tlZENvbXBhcmVFeGNoYW5nZShsb25nIHZvbGF0aWxlICpfRGVzdGluYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgX0V4Y2hhbmdlLCBsb25nIF9Db21wYXJhbmQpOwotbG9uZyBfSW50ZXJsb2NrZWRDb21wYXJlRXhjaGFuZ2VfSExFQWNxdWlyZShsb25nIHZvbGF0aWxlICosIGxvbmcsIGxvbmcpOwotbG9uZyBfSW50ZXJsb2NrZWRDb21wYXJlRXhjaGFuZ2VfSExFUmVsZWFzZShsb25nIHZvbGF0aWxlICosIGxvbmcsIGxvbmcpOwotc3RhdGljIF9faW5saW5lX18KLXNob3J0IF9JbnRlcmxvY2tlZENvbXBhcmVFeGNoYW5nZTE2KHNob3J0IHZvbGF0aWxlICpfRGVzdGluYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG9ydCBfRXhjaGFuZ2UsIHNob3J0IF9Db21wYXJhbmQpOwotc3RhdGljIF9faW5saW5lX18KLV9faW50NjQgX0ludGVybG9ja2VkQ29tcGFyZUV4Y2hhbmdlNjQoX19pbnQ2NCB2b2xhdGlsZSAqX0Rlc3RpbmF0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2ludDY0IF9FeGNoYW5nZSwgX19pbnQ2NCBfQ29tcGFyYW5kKTsKLV9faW50NjQgX0ludGVybG9ja2VkY29tcGFyZUV4Y2hhbmdlNjRfSExFQWNxdWlyZShfX2ludDY0IHZvbGF0aWxlICosIF9faW50NjQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19pbnQ2NCk7Ci1fX2ludDY0IF9JbnRlcmxvY2tlZENvbXBhcmVFeGNoYW5nZTY0X0hMRVJlbGVhc2UoX19pbnQ2NCB2b2xhdGlsZSAqLCBfX2ludDY0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9faW50NjQpOwotc3RhdGljIF9faW5saW5lX18KLWNoYXIgX0ludGVybG9ja2VkQ29tcGFyZUV4Y2hhbmdlOChjaGFyIHZvbGF0aWxlICpfRGVzdGluYXRpb24sIGNoYXIgX0V4Y2hhbmdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgX0NvbXBhcmFuZCk7Ci12b2lkICpfSW50ZXJsb2NrZWRDb21wYXJlRXhjaGFuZ2VQb2ludGVyX0hMRUFjcXVpcmUodm9pZCAqdm9sYXRpbGUgKiwgdm9pZCAqLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKik7Ci12b2lkICpfSW50ZXJsb2NrZWRDb21wYXJlRXhjaGFuZ2VQb2ludGVyX0hMRVJlbGVhc2Uodm9pZCAqdm9sYXRpbGUgKiwgdm9pZCAqLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKik7Ci1zdGF0aWMgX19pbmxpbmVfXwotbG9uZyBfX2NkZWNsIF9JbnRlcmxvY2tlZERlY3JlbWVudChsb25nIHZvbGF0aWxlICpfQWRkZW5kKTsKLXN0YXRpYyBfX2lubGluZV9fCi1zaG9ydCBfSW50ZXJsb2NrZWREZWNyZW1lbnQxNihzaG9ydCB2b2xhdGlsZSAqX0FkZGVuZCk7Ci1sb25nIF9JbnRlcmxvY2tlZEV4Y2hhbmdlKGxvbmcgdm9sYXRpbGUgKl9UYXJnZXQsIGxvbmcgX1ZhbHVlKTsKLXN0YXRpYyBfX2lubGluZV9fCi1zaG9ydCBfSW50ZXJsb2NrZWRFeGNoYW5nZTE2KHNob3J0IHZvbGF0aWxlICpfVGFyZ2V0LCBzaG9ydCBfVmFsdWUpOwotc3RhdGljIF9faW5saW5lX18KLWNoYXIgX0ludGVybG9ja2VkRXhjaGFuZ2U4KGNoYXIgdm9sYXRpbGUgKl9UYXJnZXQsIGNoYXIgX1ZhbHVlKTsKLXN0YXRpYyBfX2lubGluZV9fCi1sb25nIF9fY2RlY2wgX0ludGVybG9ja2VkRXhjaGFuZ2VBZGQobG9uZyB2b2xhdGlsZSAqX0FkZGVuZCwgbG9uZyBfVmFsdWUpOwotbG9uZyBfSW50ZXJsb2NrZWRFeGNoYW5nZUFkZF9ITEVBY3F1aXJlKGxvbmcgdm9sYXRpbGUgKiwgbG9uZyk7Ci1sb25nIF9JbnRlcmxvY2tlZEV4Y2hhbmdlQWRkX0hMRVJlbGVhc2UobG9uZyB2b2xhdGlsZSAqLCBsb25nKTsKLXN0YXRpYyBfX2lubGluZV9fCi1zaG9ydCBfSW50ZXJsb2NrZWRFeGNoYW5nZUFkZDE2KHNob3J0IHZvbGF0aWxlICpfQWRkZW5kLCBzaG9ydCBfVmFsdWUpOwotX19pbnQ2NCBfSW50ZXJsb2NrZWRFeGNoYW5nZUFkZDY0X0hMRUFjcXVpcmUoX19pbnQ2NCB2b2xhdGlsZSAqLCBfX2ludDY0KTsKLV9faW50NjQgX0ludGVybG9ja2VkRXhjaGFuZ2VBZGQ2NF9ITEVSZWxlYXNlKF9faW50NjQgdm9sYXRpbGUgKiwgX19pbnQ2NCk7Ci1zdGF0aWMgX19pbmxpbmVfXwotY2hhciBfSW50ZXJsb2NrZWRFeGNoYW5nZUFkZDgoY2hhciB2b2xhdGlsZSAqX0FkZGVuZCwgY2hhciBfVmFsdWUpOwotc3RhdGljIF9faW5saW5lX18KLWxvbmcgX19jZGVjbCBfSW50ZXJsb2NrZWRJbmNyZW1lbnQobG9uZyB2b2xhdGlsZSAqX0FkZGVuZCk7Ci1zdGF0aWMgX19pbmxpbmVfXwotc2hvcnQgX0ludGVybG9ja2VkSW5jcmVtZW50MTYoc2hvcnQgdm9sYXRpbGUgKl9BZGRlbmQpOwotc3RhdGljIF9faW5saW5lX18KLWxvbmcgX0ludGVybG9ja2VkT3IobG9uZyB2b2xhdGlsZSAqX1ZhbHVlLCBsb25nIF9NYXNrKTsKLXN0YXRpYyBfX2lubGluZV9fCi1zaG9ydCBfSW50ZXJsb2NrZWRPcjE2KHNob3J0IHZvbGF0aWxlICpfVmFsdWUsIHNob3J0IF9NYXNrKTsKLXN0YXRpYyBfX2lubGluZV9fCi1jaGFyIF9JbnRlcmxvY2tlZE9yOChjaGFyIHZvbGF0aWxlICpfVmFsdWUsIGNoYXIgX01hc2spOwotc3RhdGljIF9faW5saW5lX18KLWxvbmcgX0ludGVybG9ja2VkWG9yKGxvbmcgdm9sYXRpbGUgKl9WYWx1ZSwgbG9uZyBfTWFzayk7Ci1zdGF0aWMgX19pbmxpbmVfXwotc2hvcnQgX0ludGVybG9ja2VkWG9yMTYoc2hvcnQgdm9sYXRpbGUgKl9WYWx1ZSwgc2hvcnQgX01hc2spOwotc3RhdGljIF9faW5saW5lX18KLWNoYXIgX0ludGVybG9ja2VkWG9yOChjaGFyIHZvbGF0aWxlICpfVmFsdWUsIGNoYXIgX01hc2spOwotdm9pZCBfX2NkZWNsIF9pbnZwY2lkKHVuc2lnbmVkIGludCwgdm9pZCAqKTsKLXN0YXRpYyBfX2lubGluZV9fCi11bnNpZ25lZCBsb25nIF9fY2RlY2wgX2xyb3RsKHVuc2lnbmVkIGxvbmcsIGludCk7Ci1zdGF0aWMgX19pbmxpbmVfXwotdW5zaWduZWQgbG9uZyBfX2NkZWNsIF9scm90cih1bnNpZ25lZCBsb25nLCBpbnQpOwotc3RhdGljIF9faW5saW5lX18KLXN0YXRpYyBfX2lubGluZV9fCi12b2lkIF9SZWFkQmFycmllcih2b2lkKTsKLXN0YXRpYyBfX2lubGluZV9fCi12b2lkIF9SZWFkV3JpdGVCYXJyaWVyKHZvaWQpOwotc3RhdGljIF9faW5saW5lX18KLXZvaWQgKl9SZXR1cm5BZGRyZXNzKHZvaWQpOwotdW5zaWduZWQgaW50IF9yb3J4X3UzMih1bnNpZ25lZCBpbnQsIGNvbnN0IHVuc2lnbmVkIGludCk7Ci1zdGF0aWMgX19pbmxpbmVfXwotdW5zaWduZWQgaW50IF9fY2RlY2wgX3JvdGwodW5zaWduZWQgaW50IF9WYWx1ZSwgaW50IF9TaGlmdCk7Ci1zdGF0aWMgX19pbmxpbmVfXwotdW5zaWduZWQgc2hvcnQgX3JvdGwxNih1bnNpZ25lZCBzaG9ydCBfVmFsdWUsIHVuc2lnbmVkIGNoYXIgX1NoaWZ0KTsKLXN0YXRpYyBfX2lubGluZV9fCi11bnNpZ25lZCBfX2ludDY0IF9fY2RlY2wgX3JvdGw2NCh1bnNpZ25lZCBfX2ludDY0IF9WYWx1ZSwgaW50IF9TaGlmdCk7Ci1zdGF0aWMgX19pbmxpbmVfXwotdW5zaWduZWQgY2hhciBfcm90bDgodW5zaWduZWQgY2hhciBfVmFsdWUsIHVuc2lnbmVkIGNoYXIgX1NoaWZ0KTsKLXN0YXRpYyBfX2lubGluZV9fCi11bnNpZ25lZCBpbnQgX19jZGVjbCBfcm90cih1bnNpZ25lZCBpbnQgX1ZhbHVlLCBpbnQgX1NoaWZ0KTsKLXN0YXRpYyBfX2lubGluZV9fCi11bnNpZ25lZCBzaG9ydCBfcm90cjE2KHVuc2lnbmVkIHNob3J0IF9WYWx1ZSwgdW5zaWduZWQgY2hhciBfU2hpZnQpOwotc3RhdGljIF9faW5saW5lX18KLXVuc2lnbmVkIF9faW50NjQgX19jZGVjbCBfcm90cjY0KHVuc2lnbmVkIF9faW50NjQgX1ZhbHVlLCBpbnQgX1NoaWZ0KTsKLXN0YXRpYyBfX2lubGluZV9fCi11bnNpZ25lZCBjaGFyIF9yb3RyOCh1bnNpZ25lZCBjaGFyIF9WYWx1ZSwgdW5zaWduZWQgY2hhciBfU2hpZnQpOwotaW50IF9zYXJ4X2kzMihpbnQsIHVuc2lnbmVkIGludCk7Ci0jaWYgX19TVERDX0hPU1RFRF9fCi1pbnQgX19jZGVjbCBfc2V0am1wKGptcF9idWYpOwotI2VuZGlmCi11bnNpZ25lZCBpbnQgX3NobHhfdTMyKHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50KTsKLXVuc2lnbmVkIGludCBfc2hyeF91MzIodW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQpOwotdm9pZCBfU3RvcmVfSExFUmVsZWFzZShsb25nIHZvbGF0aWxlICosIGxvbmcpOwotdm9pZCBfU3RvcmU2NF9ITEVSZWxlYXNlKF9faW50NjQgdm9sYXRpbGUgKiwgX19pbnQ2NCk7Ci12b2lkIF9TdG9yZVBvaW50ZXJfSExFUmVsZWFzZSh2b2lkICp2b2xhdGlsZSAqLCB2b2lkICopOwotc3RhdGljIF9faW5saW5lX18KLXZvaWQgX1dyaXRlQmFycmllcih2b2lkKTsKLXVuc2lnbmVkIF9faW50MzIgeGJlZ2luKHZvaWQpOwotdm9pZCBfeGVuZCh2b2lkKTsKLXN0YXRpYyBfX2lubGluZV9fCi0jZGVmaW5lIF9YQ1JfWEZFQVRVUkVfRU5BQkxFRF9NQVNLIDAKLXVuc2lnbmVkIF9faW50NjQgX19jZGVjbCBfeGdldGJ2KHVuc2lnbmVkIGludCk7Ci12b2lkIF9fY2RlY2wgX3hzZXRidih1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIF9faW50NjQpOwotCi0vKiBUaGVzZSBhZGRpdGlvbmFsIGludHJpbnNpY3MgYXJlIHR1cm5lZCBvbiBpbiB4NjQvYW1kNjQveDg2XzY0IG1vZGUuICovCi0jaWZkZWYgX194ODZfNjRfXwotdm9pZCBfX2FkZGdzYnl0ZSh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBjaGFyKTsKLXZvaWQgX19hZGRnc2R3b3JkKHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpOwotdm9pZCBfX2FkZGdzcXdvcmQodW5zaWduZWQgbG9uZywgdW5zaWduZWQgX19pbnQ2NCk7Ci12b2lkIF9fYWRkZ3N3b3JkKHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIHNob3J0KTsKLXN0YXRpYyBfX2lubGluZV9fCi12b2lkIF9fZmFzdHN0b3JlZmVuY2Uodm9pZCk7Ci12b2lkIF9faW5jZ3NieXRlKHVuc2lnbmVkIGxvbmcpOwotdm9pZCBfX2luY2dzZHdvcmQodW5zaWduZWQgbG9uZyk7Ci12b2lkIF9faW5jZ3Nxd29yZCh1bnNpZ25lZCBsb25nKTsKLXZvaWQgX19pbmNnc3dvcmQodW5zaWduZWQgbG9uZyk7Ci11bnNpZ25lZCBjaGFyIF9fbHdwaW5zNjQodW5zaWduZWQgX19pbnQ2NCwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQpOwotdm9pZCBfX2x3cHZhbDY0KHVuc2lnbmVkIF9faW50NjQsIHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50KTsKLXVuc2lnbmVkIF9faW50NjQgX19semNudDY0KHVuc2lnbmVkIF9faW50NjQpOwotc3RhdGljIF9faW5saW5lX18KLXZvaWQgX19tb3ZzcSh1bnNpZ25lZCBsb25nIGxvbmcgKiwgdW5zaWduZWQgbG9uZyBsb25nIGNvbnN0ICosIHNpemVfdCk7Ci1fX2ludDY0IF9fbXVsaChfX2ludDY0LCBfX2ludDY0KTsKLXN0YXRpYyBfX2lubGluZV9fCi11bnNpZ25lZCBfX2ludDY0IF9fcG9wY250NjQodW5zaWduZWQgX19pbnQ2NCk7Ci1zdGF0aWMgX19pbmxpbmVfXwotdW5zaWduZWQgY2hhciBfX3JlYWRnc2J5dGUodW5zaWduZWQgbG9uZyk7Ci1zdGF0aWMgX19pbmxpbmVfXwotdW5zaWduZWQgbG9uZyBfX3JlYWRnc2R3b3JkKHVuc2lnbmVkIGxvbmcpOwotc3RhdGljIF9faW5saW5lX18KLXVuc2lnbmVkIF9faW50NjQgX19yZWFkZ3Nxd29yZCh1bnNpZ25lZCBsb25nKTsKLXVuc2lnbmVkIHNob3J0IF9fcmVhZGdzd29yZCh1bnNpZ25lZCBsb25nKTsKLXVuc2lnbmVkIF9faW50NjQgX19zaGlmdGxlZnQxMjgodW5zaWduZWQgX19pbnQ2NCBfTG93UGFydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgX19pbnQ2NCBfSGlnaFBhcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgX1NoaWZ0KTsKLXVuc2lnbmVkIF9faW50NjQgX19zaGlmdHJpZ2h0MTI4KHVuc2lnbmVkIF9faW50NjQgX0xvd1BhcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBfX2ludDY0IF9IaWdoUGFydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgX1NoaWZ0KTsKLXN0YXRpYyBfX2lubGluZV9fCi12b2lkIF9fc3Rvc3EodW5zaWduZWQgX19pbnQ2NCAqLCB1bnNpZ25lZCBfX2ludDY0LCBzaXplX3QpOwotdW5zaWduZWQgY2hhciBfX3ZteF9vbih1bnNpZ25lZCBfX2ludDY0ICopOwotdW5zaWduZWQgY2hhciBfX3ZteF92bWNsZWFyKHVuc2lnbmVkIF9faW50NjQgKik7Ci11bnNpZ25lZCBjaGFyIF9fdm14X3ZtbGF1bmNoKHZvaWQpOwotdW5zaWduZWQgY2hhciBfX3ZteF92bXB0cmxkKHVuc2lnbmVkIF9faW50NjQgKik7Ci11bnNpZ25lZCBjaGFyIF9fdm14X3ZtcmVhZChzaXplX3QsIHNpemVfdCAqKTsKLXVuc2lnbmVkIGNoYXIgX192bXhfdm1yZXN1bWUodm9pZCk7Ci11bnNpZ25lZCBjaGFyIF9fdm14X3Ztd3JpdGUoc2l6ZV90LCBzaXplX3QpOwotdm9pZCBfX3dyaXRlZ3NieXRlKHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGNoYXIpOwotdm9pZCBfX3dyaXRlZ3Nkd29yZCh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKTsKLXZvaWQgX193cml0ZWdzcXdvcmQodW5zaWduZWQgbG9uZywgdW5zaWduZWQgX19pbnQ2NCk7Ci12b2lkIF9fd3JpdGVnc3dvcmQodW5zaWduZWQgbG9uZywgdW5zaWduZWQgc2hvcnQpOwotc3RhdGljIF9faW5saW5lX18KLXVuc2lnbmVkIGNoYXIgX0JpdFNjYW5Gb3J3YXJkNjQodW5zaWduZWQgbG9uZyAqX0luZGV4LCB1bnNpZ25lZCBfX2ludDY0IF9NYXNrKTsKLXN0YXRpYyBfX2lubGluZV9fCi11bnNpZ25lZCBjaGFyIF9CaXRTY2FuUmV2ZXJzZTY0KHVuc2lnbmVkIGxvbmcgKl9JbmRleCwgdW5zaWduZWQgX19pbnQ2NCBfTWFzayk7Ci1zdGF0aWMgX19pbmxpbmVfXwotdW5zaWduZWQgY2hhciBfYml0dGVzdDY0KF9faW50NjQgY29uc3QgKiwgX19pbnQ2NCk7Ci1zdGF0aWMgX19pbmxpbmVfXwotdW5zaWduZWQgY2hhciBfYml0dGVzdGFuZGNvbXBsZW1lbnQ2NChfX2ludDY0ICosIF9faW50NjQpOwotc3RhdGljIF9faW5saW5lX18KLXVuc2lnbmVkIGNoYXIgX2JpdHRlc3RhbmRyZXNldDY0KF9faW50NjQgKiwgX19pbnQ2NCk7Ci1zdGF0aWMgX19pbmxpbmVfXwotdW5zaWduZWQgY2hhciBfYml0dGVzdGFuZHNldDY0KF9faW50NjQgKiwgX19pbnQ2NCk7Ci11bnNpZ25lZCBfX2ludDY0IF9fY2RlY2wgX2J5dGVzd2FwX3VpbnQ2NCh1bnNpZ25lZCBfX2ludDY0KTsKLWxvbmcgX0ludGVybG9ja2VkQW5kX25wKGxvbmcgdm9sYXRpbGUgKl9WYWx1ZSwgbG9uZyBfTWFzayk7Ci1zaG9ydCBfSW50ZXJsb2NrZWRBbmQxNl9ucChzaG9ydCB2b2xhdGlsZSAqX1ZhbHVlLCBzaG9ydCBfTWFzayk7Ci1fX2ludDY0IF9JbnRlcmxvY2tlZEFuZDY0X25wKF9faW50NjQgdm9sYXRpbGUgKl9WYWx1ZSwgX19pbnQ2NCBfTWFzayk7Ci1jaGFyIF9JbnRlcmxvY2tlZEFuZDhfbnAoY2hhciB2b2xhdGlsZSAqX1ZhbHVlLCBjaGFyIF9NYXNrKTsKLXVuc2lnbmVkIGNoYXIgX2ludGVybG9ja2VkYml0dGVzdGFuZHJlc2V0NjQoX19pbnQ2NCB2b2xhdGlsZSAqLCBfX2ludDY0KTsKLXN0YXRpYyBfX2lubGluZV9fCi11bnNpZ25lZCBjaGFyIF9pbnRlcmxvY2tlZGJpdHRlc3RhbmRzZXQ2NChfX2ludDY0IHZvbGF0aWxlICosIF9faW50NjQpOwotbG9uZyBfSW50ZXJsb2NrZWRDb21wYXJlRXhjaGFuZ2VfbnAobG9uZyB2b2xhdGlsZSAqX0Rlc3RpbmF0aW9uLCBsb25nIF9FeGNoYW5nZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgX0NvbXBhcmFuZCk7Ci11bnNpZ25lZCBjaGFyIF9JbnRlcmxvY2tlZENvbXBhcmVFeGNoYW5nZTEyOChfX2ludDY0IHZvbGF0aWxlICpfRGVzdGluYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2ludDY0IF9FeGNoYW5nZUhpZ2gsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2ludDY0IF9FeGNoYW5nZUxvdywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9faW50NjQgKl9Db21wYXJlYW5kUmVzdWx0KTsKLXVuc2lnbmVkIGNoYXIgX0ludGVybG9ja2VkQ29tcGFyZUV4Y2hhbmdlMTI4X25wKF9faW50NjQgdm9sYXRpbGUgKl9EZXN0aW5hdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9faW50NjQgX0V4Y2hhbmdlSGlnaCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9faW50NjQgX0V4Y2hhbmdlTG93LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19pbnQ2NCAqX0NvbXBhcmFuZFJlc3VsdCk7Ci1zaG9ydCBfSW50ZXJsb2NrZWRDb21wYXJlRXhjaGFuZ2UxNl9ucChzaG9ydCB2b2xhdGlsZSAqX0Rlc3RpbmF0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvcnQgX0V4Y2hhbmdlLCBzaG9ydCBfQ29tcGFyYW5kKTsKLV9faW50NjQgX0ludGVybG9ja2VkQ29tcGFyZUV4Y2hhbmdlNjRfSExFQWNxdWlyZShfX2ludDY0IHZvbGF0aWxlICosIF9faW50NjQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19pbnQ2NCk7Ci1fX2ludDY0IF9JbnRlcmxvY2tlZENvbXBhcmVFeGNoYW5nZTY0X0hMRVJlbGVhc2UoX19pbnQ2NCB2b2xhdGlsZSAqLCBfX2ludDY0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9faW50NjQpOwotX19pbnQ2NCBfSW50ZXJsb2NrZWRDb21wYXJlRXhjaGFuZ2U2NF9ucChfX2ludDY0IHZvbGF0aWxlICpfRGVzdGluYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9faW50NjQgX0V4Y2hhbmdlLCBfX2ludDY0IF9Db21wYXJhbmQpOwotdm9pZCAqX0ludGVybG9ja2VkQ29tcGFyZUV4Y2hhbmdlUG9pbnRlcih2b2lkICp2b2xhdGlsZSAqX0Rlc3RpbmF0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpfRXhjaGFuZ2UsIHZvaWQgKl9Db21wYXJhbmQpOwotdm9pZCAqX0ludGVybG9ja2VkQ29tcGFyZUV4Y2hhbmdlUG9pbnRlcl9ucCh2b2lkICp2b2xhdGlsZSAqX0Rlc3RpbmF0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpfRXhjaGFuZ2UsIHZvaWQgKl9Db21wYXJhbmQpOwotc3RhdGljIF9faW5saW5lX18KLV9faW50NjQgX0ludGVybG9ja2VkRGVjcmVtZW50NjQoX19pbnQ2NCB2b2xhdGlsZSAqX0FkZGVuZCk7Ci1zdGF0aWMgX19pbmxpbmVfXwotX19pbnQ2NCBfSW50ZXJsb2NrZWRFeGNoYW5nZTY0KF9faW50NjQgdm9sYXRpbGUgKl9UYXJnZXQsIF9faW50NjQgX1ZhbHVlKTsKLXN0YXRpYyBfX2lubGluZV9fCi1fX2ludDY0IF9JbnRlcmxvY2tlZEV4Y2hhbmdlQWRkNjQoX19pbnQ2NCB2b2xhdGlsZSAqX0FkZGVuZCwgX19pbnQ2NCBfVmFsdWUpOwotdm9pZCAqX0ludGVybG9ja2VkRXhjaGFuZ2VQb2ludGVyKHZvaWQgKnZvbGF0aWxlICpfVGFyZ2V0LCB2b2lkICpfVmFsdWUpOwotc3RhdGljIF9faW5saW5lX18KLV9faW50NjQgX0ludGVybG9ja2VkSW5jcmVtZW50NjQoX19pbnQ2NCB2b2xhdGlsZSAqX0FkZGVuZCk7Ci1sb25nIF9JbnRlcmxvY2tlZE9yX25wKGxvbmcgdm9sYXRpbGUgKl9WYWx1ZSwgbG9uZyBfTWFzayk7Ci1zaG9ydCBfSW50ZXJsb2NrZWRPcjE2X25wKHNob3J0IHZvbGF0aWxlICpfVmFsdWUsIHNob3J0IF9NYXNrKTsKLXN0YXRpYyBfX2lubGluZV9fCi1fX2ludDY0IF9JbnRlcmxvY2tlZE9yNjQoX19pbnQ2NCB2b2xhdGlsZSAqX1ZhbHVlLCBfX2ludDY0IF9NYXNrKTsKLV9faW50NjQgX0ludGVybG9ja2VkT3I2NF9ucChfX2ludDY0IHZvbGF0aWxlICpfVmFsdWUsIF9faW50NjQgX01hc2spOwotY2hhciBfSW50ZXJsb2NrZWRPcjhfbnAoY2hhciB2b2xhdGlsZSAqX1ZhbHVlLCBjaGFyIF9NYXNrKTsKLWxvbmcgX0ludGVybG9ja2VkWG9yX25wKGxvbmcgdm9sYXRpbGUgKl9WYWx1ZSwgbG9uZyBfTWFzayk7Ci1zaG9ydCBfSW50ZXJsb2NrZWRYb3IxNl9ucChzaG9ydCB2b2xhdGlsZSAqX1ZhbHVlLCBzaG9ydCBfTWFzayk7Ci1zdGF0aWMgX19pbmxpbmVfXwotX19pbnQ2NCBfSW50ZXJsb2NrZWRYb3I2NChfX2ludDY0IHZvbGF0aWxlICpfVmFsdWUsIF9faW50NjQgX01hc2spOwotX19pbnQ2NCBfSW50ZXJsb2NrZWRYb3I2NF9ucChfX2ludDY0IHZvbGF0aWxlICpfVmFsdWUsIF9faW50NjQgX01hc2spOwotY2hhciBfSW50ZXJsb2NrZWRYb3I4X25wKGNoYXIgdm9sYXRpbGUgKl9WYWx1ZSwgY2hhciBfTWFzayk7Ci1zdGF0aWMgX19pbmxpbmVfXwotX19pbnQ2NCBfbXVsMTI4KF9faW50NjQgX011bHRpcGxpZXIsIF9faW50NjQgX011bHRpcGxpY2FuZCwKLSAgICAgICAgICAgICAgICBfX2ludDY0ICpfSGlnaFByb2R1Y3QpOwotdW5zaWduZWQgX19pbnQ2NCBfcm9yeF91NjQodW5zaWduZWQgX19pbnQ2NCwgY29uc3QgdW5zaWduZWQgaW50KTsKLV9faW50NjQgX3NhcnhfaTY0KF9faW50NjQsIHVuc2lnbmVkIGludCk7Ci0jaWYgX19TVERDX0hPU1RFRF9fCi1pbnQgX19jZGVjbCBfc2V0am1wZXgoam1wX2J1Zik7Ci0jZW5kaWYKLXVuc2lnbmVkIF9faW50NjQgX3NobHhfdTY0KHVuc2lnbmVkIF9faW50NjQsIHVuc2lnbmVkIGludCk7Ci11bnNpZ25lZCBfX2ludDY0IF9zaHJ4X3U2NCh1bnNpZ25lZCBfX2ludDY0LCB1bnNpZ25lZCBpbnQpOwotLyoKLSAqIE11bHRpcGx5IHR3byA2NC1iaXQgaW50ZWdlcnMgYW5kIG9idGFpbiBhIDY0LWJpdCByZXN1bHQuCi0gKiBUaGUgbG93LWhhbGYgaXMgcmV0dXJuZWQgZGlyZWN0bHkgYW5kIHRoZSBoaWdoIGhhbGYgaXMgaW4gYW4gb3V0IHBhcmFtZXRlci4KLSAqLwotc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgX19pbnQ2NCBfX0RFRkFVTFRfRk5fQVRUUlMKLV91bXVsMTI4KHVuc2lnbmVkIF9faW50NjQgX011bHRpcGxpZXIsIHVuc2lnbmVkIF9faW50NjQgX011bHRpcGxpY2FuZCwKLSAgICAgICAgIHVuc2lnbmVkIF9faW50NjQgKl9IaWdoUHJvZHVjdCkgewotICB1bnNpZ25lZCBfX2ludDEyOCBfRnVsbFByb2R1Y3QgPQotICAgICAgKHVuc2lnbmVkIF9faW50MTI4KV9NdWx0aXBsaWVyICogKHVuc2lnbmVkIF9faW50MTI4KV9NdWx0aXBsaWNhbmQ7Ci0gICpfSGlnaFByb2R1Y3QgPSBfRnVsbFByb2R1Y3QgPj4gNjQ7Ci0gIHJldHVybiBfRnVsbFByb2R1Y3Q7Ci19Ci1zdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBfX2ludDY0IF9fREVGQVVMVF9GTl9BVFRSUwotX191bXVsaCh1bnNpZ25lZCBfX2ludDY0IF9NdWx0aXBsaWVyLCB1bnNpZ25lZCBfX2ludDY0IF9NdWx0aXBsaWNhbmQpIHsKLSAgdW5zaWduZWQgX19pbnQxMjggX0Z1bGxQcm9kdWN0ID0KLSAgICAgICh1bnNpZ25lZCBfX2ludDEyOClfTXVsdGlwbGllciAqICh1bnNpZ25lZCBfX2ludDEyOClfTXVsdGlwbGljYW5kOwotICByZXR1cm4gX0Z1bGxQcm9kdWN0ID4+IDY0OwotfQotCi0jZW5kaWYgLyogX194ODZfNjRfXyAqLwotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXAotfCogTXVsdGlwbGljYXRpb24KLVwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi1zdGF0aWMgX19pbmxpbmVfXyBfX2ludDY0IF9fREVGQVVMVF9GTl9BVFRSUwotX19lbXVsKGludCBfX2luMSwgaW50IF9faW4yKSB7Ci0gIHJldHVybiAoX19pbnQ2NClfX2luMSAqIChfX2ludDY0KV9faW4yOwotfQotc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgX19pbnQ2NCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9fZW11bHUodW5zaWduZWQgaW50IF9faW4xLCB1bnNpZ25lZCBpbnQgX19pbjIpIHsKLSAgcmV0dXJuICh1bnNpZ25lZCBfX2ludDY0KV9faW4xICogKHVuc2lnbmVkIF9faW50NjQpX19pbjI7Ci19Ci0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXAotfCogQml0IFR3aWRkbGluZwotXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXN0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGNoYXIgX19ERUZBVUxUX0ZOX0FUVFJTCi1fcm90bDgodW5zaWduZWQgY2hhciBfVmFsdWUsIHVuc2lnbmVkIGNoYXIgX1NoaWZ0KSB7Ci0gIF9TaGlmdCAmPSAweDc7Ci0gIHJldHVybiBfU2hpZnQgPyAoX1ZhbHVlIDw8IF9TaGlmdCkgfCAoX1ZhbHVlID4+ICg4IC0gX1NoaWZ0KSkgOiBfVmFsdWU7Ci19Ci1zdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBjaGFyIF9fREVGQVVMVF9GTl9BVFRSUwotX3JvdHI4KHVuc2lnbmVkIGNoYXIgX1ZhbHVlLCB1bnNpZ25lZCBjaGFyIF9TaGlmdCkgewotICBfU2hpZnQgJj0gMHg3OwotICByZXR1cm4gX1NoaWZ0ID8gKF9WYWx1ZSA+PiBfU2hpZnQpIHwgKF9WYWx1ZSA8PCAoOCAtIF9TaGlmdCkpIDogX1ZhbHVlOwotfQotc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgc2hvcnQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fcm90bDE2KHVuc2lnbmVkIHNob3J0IF9WYWx1ZSwgdW5zaWduZWQgY2hhciBfU2hpZnQpIHsKLSAgX1NoaWZ0ICY9IDB4ZjsKLSAgcmV0dXJuIF9TaGlmdCA/IChfVmFsdWUgPDwgX1NoaWZ0KSB8IChfVmFsdWUgPj4gKDE2IC0gX1NoaWZ0KSkgOiBfVmFsdWU7Ci19Ci1zdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBzaG9ydCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9yb3RyMTYodW5zaWduZWQgc2hvcnQgX1ZhbHVlLCB1bnNpZ25lZCBjaGFyIF9TaGlmdCkgewotICBfU2hpZnQgJj0gMHhmOwotICByZXR1cm4gX1NoaWZ0ID8gKF9WYWx1ZSA+PiBfU2hpZnQpIHwgKF9WYWx1ZSA8PCAoMTYgLSBfU2hpZnQpKSA6IF9WYWx1ZTsKLX0KLXN0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGludCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9yb3RsKHVuc2lnbmVkIGludCBfVmFsdWUsIGludCBfU2hpZnQpIHsKLSAgX1NoaWZ0ICY9IDB4MWY7Ci0gIHJldHVybiBfU2hpZnQgPyAoX1ZhbHVlIDw8IF9TaGlmdCkgfCAoX1ZhbHVlID4+ICgzMiAtIF9TaGlmdCkpIDogX1ZhbHVlOwotfQotc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgaW50IF9fREVGQVVMVF9GTl9BVFRSUwotX3JvdHIodW5zaWduZWQgaW50IF9WYWx1ZSwgaW50IF9TaGlmdCkgewotICBfU2hpZnQgJj0gMHgxZjsKLSAgcmV0dXJuIF9TaGlmdCA/IChfVmFsdWUgPj4gX1NoaWZ0KSB8IChfVmFsdWUgPDwgKDMyIC0gX1NoaWZ0KSkgOiBfVmFsdWU7Ci19Ci1zdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nIF9fREVGQVVMVF9GTl9BVFRSUwotX2xyb3RsKHVuc2lnbmVkIGxvbmcgX1ZhbHVlLCBpbnQgX1NoaWZ0KSB7Ci0gIF9TaGlmdCAmPSAweDFmOwotICByZXR1cm4gX1NoaWZ0ID8gKF9WYWx1ZSA8PCBfU2hpZnQpIHwgKF9WYWx1ZSA+PiAoMzIgLSBfU2hpZnQpKSA6IF9WYWx1ZTsKLX0KLXN0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbHJvdHIodW5zaWduZWQgbG9uZyBfVmFsdWUsIGludCBfU2hpZnQpIHsKLSAgX1NoaWZ0ICY9IDB4MWY7Ci0gIHJldHVybiBfU2hpZnQgPyAoX1ZhbHVlID4+IF9TaGlmdCkgfCAoX1ZhbHVlIDw8ICgzMiAtIF9TaGlmdCkpIDogX1ZhbHVlOwotfQotc3RhdGljCi1fX2lubGluZV9fIHVuc2lnbmVkIF9faW50NjQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fcm90bDY0KHVuc2lnbmVkIF9faW50NjQgX1ZhbHVlLCBpbnQgX1NoaWZ0KSB7Ci0gIF9TaGlmdCAmPSAweDNmOwotICByZXR1cm4gX1NoaWZ0ID8gKF9WYWx1ZSA8PCBfU2hpZnQpIHwgKF9WYWx1ZSA+PiAoNjQgLSBfU2hpZnQpKSA6IF9WYWx1ZTsKLX0KLXN0YXRpYwotX19pbmxpbmVfXyB1bnNpZ25lZCBfX2ludDY0IF9fREVGQVVMVF9GTl9BVFRSUwotX3JvdHI2NCh1bnNpZ25lZCBfX2ludDY0IF9WYWx1ZSwgaW50IF9TaGlmdCkgewotICBfU2hpZnQgJj0gMHgzZjsKLSAgcmV0dXJuIF9TaGlmdCA/IChfVmFsdWUgPj4gX1NoaWZ0KSB8IChfVmFsdWUgPDwgKDY0IC0gX1NoaWZ0KSkgOiBfVmFsdWU7Ci19Ci0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXAotfCogQml0IENvdW50aW5nIGFuZCBUZXN0aW5nCi1cKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgY2hhciBfX0RFRkFVTFRfRk5fQVRUUlMKLV9CaXRTY2FuRm9yd2FyZCh1bnNpZ25lZCBsb25nICpfSW5kZXgsIHVuc2lnbmVkIGxvbmcgX01hc2spIHsKLSAgaWYgKCFfTWFzaykKLSAgICByZXR1cm4gMDsKLSAgKl9JbmRleCA9IF9fYnVpbHRpbl9jdHpsKF9NYXNrKTsKLSAgcmV0dXJuIDE7Ci19Ci1zdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBjaGFyIF9fREVGQVVMVF9GTl9BVFRSUwotX0JpdFNjYW5SZXZlcnNlKHVuc2lnbmVkIGxvbmcgKl9JbmRleCwgdW5zaWduZWQgbG9uZyBfTWFzaykgewotICBpZiAoIV9NYXNrKQotICAgIHJldHVybiAwOwotICAqX0luZGV4ID0gMzEgLSBfX2J1aWx0aW5fY2x6bChfTWFzayk7Ci0gIHJldHVybiAxOwotfQotc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgc2hvcnQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fX3BvcGNudDE2KHVuc2lnbmVkIHNob3J0IF9WYWx1ZSkgewotICByZXR1cm4gX19idWlsdGluX3BvcGNvdW50KChpbnQpX1ZhbHVlKTsKLX0KLXN0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGludCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9fcG9wY250KHVuc2lnbmVkIGludCBfVmFsdWUpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9wb3Bjb3VudChfVmFsdWUpOwotfQotc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgY2hhciBfX0RFRkFVTFRfRk5fQVRUUlMKLV9iaXR0ZXN0KGxvbmcgY29uc3QgKl9CaXRCYXNlLCBsb25nIF9CaXRQb3MpIHsKLSAgcmV0dXJuICgqX0JpdEJhc2UgPj4gX0JpdFBvcykgJiAxOwotfQotc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgY2hhciBfX0RFRkFVTFRfRk5fQVRUUlMKLV9iaXR0ZXN0YW5kY29tcGxlbWVudChsb25nICpfQml0QmFzZSwgbG9uZyBfQml0UG9zKSB7Ci0gIHVuc2lnbmVkIGNoYXIgX1JlcyA9ICgqX0JpdEJhc2UgPj4gX0JpdFBvcykgJiAxOwotICAqX0JpdEJhc2UgPSAqX0JpdEJhc2UgXiAoMSA8PCBfQml0UG9zKTsKLSAgcmV0dXJuIF9SZXM7Ci19Ci1zdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBjaGFyIF9fREVGQVVMVF9GTl9BVFRSUwotX2JpdHRlc3RhbmRyZXNldChsb25nICpfQml0QmFzZSwgbG9uZyBfQml0UG9zKSB7Ci0gIHVuc2lnbmVkIGNoYXIgX1JlcyA9ICgqX0JpdEJhc2UgPj4gX0JpdFBvcykgJiAxOwotICAqX0JpdEJhc2UgPSAqX0JpdEJhc2UgJiB+KDEgPDwgX0JpdFBvcyk7Ci0gIHJldHVybiBfUmVzOwotfQotc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgY2hhciBfX0RFRkFVTFRfRk5fQVRUUlMKLV9iaXR0ZXN0YW5kc2V0KGxvbmcgKl9CaXRCYXNlLCBsb25nIF9CaXRQb3MpIHsKLSAgdW5zaWduZWQgY2hhciBfUmVzID0gKCpfQml0QmFzZSA+PiBfQml0UG9zKSAmIDE7Ci0gICpfQml0QmFzZSA9ICpfQml0QmFzZSB8ICgxIDw8IF9CaXRQb3MpOwotICByZXR1cm4gX1JlczsKLX0KLXN0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGNoYXIgX19ERUZBVUxUX0ZOX0FUVFJTCi1faW50ZXJsb2NrZWRiaXR0ZXN0YW5kc2V0KGxvbmcgdm9sYXRpbGUgKl9CaXRCYXNlLCBsb25nIF9CaXRQb3MpIHsKLSAgbG9uZyBfUHJldlZhbCA9IF9fYXRvbWljX2ZldGNoX29yKF9CaXRCYXNlLCAxbCA8PCBfQml0UG9zLCBfX0FUT01JQ19TRVFfQ1NUKTsKLSAgcmV0dXJuIChfUHJldlZhbCA+PiBfQml0UG9zKSAmIDE7Ci19Ci0jaWZkZWYgX194ODZfNjRfXwotc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgY2hhciBfX0RFRkFVTFRfRk5fQVRUUlMKLV9CaXRTY2FuRm9yd2FyZDY0KHVuc2lnbmVkIGxvbmcgKl9JbmRleCwgdW5zaWduZWQgX19pbnQ2NCBfTWFzaykgewotICBpZiAoIV9NYXNrKQotICAgIHJldHVybiAwOwotICAqX0luZGV4ID0gX19idWlsdGluX2N0emxsKF9NYXNrKTsKLSAgcmV0dXJuIDE7Ci19Ci1zdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBjaGFyIF9fREVGQVVMVF9GTl9BVFRSUwotX0JpdFNjYW5SZXZlcnNlNjQodW5zaWduZWQgbG9uZyAqX0luZGV4LCB1bnNpZ25lZCBfX2ludDY0IF9NYXNrKSB7Ci0gIGlmICghX01hc2spCi0gICAgcmV0dXJuIDA7Ci0gICpfSW5kZXggPSA2MyAtIF9fYnVpbHRpbl9jbHpsbChfTWFzayk7Ci0gIHJldHVybiAxOwotfQotc3RhdGljIF9faW5saW5lX18KLXVuc2lnbmVkIF9faW50NjQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fX3BvcGNudDY0KHVuc2lnbmVkIF9faW50NjQgX1ZhbHVlKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fcG9wY291bnRsbChfVmFsdWUpOwotfQotc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgY2hhciBfX0RFRkFVTFRfRk5fQVRUUlMKLV9iaXR0ZXN0NjQoX19pbnQ2NCBjb25zdCAqX0JpdEJhc2UsIF9faW50NjQgX0JpdFBvcykgewotICByZXR1cm4gKCpfQml0QmFzZSA+PiBfQml0UG9zKSAmIDE7Ci19Ci1zdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBjaGFyIF9fREVGQVVMVF9GTl9BVFRSUwotX2JpdHRlc3RhbmRjb21wbGVtZW50NjQoX19pbnQ2NCAqX0JpdEJhc2UsIF9faW50NjQgX0JpdFBvcykgewotICB1bnNpZ25lZCBjaGFyIF9SZXMgPSAoKl9CaXRCYXNlID4+IF9CaXRQb3MpICYgMTsKLSAgKl9CaXRCYXNlID0gKl9CaXRCYXNlIF4gKDFsbCA8PCBfQml0UG9zKTsKLSAgcmV0dXJuIF9SZXM7Ci19Ci1zdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBjaGFyIF9fREVGQVVMVF9GTl9BVFRSUwotX2JpdHRlc3RhbmRyZXNldDY0KF9faW50NjQgKl9CaXRCYXNlLCBfX2ludDY0IF9CaXRQb3MpIHsKLSAgdW5zaWduZWQgY2hhciBfUmVzID0gKCpfQml0QmFzZSA+PiBfQml0UG9zKSAmIDE7Ci0gICpfQml0QmFzZSA9ICpfQml0QmFzZSAmIH4oMWxsIDw8IF9CaXRQb3MpOwotICByZXR1cm4gX1JlczsKLX0KLXN0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGNoYXIgX19ERUZBVUxUX0ZOX0FUVFJTCi1fYml0dGVzdGFuZHNldDY0KF9faW50NjQgKl9CaXRCYXNlLCBfX2ludDY0IF9CaXRQb3MpIHsKLSAgdW5zaWduZWQgY2hhciBfUmVzID0gKCpfQml0QmFzZSA+PiBfQml0UG9zKSAmIDE7Ci0gICpfQml0QmFzZSA9ICpfQml0QmFzZSB8ICgxbGwgPDwgX0JpdFBvcyk7Ci0gIHJldHVybiBfUmVzOwotfQotc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgY2hhciBfX0RFRkFVTFRfRk5fQVRUUlMKLV9pbnRlcmxvY2tlZGJpdHRlc3RhbmRzZXQ2NChfX2ludDY0IHZvbGF0aWxlICpfQml0QmFzZSwgX19pbnQ2NCBfQml0UG9zKSB7Ci0gIGxvbmcgbG9uZyBfUHJldlZhbCA9Ci0gICAgICBfX2F0b21pY19mZXRjaF9vcihfQml0QmFzZSwgMWxsIDw8IF9CaXRQb3MsIF9fQVRPTUlDX1NFUV9DU1QpOwotICByZXR1cm4gKF9QcmV2VmFsID4+IF9CaXRQb3MpICYgMTsKLX0KLSNlbmRpZgotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlwKLXwqIEludGVybG9ja2VkIEV4Y2hhbmdlIEFkZAotXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXN0YXRpYyBfX2lubGluZV9fIGNoYXIgX19ERUZBVUxUX0ZOX0FUVFJTCi1fSW50ZXJsb2NrZWRFeGNoYW5nZUFkZDgoY2hhciB2b2xhdGlsZSAqX0FkZGVuZCwgY2hhciBfVmFsdWUpIHsKLSAgcmV0dXJuIF9fYXRvbWljX2ZldGNoX2FkZChfQWRkZW5kLCBfVmFsdWUsIF9fQVRPTUlDX1NFUV9DU1QpOwotfQotc3RhdGljIF9faW5saW5lX18gc2hvcnQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fSW50ZXJsb2NrZWRFeGNoYW5nZUFkZDE2KHNob3J0IHZvbGF0aWxlICpfQWRkZW5kLCBzaG9ydCBfVmFsdWUpIHsKLSAgcmV0dXJuIF9fYXRvbWljX2ZldGNoX2FkZChfQWRkZW5kLCBfVmFsdWUsIF9fQVRPTUlDX1NFUV9DU1QpOwotfQotI2lmZGVmIF9feDg2XzY0X18KLXN0YXRpYyBfX2lubGluZV9fIF9faW50NjQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fSW50ZXJsb2NrZWRFeGNoYW5nZUFkZDY0KF9faW50NjQgdm9sYXRpbGUgKl9BZGRlbmQsIF9faW50NjQgX1ZhbHVlKSB7Ci0gIHJldHVybiBfX2F0b21pY19mZXRjaF9hZGQoX0FkZGVuZCwgX1ZhbHVlLCBfX0FUT01JQ19TRVFfQ1NUKTsKLX0KLSNlbmRpZgotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlwKLXwqIEludGVybG9ja2VkIEV4Y2hhbmdlIFN1YgotXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXN0YXRpYyBfX2lubGluZV9fIGNoYXIgX19ERUZBVUxUX0ZOX0FUVFJTCi1fSW50ZXJsb2NrZWRFeGNoYW5nZVN1YjgoY2hhciB2b2xhdGlsZSAqX1N1YmVuZCwgY2hhciBfVmFsdWUpIHsKLSAgcmV0dXJuIF9fYXRvbWljX2ZldGNoX3N1YihfU3ViZW5kLCBfVmFsdWUsIF9fQVRPTUlDX1NFUV9DU1QpOwotfQotc3RhdGljIF9faW5saW5lX18gc2hvcnQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fSW50ZXJsb2NrZWRFeGNoYW5nZVN1YjE2KHNob3J0IHZvbGF0aWxlICpfU3ViZW5kLCBzaG9ydCBfVmFsdWUpIHsKLSAgcmV0dXJuIF9fYXRvbWljX2ZldGNoX3N1YihfU3ViZW5kLCBfVmFsdWUsIF9fQVRPTUlDX1NFUV9DU1QpOwotfQotc3RhdGljIF9faW5saW5lX18gbG9uZyBfX0RFRkFVTFRfRk5fQVRUUlMKLV9JbnRlcmxvY2tlZEV4Y2hhbmdlU3ViKGxvbmcgdm9sYXRpbGUgKl9TdWJlbmQsIGxvbmcgX1ZhbHVlKSB7Ci0gIHJldHVybiBfX2F0b21pY19mZXRjaF9zdWIoX1N1YmVuZCwgX1ZhbHVlLCBfX0FUT01JQ19TRVFfQ1NUKTsKLX0KLSNpZmRlZiBfX3g4Nl82NF9fCi1zdGF0aWMgX19pbmxpbmVfXyBfX2ludDY0IF9fREVGQVVMVF9GTl9BVFRSUwotX0ludGVybG9ja2VkRXhjaGFuZ2VTdWI2NChfX2ludDY0IHZvbGF0aWxlICpfU3ViZW5kLCBfX2ludDY0IF9WYWx1ZSkgewotICByZXR1cm4gX19hdG9taWNfZmV0Y2hfc3ViKF9TdWJlbmQsIF9WYWx1ZSwgX19BVE9NSUNfU0VRX0NTVCk7Ci19Ci0jZW5kaWYKLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcCi18KiBJbnRlcmxvY2tlZCBJbmNyZW1lbnQKLVwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi1zdGF0aWMgX19pbmxpbmVfXyBzaG9ydCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9JbnRlcmxvY2tlZEluY3JlbWVudDE2KHNob3J0IHZvbGF0aWxlICpfVmFsdWUpIHsKLSAgcmV0dXJuIF9fYXRvbWljX2FkZF9mZXRjaChfVmFsdWUsIDEsIF9fQVRPTUlDX1NFUV9DU1QpOwotfQotI2lmZGVmIF9feDg2XzY0X18KLXN0YXRpYyBfX2lubGluZV9fIF9faW50NjQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fSW50ZXJsb2NrZWRJbmNyZW1lbnQ2NChfX2ludDY0IHZvbGF0aWxlICpfVmFsdWUpIHsKLSAgcmV0dXJuIF9fYXRvbWljX2FkZF9mZXRjaChfVmFsdWUsIDEsIF9fQVRPTUlDX1NFUV9DU1QpOwotfQotI2VuZGlmCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXAotfCogSW50ZXJsb2NrZWQgRGVjcmVtZW50Ci1cKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotc3RhdGljIF9faW5saW5lX18gc2hvcnQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fSW50ZXJsb2NrZWREZWNyZW1lbnQxNihzaG9ydCB2b2xhdGlsZSAqX1ZhbHVlKSB7Ci0gIHJldHVybiBfX2F0b21pY19zdWJfZmV0Y2goX1ZhbHVlLCAxLCBfX0FUT01JQ19TRVFfQ1NUKTsKLX0KLSNpZmRlZiBfX3g4Nl82NF9fCi1zdGF0aWMgX19pbmxpbmVfXyBfX2ludDY0IF9fREVGQVVMVF9GTl9BVFRSUwotX0ludGVybG9ja2VkRGVjcmVtZW50NjQoX19pbnQ2NCB2b2xhdGlsZSAqX1ZhbHVlKSB7Ci0gIHJldHVybiBfX2F0b21pY19zdWJfZmV0Y2goX1ZhbHVlLCAxLCBfX0FUT01JQ19TRVFfQ1NUKTsKLX0KLSNlbmRpZgotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlwKLXwqIEludGVybG9ja2VkIEFuZAotXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXN0YXRpYyBfX2lubGluZV9fIGNoYXIgX19ERUZBVUxUX0ZOX0FUVFJTCi1fSW50ZXJsb2NrZWRBbmQ4KGNoYXIgdm9sYXRpbGUgKl9WYWx1ZSwgY2hhciBfTWFzaykgewotICByZXR1cm4gX19hdG9taWNfYW5kX2ZldGNoKF9WYWx1ZSwgX01hc2ssIF9fQVRPTUlDX1NFUV9DU1QpOwotfQotc3RhdGljIF9faW5saW5lX18gc2hvcnQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fSW50ZXJsb2NrZWRBbmQxNihzaG9ydCB2b2xhdGlsZSAqX1ZhbHVlLCBzaG9ydCBfTWFzaykgewotICByZXR1cm4gX19hdG9taWNfYW5kX2ZldGNoKF9WYWx1ZSwgX01hc2ssIF9fQVRPTUlDX1NFUV9DU1QpOwotfQotc3RhdGljIF9faW5saW5lX18gbG9uZyBfX0RFRkFVTFRfRk5fQVRUUlMKLV9JbnRlcmxvY2tlZEFuZChsb25nIHZvbGF0aWxlICpfVmFsdWUsIGxvbmcgX01hc2spIHsKLSAgcmV0dXJuIF9fYXRvbWljX2FuZF9mZXRjaChfVmFsdWUsIF9NYXNrLCBfX0FUT01JQ19TRVFfQ1NUKTsKLX0KLSNpZmRlZiBfX3g4Nl82NF9fCi1zdGF0aWMgX19pbmxpbmVfXyBfX2ludDY0IF9fREVGQVVMVF9GTl9BVFRSUwotX0ludGVybG9ja2VkQW5kNjQoX19pbnQ2NCB2b2xhdGlsZSAqX1ZhbHVlLCBfX2ludDY0IF9NYXNrKSB7Ci0gIHJldHVybiBfX2F0b21pY19hbmRfZmV0Y2goX1ZhbHVlLCBfTWFzaywgX19BVE9NSUNfU0VRX0NTVCk7Ci19Ci0jZW5kaWYKLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcCi18KiBJbnRlcmxvY2tlZCBPcgotXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXN0YXRpYyBfX2lubGluZV9fIGNoYXIgX19ERUZBVUxUX0ZOX0FUVFJTCi1fSW50ZXJsb2NrZWRPcjgoY2hhciB2b2xhdGlsZSAqX1ZhbHVlLCBjaGFyIF9NYXNrKSB7Ci0gIHJldHVybiBfX2F0b21pY19vcl9mZXRjaChfVmFsdWUsIF9NYXNrLCBfX0FUT01JQ19TRVFfQ1NUKTsKLX0KLXN0YXRpYyBfX2lubGluZV9fIHNob3J0IF9fREVGQVVMVF9GTl9BVFRSUwotX0ludGVybG9ja2VkT3IxNihzaG9ydCB2b2xhdGlsZSAqX1ZhbHVlLCBzaG9ydCBfTWFzaykgewotICByZXR1cm4gX19hdG9taWNfb3JfZmV0Y2goX1ZhbHVlLCBfTWFzaywgX19BVE9NSUNfU0VRX0NTVCk7Ci19Ci1zdGF0aWMgX19pbmxpbmVfXyBsb25nIF9fREVGQVVMVF9GTl9BVFRSUwotX0ludGVybG9ja2VkT3IobG9uZyB2b2xhdGlsZSAqX1ZhbHVlLCBsb25nIF9NYXNrKSB7Ci0gIHJldHVybiBfX2F0b21pY19vcl9mZXRjaChfVmFsdWUsIF9NYXNrLCBfX0FUT01JQ19TRVFfQ1NUKTsKLX0KLSNpZmRlZiBfX3g4Nl82NF9fCi1zdGF0aWMgX19pbmxpbmVfXyBfX2ludDY0IF9fREVGQVVMVF9GTl9BVFRSUwotX0ludGVybG9ja2VkT3I2NChfX2ludDY0IHZvbGF0aWxlICpfVmFsdWUsIF9faW50NjQgX01hc2spIHsKLSAgcmV0dXJuIF9fYXRvbWljX29yX2ZldGNoKF9WYWx1ZSwgX01hc2ssIF9fQVRPTUlDX1NFUV9DU1QpOwotfQotI2VuZGlmCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXAotfCogSW50ZXJsb2NrZWQgWG9yCi1cKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotc3RhdGljIF9faW5saW5lX18gY2hhciBfX0RFRkFVTFRfRk5fQVRUUlMKLV9JbnRlcmxvY2tlZFhvcjgoY2hhciB2b2xhdGlsZSAqX1ZhbHVlLCBjaGFyIF9NYXNrKSB7Ci0gIHJldHVybiBfX2F0b21pY194b3JfZmV0Y2goX1ZhbHVlLCBfTWFzaywgX19BVE9NSUNfU0VRX0NTVCk7Ci19Ci1zdGF0aWMgX19pbmxpbmVfXyBzaG9ydCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9JbnRlcmxvY2tlZFhvcjE2KHNob3J0IHZvbGF0aWxlICpfVmFsdWUsIHNob3J0IF9NYXNrKSB7Ci0gIHJldHVybiBfX2F0b21pY194b3JfZmV0Y2goX1ZhbHVlLCBfTWFzaywgX19BVE9NSUNfU0VRX0NTVCk7Ci19Ci1zdGF0aWMgX19pbmxpbmVfXyBsb25nIF9fREVGQVVMVF9GTl9BVFRSUwotX0ludGVybG9ja2VkWG9yKGxvbmcgdm9sYXRpbGUgKl9WYWx1ZSwgbG9uZyBfTWFzaykgewotICByZXR1cm4gX19hdG9taWNfeG9yX2ZldGNoKF9WYWx1ZSwgX01hc2ssIF9fQVRPTUlDX1NFUV9DU1QpOwotfQotI2lmZGVmIF9feDg2XzY0X18KLXN0YXRpYyBfX2lubGluZV9fIF9faW50NjQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fSW50ZXJsb2NrZWRYb3I2NChfX2ludDY0IHZvbGF0aWxlICpfVmFsdWUsIF9faW50NjQgX01hc2spIHsKLSAgcmV0dXJuIF9fYXRvbWljX3hvcl9mZXRjaChfVmFsdWUsIF9NYXNrLCBfX0FUT01JQ19TRVFfQ1NUKTsKLX0KLSNlbmRpZgotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlwKLXwqIEludGVybG9ja2VkIEV4Y2hhbmdlCi1cKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotc3RhdGljIF9faW5saW5lX18gY2hhciBfX0RFRkFVTFRfRk5fQVRUUlMKLV9JbnRlcmxvY2tlZEV4Y2hhbmdlOChjaGFyIHZvbGF0aWxlICpfVGFyZ2V0LCBjaGFyIF9WYWx1ZSkgewotICBfX2F0b21pY19leGNoYW5nZShfVGFyZ2V0LCAmX1ZhbHVlLCAmX1ZhbHVlLCBfX0FUT01JQ19TRVFfQ1NUKTsKLSAgcmV0dXJuIF9WYWx1ZTsKLX0KLXN0YXRpYyBfX2lubGluZV9fIHNob3J0IF9fREVGQVVMVF9GTl9BVFRSUwotX0ludGVybG9ja2VkRXhjaGFuZ2UxNihzaG9ydCB2b2xhdGlsZSAqX1RhcmdldCwgc2hvcnQgX1ZhbHVlKSB7Ci0gIF9fYXRvbWljX2V4Y2hhbmdlKF9UYXJnZXQsICZfVmFsdWUsICZfVmFsdWUsIF9fQVRPTUlDX1NFUV9DU1QpOwotICByZXR1cm4gX1ZhbHVlOwotfQotI2lmZGVmIF9feDg2XzY0X18KLXN0YXRpYyBfX2lubGluZV9fIF9faW50NjQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fSW50ZXJsb2NrZWRFeGNoYW5nZTY0KF9faW50NjQgdm9sYXRpbGUgKl9UYXJnZXQsIF9faW50NjQgX1ZhbHVlKSB7Ci0gIF9fYXRvbWljX2V4Y2hhbmdlKF9UYXJnZXQsICZfVmFsdWUsICZfVmFsdWUsIF9fQVRPTUlDX1NFUV9DU1QpOwotICByZXR1cm4gX1ZhbHVlOwotfQotI2VuZGlmCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXAotfCogSW50ZXJsb2NrZWQgQ29tcGFyZSBFeGNoYW5nZQotXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXN0YXRpYyBfX2lubGluZV9fIGNoYXIgX19ERUZBVUxUX0ZOX0FUVFJTCi1fSW50ZXJsb2NrZWRDb21wYXJlRXhjaGFuZ2U4KGNoYXIgdm9sYXRpbGUgKl9EZXN0aW5hdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciBfRXhjaGFuZ2UsIGNoYXIgX0NvbXBhcmFuZCkgewotICBfX2F0b21pY19jb21wYXJlX2V4Y2hhbmdlKF9EZXN0aW5hdGlvbiwgJl9Db21wYXJhbmQsICZfRXhjaGFuZ2UsIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgX19BVE9NSUNfU0VRX0NTVCwgX19BVE9NSUNfU0VRX0NTVCk7Ci0gIHJldHVybiBfQ29tcGFyYW5kOwotfQotc3RhdGljIF9faW5saW5lX18gc2hvcnQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fSW50ZXJsb2NrZWRDb21wYXJlRXhjaGFuZ2UxNihzaG9ydCB2b2xhdGlsZSAqX0Rlc3RpbmF0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvcnQgX0V4Y2hhbmdlLCBzaG9ydCBfQ29tcGFyYW5kKSB7Ci0gIF9fYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2UoX0Rlc3RpbmF0aW9uLCAmX0NvbXBhcmFuZCwgJl9FeGNoYW5nZSwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0FUT01JQ19TRVFfQ1NULCBfX0FUT01JQ19TRVFfQ1NUKTsKLSAgcmV0dXJuIF9Db21wYXJhbmQ7Ci19Ci1zdGF0aWMgX19pbmxpbmVfXyBfX2ludDY0IF9fREVGQVVMVF9GTl9BVFRSUwotX0ludGVybG9ja2VkQ29tcGFyZUV4Y2hhbmdlNjQoX19pbnQ2NCB2b2xhdGlsZSAqX0Rlc3RpbmF0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19pbnQ2NCBfRXhjaGFuZ2UsIF9faW50NjQgX0NvbXBhcmFuZCkgewotICBfX2F0b21pY19jb21wYXJlX2V4Y2hhbmdlKF9EZXN0aW5hdGlvbiwgJl9Db21wYXJhbmQsICZfRXhjaGFuZ2UsIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgX19BVE9NSUNfU0VRX0NTVCwgX19BVE9NSUNfU0VRX0NTVCk7Ci0gIHJldHVybiBfQ29tcGFyYW5kOwotfQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlwKLXwqIEJhcnJpZXJzCi1cKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9fYXR0cmlidXRlX18oKF9fZGVwcmVjYXRlZF9fKCJ1c2Ugb3RoZXIgaW50cmluc2ljcyBvciBDKysxMSBhdG9taWNzIGluc3RlYWQiKSkpCi1fUmVhZFdyaXRlQmFycmllcih2b2lkKSB7Ci0gIF9fYXRvbWljX3NpZ25hbF9mZW5jZShfX0FUT01JQ19TRVFfQ1NUKTsKLX0KLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fX2F0dHJpYnV0ZV9fKChfX2RlcHJlY2F0ZWRfXygidXNlIG90aGVyIGludHJpbnNpY3Mgb3IgQysrMTEgYXRvbWljcyBpbnN0ZWFkIikpKQotX1JlYWRCYXJyaWVyKHZvaWQpIHsKLSAgX19hdG9taWNfc2lnbmFsX2ZlbmNlKF9fQVRPTUlDX1NFUV9DU1QpOwotfQotc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9fYXR0cmlidXRlX18oKF9fZGVwcmVjYXRlZF9fKCJ1c2Ugb3RoZXIgaW50cmluc2ljcyBvciBDKysxMSBhdG9taWNzIGluc3RlYWQiKSkpCi1fV3JpdGVCYXJyaWVyKHZvaWQpIHsKLSAgX19hdG9taWNfc2lnbmFsX2ZlbmNlKF9fQVRPTUlDX1NFUV9DU1QpOwotfQotI2lmZGVmIF9feDg2XzY0X18KLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fX2Zhc3RzdG9yZWZlbmNlKHZvaWQpIHsKLSAgX19hdG9taWNfdGhyZWFkX2ZlbmNlKF9fQVRPTUlDX1NFUV9DU1QpOwotfQotI2VuZGlmCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXAotfCogcmVhZGZzLCByZWFkZ3MKLXwqIChQb2ludGVycyBpbiBhZGRyZXNzIHNwYWNlICMyNTYgYW5kICMyNTcgYXJlIHJlbGF0aXZlIHRvIHRoZSBHUyBhbmQgRlMKLXwqIHNlZ21lbnQgcmVnaXN0ZXJzLCByZXNwZWN0aXZlbHkuKQotXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLSNkZWZpbmUgX19wdHJfdG9fYWRkcl9zcGFjZShfX2FkZHJfc3BhY2VfbmJyLCBfX3R5cGUsIF9fb2Zmc2V0KSAgICAgICAgICAgICAgXAotICAgICgodm9sYXRpbGUgX190eXBlIF9fYXR0cmlidXRlX18oKF9fYWRkcmVzc19zcGFjZV9fKF9fYWRkcl9zcGFjZV9uYnIpKSkqKSBcCi0gICAgKF9fb2Zmc2V0KSkKLQotI2lmZGVmIF9faTM4Nl9fCi1zdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBjaGFyIF9fREVGQVVMVF9GTl9BVFRSUwotX19yZWFkZnNieXRlKHVuc2lnbmVkIGxvbmcgX19vZmZzZXQpIHsKLSAgcmV0dXJuICpfX3B0cl90b19hZGRyX3NwYWNlKDI1NywgdW5zaWduZWQgY2hhciwgX19vZmZzZXQpOwotfQotc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgX19pbnQ2NCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9fcmVhZGZzcXdvcmQodW5zaWduZWQgbG9uZyBfX29mZnNldCkgewotICByZXR1cm4gKl9fcHRyX3RvX2FkZHJfc3BhY2UoMjU3LCB1bnNpZ25lZCBfX2ludDY0LCBfX29mZnNldCk7Ci19Ci1zdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBzaG9ydCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9fcmVhZGZzd29yZCh1bnNpZ25lZCBsb25nIF9fb2Zmc2V0KSB7Ci0gIHJldHVybiAqX19wdHJfdG9fYWRkcl9zcGFjZSgyNTcsIHVuc2lnbmVkIHNob3J0LCBfX29mZnNldCk7Ci19Ci0jZW5kaWYKLSNpZmRlZiBfX3g4Nl82NF9fCi1zdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBjaGFyIF9fREVGQVVMVF9GTl9BVFRSUwotX19yZWFkZ3NieXRlKHVuc2lnbmVkIGxvbmcgX19vZmZzZXQpIHsKLSAgcmV0dXJuICpfX3B0cl90b19hZGRyX3NwYWNlKDI1NiwgdW5zaWduZWQgY2hhciwgX19vZmZzZXQpOwotfQotc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgbG9uZyBfX0RFRkFVTFRfRk5fQVRUUlMKLV9fcmVhZGdzZHdvcmQodW5zaWduZWQgbG9uZyBfX29mZnNldCkgewotICByZXR1cm4gKl9fcHRyX3RvX2FkZHJfc3BhY2UoMjU2LCB1bnNpZ25lZCBsb25nLCBfX29mZnNldCk7Ci19Ci1zdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBfX2ludDY0IF9fREVGQVVMVF9GTl9BVFRSUwotX19yZWFkZ3Nxd29yZCh1bnNpZ25lZCBsb25nIF9fb2Zmc2V0KSB7Ci0gIHJldHVybiAqX19wdHJfdG9fYWRkcl9zcGFjZSgyNTYsIHVuc2lnbmVkIF9faW50NjQsIF9fb2Zmc2V0KTsKLX0KLXN0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIHNob3J0IF9fREVGQVVMVF9GTl9BVFRSUwotX19yZWFkZ3N3b3JkKHVuc2lnbmVkIGxvbmcgX19vZmZzZXQpIHsKLSAgcmV0dXJuICpfX3B0cl90b19hZGRyX3NwYWNlKDI1NiwgdW5zaWduZWQgc2hvcnQsIF9fb2Zmc2V0KTsKLX0KLSNlbmRpZgotI3VuZGVmIF9fcHRyX3RvX2FkZHJfc3BhY2UKLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcCi18KiBtb3ZzLCBzdG9zCi1cKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotI2lmIGRlZmluZWQoX19pMzg2X18pIHx8IGRlZmluZWQoX194ODZfNjRfXykKLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fX21vdnNiKHVuc2lnbmVkIGNoYXIgKl9fZHN0LCB1bnNpZ25lZCBjaGFyIGNvbnN0ICpfX3NyYywgc2l6ZV90IF9fbikgewotICBfX2FzbV9fKCJyZXAgbW92c2IiIDogOiAiRCIoX19kc3QpLCAiUyIoX19zcmMpLCAiYyIoX19uKQotICAgICAgICAgICAgICAgICAgICAgICAgOiAiJWVkaSIsICIlZXNpIiwgIiVlY3giKTsKLX0KLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fX21vdnNkKHVuc2lnbmVkIGxvbmcgKl9fZHN0LCB1bnNpZ25lZCBsb25nIGNvbnN0ICpfX3NyYywgc2l6ZV90IF9fbikgewotICBfX2FzbV9fKCJyZXAgbW92c2wiIDogOiAiRCIoX19kc3QpLCAiUyIoX19zcmMpLCAiYyIoX19uKQotICAgICAgICAgICAgICAgICAgICAgICAgOiAiJWVkaSIsICIlZXNpIiwgIiVlY3giKTsKLX0KLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fX21vdnN3KHVuc2lnbmVkIHNob3J0ICpfX2RzdCwgdW5zaWduZWQgc2hvcnQgY29uc3QgKl9fc3JjLCBzaXplX3QgX19uKSB7Ci0gIF9fYXNtX18oInJlcCBtb3ZzdyIgOiA6ICJEIihfX2RzdCksICJTIihfX3NyYyksICJjIihfX24pCi0gICAgICAgICAgICAgICAgICAgICAgICA6ICIlZWRpIiwgIiVlc2kiLCAiJWVjeCIpOwotfQotc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9fc3Rvc2IodW5zaWduZWQgY2hhciAqX19kc3QsIHVuc2lnbmVkIGNoYXIgX194LCBzaXplX3QgX19uKSB7Ci0gIF9fYXNtX18oInJlcCBzdG9zYiIgOiA6ICJEIihfX2RzdCksICJhIihfX3gpLCAiYyIoX19uKQotICAgICAgICAgICAgICAgICAgICAgICAgOiAiJWVkaSIsICIlZWN4Iik7Ci19Ci1zdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUwotX19zdG9zZCh1bnNpZ25lZCBsb25nICpfX2RzdCwgdW5zaWduZWQgbG9uZyBfX3gsIHNpemVfdCBfX24pIHsKLSAgX19hc21fXygicmVwIHN0b3NsIiA6IDogIkQiKF9fZHN0KSwgImEiKF9feCksICJjIihfX24pCi0gICAgICAgICAgICAgICAgICAgICAgICA6ICIlZWRpIiwgIiVlY3giKTsKLX0KLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fX3N0b3N3KHVuc2lnbmVkIHNob3J0ICpfX2RzdCwgdW5zaWduZWQgc2hvcnQgX194LCBzaXplX3QgX19uKSB7Ci0gIF9fYXNtX18oInJlcCBzdG9zdyIgOiA6ICJEIihfX2RzdCksICJhIihfX3gpLCAiYyIoX19uKQotICAgICAgICAgICAgICAgICAgICAgICAgOiAiJWVkaSIsICIlZWN4Iik7Ci19Ci0jZW5kaWYKLSNpZmRlZiBfX3g4Nl82NF9fCi1zdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUwotX19tb3ZzcSh1bnNpZ25lZCBsb25nIGxvbmcgKl9fZHN0LCB1bnNpZ25lZCBsb25nIGxvbmcgY29uc3QgKl9fc3JjLCBzaXplX3QgX19uKSB7Ci0gIF9fYXNtX18oInJlcCBtb3ZzcSIgOiA6ICJEIihfX2RzdCksICJTIihfX3NyYyksICJjIihfX24pCi0gICAgICAgICAgICAgICAgICAgICAgICA6ICIlZWRpIiwgIiVlc2kiLCAiJWVjeCIpOwotfQotc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9fc3Rvc3EodW5zaWduZWQgX19pbnQ2NCAqX19kc3QsIHVuc2lnbmVkIF9faW50NjQgX194LCBzaXplX3QgX19uKSB7Ci0gIF9fYXNtX18oInJlcCBzdG9zcSIgOiA6ICJEIihfX2RzdCksICJhIihfX3gpLCAiYyIoX19uKQotICAgICAgICAgICAgICAgICAgICAgICAgOiAiJWVkaSIsICIlZWN4Iik7Ci19Ci0jZW5kaWYKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlwKLXwqIE1pc2MKLVwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi1zdGF0aWMgX19pbmxpbmVfXyB2b2lkICogX19ERUZBVUxUX0ZOX0FUVFJTCi1fQWRkcmVzc09mUmV0dXJuQWRkcmVzcyh2b2lkKSB7Ci0gIHJldHVybiAodm9pZCopKChjaGFyKilfX2J1aWx0aW5fZnJhbWVfYWRkcmVzcygwKSArIHNpemVvZih2b2lkKikpOwotfQotc3RhdGljIF9faW5saW5lX18gdm9pZCAqIF9fREVGQVVMVF9GTl9BVFRSUwotX1JldHVybkFkZHJlc3Modm9pZCkgewotICByZXR1cm4gX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApOwotfQotI2lmIGRlZmluZWQoX19pMzg2X18pIHx8IGRlZmluZWQoX194ODZfNjRfXykKLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fX2NwdWlkKGludCBfX2luZm9bNF0sIGludCBfX2xldmVsKSB7Ci0gIF9fYXNtX18gKCJjcHVpZCIgOiAiPWEiKF9faW5mb1swXSksICI9YiIgKF9faW5mb1sxXSksICI9YyIoX19pbmZvWzJdKSwgIj1kIihfX2luZm9bM10pCi0gICAgICAgICAgICAgICAgICAgOiAiYSIoX19sZXZlbCkpOwotfQotc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9fY3B1aWRleChpbnQgX19pbmZvWzRdLCBpbnQgX19sZXZlbCwgaW50IF9fZWN4KSB7Ci0gIF9fYXNtX18gKCJjcHVpZCIgOiAiPWEiKF9faW5mb1swXSksICI9YiIgKF9faW5mb1sxXSksICI9YyIoX19pbmZvWzJdKSwgIj1kIihfX2luZm9bM10pCi0gICAgICAgICAgICAgICAgICAgOiAiYSIoX19sZXZlbCksICJjIihfX2VjeCkpOwotfQotc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgX19pbnQ2NCBfX2NkZWNsIF9fREVGQVVMVF9GTl9BVFRSUwotX3hnZXRidih1bnNpZ25lZCBpbnQgX194Y3Jfbm8pIHsKLSAgdW5zaWduZWQgaW50IF9fZWF4LCBfX2VkeDsKLSAgX19hc21fXyAoInhnZXRidiIgOiAiPWEiIChfX2VheCksICI9ZCIgKF9fZWR4KSA6ICJjIiAoX194Y3Jfbm8pKTsKLSAgcmV0dXJuICgodW5zaWduZWQgX19pbnQ2NClfX2VkeCA8PCAzMikgfCBfX2VheDsKLX0KLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fX2hhbHQodm9pZCkgewotICBfX2FzbV9fIHZvbGF0aWxlICgiaGx0Iik7Ci19Ci0jZW5kaWYKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlwKLXwqIFByaXZpbGVnZWQgaW50cmluc2ljcwotXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLSNpZiBkZWZpbmVkKF9faTM4Nl9fKSB8fCBkZWZpbmVkKF9feDg2XzY0X18pCi1zdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBfX2ludDY0IF9fREVGQVVMVF9GTl9BVFRSUwotX19yZWFkbXNyKHVuc2lnbmVkIGxvbmcgX19yZWdpc3RlcikgewotICAvLyBMb2FkcyB0aGUgY29udGVudHMgb2YgYSA2NC1iaXQgbW9kZWwgc3BlY2lmaWMgcmVnaXN0ZXIgKE1TUikgc3BlY2lmaWVkIGluCi0gIC8vIHRoZSBFQ1ggcmVnaXN0ZXIgaW50byByZWdpc3RlcnMgRURYOkVBWC4gVGhlIEVEWCByZWdpc3RlciBpcyBsb2FkZWQgd2l0aAotICAvLyB0aGUgaGlnaC1vcmRlciAzMiBiaXRzIG9mIHRoZSBNU1IgYW5kIHRoZSBFQVggcmVnaXN0ZXIgaXMgbG9hZGVkIHdpdGggdGhlCi0gIC8vIGxvdy1vcmRlciAzMiBiaXRzLiBJZiBsZXNzIHRoYW4gNjQgYml0cyBhcmUgaW1wbGVtZW50ZWQgaW4gdGhlIE1TUiBiZWluZwotICAvLyByZWFkLCB0aGUgdmFsdWVzIHJldHVybmVkIHRvIEVEWDpFQVggaW4gdW5pbXBsZW1lbnRlZCBiaXQgbG9jYXRpb25zIGFyZQotICAvLyB1bmRlZmluZWQuCi0gIHVuc2lnbmVkIGxvbmcgX19lZHg7Ci0gIHVuc2lnbmVkIGxvbmcgX19lYXg7Ci0gIF9fYXNtX18gKCJyZG1zciIgOiAiPWQiKF9fZWR4KSwgIj1hIihfX2VheCkgOiAiYyIoX19yZWdpc3RlcikpOwotICByZXR1cm4gKCgodW5zaWduZWQgX19pbnQ2NClfX2VkeCkgPDwgMzIpIHwgKHVuc2lnbmVkIF9faW50NjQpX19lYXg7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcgX19ERUZBVUxUX0ZOX0FUVFJTCi1fX3JlYWRjcjModm9pZCkgewotICB1bnNpZ25lZCBsb25nIF9fY3IzX3ZhbDsKLSAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJtb3YgJSVjcjMsICUwIiA6ICI9cSIoX19jcjNfdmFsKSA6IDogIm1lbW9yeSIpOwotICByZXR1cm4gX19jcjNfdmFsOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUwotX193cml0ZWNyMyh1bnNpZ25lZCBpbnQgX19jcjNfdmFsKSB7Ci0gIF9fYXNtX18gKCJtb3YgJTAsICUlY3IzIiA6IDogInEiKF9fY3IzX3ZhbCkgOiAibWVtb3J5Iik7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fY3BsdXNwbHVzCi19Ci0jZW5kaWYKLQotI3VuZGVmIF9fREVGQVVMVF9GTl9BVFRSUwotCi0jZW5kaWYgLyogX19JTlRSSU5fSCAqLwotI2VuZGlmIC8qIF9NU0NfVkVSICovCmRpZmYgLS1naXQgYS9jbGFuZy0yNTc3MTEzL2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL19fY2xhbmdfY3VkYV9ydW50aW1lX3dyYXBwZXIuaCBiL2NsYW5nLTI1NzcxMTMvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvX19jbGFuZ19jdWRhX3J1bnRpbWVfd3JhcHBlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZTVmMDMzLi4wMDAwMDAwCi0tLSBhL2NsYW5nLTI1NzcxMTMvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvX19jbGFuZ19jdWRhX3J1bnRpbWVfd3JhcHBlci5oCisrKyAvZGV2L251bGwKQEAgLTEsMjE2ICswLDAgQEAKLS8qPT09LS0tLSBfX2NsYW5nX2N1ZGFfcnVudGltZV93cmFwcGVyLmggLSBDVURBIHJ1bnRpbWUgc3VwcG9ydCAtLS0tLS0tLS0tLS0tPT09Ci0gKgotICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQotICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKLSAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKLSAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKLSAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcwotICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKLSAqCi0gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgotICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCi0gKgotICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKLSAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAotICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCi0gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAotICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgotICogVEhFIFNPRlRXQVJFLgotICoKLSAqPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KLSAqLwotCi0vKgotICogV0FSTklORzogVGhpcyBoZWFkZXIgaXMgaW50ZW5kZWQgdG8gYmUgZGlyZWN0bHkgLWluY2x1ZGUnZCBieQotICogdGhlIGNvbXBpbGVyIGFuZCBpcyBub3Qgc3VwcG9zZWQgdG8gYmUgaW5jbHVkZWQgYnkgdXNlcnMuCi0gKgotICogQ1VEQSBoZWFkZXJzIGFyZSBpbXBsZW1lbnRlZCBpbiBhIHdheSB0aGF0IGN1cnJlbnRseSBtYWtlcyBpdAotICogaW1wb3NzaWJsZSBmb3IgdXNlciBjb2RlIHRvICNpbmNsdWRlIGRpcmVjdGx5IHdoZW4gY29tcGlsaW5nIHdpdGgKLSAqIENsYW5nLiBUaGV5IHByZXNlbnQgZGlmZmVyZW50IHZpZXcgb2YgQ1VEQS1zdXBwbGllZCBmdW5jdGlvbnMKLSAqIGRlcGVuZGluZyBvbiB3aGVyZSBpbiBOVkNDJ3MgY29tcGlsYXRpb24gcGlwZWxpbmUgdGhlIGhlYWRlcnMgYXJlCi0gKiBpbmNsdWRlZC4gTmVpdGhlciBvZiB0aGVzZSBtb2RlcyBwcm92aWRlcyBmdW5jdGlvbiBkZWZpbml0aW9ucyB3aXRoCi0gKiBjb3JyZWN0IGF0dHJpYnV0ZXMsIHNvIHdlIHVzZSBwcmVwcm9jZXNzb3IgdG8gZm9yY2UgdGhlIGhlYWRlcnMKLSAqIGludG8gYSBmb3JtIHRoYXQgQ2xhbmcgY2FuIHVzZS4KLSAqCi0gKiBTaW1pbGFybHkgdG8gTlZDQyB3aGljaCAtaW5jbHVkZSdzIGN1ZGFfcnVudGltZS5oLCBDbGFuZyAtaW5jbHVkZSdzCi0gKiB0aGlzIGZpbGUgZHVyaW5nIGV2ZXJ5IENVREEgY29tcGlsYXRpb24uCi0gKi8KLQotI2lmbmRlZiBfX0NMQU5HX0NVREFfUlVOVElNRV9XUkFQUEVSX0hfXwotI2RlZmluZSBfX0NMQU5HX0NVREFfUlVOVElNRV9XUkFQUEVSX0hfXwotCi0jaWYgZGVmaW5lZChfX0NVREFfXykgJiYgZGVmaW5lZChfX2NsYW5nX18pCi0KLS8vIEluY2x1ZGUgc29tZSBzdGFuZGFyZCBoZWFkZXJzIHRvIGF2b2lkIENVREEgaGVhZGVycyBpbmNsdWRpbmcgdGhlbQotLy8gd2hpbGUgc29tZSByZXF1aXJlZCBtYWNyb3MgKGxpa2UgX19USFJPVykgYXJlIGluIGEgd2VpcmQgc3RhdGUuCi0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8Y21hdGg+Ci0KLS8vIFByZXNlcnZlIGNvbW1vbiBtYWNyb3MgdGhhdCB3aWxsIGJlIGNoYW5nZWQgYmVsb3cgYnkgdXMgb3IgYnkgQ1VEQQotLy8gaGVhZGVycy4KLSNwcmFnbWEgcHVzaF9tYWNybygiX19USFJPVyIpCi0jcHJhZ21hIHB1c2hfbWFjcm8oIl9fQ1VEQV9BUkNIX18iKQotCi0vLyBXQVJOSU5HOiBQcmVwcm9jZXNzb3IgaGFja3MgYmVsb3cgYXJlIGJhc2VkIG9uIHNwZWNpZmljIGRldGFpbHMgb2YKLS8vIENVREEtNy54IGhlYWRlcnMgYW5kIGFyZSBub3QgZXhwZWN0ZWQgdG8gd29yayB3aXRoIGFueSBvdGhlcgotLy8gdmVyc2lvbiBvZiBDVURBIGhlYWRlcnMuCi0jaW5jbHVkZSAiY3VkYS5oIgotI2lmICFkZWZpbmVkKENVREFfVkVSU0lPTikKLSNlcnJvciAiY3VkYS5oIGRpZCBub3QgZGVmaW5lIENVREFfVkVSU0lPTiIKLSNlbGlmIENVREFfVkVSU0lPTiA8IDcwMDAgfHwgQ1VEQV9WRVJTSU9OID4gNzA1MAotI2Vycm9yICJVbnN1cHBvcnRlZCBDVURBIHZlcnNpb24hIgotI2VuZGlmCi0KLS8vIE1ha2UgbGFyZ2VzdCBzdWJzZXQgb2YgZGV2aWNlIGZ1bmN0aW9ucyBhdmFpbGFibGUgZHVyaW5nIGhvc3QKLS8vIGNvbXBpbGF0aW9uIC0tIFNNXzM1IGZvciB0aGUgdGltZSBiZWluZy4KLSNpZm5kZWYgX19DVURBX0FSQ0hfXwotI2RlZmluZSBfX0NVREFfQVJDSF9fIDM1MAotI2VuZGlmCi0KLSNpbmNsdWRlICJjdWRhX2J1aWx0aW5fdmFycy5oIgotCi0vLyBObyBuZWVkIGZvciBkZXZpY2VfbGF1bmNoX3BhcmFtZXRlcnMuaCBhcyBjdWRhX2J1aWx0aW5fdmFycy5oIGFib3ZlCi0vLyBoYXMgdGFrZW4gY2FyZSBvZiBidWlsdGluIHZhcmlhYmxlcyBkZWNsYXJlZCBpbiB0aGUgZmlsZS4KLSNkZWZpbmUgX19ERVZJQ0VfTEFVTkNIX1BBUkFNRVRFUlNfSF9fCi0KLS8vIHttYXRoLGRldmljZX1fZnVuY3Rpb25zLmggb25seSBoYXZlIGRlY2xhcmF0aW9ucyBvZiB0aGUKLS8vIGZ1bmN0aW9ucy4gV2UgZG9uJ3QgbmVlZCB0aGVtIGFzIHdlJ3JlIGdvaW5nIHRvIHB1bGwgaW4gdGhlaXIKLS8vIGRlZmluaXRpb25zIGZyb20gLmhwcCBmaWxlcy4KLSNkZWZpbmUgX19ERVZJQ0VfRlVOQ1RJT05TX0hfXwotI2RlZmluZSBfX01BVEhfRlVOQ1RJT05TX0hfXwotCi0jdW5kZWYgX19DVURBQ0NfXwotI2RlZmluZSBfX0NVREFCRV9fCi0vLyBEaXNhYmxlcyBkZWZpbml0aW9ucyBvZiBkZXZpY2Utc2lkZSBydW50aW1lIHN1cHBvcnQgc3R1YnMgaW4KLS8vIGN1ZGFfZGV2aWNlX3J1bnRpbWVfYXBpLmgKLSNkZWZpbmUgX19DVURBREVWUlRfSU5URVJOQUxfXwotI2luY2x1ZGUgImhvc3RfY29uZmlnLmgiCi0jaW5jbHVkZSAiaG9zdF9kZWZpbmVzLmgiCi0jaW5jbHVkZSAiZHJpdmVyX3R5cGVzLmgiCi0jaW5jbHVkZSAiY29tbW9uX2Z1bmN0aW9ucy5oIgotI3VuZGVmIF9fQ1VEQURFVlJUX0lOVEVSTkFMX18KLQotI3VuZGVmIF9fQ1VEQUJFX18KLSNkZWZpbmUgX19DVURBQ0NfXwotI2luY2x1ZGUgImN1ZGFfcnVudGltZS5oIgotCi0jdW5kZWYgX19DVURBQ0NfXwotI2RlZmluZSBfX0NVREFCRV9fCi0KLS8vIENVREEgaGVhZGVycyB1c2UgX19udnZtX21lbWNweSBhbmQgX19udnZtX21lbXNldCB3aGljaCBDbGFuZyBkb2VzCi0vLyBub3QgaGF2ZSBhdCB0aGUgbW9tZW50LiBFbXVsYXRlIHRoZW0gd2l0aCBhIGJ1aWx0aW4gbWVtY3B5L21lbXNldC4KLSNkZWZpbmUgX19udnZtX21lbWNweShzLGQsbixhKSBfX2J1aWx0aW5fbWVtY3B5KHMsZCxuKQotI2RlZmluZSBfX252dm1fbWVtc2V0KGQsYyxuLGEpIF9fYnVpbHRpbl9tZW1zZXQoZCxjLG4pCi0KLSNpbmNsdWRlICJjcnQvaG9zdF9ydW50aW1lLmgiCi0jaW5jbHVkZSAiY3J0L2RldmljZV9ydW50aW1lLmgiCi0vLyBkZXZpY2VfcnVudGltZS5oIGRlZmluZXMgX19jeGFfKiBtYWNyb3MgdGhhdCB3aWxsIGNvbmZsaWN0IHdpdGgKLS8vIGN4eGFiaS5oLgotLy8gRklYTUU6IHJlZGVmaW5lIHRoZXNlIGFzIF9fZGV2aWNlX18gZnVuY3Rpb25zLgotI3VuZGVmIF9fY3hhX3ZlY19jdG9yCi0jdW5kZWYgX19jeGFfdmVjX2NjdG9yCi0jdW5kZWYgX19jeGFfdmVjX2R0b3IKLSN1bmRlZiBfX2N4YV92ZWNfbmV3MgotI3VuZGVmIF9fY3hhX3ZlY19uZXczCi0jdW5kZWYgX19jeGFfdmVjX2RlbGV0ZTIKLSN1bmRlZiBfX2N4YV92ZWNfZGVsZXRlCi0jdW5kZWYgX19jeGFfdmVjX2RlbGV0ZTMKLSN1bmRlZiBfX2N4YV9wdXJlX3ZpcnR1YWwKLQotLy8gV2UgbmVlZCBkZWNscyBmb3IgZnVuY3Rpb25zIGluIENVREEncyBsaWJkZXZpY2Ugd2l0aCBfX2RldmljZV9fCi0vLyBhdHRyaWJ1dGUgb25seS4gQWxhcyB0aGV5IGNvbWUgZWl0aGVyIGFzIF9faG9zdF9fIF9fZGV2aWNlX18gb3IKLS8vIHdpdGggbm8gYXR0cmlidXRlcyBhdCBhbGwuIFRvIHdvcmsgYXJvdW5kIHRoYXQsIGRlZmluZSBfX0NVREFfUlRDX18KLS8vIHdoaWNoIHByb2R1Y2VzIEhEIHZhcmlhbnQgYW5kIHVuZGVmIF9faG9zdF9fIHdoaWNoIGdpdmVzIHVzIGRlc2lkZWQKLS8vIGRlY2xzIHdpdGggX19kZXZpY2VfXyBhdHRyaWJ1dGUuCi0jcHJhZ21hIHB1c2hfbWFjcm8oIl9faG9zdF9fIikKLSNkZWZpbmUgX19ob3N0X18KLSNkZWZpbmUgX19DVURBQ0NfUlRDX18KLSNpbmNsdWRlICJkZXZpY2VfZnVuY3Rpb25zX2RlY2xzLmgiCi0jdW5kZWYgX19DVURBQ0NfUlRDX18KLQotLy8gVGVtcG9yYXJpbHkgcG9pc29uIF9faG9zdF9fIG1hY3JvIHRvIGVuc3VyZSBpdCdzIG5vdCB1c2VkIGJ5IGFueSBvZgotLy8gdGhlIGhlYWRlcnMgd2UncmUgYWJvdXQgdG8gaW5jbHVkZS4KLSNkZWZpbmUgX19ob3N0X18gVU5FWFBFQ1RFRF9IT1NUX0FUVFJJQlVURQotCi0vLyBkZXZpY2VfZnVuY3Rpb25zLmhwcCBhbmQgbWF0aF9mdW5jdGlvbnMqLmhwcCB1c2UgJ3N0YXRpYwotLy8gX19mb3JjZWlubGluZV9fJyAod2l0aCBubyBfX2RldmljZV9fKSBmb3IgZGVmaW5pdGlvbnMgb2YgZGV2aWNlCi0vLyBmdW5jdGlvbnMuIFRlbXBvcmFyaWx5IHJlZGVmaW5lIF9fZm9yY2VpbmxpbmVfXyB0byBpbmNsdWRlCi0vLyBfX2RldmljZV9fLgotI3ByYWdtYSBwdXNoX21hY3JvKCJfX2ZvcmNlaW5saW5lX18iKQotI2RlZmluZSBfX2ZvcmNlaW5saW5lX18gX19kZXZpY2VfXyBfX2lubGluZV9fIF9fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKQotI2luY2x1ZGUgImRldmljZV9mdW5jdGlvbnMuaHBwIgotI2luY2x1ZGUgIm1hdGhfZnVuY3Rpb25zLmhwcCIKLSNpbmNsdWRlICJtYXRoX2Z1bmN0aW9uc19kYmxfcHR4My5ocHAiCi0jcHJhZ21hIHBvcF9tYWNybygiX19mb3JjZWlubGluZV9fIikKLQotLy8gUHVsbCBpbiBob3N0LW9ubHkgZnVuY3Rpb25zIHRoYXQgYXJlIG9ubHkgYXZhaWxhYmxlIHdoZW4gbmVpdGhlcgotLy8gX19DVURBQ0NfXyBub3IgX19DVURBQkVfXyBhcmUgZGVmaW5lZC4KLSN1bmRlZiBfX01BVEhfRlVOQ1RJT05TX0hQUF9fCi0jdW5kZWYgX19DVURBQkVfXwotI2luY2x1ZGUgIm1hdGhfZnVuY3Rpb25zLmhwcCIKLS8vIEFsYXMsIGFkZGl0aW9uYWwgb3ZlcmxvYWRzIGZvciB0aGVzZSBmdW5jdGlvbnMgYXJlIGhhcmQgdG8gZ2V0IHRvLgotLy8gQ29uc2lkZXJpbmcgdGhhdCB3ZSBvbmx5IG5lZWQgdGhlc2Ugb3ZlcmxvYWRzIGZvciBhIGZldyBmdW5jdGlvbnMsCi0vLyB3ZSBjYW4gcHJvdmlkZSB0aGVtIGhlcmUuCi1zdGF0aWMgaW5saW5lIGZsb2F0IHJzcXJ0KGZsb2F0IGEpIHsgcmV0dXJuIHJzcXJ0ZihhKTsgfQotc3RhdGljIGlubGluZSBmbG9hdCByY2JydChmbG9hdCBhKSB7IHJldHVybiByY2JydGYoYSk7IH0KLXN0YXRpYyBpbmxpbmUgZmxvYXQgc2lucGkoZmxvYXQgYSkgeyByZXR1cm4gc2lucGlmKGEpOyB9Ci1zdGF0aWMgaW5saW5lIGZsb2F0IGNvc3BpKGZsb2F0IGEpIHsgcmV0dXJuIGNvc3BpZihhKTsgfQotc3RhdGljIGlubGluZSB2b2lkIHNpbmNvc3BpKGZsb2F0IGEsIGZsb2F0ICpiLCBmbG9hdCAqYykgewotICByZXR1cm4gc2luY29zcGkoYSwgYiwgYyk7Ci19Ci1zdGF0aWMgaW5saW5lIGZsb2F0IGVyZmNpbnYoZmxvYXQgYSkgeyByZXR1cm4gZXJmY2ludmYoYSk7IH0KLXN0YXRpYyBpbmxpbmUgZmxvYXQgbm9ybWNkZmludihmbG9hdCBhKSB7IHJldHVybiBub3JtY2RmaW52ZihhKTsgfQotc3RhdGljIGlubGluZSBmbG9hdCBub3JtY2RmKGZsb2F0IGEpIHsgcmV0dXJuIG5vcm1jZGZmKGEpOyB9Ci1zdGF0aWMgaW5saW5lIGZsb2F0IGVyZmN4KGZsb2F0IGEpIHsgcmV0dXJuIGVyZmN4ZihhKTsgfQotCi0vLyBGb3Igc29tZSByZWFzb24gc2luZ2xlLWFyZ3VtZW50IHZhcmlhbnQgaXMgbm90IGFsd2F5cyBkZWNsYXJlZCBieQotLy8gQ1VEQSBoZWFkZXJzLiBBbGFzLCBkZXZpY2VfZnVuY3Rpb25zLmhwcCBpbmNsdWRlZCBiZWxvdyBuZWVkcyBpdC4KLXN0YXRpYyBpbmxpbmUgX19kZXZpY2VfXyB2b2lkIF9fYnJrcHQoaW50IGMpIHsgX19icmtwdCgpOyB9Ci0KLS8vIE5vdyBpbmNsdWRlICouaHBwIHdpdGggZGVmaW5pdGlvbnMgb2YgdmFyaW91cyBHUFUgZnVuY3Rpb25zLiAgQWxhcywKLS8vIGEgbG90IG9mIHRoaW5zIGdldCBkZWNsYXJlZC9kZWZpbmVkIHdpdGggX19ob3N0X18gYXR0cmlidXRlIHdoaWNoCi0vLyB3ZSBkb24ndCB3YW50IGFuZCB3ZSBoYXZlIHRvIGRlZmluZSBpdCBvdXQuIFdlIGFsc28gaGF2ZSB0byBpbmNsdWRlCi0vLyB7ZGV2aWNlLG1hdGh9X2Z1bmN0aW9ucy5ocHAgYWdhaW4gaW4gb3JkZXIgdG8gZXh0cmFjdCB0aGUgb3RoZXIKLS8vIGJyYW5jaCBvZiAjaWYvZWxzZSBpbnNpZGUuCi0KLSNkZWZpbmUgX19ob3N0X18KLSN1bmRlZiBfX0NVREFCRV9fCi0jZGVmaW5lIF9fQ1VEQUNDX18KLSN1bmRlZiBfX0RFVklDRV9GVU5DVElPTlNfSFBQX18KLSNpbmNsdWRlICJkZXZpY2VfZnVuY3Rpb25zLmhwcCIKLSNpbmNsdWRlICJkZXZpY2VfYXRvbWljX2Z1bmN0aW9ucy5ocHAiCi0jaW5jbHVkZSAic21fMjBfYXRvbWljX2Z1bmN0aW9ucy5ocHAiCi0jaW5jbHVkZSAic21fMzJfYXRvbWljX2Z1bmN0aW9ucy5ocHAiCi0jaW5jbHVkZSAic21fMjBfaW50cmluc2ljcy5ocHAiCi0vLyBzbV8zMF9pbnRyaW5zaWNzLmggaGFzIGRlY2xhcmF0aW9ucyB0aGF0IHVzZSBkZWZhdWx0IGFyZ3VtZW50LCBzbwotLy8gd2UgaGF2ZSB0byBpbmNsdWRlIGl0IGFuZCBpdCB3aWxsIGluIHR1cm4gaW5jbHVkZSAuaHBwCi0jaW5jbHVkZSAic21fMzBfaW50cmluc2ljcy5oIgotI2luY2x1ZGUgInNtXzMyX2ludHJpbnNpY3MuaHBwIgotI3VuZGVmIF9fTUFUSF9GVU5DVElPTlNfSFBQX18KLSNpbmNsdWRlICJtYXRoX2Z1bmN0aW9ucy5ocHAiCi0jcHJhZ21hIHBvcF9tYWNybygiX19ob3N0X18iKQotCi0jaW5jbHVkZSAidGV4dHVyZV9pbmRpcmVjdF9mdW5jdGlvbnMuaCIKLQotLy8gUmVzdG9yZSBzdGF0ZSBvZiBfX0NVREFfQVJDSF9fIGFuZCBfX1RIUk9XIHdlIGhhZCBvbiBlbnRyeS4KLSNwcmFnbWEgcG9wX21hY3JvKCJfX0NVREFfQVJDSF9fIikKLSNwcmFnbWEgcG9wX21hY3JvKCJfX1RIUk9XIikKLQotLy8gU2V0IHVwIGNvbXBpbGVyIG1hY3JvcyBleHBlY3RlZCB0byBiZSBzZWVuIGR1cmluZyBjb21waWxhdGlvbi4KLSN1bmRlZiBfX0NVREFCRV9fCi0jZGVmaW5lIF9fQ1VEQUNDX18KLSNkZWZpbmUgX19OVkNDX18KLQotI2lmIGRlZmluZWQoX19DVURBX0FSQ0hfXykKLS8vIFdlIG5lZWQgdG8gZW1pdCBJUiBkZWNsYXJhdGlvbiBmb3Igbm9uLWV4aXN0aW5nIF9fbnZ2bV9yZWZsZWN0KCkgdG8KLS8vIGxldCBiYWNrZW5kIGtub3cgdGhhdCBpdCBzaG91bGQgYmUgdHJlYXRlZCBhcyBjb25zdCBub3Rocm93Ci0vLyBmdW5jdGlvbiB3aGljaCBpcyB3aGF0IE5WVk1SZWZsZWN0IHBhc3MgZXhwZWN0cyB0byBzZWUuCi1leHRlcm4gIkMiIF9fZGV2aWNlX18gX19hdHRyaWJ1dGVfXygoY29uc3QpKSBpbnQgX19udnZtX3JlZmxlY3QoY29uc3Qgdm9pZCAqKTsKLXN0YXRpYyBfX2RldmljZV9fIF9fYXR0cmlidXRlX18oKHVzZWQpKSBpbnQgX19udnZtX3JlZmxlY3RfYW5jaG9yKCkgewotICByZXR1cm4gX19udnZtX3JlZmxlY3QoIk5PTkUiKTsKLX0KLSNlbmRpZgotCi0jZW5kaWYgLy8gX19DVURBX18KLSNlbmRpZiAvLyBfX0NMQU5HX0NVREFfUlVOVElNRV9XUkFQUEVSX0hfXwpkaWZmIC0tZ2l0IGEvY2xhbmctMjU3NzExMy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9fX3N0ZGRlZl9tYXhfYWxpZ25fdC5oIGIvY2xhbmctMjU3NzExMy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9fX3N0ZGRlZl9tYXhfYWxpZ25fdC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZTEwY2E5Li4wMDAwMDAwCi0tLSBhL2NsYW5nLTI1NzcxMTMvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvX19zdGRkZWZfbWF4X2FsaWduX3QuaAorKysgL2Rldi9udWxsCkBAIC0xLDQzICswLDAgQEAKLS8qPT09LS0tLSBfX3N0ZGRlZl9tYXhfYWxpZ25fdC5oIC0gRGVmaW5pdGlvbiBvZiBtYXhfYWxpZ25fdCBmb3IgbW9kdWxlcyAtLS09PT0KLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTQgQ2hhbmRsZXIgQ2FycnV0aAotICoKLSAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKLSAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCi0gKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCi0gKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCi0gKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKLSAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Ci0gKgotICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KLSAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgotICoKLSAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCi0gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKLSAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgotICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKLSAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KLSAqIFRIRSBTT0ZUV0FSRS4KLSAqCi0gKj09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09Ci0gKi8KLQotI2lmbmRlZiBfX0NMQU5HX01BWF9BTElHTl9UX0RFRklORUQKLSNkZWZpbmUgX19DTEFOR19NQVhfQUxJR05fVF9ERUZJTkVECi0KLSNpZiBkZWZpbmVkKF9NU0NfVkVSKQotdHlwZWRlZiBkb3VibGUgbWF4X2FsaWduX3Q7Ci0jZWxpZiBkZWZpbmVkKF9fQVBQTEVfXykKLXR5cGVkZWYgbG9uZyBkb3VibGUgbWF4X2FsaWduX3Q7Ci0jZWxzZQotLy8gRGVmaW5lICdtYXhfYWxpZ25fdCcgdG8gbWF0Y2ggdGhlIEdDQyBkZWZpbml0aW9uLgotdHlwZWRlZiBzdHJ1Y3QgewotICBsb25nIGxvbmcgX19jbGFuZ19tYXhfYWxpZ25fbm9uY2UxCi0gICAgICBfX2F0dHJpYnV0ZV9fKChfX2FsaWduZWRfXyhfX2FsaWdub2ZfXyhsb25nIGxvbmcpKSkpOwotICBsb25nIGRvdWJsZSBfX2NsYW5nX21heF9hbGlnbl9ub25jZTIKLSAgICAgIF9fYXR0cmlidXRlX18oKF9fYWxpZ25lZF9fKF9fYWxpZ25vZl9fKGxvbmcgZG91YmxlKSkpKTsKLX0gbWF4X2FsaWduX3Q7Ci0jZW5kaWYKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9jbGFuZy0yNTc3MTEzL2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL19fd21taW50cmluX2Flcy5oIGIvY2xhbmctMjU3NzExMy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9fX3dtbWludHJpbl9hZXMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTAwNzk5ZS4uMDAwMDAwMAotLS0gYS9jbGFuZy0yNTc3MTEzL2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL19fd21taW50cmluX2Flcy5oCisrKyAvZGV2L251bGwKQEAgLTEsNjYgKzAsMCBAQAotLyo9PT0tLS0tIF9fd21taW50cmluX2Flcy5oIC0gQUVTIGludHJpbnNpY3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQotICoKLSAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKLSAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCi0gKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCi0gKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCi0gKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKLSAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Ci0gKgotICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KLSAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgotICoKLSAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCi0gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKLSAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgotICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKLSAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KLSAqIFRIRSBTT0ZUV0FSRS4KLSAqCi0gKj09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09Ci0gKi8KLSNpZm5kZWYgX1dNTUlOVFJJTl9BRVNfSAotI2RlZmluZSBfV01NSU5UUklOX0FFU19ICi0KLSNpbmNsdWRlIDxlbW1pbnRyaW4uaD4KLQotLyogRGVmaW5lIHRoZSBkZWZhdWx0IGF0dHJpYnV0ZXMgZm9yIHRoZSBmdW5jdGlvbnMgaW4gdGhpcyBmaWxlLiAqLwotI2RlZmluZSBfX0RFRkFVTFRfRk5fQVRUUlMgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fLCBfX3RhcmdldF9fKCJhZXMiKSkpCi0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fYWVzZW5jX3NpMTI4KF9fbTEyOGkgX19WLCBfX20xMjhpIF9fUikKLXsKLSAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX2Flc2VuYzEyOChfX1YsIF9fUik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fYWVzZW5jbGFzdF9zaTEyOChfX20xMjhpIF9fViwgX19tMTI4aSBfX1IpCi17Ci0gIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9hZXNlbmNsYXN0MTI4KF9fViwgX19SKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9hZXNkZWNfc2kxMjgoX19tMTI4aSBfX1YsIF9fbTEyOGkgX19SKQotewotICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfYWVzZGVjMTI4KF9fViwgX19SKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9hZXNkZWNsYXN0X3NpMTI4KF9fbTEyOGkgX19WLCBfX20xMjhpIF9fUikKLXsKLSAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX2Flc2RlY2xhc3QxMjgoX19WLCBfX1IpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2Flc2ltY19zaTEyOChfX20xMjhpIF9fVikKLXsKLSAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX2Flc2ltYzEyOChfX1YpOwotfQotCi0jZGVmaW5lIF9tbV9hZXNrZXlnZW5hc3Npc3Rfc2kxMjgoQywgUikgXAotICAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9hZXNrZXlnZW5hc3Npc3QxMjgoKF9fdjJkaSkoX19tMTI4aSkoQyksIChpbnQpKFIpKQotCi0jdW5kZWYgX19ERUZBVUxUX0ZOX0FUVFJTCi0KLSNlbmRpZiAgLyogX1dNTUlOVFJJTl9BRVNfSCAqLwpkaWZmIC0tZ2l0IGEvY2xhbmctMjU3NzExMy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9fX3dtbWludHJpbl9wY2xtdWwuaCBiL2NsYW5nLTI1NzcxMTMvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvX193bW1pbnRyaW5fcGNsbXVsLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY4ZTk0NGUuLjAwMDAwMDAKLS0tIGEvY2xhbmctMjU3NzExMy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9fX3dtbWludHJpbl9wY2xtdWwuaAorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLS8qPT09LS0tLSBfX3dtbWludHJpbl9wY2xtdWwuaCAtIFBDTVVMIGludHJpbnNpY3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09Ci0gKgotICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQotICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKLSAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKLSAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKLSAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcwotICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKLSAqCi0gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgotICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCi0gKgotICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKLSAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAotICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCi0gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAotICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgotICogVEhFIFNPRlRXQVJFLgotICoKLSAqPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KLSAqLwotI2lmbmRlZiBfV01NSU5UUklOX1BDTE1VTF9ICi0jZGVmaW5lIF9XTU1JTlRSSU5fUENMTVVMX0gKLQotI2RlZmluZSBfbW1fY2xtdWxlcGk2NF9zaTEyOChfX1gsIF9fWSwgX19JKSBcCi0gICgoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9wY2xtdWxxZHExMjgoKF9fdjJkaSkoX19tMTI4aSkoX19YKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGkpKF9fbTEyOGkpKF9fWSksIChjaGFyKShfX0kpKSkKLQotI2VuZGlmIC8qIF9XTU1JTlRSSU5fUENMTVVMX0ggKi8KZGlmZiAtLWdpdCBhL2NsYW5nLTI1NzcxMTMvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvYWR4aW50cmluLmggYi9jbGFuZy0yNTc3MTEzL2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL2FkeGludHJpbi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZTM0NzI4Li4wMDAwMDAwCi0tLSBhL2NsYW5nLTI1NzcxMTMvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvYWR4aW50cmluLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4NiArMCwwIEBACi0vKj09PS0tLS0gYWR4aW50cmluLmggLSBBRFggaW50cmluc2ljcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09Ci0gKgotICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQotICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKLSAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKLSAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKLSAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcwotICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKLSAqCi0gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgotICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCi0gKgotICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKLSAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAotICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCi0gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAotICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgotICogVEhFIFNPRlRXQVJFLgotICoKLSAqPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KLSAqLwotCi0jaWZuZGVmIF9fSU1NSU5UUklOX0gKLSNlcnJvciAiTmV2ZXIgdXNlIDxhZHhpbnRyaW4uaD4gZGlyZWN0bHk7IGluY2x1ZGUgPGltbWludHJpbi5oPiBpbnN0ZWFkLiIKLSNlbmRpZgotCi0jaWZuZGVmIF9fQURYSU5UUklOX0gKLSNkZWZpbmUgX19BRFhJTlRSSU5fSAotCi0vKiBEZWZpbmUgdGhlIGRlZmF1bHQgYXR0cmlidXRlcyBmb3IgdGhlIGZ1bmN0aW9ucyBpbiB0aGlzIGZpbGUuICovCi0jZGVmaW5lIF9fREVGQVVMVF9GTl9BVFRSUyBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18pKQotCi0vKiBJbnRyaW5zaWNzIHRoYXQgYXJlIGF2YWlsYWJsZSBvbmx5IGlmIF9fQURYX18gZGVmaW5lZCAqLwotc3RhdGljIF9faW5saW5lIHVuc2lnbmVkIGNoYXIgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fLCBfX3RhcmdldF9fKCJhZHgiKSkpCi1fYWRkY2Fycnl4X3UzMih1bnNpZ25lZCBjaGFyIF9fY2YsIHVuc2lnbmVkIGludCBfX3gsIHVuc2lnbmVkIGludCBfX3ksCi0gICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKl9fcCkKLXsKLSAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX2FkZGNhcnJ5eF91MzIoX19jZiwgX194LCBfX3ksIF9fcCk7Ci19Ci0KLSNpZmRlZiBfX3g4Nl82NF9fCi1zdGF0aWMgX19pbmxpbmUgdW5zaWduZWQgY2hhciBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18sIF9fdGFyZ2V0X18oImFkeCIpKSkKLV9hZGRjYXJyeXhfdTY0KHVuc2lnbmVkIGNoYXIgX19jZiwgdW5zaWduZWQgbG9uZyBsb25nIF9feCwKLSAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBfX3ksIHVuc2lnbmVkIGxvbmcgbG9uZyAgKl9fcCkKLXsKLSAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX2FkZGNhcnJ5eF91NjQoX19jZiwgX194LCBfX3ksIF9fcCk7Ci19Ci0jZW5kaWYKLQotLyogSW50cmluc2ljcyB0aGF0IGFyZSBhbHNvIGF2YWlsYWJsZSBpZiBfX0FEWF9fIHVuZGVmaW5lZCAqLwotc3RhdGljIF9faW5saW5lIHVuc2lnbmVkIGNoYXIgX19ERUZBVUxUX0ZOX0FUVFJTCi1fYWRkY2FycnlfdTMyKHVuc2lnbmVkIGNoYXIgX19jZiwgdW5zaWduZWQgaW50IF9feCwgdW5zaWduZWQgaW50IF9feSwKLSAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpfX3ApCi17Ci0gIHJldHVybiBfX2J1aWx0aW5faWEzMl9hZGRjYXJyeV91MzIoX19jZiwgX194LCBfX3ksIF9fcCk7Ci19Ci0KLSNpZmRlZiBfX3g4Nl82NF9fCi1zdGF0aWMgX19pbmxpbmUgdW5zaWduZWQgY2hhciBfX0RFRkFVTFRfRk5fQVRUUlMKLV9hZGRjYXJyeV91NjQodW5zaWduZWQgY2hhciBfX2NmLCB1bnNpZ25lZCBsb25nIGxvbmcgX194LAotICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgX195LCB1bnNpZ25lZCBsb25nIGxvbmcgICpfX3ApCi17Ci0gIHJldHVybiBfX2J1aWx0aW5faWEzMl9hZGRjYXJyeV91NjQoX19jZiwgX194LCBfX3ksIF9fcCk7Ci19Ci0jZW5kaWYKLQotc3RhdGljIF9faW5saW5lIHVuc2lnbmVkIGNoYXIgX19ERUZBVUxUX0ZOX0FUVFJTCi1fc3ViYm9ycm93X3UzMih1bnNpZ25lZCBjaGFyIF9fY2YsIHVuc2lnbmVkIGludCBfX3gsIHVuc2lnbmVkIGludCBfX3ksCi0gICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqX19wKQotewotICByZXR1cm4gX19idWlsdGluX2lhMzJfc3ViYm9ycm93X3UzMihfX2NmLCBfX3gsIF9feSwgX19wKTsKLX0KLQotI2lmZGVmIF9feDg2XzY0X18KLXN0YXRpYyBfX2lubGluZSB1bnNpZ25lZCBjaGFyIF9fREVGQVVMVF9GTl9BVFRSUwotX3N1YmJvcnJvd191NjQodW5zaWduZWQgY2hhciBfX2NmLCB1bnNpZ25lZCBsb25nIGxvbmcgX194LAotICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBsb25nIF9feSwgdW5zaWduZWQgbG9uZyBsb25nICAqX19wKQotewotICByZXR1cm4gX19idWlsdGluX2lhMzJfc3ViYm9ycm93X3U2NChfX2NmLCBfX3gsIF9feSwgX19wKTsKLX0KLSNlbmRpZgotCi0jdW5kZWYgX19ERUZBVUxUX0ZOX0FUVFJTCi0KLSNlbmRpZiAvKiBfX0FEWElOVFJJTl9IICovCmRpZmYgLS1naXQgYS9jbGFuZy0yNTc3MTEzL2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL2FsdGl2ZWMuaCBiL2NsYW5nLTI1NzcxMTMvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvYWx0aXZlYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMzkxNTZlLi4wMDAwMDAwCi0tLSBhL2NsYW5nLTI1NzcxMTMvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvYWx0aXZlYy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTM5MTkgKzAsMCBAQAotLyo9PT0tLS0tIGFsdGl2ZWMuaCAtIFN0YW5kYXJkIGhlYWRlciBmb3IgdHlwZSBnZW5lcmljIG1hdGggLS0tLS0tLS0tLS0tLS0tPT09KlwKLSAqCi0gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5Ci0gKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAotICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cwotICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAotICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCi0gKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgotICoKLSAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCi0gKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KLSAqCi0gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgotICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCi0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKLSAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCi0gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCi0gKiBUSEUgU09GVFdBUkUuCi0gKgotXCo9PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09Ki8KLQotI2lmbmRlZiBfX0FMVElWRUNfSAotI2RlZmluZSBfX0FMVElWRUNfSAotCi0jaWZuZGVmIF9fQUxUSVZFQ19fCi0jZXJyb3IgIkFsdGlWZWMgc3VwcG9ydCBub3QgZW5hYmxlZCIKLSNlbmRpZgotCi0vKiBjb25zdGFudHMgZm9yIG1hcHBpbmcgQ1I2IGJpdHMgdG8gcHJlZGljYXRlIHJlc3VsdC4gKi8KLQotI2RlZmluZSBfX0NSNl9FUSAwCi0jZGVmaW5lIF9fQ1I2X0VRX1JFViAxCi0jZGVmaW5lIF9fQ1I2X0xUIDIKLSNkZWZpbmUgX19DUjZfTFRfUkVWIDMKLQotI2RlZmluZSBfX0FUVFJTX29fYWkgX19hdHRyaWJ1dGVfXygoX19vdmVybG9hZGFibGVfXywgX19hbHdheXNfaW5saW5lX18pKQotCi1zdGF0aWMgdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfcGVybSh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYyk7Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX3Blcm0odmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYyk7Ci0KLXN0YXRpYyB2ZWN0b3IgYm9vbCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfcGVybSh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBjaGFyIF9fYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2MpOwotCi1zdGF0aWMgdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfcGVybSh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgc2hvcnQgX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19jKTsKLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3Blcm0odmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2MpOwotCi1zdGF0aWMgdmVjdG9yIGJvb2wgc2hvcnQgX19BVFRSU19vX2FpIHZlY19wZXJtKHZlY3RvciBib29sIHNob3J0IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgc2hvcnQgX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2MpOwotCi1zdGF0aWMgdmVjdG9yIHBpeGVsIF9fQVRUUlNfb19haSB2ZWNfcGVybSh2ZWN0b3IgcGl4ZWwgX19hLCB2ZWN0b3IgcGl4ZWwgX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19jKTsKLQotc3RhdGljIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY19wZXJtKHZlY3RvciBzaWduZWQgaW50IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGludCBfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19jKTsKLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpIHZlY19wZXJtKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYyk7Ci0KLXN0YXRpYyB2ZWN0b3IgYm9vbCBpbnQgX19BVFRSU19vX2FpIHZlY19wZXJtKHZlY3RvciBib29sIGludCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBpbnQgX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19jKTsKLQotc3RhdGljIHZlY3RvciBmbG9hdCBfX0FUVFJTX29fYWkgdmVjX3Blcm0odmVjdG9yIGZsb2F0IF9fYSwgdmVjdG9yIGZsb2F0IF9fYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYyk7Ci0KLSNpZmRlZiBfX1ZTWF9fCi1zdGF0aWMgdmVjdG9yIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkgdmVjX3Blcm0odmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2MpOwotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKLXZlY19wZXJtKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYiwKLSAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYyk7Ci0KLXN0YXRpYyB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19BVFRSU19vX2FpCi12ZWNfcGVybSh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iLAotICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19jKTsKLQotc3RhdGljIHZlY3RvciBkb3VibGUgX19BVFRSU19vX2FpIHZlY19wZXJtKHZlY3RvciBkb3VibGUgX19hLCB2ZWN0b3IgZG91YmxlIF9fYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2MpOwotI2VuZGlmCi0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX3hvcih2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKTsKLQotLyogdmVjX2FicyAqLwotCi0jZGVmaW5lIF9fYnVpbHRpbl9hbHRpdmVjX2Fic192MTZxaSB2ZWNfYWJzCi0jZGVmaW5lIF9fYnVpbHRpbl9hbHRpdmVjX2Fic192OGhpIHZlY19hYnMKLSNkZWZpbmUgX19idWlsdGluX2FsdGl2ZWNfYWJzX3Y0c2kgdmVjX2FicwotCi1zdGF0aWMgdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfYWJzKHZlY3RvciBzaWduZWQgY2hhciBfX2EpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtYXhzYihfX2EsIC1fX2EpOwotfQotCi1zdGF0aWMgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX2Ficyh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSkgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1heHNoKF9fYSwgLV9fYSk7Ci19Ci0KLXN0YXRpYyB2ZWN0b3Igc2lnbmVkIGludCBfX0FUVFJTX29fYWkgdmVjX2Ficyh2ZWN0b3Igc2lnbmVkIGludCBfX2EpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtYXhzdyhfX2EsIC1fX2EpOwotfQotCi0jaWYgZGVmaW5lZChfX1BPV0VSOF9WRUNUT1JfXykgJiYgZGVmaW5lZChfX3Bvd2VycGM2NF9fKQotc3RhdGljIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQotdmVjX2Ficyh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtYXhzZChfX2EsIC1fX2EpOwotfQotI2VuZGlmCi0KLXN0YXRpYyB2ZWN0b3IgZmxvYXQgX19BVFRSU19vX2FpIHZlY19hYnModmVjdG9yIGZsb2F0IF9fYSkgewotICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fcmVzID0KLSAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSAmICh2ZWN0b3IgdW5zaWduZWQgaW50KSgweDdGRkZGRkZGKTsKLSAgcmV0dXJuICh2ZWN0b3IgZmxvYXQpX19yZXM7Ci19Ci0KLSNpZiBkZWZpbmVkKF9fUE9XRVI4X1ZFQ1RPUl9fKSAmJiBkZWZpbmVkKF9fcG93ZXJwYzY0X18pCi1zdGF0aWMgdmVjdG9yIGRvdWJsZSBfX0FUVFJTX29fYWkgdmVjX2Ficyh2ZWN0b3IgZG91YmxlIF9fYSkgewotICB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fcmVzID0geyAweDdGRkZGRkZGRkZGRkZGRkYsIDB4N0ZGRkZGRkZGRkZGRkZGRiB9OwotICBfX3JlcyAmPSAodmVjdG9yIHVuc2lnbmVkIGludClfX2E7Ci0gIHJldHVybiAodmVjdG9yIGRvdWJsZSlfX3JlczsKLX0KLSNlbmRpZgotCi0vKiB2ZWNfYWJzcyAqLwotI2RlZmluZSBfX2J1aWx0aW5fYWx0aXZlY19hYnNzX3YxNnFpIHZlY19hYnNzCi0jZGVmaW5lIF9fYnVpbHRpbl9hbHRpdmVjX2Fic3NfdjhoaSB2ZWNfYWJzcwotI2RlZmluZSBfX2J1aWx0aW5fYWx0aXZlY19hYnNzX3Y0c2kgdmVjX2Fic3MKLQotc3RhdGljIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX2Fic3ModmVjdG9yIHNpZ25lZCBjaGFyIF9fYSkgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1heHNiKAotICAgICAgX19hLCBfX2J1aWx0aW5fYWx0aXZlY192c3Vic2JzKCh2ZWN0b3Igc2lnbmVkIGNoYXIpKDApLCBfX2EpKTsKLX0KLQotc3RhdGljIHZlY3RvciBzaWduZWQgc2hvcnQgX19BVFRSU19vX2FpIHZlY19hYnNzKHZlY3RvciBzaWduZWQgc2hvcnQgX19hKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bWF4c2goCi0gICAgICBfX2EsIF9fYnVpbHRpbl9hbHRpdmVjX3ZzdWJzaHMoKHZlY3RvciBzaWduZWQgc2hvcnQpKDApLCBfX2EpKTsKLX0KLQotc3RhdGljIHZlY3RvciBzaWduZWQgaW50IF9fQVRUUlNfb19haSB2ZWNfYWJzcyh2ZWN0b3Igc2lnbmVkIGludCBfX2EpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtYXhzdygKLSAgICAgIF9fYSwgX19idWlsdGluX2FsdGl2ZWNfdnN1YnN3cygodmVjdG9yIHNpZ25lZCBpbnQpKDApLCBfX2EpKTsKLX0KLQotLyogdmVjX2FkZCAqLwotCi1zdGF0aWMgdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfYWRkKHZlY3RvciBzaWduZWQgY2hhciBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKLSAgcmV0dXJuIF9fYSArIF9fYjsKLX0KLQotc3RhdGljIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX2FkZCh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gKHZlY3RvciBzaWduZWQgY2hhcilfX2EgKyBfX2I7Ci19Ci0KLXN0YXRpYyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY19hZGQodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKLSAgcmV0dXJuIF9fYSArICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19iOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY19hZGQodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gX19hICsgX19iOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY19hZGQodmVjdG9yIGJvb2wgY2hhciBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hICsgX19iOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY19hZGQodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGNoYXIgX19iKSB7Ci0gIHJldHVybiBfX2EgKyAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iOwotfQotCi1zdGF0aWMgdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfYWRkKHZlY3RvciBzaG9ydCBfX2EsIHZlY3RvciBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuIF9fYSArIF9fYjsKLX0KLQotc3RhdGljIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX2FkZCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3Igc2hvcnQpX19hICsgX19iOwotfQotCi1zdGF0aWMgdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfYWRkKHZlY3RvciBzaG9ydCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIHNob3J0IF9fYikgewotICByZXR1cm4gX19hICsgKHZlY3RvciBzaG9ydClfX2I7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpIHZlY19hZGQodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgewotICByZXR1cm4gX19hICsgX19iOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfYWRkKHZlY3RvciBib29sIHNob3J0IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgewotICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EgKyBfX2I7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpIHZlY19hZGQodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7Ci0gIHJldHVybiBfX2EgKyAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYjsKLX0KLQotc3RhdGljIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY19hZGQodmVjdG9yIGludCBfX2EsIHZlY3RvciBpbnQgX19iKSB7Ci0gIHJldHVybiBfX2EgKyBfX2I7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfYWRkKHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciBpbnQgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIGludClfX2EgKyBfX2I7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfYWRkKHZlY3RvciBpbnQgX19hLCB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7Ci0gIHJldHVybiBfX2EgKyAodmVjdG9yIGludClfX2I7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haSB2ZWNfYWRkKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKLSAgcmV0dXJuIF9fYSArIF9fYjsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpIHZlY19hZGQodmVjdG9yIGJvb2wgaW50IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGludClfX2EgKyBfX2I7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haSB2ZWNfYWRkKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgaW50IF9fYikgewotICByZXR1cm4gX19hICsgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iOwotfQotCi0jaWYgZGVmaW5lZChfX1BPV0VSOF9WRUNUT1JfXykgJiYgZGVmaW5lZChfX3Bvd2VycGM2NF9fKQotc3RhdGljIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQotdmVjX2FkZCh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgewotICByZXR1cm4gX19hICsgX19iOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKLXZlY19hZGQodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7Ci0gIHJldHVybiBfX2EgKyBfX2I7Ci19Ci0KLXN0YXRpYyB2ZWN0b3Igc2lnbmVkIF9faW50MTI4IF9fQVRUUlNfb19haSB2ZWNfYWRkKHZlY3RvciBzaWduZWQgX19pbnQxMjggX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBfX2ludDEyOCBfX2IpIHsKLSAgcmV0dXJuIF9fYSArIF9fYjsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBfX2ludDEyOCBfX0FUVFJTX29fYWkKLXZlY19hZGQodmVjdG9yIHVuc2lnbmVkIF9faW50MTI4IF9fYSwgdmVjdG9yIHVuc2lnbmVkIF9faW50MTI4IF9fYikgewotICByZXR1cm4gX19hICsgX19iOwotfQotI2VuZGlmIC8vIGRlZmluZWQoX19QT1dFUjhfVkVDVE9SX18pICYmIGRlZmluZWQoX19wb3dlcnBjNjRfXykKLQotc3RhdGljIHZlY3RvciBmbG9hdCBfX0FUVFJTX29fYWkgdmVjX2FkZCh2ZWN0b3IgZmxvYXQgX19hLCB2ZWN0b3IgZmxvYXQgX19iKSB7Ci0gIHJldHVybiBfX2EgKyBfX2I7Ci19Ci0KLSNpZmRlZiBfX1ZTWF9fCi1zdGF0aWMgdmVjdG9yIGRvdWJsZSBfX0FUVFJTX29fYWkKLXZlY19hZGQodmVjdG9yIGRvdWJsZSBfX2EsIHZlY3RvciBkb3VibGUgX19iKSB7Ci0gIHJldHVybiBfX2EgKyBfX2I7Ci19Ci0jZW5kaWYgLy8gX19WU1hfXwotCi0vKiB2ZWNfYWRkZSAqLwotCi0jaWYgZGVmaW5lZChfX1BPV0VSOF9WRUNUT1JfXykgJiYgZGVmaW5lZChfX3Bvd2VycGM2NF9fKQotc3RhdGljIHZlY3RvciBzaWduZWQgX19pbnQxMjggX19BVFRSU19vX2FpCi12ZWNfYWRkZSh2ZWN0b3Igc2lnbmVkIF9faW50MTI4IF9fYSwgdmVjdG9yIHNpZ25lZCBfX2ludDEyOCBfX2IsCi0gICAgICAgICB2ZWN0b3Igc2lnbmVkIF9faW50MTI4IF9fYykgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmFkZGV1cW0oX19hLCBfX2IsIF9fYyk7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgX19pbnQxMjggX19BVFRSU19vX2FpCi12ZWNfYWRkZSh2ZWN0b3IgdW5zaWduZWQgX19pbnQxMjggX19hLCB2ZWN0b3IgdW5zaWduZWQgX19pbnQxMjggX19iLAotICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIF9faW50MTI4IF9fYykgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmFkZGV1cW0oX19hLCBfX2IsIF9fYyk7Ci19Ci0jZW5kaWYKLQotLyogdmVjX2FkZGVjICovCi0KLSNpZiBkZWZpbmVkKF9fUE9XRVI4X1ZFQ1RPUl9fKSAmJiBkZWZpbmVkKF9fcG93ZXJwYzY0X18pCi1zdGF0aWMgdmVjdG9yIHNpZ25lZCBfX2ludDEyOCBfX0FUVFJTX29fYWkKLXZlY19hZGRlYyh2ZWN0b3Igc2lnbmVkIF9faW50MTI4IF9fYSwgdmVjdG9yIHNpZ25lZCBfX2ludDEyOCBfX2IsCi0gICAgICAgICAgdmVjdG9yIHNpZ25lZCBfX2ludDEyOCBfX2MpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZhZGRlY3VxKF9fYSwgX19iLCBfX2MpOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIF9faW50MTI4IF9fQVRUUlNfb19haQotdmVjX2FkZGVjKHZlY3RvciB1bnNpZ25lZCBfX2ludDEyOCBfX2EsIHZlY3RvciB1bnNpZ25lZCBfX2ludDEyOCBfX2IsCi0gICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIF9faW50MTI4IF9fYykgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmFkZGVjdXEoX19hLCBfX2IsIF9fYyk7Ci19Ci0jZW5kaWYKLQotLyogdmVjX3ZhZGR1Ym0gKi8KLQotI2RlZmluZSBfX2J1aWx0aW5fYWx0aXZlY192YWRkdWJtIHZlY192YWRkdWJtCi0KLXN0YXRpYyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY192YWRkdWJtKHZlY3RvciBzaWduZWQgY2hhciBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7Ci0gIHJldHVybiBfX2EgKyBfX2I7Ci19Ci0KLXN0YXRpYyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY192YWRkdWJtKHZlY3RvciBib29sIGNoYXIgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gKHZlY3RvciBzaWduZWQgY2hhcilfX2EgKyBfX2I7Ci19Ci0KLXN0YXRpYyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY192YWRkdWJtKHZlY3RvciBzaWduZWQgY2hhciBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgewotICByZXR1cm4gX19hICsgKHZlY3RvciBzaWduZWQgY2hhcilfX2I7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX3ZhZGR1Ym0odmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKLSAgcmV0dXJuIF9fYSArIF9fYjsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfdmFkZHVibSh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hICsgX19iOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY192YWRkdWJtKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKLSAgcmV0dXJuIF9fYSArICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2I7Ci19Ci0KLS8qIHZlY192YWRkdWhtICovCi0KLSNkZWZpbmUgX19idWlsdGluX2FsdGl2ZWNfdmFkZHVobSB2ZWNfdmFkZHVobQotCi1zdGF0aWMgdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfdmFkZHVobSh2ZWN0b3Igc2hvcnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNob3J0IF9fYikgewotICByZXR1cm4gX19hICsgX19iOwotfQotCi1zdGF0aWMgdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfdmFkZHVobSh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2hvcnQgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHNob3J0KV9fYSArIF9fYjsKLX0KLQotc3RhdGljIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3ZhZGR1aG0odmVjdG9yIHNob3J0IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIHNob3J0IF9fYikgewotICByZXR1cm4gX19hICsgKHZlY3RvciBzaG9ydClfX2I7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCi12ZWNfdmFkZHVobSh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7Ci0gIHJldHVybiBfX2EgKyBfX2I7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCi12ZWNfdmFkZHVobSh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hICsgX19iOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfdmFkZHVobSh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7Ci0gIHJldHVybiBfX2EgKyAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYjsKLX0KLQotLyogdmVjX3ZhZGR1d20gKi8KLQotI2RlZmluZSBfX2J1aWx0aW5fYWx0aXZlY192YWRkdXdtIHZlY192YWRkdXdtCi0KLXN0YXRpYyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfdmFkZHV3bSh2ZWN0b3IgaW50IF9fYSwgdmVjdG9yIGludCBfX2IpIHsKLSAgcmV0dXJuIF9fYSArIF9fYjsKLX0KLQotc3RhdGljIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY192YWRkdXdtKHZlY3RvciBib29sIGludCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGludCBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgaW50KV9fYSArIF9fYjsKLX0KLQotc3RhdGljIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY192YWRkdXdtKHZlY3RvciBpbnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGludCBfX2IpIHsKLSAgcmV0dXJuIF9fYSArICh2ZWN0b3IgaW50KV9fYjsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpIHZlY192YWRkdXdtKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7Ci0gIHJldHVybiBfX2EgKyBfX2I7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haSB2ZWNfdmFkZHV3bSh2ZWN0b3IgYm9vbCBpbnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGludClfX2EgKyBfX2I7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haSB2ZWNfdmFkZHV3bSh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7Ci0gIHJldHVybiBfX2EgKyAodmVjdG9yIHVuc2lnbmVkIGludClfX2I7Ci19Ci0KLS8qIHZlY192YWRkZnAgKi8KLQotI2RlZmluZSBfX2J1aWx0aW5fYWx0aXZlY192YWRkZnAgdmVjX3ZhZGRmcAotCi1zdGF0aWMgdmVjdG9yIGZsb2F0IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKLXZlY192YWRkZnAodmVjdG9yIGZsb2F0IF9fYSwgdmVjdG9yIGZsb2F0IF9fYikgewotICByZXR1cm4gX19hICsgX19iOwotfQotCi0vKiB2ZWNfYWRkYyAqLwotCi1zdGF0aWMgdmVjdG9yIHNpZ25lZCBpbnQgX19BVFRSU19vX2FpIHZlY19hZGRjKHZlY3RvciBzaWduZWQgaW50IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBpbnQgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHNpZ25lZCBpbnQpX19idWlsdGluX2FsdGl2ZWNfdmFkZGN1dygodmVjdG9yIHVuc2lnbmVkIGludClfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkgdmVjX2FkZGModmVjdG9yIHVuc2lnbmVkIGludCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZhZGRjdXcoX19hLCBfX2IpOwotfQotCi0jaWYgZGVmaW5lZChfX1BPV0VSOF9WRUNUT1JfXykgJiYgZGVmaW5lZChfX3Bvd2VycGM2NF9fKQotc3RhdGljIHZlY3RvciBzaWduZWQgX19pbnQxMjggX19BVFRSU19vX2FpCi12ZWNfYWRkYyh2ZWN0b3Igc2lnbmVkIF9faW50MTI4IF9fYSwgdmVjdG9yIHNpZ25lZCBfX2ludDEyOCBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIF9faW50MTI4KV9fYnVpbHRpbl9hbHRpdmVjX3ZhZGRjdXEoCi0gICAgKHZlY3RvciB1bnNpZ25lZCBfX2ludDEyOClfX2EsCi0gICAgKHZlY3RvciB1bnNpZ25lZCBfX2ludDEyOClfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIF9faW50MTI4IF9fQVRUUlNfb19haQotdmVjX2FkZGModmVjdG9yIHVuc2lnbmVkIF9faW50MTI4IF9fYSwgdmVjdG9yIHVuc2lnbmVkIF9faW50MTI4IF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmFkZGN1cShfX2EsIF9fYik7Ci19Ci0jZW5kaWYgLy8gZGVmaW5lZChfX1BPV0VSOF9WRUNUT1JfXykgJiYgZGVmaW5lZChfX3Bvd2VycGM2NF9fKQotCi0vKiB2ZWNfdmFkZGN1dyAqLwotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGludCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCi12ZWNfdmFkZGN1dyh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZhZGRjdXcoX19hLCBfX2IpOwotfQotCi0vKiB2ZWNfYWRkcyAqLwotCi1zdGF0aWMgdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfYWRkcyh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmFkZHNicyhfX2EsIF9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY19hZGRzKHZlY3RvciBib29sIGNoYXIgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmFkZHNicygodmVjdG9yIHNpZ25lZCBjaGFyKV9fYSwgX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX2FkZHModmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGNoYXIgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192YWRkc2JzKF9fYSwgKHZlY3RvciBzaWduZWQgY2hhcilfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY19hZGRzKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192YWRkdWJzKF9fYSwgX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfYWRkcyh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192YWRkdWJzKCh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsIF9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX2FkZHModmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmFkZHVicyhfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfYWRkcyh2ZWN0b3Igc2hvcnQgX19hLCB2ZWN0b3Igc2hvcnQgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192YWRkc2hzKF9fYSwgX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX2FkZHModmVjdG9yIGJvb2wgc2hvcnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNob3J0IF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmFkZHNocygodmVjdG9yIHNob3J0KV9fYSwgX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX2FkZHModmVjdG9yIHNob3J0IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIHNob3J0IF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmFkZHNocyhfX2EsICh2ZWN0b3Igc2hvcnQpX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX2FkZHModmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZhZGR1aHMoX19hLCBfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfYWRkcyh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192YWRkdWhzKCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hLCBfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfYWRkcyh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192YWRkdWhzKF9fYSwgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX2FkZHModmVjdG9yIGludCBfX2EsIHZlY3RvciBpbnQgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192YWRkc3dzKF9fYSwgX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY19hZGRzKHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciBpbnQgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192YWRkc3dzKCh2ZWN0b3IgaW50KV9fYSwgX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY19hZGRzKHZlY3RvciBpbnQgX19hLCB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192YWRkc3dzKF9fYSwgKHZlY3RvciBpbnQpX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpIHZlY19hZGRzKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192YWRkdXdzKF9fYSwgX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpIHZlY19hZGRzKHZlY3RvciBib29sIGludCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZhZGR1d3MoKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hLCBfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkgdmVjX2FkZHModmVjdG9yIHVuc2lnbmVkIGludCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgaW50IF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmFkZHV3cyhfX2EsICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYik7Ci19Ci0KLS8qIHZlY192YWRkc2JzICovCi0KLXN0YXRpYyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY192YWRkc2JzKHZlY3RvciBzaWduZWQgY2hhciBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192YWRkc2JzKF9fYSwgX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX3ZhZGRzYnModmVjdG9yIGJvb2wgY2hhciBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192YWRkc2JzKCh2ZWN0b3Igc2lnbmVkIGNoYXIpX19hLCBfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfdmFkZHNicyh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZhZGRzYnMoX19hLCAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYik7Ci19Ci0KLS8qIHZlY192YWRkdWJzICovCi0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX3ZhZGR1YnModmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZhZGR1YnMoX19hLCBfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY192YWRkdWJzKHZlY3RvciBib29sIGNoYXIgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZhZGR1YnMoKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfdmFkZHVicyh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGNoYXIgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192YWRkdWJzKF9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Ci19Ci0KLS8qIHZlY192YWRkc2hzICovCi0KLXN0YXRpYyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY192YWRkc2hzKHZlY3RvciBzaG9ydCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2hvcnQgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192YWRkc2hzKF9fYSwgX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3ZhZGRzaHModmVjdG9yIGJvb2wgc2hvcnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNob3J0IF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmFkZHNocygodmVjdG9yIHNob3J0KV9fYSwgX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3ZhZGRzaHModmVjdG9yIHNob3J0IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIHNob3J0IF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmFkZHNocyhfX2EsICh2ZWN0b3Igc2hvcnQpX19iKTsKLX0KLQotLyogdmVjX3ZhZGR1aHMgKi8KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKLXZlY192YWRkdWhzKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZhZGR1aHMoX19hLCBfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haQotdmVjX3ZhZGR1aHModmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192YWRkdWhzKCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hLCBfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfdmFkZHVocyh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192YWRkdWhzKF9fYSwgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2IpOwotfQotCi0vKiB2ZWNfdmFkZHN3cyAqLwotCi1zdGF0aWMgdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX3ZhZGRzd3ModmVjdG9yIGludCBfX2EsIHZlY3RvciBpbnQgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192YWRkc3dzKF9fYSwgX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY192YWRkc3dzKHZlY3RvciBib29sIGludCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGludCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZhZGRzd3MoKHZlY3RvciBpbnQpX19hLCBfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX3ZhZGRzd3ModmVjdG9yIGludCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgaW50IF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmFkZHN3cyhfX2EsICh2ZWN0b3IgaW50KV9fYik7Ci19Ci0KLS8qIHZlY192YWRkdXdzICovCi0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haSB2ZWNfdmFkZHV3cyh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmFkZHV3cyhfX2EsIF9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haSB2ZWNfdmFkZHV3cyh2ZWN0b3IgYm9vbCBpbnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192YWRkdXdzKCh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSwgX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpIHZlY192YWRkdXdzKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGludCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZhZGR1d3MoX19hLCAodmVjdG9yIHVuc2lnbmVkIGludClfX2IpOwotfQotCi0jaWYgZGVmaW5lZChfX1BPV0VSOF9WRUNUT1JfXykgJiYgZGVmaW5lZChfX3Bvd2VycGM2NF9fKQotLyogdmVjX3ZhZGR1cW0gKi8KLQotc3RhdGljIHZlY3RvciBzaWduZWQgX19pbnQxMjggX19BVFRSU19vX2FpCi12ZWNfdmFkZHVxbSh2ZWN0b3Igc2lnbmVkIF9faW50MTI4IF9fYSwgdmVjdG9yIHNpZ25lZCBfX2ludDEyOCBfX2IpIHsKLSAgcmV0dXJuIF9fYSArIF9fYjsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBfX2ludDEyOCBfX0FUVFJTX29fYWkKLXZlY192YWRkdXFtKHZlY3RvciB1bnNpZ25lZCBfX2ludDEyOCBfX2EsIHZlY3RvciB1bnNpZ25lZCBfX2ludDEyOCBfX2IpIHsKLSAgcmV0dXJuIF9fYSArIF9fYjsKLX0KLQotLyogdmVjX3ZhZGRldXFtICovCi0KLXN0YXRpYyB2ZWN0b3Igc2lnbmVkIF9faW50MTI4IF9fQVRUUlNfb19haQotdmVjX3ZhZGRldXFtKHZlY3RvciBzaWduZWQgX19pbnQxMjggX19hLCB2ZWN0b3Igc2lnbmVkIF9faW50MTI4IF9fYiwKLSAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIF9faW50MTI4IF9fYykgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmFkZGV1cW0oX19hLCBfX2IsIF9fYyk7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgX19pbnQxMjggX19BVFRSU19vX2FpCi12ZWNfdmFkZGV1cW0odmVjdG9yIHVuc2lnbmVkIF9faW50MTI4IF9fYSwgdmVjdG9yIHVuc2lnbmVkIF9faW50MTI4IF9fYiwKLSAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgX19pbnQxMjggX19jKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192YWRkZXVxbShfX2EsIF9fYiwgX19jKTsKLX0KLQotLyogdmVjX3ZhZGRjdXEgKi8KLQotc3RhdGljIHZlY3RvciBzaWduZWQgX19pbnQxMjggX19BVFRSU19vX2FpCi12ZWNfdmFkZGN1cSh2ZWN0b3Igc2lnbmVkIF9faW50MTI4IF9fYSwgdmVjdG9yIHNpZ25lZCBfX2ludDEyOCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZhZGRjdXEoX19hLCBfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIF9faW50MTI4IF9fQVRUUlNfb19haQotdmVjX3ZhZGRjdXEodmVjdG9yIHVuc2lnbmVkIF9faW50MTI4IF9fYSwgdmVjdG9yIHVuc2lnbmVkIF9faW50MTI4IF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmFkZGN1cShfX2EsIF9fYik7Ci19Ci0KLS8qIHZlY192YWRkZWN1cSAqLwotCi1zdGF0aWMgdmVjdG9yIHNpZ25lZCBfX2ludDEyOCBfX0FUVFJTX29fYWkKLXZlY192YWRkZWN1cSh2ZWN0b3Igc2lnbmVkIF9faW50MTI4IF9fYSwgdmVjdG9yIHNpZ25lZCBfX2ludDEyOCBfX2IsCi0gICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBfX2ludDEyOCBfX2MpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZhZGRlY3VxKF9fYSwgX19iLCBfX2MpOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIF9faW50MTI4IF9fQVRUUlNfb19haQotdmVjX3ZhZGRlY3VxKHZlY3RvciB1bnNpZ25lZCBfX2ludDEyOCBfX2EsIHZlY3RvciB1bnNpZ25lZCBfX2ludDEyOCBfX2IsCi0gICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIF9faW50MTI4IF9fYykgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmFkZGVjdXEoX19hLCBfX2IsIF9fYyk7Ci19Ci0jZW5kaWYgLy8gZGVmaW5lZChfX1BPV0VSOF9WRUNUT1JfXykgJiYgZGVmaW5lZChfX3Bvd2VycGM2NF9fKQotCi0vKiB2ZWNfYW5kICovCi0KLSNkZWZpbmUgX19idWlsdGluX2FsdGl2ZWNfdmFuZCB2ZWNfYW5kCi0KLXN0YXRpYyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY19hbmQodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gX19hICYgX19iOwotfQotCi1zdGF0aWMgdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfYW5kKHZlY3RvciBib29sIGNoYXIgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYSAmIF9fYjsKLX0KLQotc3RhdGljIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX2FuZCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgewotICByZXR1cm4gX19hICYgKHZlY3RvciBzaWduZWQgY2hhcilfX2I7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX2FuZCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7Ci0gIHJldHVybiBfX2EgJiBfX2I7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX2FuZCh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EgJiBfX2I7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX2FuZCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKLSAgcmV0dXJuIF9fYSAmICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2I7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgYm9vbCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfYW5kKHZlY3RvciBib29sIGNoYXIgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKLSAgcmV0dXJuIF9fYSAmIF9fYjsKLX0KLQotc3RhdGljIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX2FuZCh2ZWN0b3Igc2hvcnQgX19hLCB2ZWN0b3Igc2hvcnQgX19iKSB7Ci0gIHJldHVybiBfX2EgJiBfX2I7Ci19Ci0KLXN0YXRpYyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY19hbmQodmVjdG9yIGJvb2wgc2hvcnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2hvcnQgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHNob3J0KV9fYSAmIF9fYjsKLX0KLQotc3RhdGljIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX2FuZCh2ZWN0b3Igc2hvcnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuIF9fYSAmICh2ZWN0b3Igc2hvcnQpX19iOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfYW5kKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuIF9fYSAmIF9fYjsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX2FuZCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hICYgX19iOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfYW5kKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIHNob3J0IF9fYikgewotICByZXR1cm4gX19hICYgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2I7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgYm9vbCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX2FuZCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7Ci0gIHJldHVybiBfX2EgJiBfX2I7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfYW5kKHZlY3RvciBpbnQgX19hLCB2ZWN0b3IgaW50IF9fYikgewotICByZXR1cm4gX19hICYgX19iOwotfQotCi1zdGF0aWMgdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX2FuZCh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgaW50IF9fYikgewotICByZXR1cm4gKHZlY3RvciBpbnQpX19hICYgX19iOwotfQotCi1zdGF0aWMgdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX2FuZCh2ZWN0b3IgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYikgewotICByZXR1cm4gX19hICYgKHZlY3RvciBpbnQpX19iOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkgdmVjX2FuZCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7Ci0gIHJldHVybiBfX2EgJiBfX2I7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haSB2ZWNfYW5kKHZlY3RvciBib29sIGludCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgewotICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hICYgX19iOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkgdmVjX2FuZCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGludCBfX2IpIHsKLSAgcmV0dXJuIF9fYSAmICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYjsKLX0KLQotc3RhdGljIHZlY3RvciBib29sIGludCBfX0FUVFJTX29fYWkgdmVjX2FuZCh2ZWN0b3IgYm9vbCBpbnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7Ci0gIHJldHVybiBfX2EgJiBfX2I7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgZmxvYXQgX19BVFRSU19vX2FpIHZlY19hbmQodmVjdG9yIGZsb2F0IF9fYSwgdmVjdG9yIGZsb2F0IF9fYikgewotICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fcmVzID0KLSAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSAmICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYjsKLSAgcmV0dXJuICh2ZWN0b3IgZmxvYXQpX19yZXM7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgZmxvYXQgX19BVFRSU19vX2FpIHZlY19hbmQodmVjdG9yIGJvb2wgaW50IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGZsb2F0IF9fYikgewotICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fcmVzID0KLSAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSAmICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYjsKLSAgcmV0dXJuICh2ZWN0b3IgZmxvYXQpX19yZXM7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgZmxvYXQgX19BVFRSU19vX2FpIHZlY19hbmQodmVjdG9yIGZsb2F0IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgaW50IF9fYikgewotICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fcmVzID0KLSAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSAmICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYjsKLSAgcmV0dXJuICh2ZWN0b3IgZmxvYXQpX19yZXM7Ci19Ci0KLSNpZmRlZiBfX1ZTWF9fCi1zdGF0aWMgdmVjdG9yIGRvdWJsZSBfX0FUVFJTX29fYWkgdmVjX2FuZCh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgZG91YmxlIF9fYikgewotICB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fcmVzID0KLSAgICAgICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYSAmICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYjsKLSAgcmV0dXJuICh2ZWN0b3IgZG91YmxlKV9fcmVzOwotfQotCi1zdGF0aWMgdmVjdG9yIGRvdWJsZSBfX0FUVFJTX29fYWkgdmVjX2FuZCh2ZWN0b3IgZG91YmxlIF9fYSwgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgewotICB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fcmVzID0KLSAgICAgICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYSAmICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYjsKLSAgcmV0dXJuICh2ZWN0b3IgZG91YmxlKV9fcmVzOwotfQotCi1zdGF0aWMgdmVjdG9yIGRvdWJsZSBfX0FUVFJTX29fYWkgdmVjX2FuZCh2ZWN0b3IgZG91YmxlIF9fYSwgdmVjdG9yIGRvdWJsZSBfX2IpIHsKLSAgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX3JlcyA9Ci0gICAgICAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2EgJiAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2I7Ci0gIHJldHVybiAodmVjdG9yIGRvdWJsZSlfX3JlczsKLX0KLQotc3RhdGljIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQotdmVjX2FuZCh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgewotICByZXR1cm4gX19hICYgX19iOwotfQotCi1zdGF0aWMgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCi12ZWNfYW5kKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgewotICByZXR1cm4gKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYSAmIF9fYjsKLX0KLQotc3RhdGljIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haSB2ZWNfYW5kKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7Ci0gIHJldHVybiBfX2EgJiAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19iOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKLXZlY19hbmQodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7Ci0gIHJldHVybiBfX2EgJiBfX2I7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQotdmVjX2FuZCh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgewotICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19hICYgX19iOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKLXZlY19hbmQodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKLSAgcmV0dXJuIF9fYSAmICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYjsKLX0KLQotc3RhdGljIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkgdmVjX2FuZCh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7Ci0gIHJldHVybiBfX2EgJiBfX2I7Ci19Ci0jZW5kaWYKLQotLyogdmVjX3ZhbmQgKi8KLQotc3RhdGljIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX3ZhbmQodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKLSAgcmV0dXJuIF9fYSAmIF9fYjsKLX0KLQotc3RhdGljIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX3ZhbmQodmVjdG9yIGJvb2wgY2hhciBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYSAmIF9fYjsKLX0KLQotc3RhdGljIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX3ZhbmQodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGNoYXIgX19iKSB7Ci0gIHJldHVybiBfX2EgJiAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYjsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfdmFuZCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gX19hICYgX19iOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY192YW5kKHZlY3RvciBib29sIGNoYXIgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EgJiBfX2I7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX3ZhbmQodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgewotICByZXR1cm4gX19hICYgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYjsKLX0KLQotc3RhdGljIHZlY3RvciBib29sIGNoYXIgX19BVFRSU19vX2FpIHZlY192YW5kKHZlY3RvciBib29sIGNoYXIgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGNoYXIgX19iKSB7Ci0gIHJldHVybiBfX2EgJiBfX2I7Ci19Ci0KLXN0YXRpYyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY192YW5kKHZlY3RvciBzaG9ydCBfX2EsIHZlY3RvciBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuIF9fYSAmIF9fYjsKLX0KLQotc3RhdGljIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3ZhbmQodmVjdG9yIGJvb2wgc2hvcnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNob3J0IF9fYikgewotICByZXR1cm4gKHZlY3RvciBzaG9ydClfX2EgJiBfX2I7Ci19Ci0KLXN0YXRpYyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY192YW5kKHZlY3RvciBzaG9ydCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuIF9fYSAmICh2ZWN0b3Igc2hvcnQpX19iOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfdmFuZCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgewotICByZXR1cm4gX19hICYgX19iOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfdmFuZCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSAmIF9fYjsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3ZhbmQodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIHNob3J0IF9fYikgewotICByZXR1cm4gX19hICYgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2I7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgYm9vbCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3ZhbmQodmVjdG9yIGJvb2wgc2hvcnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuIF9fYSAmIF9fYjsKLX0KLQotc3RhdGljIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY192YW5kKHZlY3RvciBpbnQgX19hLCB2ZWN0b3IgaW50IF9fYikgewotICByZXR1cm4gX19hICYgX19iOwotfQotCi1zdGF0aWMgdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX3ZhbmQodmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIGludCBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgaW50KV9fYSAmIF9fYjsKLX0KLQotc3RhdGljIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY192YW5kKHZlY3RvciBpbnQgX19hLCB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7Ci0gIHJldHVybiBfX2EgJiAodmVjdG9yIGludClfX2I7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haSB2ZWNfdmFuZCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgewotICByZXR1cm4gX19hICYgX19iOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkgdmVjX3ZhbmQodmVjdG9yIGJvb2wgaW50IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgewotICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hICYgX19iOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkgdmVjX3ZhbmQodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgaW50IF9fYikgewotICByZXR1cm4gX19hICYgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iOwotfQotCi1zdGF0aWMgdmVjdG9yIGJvb2wgaW50IF9fQVRUUlNfb19haSB2ZWNfdmFuZCh2ZWN0b3IgYm9vbCBpbnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgaW50IF9fYikgewotICByZXR1cm4gX19hICYgX19iOwotfQotCi1zdGF0aWMgdmVjdG9yIGZsb2F0IF9fQVRUUlNfb19haSB2ZWNfdmFuZCh2ZWN0b3IgZmxvYXQgX19hLCB2ZWN0b3IgZmxvYXQgX19iKSB7Ci0gIHZlY3RvciB1bnNpZ25lZCBpbnQgX19yZXMgPQotICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hICYgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iOwotICByZXR1cm4gKHZlY3RvciBmbG9hdClfX3JlczsKLX0KLQotc3RhdGljIHZlY3RvciBmbG9hdCBfX0FUVFJTX29fYWkgdmVjX3ZhbmQodmVjdG9yIGJvb2wgaW50IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBmbG9hdCBfX2IpIHsKLSAgdmVjdG9yIHVuc2lnbmVkIGludCBfX3JlcyA9Ci0gICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2EgJiAodmVjdG9yIHVuc2lnbmVkIGludClfX2I7Ci0gIHJldHVybiAodmVjdG9yIGZsb2F0KV9fcmVzOwotfQotCi1zdGF0aWMgdmVjdG9yIGZsb2F0IF9fQVRUUlNfb19haSB2ZWNfdmFuZCh2ZWN0b3IgZmxvYXQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgaW50IF9fYikgewotICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fcmVzID0KLSAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSAmICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYjsKLSAgcmV0dXJuICh2ZWN0b3IgZmxvYXQpX19yZXM7Ci19Ci0KLSNpZmRlZiBfX1ZTWF9fCi1zdGF0aWMgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCi12ZWNfdmFuZCh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgewotICByZXR1cm4gX19hICYgX19iOwotfQotCi1zdGF0aWMgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCi12ZWNfdmFuZCh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2EgJiBfX2I7Ci19Ci0KLXN0YXRpYyB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKLXZlY192YW5kKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgewotICByZXR1cm4gX19hICYgKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYjsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCi12ZWNfdmFuZCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKLSAgcmV0dXJuIF9fYSAmIF9fYjsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCi12ZWNfdmFuZCh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgewotICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19hICYgX19iOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKLXZlY192YW5kKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7Ci0gIHJldHVybiBfX2EgJiAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2I7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19BVFRSU19vX2FpIHZlY192YW5kKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7Ci0gIHJldHVybiBfX2EgJiBfX2I7Ci19Ci0jZW5kaWYKLQotLyogdmVjX2FuZGMgKi8KLQotI2RlZmluZSBfX2J1aWx0aW5fYWx0aXZlY192YW5kYyB2ZWNfYW5kYwotCi1zdGF0aWMgdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfYW5kYyh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gX19hICYgfl9fYjsKLX0KLQotc3RhdGljIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX2FuZGModmVjdG9yIGJvb2wgY2hhciBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYSAmIH5fX2I7Ci19Ci0KLXN0YXRpYyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY19hbmRjKHZlY3RvciBzaWduZWQgY2hhciBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgewotICByZXR1cm4gX19hICYgfih2ZWN0b3Igc2lnbmVkIGNoYXIpX19iOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY19hbmRjKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7Ci0gIHJldHVybiBfX2EgJiB+X19iOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY19hbmRjKHZlY3RvciBib29sIGNoYXIgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EgJiB+X19iOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY19hbmRjKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKLSAgcmV0dXJuIF9fYSAmIH4odmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iOwotfQotCi1zdGF0aWMgdmVjdG9yIGJvb2wgY2hhciBfX0FUVFJTX29fYWkgdmVjX2FuZGModmVjdG9yIGJvb2wgY2hhciBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKLSAgcmV0dXJuIF9fYSAmIH5fX2I7Ci19Ci0KLXN0YXRpYyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY19hbmRjKHZlY3RvciBzaG9ydCBfX2EsIHZlY3RvciBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuIF9fYSAmIH5fX2I7Ci19Ci0KLXN0YXRpYyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY19hbmRjKHZlY3RvciBib29sIHNob3J0IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3Igc2hvcnQpX19hICYgfl9fYjsKLX0KLQotc3RhdGljIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX2FuZGModmVjdG9yIHNob3J0IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIHNob3J0IF9fYikgewotICByZXR1cm4gX19hICYgfih2ZWN0b3Igc2hvcnQpX19iOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfYW5kYyh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgewotICByZXR1cm4gX19hICYgfl9fYjsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX2FuZGModmVjdG9yIGJvb2wgc2hvcnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgewotICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EgJiB+X19iOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfYW5kYyh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7Ci0gIHJldHVybiBfX2EgJiB+KHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2I7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgYm9vbCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX2FuZGModmVjdG9yIGJvb2wgc2hvcnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuIF9fYSAmIH5fX2I7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfYW5kYyh2ZWN0b3IgaW50IF9fYSwgdmVjdG9yIGludCBfX2IpIHsKLSAgcmV0dXJuIF9fYSAmIH5fX2I7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfYW5kYyh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgaW50IF9fYikgewotICByZXR1cm4gKHZlY3RvciBpbnQpX19hICYgfl9fYjsKLX0KLQotc3RhdGljIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY19hbmRjKHZlY3RvciBpbnQgX19hLCB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7Ci0gIHJldHVybiBfX2EgJiB+KHZlY3RvciBpbnQpX19iOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkgdmVjX2FuZGModmVjdG9yIHVuc2lnbmVkIGludCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKLSAgcmV0dXJuIF9fYSAmIH5fX2I7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haSB2ZWNfYW5kYyh2ZWN0b3IgYm9vbCBpbnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGludClfX2EgJiB+X19iOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkgdmVjX2FuZGModmVjdG9yIHVuc2lnbmVkIGludCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgaW50IF9fYikgewotICByZXR1cm4gX19hICYgfih2ZWN0b3IgdW5zaWduZWQgaW50KV9fYjsKLX0KLQotc3RhdGljIHZlY3RvciBib29sIGludCBfX0FUVFJTX29fYWkgdmVjX2FuZGModmVjdG9yIGJvb2wgaW50IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGludCBfX2IpIHsKLSAgcmV0dXJuIF9fYSAmIH5fX2I7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgZmxvYXQgX19BVFRSU19vX2FpIHZlY19hbmRjKHZlY3RvciBmbG9hdCBfX2EsIHZlY3RvciBmbG9hdCBfX2IpIHsKLSAgdmVjdG9yIHVuc2lnbmVkIGludCBfX3JlcyA9Ci0gICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2EgJiB+KHZlY3RvciB1bnNpZ25lZCBpbnQpX19iOwotICByZXR1cm4gKHZlY3RvciBmbG9hdClfX3JlczsKLX0KLQotc3RhdGljIHZlY3RvciBmbG9hdCBfX0FUVFJTX29fYWkgdmVjX2FuZGModmVjdG9yIGJvb2wgaW50IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBmbG9hdCBfX2IpIHsKLSAgdmVjdG9yIHVuc2lnbmVkIGludCBfX3JlcyA9Ci0gICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2EgJiB+KHZlY3RvciB1bnNpZ25lZCBpbnQpX19iOwotICByZXR1cm4gKHZlY3RvciBmbG9hdClfX3JlczsKLX0KLQotc3RhdGljIHZlY3RvciBmbG9hdCBfX0FUVFJTX29fYWkgdmVjX2FuZGModmVjdG9yIGZsb2F0IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGludCBfX2IpIHsKLSAgdmVjdG9yIHVuc2lnbmVkIGludCBfX3JlcyA9Ci0gICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2EgJiB+KHZlY3RvciB1bnNpZ25lZCBpbnQpX19iOwotICByZXR1cm4gKHZlY3RvciBmbG9hdClfX3JlczsKLX0KLQotI2lmZGVmIF9fVlNYX18KLXN0YXRpYyB2ZWN0b3IgZG91YmxlIF9fQVRUUlNfb19haQotdmVjX2FuZGModmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIGRvdWJsZSBfX2IpIHsKLSAgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX3JlcyA9Ci0gICAgICAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2EgJiB+KHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19iOwotICByZXR1cm4gKHZlY3RvciBkb3VibGUpX19yZXM7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgZG91YmxlIF9fQVRUUlNfb19haQotdmVjX2FuZGModmVjdG9yIGRvdWJsZSBfX2EsIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKLSAgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX3JlcyA9Ci0gICAgICAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2EgJiB+KHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19iOwotICByZXR1cm4gKHZlY3RvciBkb3VibGUpX19yZXM7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgZG91YmxlIF9fQVRUUlNfb19haSB2ZWNfYW5kYyh2ZWN0b3IgZG91YmxlIF9fYSwgdmVjdG9yIGRvdWJsZSBfX2IpIHsKLSAgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX3JlcyA9Ci0gICAgICAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2EgJiB+KHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19iOwotICByZXR1cm4gKHZlY3RvciBkb3VibGUpX19yZXM7Ci19Ci0KLXN0YXRpYyB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKLXZlY19hbmRjKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7Ci0gIHJldHVybiBfX2EgJiB+X19iOwotfQotCi1zdGF0aWMgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCi12ZWNfYW5kYyh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2EgJiB+X19iOwotfQotCi1zdGF0aWMgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCi12ZWNfYW5kYyh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKLSAgcmV0dXJuIF9fYSAmIH4odmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19iOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKLXZlY19hbmRjKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgewotICByZXR1cm4gX19hICYgfl9fYjsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCi12ZWNfYW5kYyh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgewotICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19hICYgfl9fYjsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCi12ZWNfYW5kYyh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgewotICByZXR1cm4gX19hICYgfih2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYjsKLX0KLQotc3RhdGljIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkgdmVjX2FuZGModmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKLSAgcmV0dXJuIF9fYSAmIH5fX2I7Ci19Ci0jZW5kaWYKLQotLyogdmVjX3ZhbmRjICovCi0KLXN0YXRpYyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY192YW5kYyh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKLSAgcmV0dXJuIF9fYSAmIH5fX2I7Ci19Ci0KLXN0YXRpYyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY192YW5kYyh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYSAmIH5fX2I7Ci19Ci0KLXN0YXRpYyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY192YW5kYyh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGNoYXIgX19iKSB7Ci0gIHJldHVybiBfX2EgJiB+KHZlY3RvciBzaWduZWQgY2hhcilfX2I7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX3ZhbmRjKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gX19hICYgfl9fYjsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfdmFuZGModmVjdG9yIGJvb2wgY2hhciBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EgJiB+X19iOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY192YW5kYyh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgewotICByZXR1cm4gX19hICYgfih2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2I7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgYm9vbCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfdmFuZGModmVjdG9yIGJvb2wgY2hhciBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGNoYXIgX19iKSB7Ci0gIHJldHVybiBfX2EgJiB+X19iOwotfQotCi1zdGF0aWMgdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfdmFuZGModmVjdG9yIHNob3J0IF9fYSwgdmVjdG9yIHNob3J0IF9fYikgewotICByZXR1cm4gX19hICYgfl9fYjsKLX0KLQotc3RhdGljIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3ZhbmRjKHZlY3RvciBib29sIHNob3J0IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2hvcnQgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHNob3J0KV9fYSAmIH5fX2I7Ci19Ci0KLXN0YXRpYyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY192YW5kYyh2ZWN0b3Igc2hvcnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIHNob3J0IF9fYikgewotICByZXR1cm4gX19hICYgfih2ZWN0b3Igc2hvcnQpX19iOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfdmFuZGModmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7Ci0gIHJldHVybiBfX2EgJiB+X19iOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfdmFuZGModmVjdG9yIGJvb2wgc2hvcnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hICYgfl9fYjsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3ZhbmRjKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7Ci0gIHJldHVybiBfX2EgJiB+KHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2I7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgYm9vbCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3ZhbmRjKHZlY3RvciBib29sIHNob3J0IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIHNob3J0IF9fYikgewotICByZXR1cm4gX19hICYgfl9fYjsKLX0KLQotc3RhdGljIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY192YW5kYyh2ZWN0b3IgaW50IF9fYSwgdmVjdG9yIGludCBfX2IpIHsKLSAgcmV0dXJuIF9fYSAmIH5fX2I7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfdmFuZGModmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIGludCBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgaW50KV9fYSAmIH5fX2I7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfdmFuZGModmVjdG9yIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IpIHsKLSAgcmV0dXJuIF9fYSAmIH4odmVjdG9yIGludClfX2I7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haSB2ZWNfdmFuZGModmVjdG9yIHVuc2lnbmVkIGludCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7Ci0gIHJldHVybiBfX2EgJiB+X19iOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkgdmVjX3ZhbmRjKHZlY3RvciBib29sIGludCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGludClfX2EgJiB+X19iOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkgdmVjX3ZhbmRjKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7Ci0gIHJldHVybiBfX2EgJiB+KHZlY3RvciB1bnNpZ25lZCBpbnQpX19iOwotfQotCi1zdGF0aWMgdmVjdG9yIGJvb2wgaW50IF9fQVRUUlNfb19haSB2ZWNfdmFuZGModmVjdG9yIGJvb2wgaW50IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7Ci0gIHJldHVybiBfX2EgJiB+X19iOwotfQotCi1zdGF0aWMgdmVjdG9yIGZsb2F0IF9fQVRUUlNfb19haSB2ZWNfdmFuZGModmVjdG9yIGZsb2F0IF9fYSwgdmVjdG9yIGZsb2F0IF9fYikgewotICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fcmVzID0KLSAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSAmIH4odmVjdG9yIHVuc2lnbmVkIGludClfX2I7Ci0gIHJldHVybiAodmVjdG9yIGZsb2F0KV9fcmVzOwotfQotCi1zdGF0aWMgdmVjdG9yIGZsb2F0IF9fQVRUUlNfb19haSB2ZWNfdmFuZGModmVjdG9yIGJvb2wgaW50IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgZmxvYXQgX19iKSB7Ci0gIHZlY3RvciB1bnNpZ25lZCBpbnQgX19yZXMgPQotICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hICYgfih2ZWN0b3IgdW5zaWduZWQgaW50KV9fYjsKLSAgcmV0dXJuICh2ZWN0b3IgZmxvYXQpX19yZXM7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgZmxvYXQgX19BVFRSU19vX2FpIHZlY192YW5kYyh2ZWN0b3IgZmxvYXQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGludCBfX2IpIHsKLSAgdmVjdG9yIHVuc2lnbmVkIGludCBfX3JlcyA9Ci0gICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2EgJiB+KHZlY3RvciB1bnNpZ25lZCBpbnQpX19iOwotICByZXR1cm4gKHZlY3RvciBmbG9hdClfX3JlczsKLX0KLQotI2lmZGVmIF9fVlNYX18KLXN0YXRpYyB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKLXZlY192YW5kYyh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgewotICByZXR1cm4gX19hICYgfl9fYjsKLX0KLQotc3RhdGljIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQotdmVjX3ZhbmRjKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgewotICByZXR1cm4gKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYSAmIH5fX2I7Ci19Ci0KLXN0YXRpYyB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKLXZlY192YW5kYyh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKLSAgcmV0dXJuIF9fYSAmIH4odmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19iOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKLXZlY192YW5kYyh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKLSAgcmV0dXJuIF9fYSAmIH5fX2I7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQotdmVjX3ZhbmRjKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2EgJiB+X19iOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKLXZlY192YW5kYyh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgewotICByZXR1cm4gX19hICYgfih2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYjsKLX0KLQotc3RhdGljIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkgdmVjX3ZhbmRjKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgewotICByZXR1cm4gX19hICYgfl9fYjsKLX0KLSNlbmRpZgotCi0vKiB2ZWNfYXZnICovCi0KLXN0YXRpYyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY19hdmcodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmF2Z3NiKF9fYSwgX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfYXZnKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3Zhdmd1YihfX2EsIF9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY19hdmcodmVjdG9yIHNob3J0IF9fYSwgdmVjdG9yIHNob3J0IF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmF2Z3NoKF9fYSwgX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX2F2Zyh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192YXZndWgoX19hLCBfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX2F2Zyh2ZWN0b3IgaW50IF9fYSwgdmVjdG9yIGludCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZhdmdzdyhfX2EsIF9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haSB2ZWNfYXZnKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3Zhdmd1dyhfX2EsIF9fYik7Ci19Ci0KLS8qIHZlY192YXZnc2IgKi8KLQotc3RhdGljIHZlY3RvciBzaWduZWQgY2hhciBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCi12ZWNfdmF2Z3NiKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZhdmdzYihfX2EsIF9fYik7Ci19Ci0KLS8qIHZlY192YXZndWIgKi8KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKLXZlY192YXZndWIodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3Zhdmd1YihfX2EsIF9fYik7Ci19Ci0KLS8qIHZlY192YXZnc2ggKi8KLQotc3RhdGljIHZlY3RvciBzaG9ydCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCi12ZWNfdmF2Z3NoKHZlY3RvciBzaG9ydCBfX2EsIHZlY3RvciBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZhdmdzaChfX2EsIF9fYik7Ci19Ci0KLS8qIHZlY192YXZndWggKi8KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCi12ZWNfdmF2Z3VoKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3Zhdmd1aChfX2EsIF9fYik7Ci19Ci0KLS8qIHZlY192YXZnc3cgKi8KLQotc3RhdGljIHZlY3RvciBpbnQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQotdmVjX3Zhdmdzdyh2ZWN0b3IgaW50IF9fYSwgdmVjdG9yIGludCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZhdmdzdyhfX2EsIF9fYik7Ci19Ci0KLS8qIHZlY192YXZndXcgKi8KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBpbnQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQotdmVjX3Zhdmd1dyh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3Zhdmd1dyhfX2EsIF9fYik7Ci19Ci0KLS8qIHZlY19jZWlsICovCi0KLXN0YXRpYyB2ZWN0b3IgZmxvYXQgX19BVFRSU19vX2FpIHZlY19jZWlsKHZlY3RvciBmbG9hdCBfX2EpIHsKLSNpZmRlZiBfX1ZTWF9fCi0gIHJldHVybiBfX2J1aWx0aW5fdnN4X3h2cnNwaXAoX19hKTsKLSNlbHNlCi0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192cmZpcChfX2EpOwotI2VuZGlmCi19Ci0KLSNpZmRlZiBfX1ZTWF9fCi1zdGF0aWMgdmVjdG9yIGRvdWJsZSBfX0FUVFJTX29fYWkgdmVjX2NlaWwodmVjdG9yIGRvdWJsZSBfX2EpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl92c3hfeHZyZHBpcChfX2EpOwotfQotI2VuZGlmCi0KLS8qIHZlY192cmZpcCAqLwotCi1zdGF0aWMgdmVjdG9yIGZsb2F0IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKLXZlY192cmZpcCh2ZWN0b3IgZmxvYXQgX19hKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192cmZpcChfX2EpOwotfQotCi0vKiB2ZWNfY21wYiAqLwotCi1zdGF0aWMgdmVjdG9yIGludCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCi12ZWNfY21wYih2ZWN0b3IgZmxvYXQgX19hLCB2ZWN0b3IgZmxvYXQgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wYmZwKF9fYSwgX19iKTsKLX0KLQotLyogdmVjX3ZjbXBiZnAgKi8KLQotc3RhdGljIHZlY3RvciBpbnQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQotdmVjX3ZjbXBiZnAodmVjdG9yIGZsb2F0IF9fYSwgdmVjdG9yIGZsb2F0IF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGJmcChfX2EsIF9fYik7Ci19Ci0KLS8qIHZlY19jbXBlcSAqLwotCi1zdGF0aWMgdmVjdG9yIGJvb2wgY2hhciBfX0FUVFJTX29fYWkgdmVjX2NtcGVxKHZlY3RvciBzaWduZWQgY2hhciBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgYm9vbCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXViKCh2ZWN0b3IgY2hhcilfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGNoYXIpX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciBib29sIGNoYXIgX19BVFRSU19vX2FpIHZlY19jbXBlcSh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gKHZlY3RvciBib29sIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdWIoKHZlY3RvciBjaGFyKV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgY2hhcilfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIGJvb2wgc2hvcnQgX19BVFRSU19vX2FpIHZlY19jbXBlcSh2ZWN0b3Igc2hvcnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNob3J0IF9fYikgewotICByZXR1cm4gKHZlY3RvciBib29sIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXVoKF9fYSwgX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciBib29sIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfY21wZXEodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgYm9vbCBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1aCgodmVjdG9yIHNob3J0KV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNob3J0KV9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgYm9vbCBpbnQgX19BVFRSU19vX2FpIHZlY19jbXBlcSh2ZWN0b3IgaW50IF9fYSwgdmVjdG9yIGludCBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgYm9vbCBpbnQpX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdXcoX19hLCBfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIGJvb2wgaW50IF9fQVRUUlNfb19haSB2ZWNfY21wZXEodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgYm9vbCBpbnQpX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdXcoKHZlY3RvciBpbnQpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOwotfQotCi0jaWZkZWYgX19QT1dFUjhfVkVDVE9SX18KLXN0YXRpYyB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19BVFRSU19vX2FpCi12ZWNfY21wZXEodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgYm9vbCBsb25nIGxvbmcpX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdWQoX19hLCBfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fQVRUUlNfb19haQotdmVjX2NtcGVxKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgewotICByZXR1cm4gKHZlY3RvciBib29sIGxvbmcgbG9uZylfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1ZCgKLSAgICAgICh2ZWN0b3IgbG9uZyBsb25nKV9fYSwgKHZlY3RvciBsb25nIGxvbmcpX19iKTsKLX0KLSNlbmRpZgotCi1zdGF0aWMgdmVjdG9yIGJvb2wgaW50IF9fQVRUUlNfb19haSB2ZWNfY21wZXEodmVjdG9yIGZsb2F0IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgZmxvYXQgX19iKSB7Ci0jaWZkZWYgX19WU1hfXwotICByZXR1cm4gKHZlY3RvciBib29sIGludClfX2J1aWx0aW5fdnN4X3h2Y21wZXFzcChfX2EsIF9fYik7Ci0jZWxzZQotICByZXR1cm4gKHZlY3RvciBib29sIGludClfX2J1aWx0aW5fYWx0aXZlY192Y21wZXFmcChfX2EsIF9fYik7Ci0jZW5kaWYKLX0KLQotI2lmZGVmIF9fVlNYX18KLXN0YXRpYyB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19BVFRSU19vX2FpCi12ZWNfY21wZXEodmVjdG9yIGRvdWJsZSBfX2EsIHZlY3RvciBkb3VibGUgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIGJvb2wgbG9uZyBsb25nKV9fYnVpbHRpbl92c3hfeHZjbXBlcWRwKF9fYSwgX19iKTsKLX0KLSNlbmRpZgotCi0KLS8qIHZlY19jbXBndCAqLwotCi1zdGF0aWMgdmVjdG9yIGJvb2wgY2hhciBfX0FUVFJTX29fYWkgdmVjX2NtcGd0KHZlY3RvciBzaWduZWQgY2hhciBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgYm9vbCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHNiKF9fYSwgX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciBib29sIGNoYXIgX19BVFRSU19vX2FpIHZlY19jbXBndCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gKHZlY3RvciBib29sIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWIoX19hLCBfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIGJvb2wgc2hvcnQgX19BVFRSU19vX2FpIHZlY19jbXBndCh2ZWN0b3Igc2hvcnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNob3J0IF9fYikgewotICByZXR1cm4gKHZlY3RvciBib29sIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHNoKF9fYSwgX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciBib29sIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfY21wZ3QodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgYm9vbCBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1aChfX2EsIF9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgYm9vbCBpbnQgX19BVFRSU19vX2FpIHZlY19jbXBndCh2ZWN0b3IgaW50IF9fYSwgdmVjdG9yIGludCBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgYm9vbCBpbnQpX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0c3coX19hLCBfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIGJvb2wgaW50IF9fQVRUUlNfb19haSB2ZWNfY21wZ3QodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgYm9vbCBpbnQpX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dXcoX19hLCBfX2IpOwotfQotCi0jaWZkZWYgX19QT1dFUjhfVkVDVE9SX18KLXN0YXRpYyB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19BVFRSU19vX2FpCi12ZWNfY21wZ3QodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgYm9vbCBsb25nIGxvbmcpX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0c2QoX19hLCBfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fQVRUUlNfb19haQotdmVjX2NtcGd0KHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgewotICByZXR1cm4gKHZlY3RvciBib29sIGxvbmcgbG9uZylfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1ZChfX2EsIF9fYik7Ci19Ci0jZW5kaWYKLQotc3RhdGljIHZlY3RvciBib29sIGludCBfX0FUVFJTX29fYWkgdmVjX2NtcGd0KHZlY3RvciBmbG9hdCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGZsb2F0IF9fYikgewotI2lmZGVmIF9fVlNYX18KLSAgcmV0dXJuICh2ZWN0b3IgYm9vbCBpbnQpX19idWlsdGluX3ZzeF94dmNtcGd0c3AoX19hLCBfX2IpOwotI2Vsc2UKLSAgcmV0dXJuICh2ZWN0b3IgYm9vbCBpbnQpX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0ZnAoX19hLCBfX2IpOwotI2VuZGlmCi19Ci0KLSNpZmRlZiBfX1ZTWF9fCi1zdGF0aWMgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fQVRUUlNfb19haQotdmVjX2NtcGd0KHZlY3RvciBkb3VibGUgX19hLCB2ZWN0b3IgZG91YmxlIF9fYikgewotICByZXR1cm4gKHZlY3RvciBib29sIGxvbmcgbG9uZylfX2J1aWx0aW5fdnN4X3h2Y21wZ3RkcChfX2EsIF9fYik7Ci19Ci0jZW5kaWYKLQotLyogdmVjX2NtcGdlICovCi0KLXN0YXRpYyB2ZWN0b3IgYm9vbCBjaGFyIF9fQVRUUlNfb19haQotdmVjX2NtcGdlICh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7Ci0gIHJldHVybiB+KHZlY19jbXBndChfX2IsIF9fYSkpOwotfQotCi1zdGF0aWMgdmVjdG9yIGJvb2wgY2hhciBfX0FUVFJTX29fYWkKLXZlY19jbXBnZSAodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKLSAgcmV0dXJuIH4odmVjX2NtcGd0KF9fYiwgX19hKSk7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgYm9vbCBzaG9ydCBfX0FUVFJTX29fYWkKLXZlY19jbXBnZSAodmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBzaWduZWQgc2hvcnQgX19iKSB7Ci0gIHJldHVybiB+KHZlY19jbXBndChfX2IsIF9fYSkpOwotfQotCi1zdGF0aWMgdmVjdG9yIGJvb2wgc2hvcnQgX19BVFRSU19vX2FpCi12ZWNfY21wZ2UgKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuIH4odmVjX2NtcGd0KF9fYiwgX19hKSk7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgYm9vbCBpbnQgX19BVFRSU19vX2FpCi12ZWNfY21wZ2UgKHZlY3RvciBzaWduZWQgaW50IF9fYSwgdmVjdG9yIHNpZ25lZCBpbnQgX19iKSB7Ci0gIHJldHVybiB+KHZlY19jbXBndChfX2IsIF9fYSkpOwotfQotCi1zdGF0aWMgdmVjdG9yIGJvb2wgaW50IF9fQVRUUlNfb19haQotdmVjX2NtcGdlICh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKLSAgcmV0dXJuIH4odmVjX2NtcGd0KF9fYiwgX19hKSk7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgYm9vbCBpbnQgX19BVFRSU19vX2FpCi12ZWNfY21wZ2UodmVjdG9yIGZsb2F0IF9fYSwgdmVjdG9yIGZsb2F0IF9fYikgewotI2lmZGVmIF9fVlNYX18KLSAgcmV0dXJuICh2ZWN0b3IgYm9vbCBpbnQpX19idWlsdGluX3ZzeF94dmNtcGdlc3AoX19hLCBfX2IpOwotI2Vsc2UKLSAgcmV0dXJuICh2ZWN0b3IgYm9vbCBpbnQpX19idWlsdGluX2FsdGl2ZWNfdmNtcGdlZnAoX19hLCBfX2IpOwotI2VuZGlmCi19Ci0KLSNpZmRlZiBfX1ZTWF9fCi1zdGF0aWMgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fQVRUUlNfb19haQotdmVjX2NtcGdlKHZlY3RvciBkb3VibGUgX19hLCB2ZWN0b3IgZG91YmxlIF9fYikgewotICByZXR1cm4gKHZlY3RvciBib29sIGxvbmcgbG9uZylfX2J1aWx0aW5fdnN4X3h2Y21wZ2VkcChfX2EsIF9fYik7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fUE9XRVI4X1ZFQ1RPUl9fCi1zdGF0aWMgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fQVRUUlNfb19haQotdmVjX2NtcGdlKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7Ci0gIHJldHVybiB+KHZlY19jbXBndChfX2IsIF9fYSkpOwotfQotCi1zdGF0aWMgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fQVRUUlNfb19haQotdmVjX2NtcGdlKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgewotICByZXR1cm4gfih2ZWNfY21wZ3QoX19iLCBfX2EpKTsKLX0KLSNlbmRpZgotCi0vKiB2ZWNfdmNtcGdlZnAgKi8KLQotc3RhdGljIHZlY3RvciBib29sIGludCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCi12ZWNfdmNtcGdlZnAodmVjdG9yIGZsb2F0IF9fYSwgdmVjdG9yIGZsb2F0IF9fYikgewotICByZXR1cm4gKHZlY3RvciBib29sIGludClfX2J1aWx0aW5fYWx0aXZlY192Y21wZ2VmcChfX2EsIF9fYik7Ci19Ci0KLS8qIHZlY192Y21wZ3RzYiAqLwotCi1zdGF0aWMgdmVjdG9yIGJvb2wgY2hhciBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCi12ZWNfdmNtcGd0c2IodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gKHZlY3RvciBib29sIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0c2IoX19hLCBfX2IpOwotfQotCi0vKiB2ZWNfdmNtcGd0dWIgKi8KLQotc3RhdGljIHZlY3RvciBib29sIGNoYXIgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQotdmVjX3ZjbXBndHViKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIGJvb2wgY2hhcilfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1YihfX2EsIF9fYik7Ci19Ci0KLS8qIHZlY192Y21wZ3RzaCAqLwotCi1zdGF0aWMgdmVjdG9yIGJvb2wgc2hvcnQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQotdmVjX3ZjbXBndHNoKHZlY3RvciBzaG9ydCBfX2EsIHZlY3RvciBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgYm9vbCBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3RzaChfX2EsIF9fYik7Ci19Ci0KLS8qIHZlY192Y21wZ3R1aCAqLwotCi1zdGF0aWMgdmVjdG9yIGJvb2wgc2hvcnQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQotdmVjX3ZjbXBndHVoKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgYm9vbCBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1aChfX2EsIF9fYik7Ci19Ci0KLS8qIHZlY192Y21wZ3RzdyAqLwotCi1zdGF0aWMgdmVjdG9yIGJvb2wgaW50IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKLXZlY192Y21wZ3Rzdyh2ZWN0b3IgaW50IF9fYSwgdmVjdG9yIGludCBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgYm9vbCBpbnQpX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0c3coX19hLCBfX2IpOwotfQotCi0vKiB2ZWNfdmNtcGd0dXcgKi8KLQotc3RhdGljIHZlY3RvciBib29sIGludCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCi12ZWNfdmNtcGd0dXcodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIGJvb2wgaW50KV9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHV3KF9fYSwgX19iKTsKLX0KLQotLyogdmVjX3ZjbXBndGZwICovCi0KLXN0YXRpYyB2ZWN0b3IgYm9vbCBpbnQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQotdmVjX3ZjbXBndGZwKHZlY3RvciBmbG9hdCBfX2EsIHZlY3RvciBmbG9hdCBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgYm9vbCBpbnQpX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0ZnAoX19hLCBfX2IpOwotfQotCi0vKiB2ZWNfY21wbGUgKi8KLQotc3RhdGljIHZlY3RvciBib29sIGNoYXIgX19BVFRSU19vX2FpCi12ZWNfY21wbGUgKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKLSAgcmV0dXJuIHZlY19jbXBnZShfX2IsIF9fYSk7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgYm9vbCBjaGFyIF9fQVRUUlNfb19haQotdmVjX2NtcGxlICh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gdmVjX2NtcGdlKF9fYiwgX19hKTsKLX0KLQotc3RhdGljIHZlY3RvciBib29sIHNob3J0IF9fQVRUUlNfb19haQotdmVjX2NtcGxlICh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuIHZlY19jbXBnZShfX2IsIF9fYSk7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgYm9vbCBzaG9ydCBfX0FUVFJTX29fYWkKLXZlY19jbXBsZSAodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgewotICByZXR1cm4gdmVjX2NtcGdlKF9fYiwgX19hKTsKLX0KLQotc3RhdGljIHZlY3RvciBib29sIGludCBfX0FUVFJTX29fYWkKLXZlY19jbXBsZSAodmVjdG9yIHNpZ25lZCBpbnQgX19hLCB2ZWN0b3Igc2lnbmVkIGludCBfX2IpIHsKLSAgcmV0dXJuIHZlY19jbXBnZShfX2IsIF9fYSk7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgYm9vbCBpbnQgX19BVFRSU19vX2FpCi12ZWNfY21wbGUgKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgewotICByZXR1cm4gdmVjX2NtcGdlKF9fYiwgX19hKTsKLX0KLQotc3RhdGljIHZlY3RvciBib29sIGludCBfX0FUVFJTX29fYWkKLXZlY19jbXBsZSh2ZWN0b3IgZmxvYXQgX19hLCB2ZWN0b3IgZmxvYXQgX19iKSB7Ci0gIHJldHVybiB2ZWNfY21wZ2UoX19iLCBfX2EpOwotfQotCi0jaWZkZWYgX19WU1hfXwotc3RhdGljIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKLXZlY19jbXBsZSh2ZWN0b3IgZG91YmxlIF9fYSwgdmVjdG9yIGRvdWJsZSBfX2IpIHsKLSAgcmV0dXJuIHZlY19jbXBnZShfX2IsIF9fYSk7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fUE9XRVI4X1ZFQ1RPUl9fCi1zdGF0aWMgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fQVRUUlNfb19haQotdmVjX2NtcGxlKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7Ci0gIHJldHVybiB2ZWNfY21wZ2UoX19iLCBfX2EpOwotfQotCi1zdGF0aWMgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fQVRUUlNfb19haQotdmVjX2NtcGxlKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgewotICByZXR1cm4gdmVjX2NtcGdlKF9fYiwgX19hKTsKLX0KLSNlbmRpZgotCi0vKiB2ZWNfY21wbHQgKi8KLQotc3RhdGljIHZlY3RvciBib29sIGNoYXIgX19BVFRSU19vX2FpIHZlY19jbXBsdCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7Ci0gIHJldHVybiB2ZWNfY21wZ3QoX19iLCBfX2EpOwotfQotCi1zdGF0aWMgdmVjdG9yIGJvb2wgY2hhciBfX0FUVFJTX29fYWkgdmVjX2NtcGx0KHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7Ci0gIHJldHVybiB2ZWNfY21wZ3QoX19iLCBfX2EpOwotfQotCi1zdGF0aWMgdmVjdG9yIGJvb2wgc2hvcnQgX19BVFRSU19vX2FpIHZlY19jbXBsdCh2ZWN0b3Igc2hvcnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNob3J0IF9fYikgewotICByZXR1cm4gdmVjX2NtcGd0KF9fYiwgX19hKTsKLX0KLQotc3RhdGljIHZlY3RvciBib29sIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfY21wbHQodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuIHZlY19jbXBndChfX2IsIF9fYSk7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgYm9vbCBpbnQgX19BVFRSU19vX2FpIHZlY19jbXBsdCh2ZWN0b3IgaW50IF9fYSwgdmVjdG9yIGludCBfX2IpIHsKLSAgcmV0dXJuIHZlY19jbXBndChfX2IsIF9fYSk7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgYm9vbCBpbnQgX19BVFRSU19vX2FpIHZlY19jbXBsdCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgewotICByZXR1cm4gdmVjX2NtcGd0KF9fYiwgX19hKTsKLX0KLQotc3RhdGljIHZlY3RvciBib29sIGludCBfX0FUVFJTX29fYWkgdmVjX2NtcGx0KHZlY3RvciBmbG9hdCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGZsb2F0IF9fYikgewotICByZXR1cm4gdmVjX2NtcGd0KF9fYiwgX19hKTsKLX0KLQotI2lmZGVmIF9fVlNYX18KLXN0YXRpYyB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19BVFRSU19vX2FpCi12ZWNfY21wbHQodmVjdG9yIGRvdWJsZSBfX2EsIHZlY3RvciBkb3VibGUgX19iKSB7Ci0gIHJldHVybiB2ZWNfY21wZ3QoX19iLCBfX2EpOwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX1BPV0VSOF9WRUNUT1JfXwotc3RhdGljIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKLXZlY19jbXBsdCh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgewotICByZXR1cm4gdmVjX2NtcGd0KF9fYiwgX19hKTsKLX0KLQotc3RhdGljIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKLXZlY19jbXBsdCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKLSAgcmV0dXJuIHZlY19jbXBndChfX2IsIF9fYSk7Ci19Ci0KLS8qIHZlY19jbnRseiAqLwotCi1zdGF0aWMgdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfY250bHoodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSkgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNsemIoX19hKTsKLX0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX2NudGx6KHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSkgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNsemIoX19hKTsKLX0KLXN0YXRpYyB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfY250bHoodmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbHpoKF9fYSk7Ci19Ci1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfY250bHoodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSkgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNsemgoX19hKTsKLX0KLXN0YXRpYyB2ZWN0b3Igc2lnbmVkIGludCBfX0FUVFJTX29fYWkgdmVjX2NudGx6KHZlY3RvciBzaWduZWQgaW50IF9fYSkgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNsencoX19hKTsKLX0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haSB2ZWNfY250bHoodmVjdG9yIHVuc2lnbmVkIGludCBfX2EpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbHp3KF9fYSk7Ci19Ci1zdGF0aWMgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCi12ZWNfY250bHoodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y2x6ZChfX2EpOwotfQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCi12ZWNfY250bHoodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbHpkKF9fYSk7Ci19Ci0jZW5kaWYKLQotLyogdmVjX2Nwc2duICovCi0KLSNpZmRlZiBfX1ZTWF9fCi1zdGF0aWMgdmVjdG9yIGZsb2F0IF9fQVRUUlNfb19haSB2ZWNfY3BzZ24odmVjdG9yIGZsb2F0IF9fYSwgdmVjdG9yIGZsb2F0IF9fYikgewotICByZXR1cm4gX19idWlsdGluX3ZzeF94dmNwc2duc3AoX19hLCBfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIGRvdWJsZSBfX0FUVFJTX29fYWkgdmVjX2Nwc2duKHZlY3RvciBkb3VibGUgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgZG91YmxlIF9fYikgewotICByZXR1cm4gX19idWlsdGluX3ZzeF94dmNwc2duZHAoX19hLCBfX2IpOwotfQotI2VuZGlmCi0KLS8qIHZlY19jdGYgKi8KLQotc3RhdGljIHZlY3RvciBmbG9hdCBfX0FUVFJTX29fYWkgdmVjX2N0Zih2ZWN0b3IgaW50IF9fYSwgaW50IF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNmc3goX19hLCBfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIGZsb2F0IF9fQVRUUlNfb19haSB2ZWNfY3RmKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCBpbnQgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y2Z1eCgodmVjdG9yIGludClfX2EsIF9fYik7Ci19Ci0KLS8qIHZlY192Y2ZzeCAqLwotCi1zdGF0aWMgdmVjdG9yIGZsb2F0IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKLXZlY192Y2ZzeCh2ZWN0b3IgaW50IF9fYSwgaW50IF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNmc3goX19hLCBfX2IpOwotfQotCi0vKiB2ZWNfdmNmdXggKi8KLQotc3RhdGljIHZlY3RvciBmbG9hdCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCi12ZWNfdmNmdXgodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIGludCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjZnV4KCh2ZWN0b3IgaW50KV9fYSwgX19iKTsKLX0KLQotLyogdmVjX2N0cyAqLwotCi1zdGF0aWMgdmVjdG9yIGludCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCi12ZWNfY3RzKHZlY3RvciBmbG9hdCBfX2EsIGludCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjdHN4cyhfX2EsIF9fYik7Ci19Ci0KLS8qIHZlY192Y3RzeHMgKi8KLQotc3RhdGljIHZlY3RvciBpbnQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQotdmVjX3ZjdHN4cyh2ZWN0b3IgZmxvYXQgX19hLCBpbnQgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y3RzeHMoX19hLCBfX2IpOwotfQotCi0vKiB2ZWNfY3R1ICovCi0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKLXZlY19jdHUodmVjdG9yIGZsb2F0IF9fYSwgaW50IF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmN0dXhzKF9fYSwgX19iKTsKLX0KLQotLyogdmVjX3ZjdHV4cyAqLwotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGludCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCi12ZWNfdmN0dXhzKHZlY3RvciBmbG9hdCBfX2EsIGludCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjdHV4cyhfX2EsIF9fYik7Ci19Ci0KLS8qIHZlY19kb3VibGUgKi8KLQotI2lmZGVmIF9fVlNYX18KLXN0YXRpYyB2ZWN0b3IgZG91YmxlIF9fQVRUUlNfb19haSB2ZWNfZG91YmxlICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EpIHsKLSAgdmVjdG9yIGRvdWJsZSBfX3JldCA9IHsgX19hWzBdLCBfX2FbMV0gfTsKLSAgcmV0dXJuIF9fcmV0OwotfQotCi1zdGF0aWMgdmVjdG9yIGRvdWJsZSBfX0FUVFJTX29fYWkgdmVjX2RvdWJsZSAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EpIHsKLSAgdmVjdG9yIGRvdWJsZSBfX3JldCA9IHsgX19hWzBdLCBfX2FbMV0gfTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLS8qIHZlY19kaXYgKi8KLQotLyogSW50ZWdlciB2ZWN0b3IgZGl2aWRlcyAodmVjdG9ycyBhcmUgc2NhbGFyaXplZCwgZWxlbWVudHMgZGl2aWRlZAotICAgYW5kIHRoZSB2ZWN0b3JzIHJlYXNzZW1ibGVkKS4KLSovCi1zdGF0aWMgdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfZGl2KHZlY3RvciBzaWduZWQgY2hhciBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKLSAgcmV0dXJuIF9fYSAvIF9fYjsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfZGl2KHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKLSAgcmV0dXJuIF9fYSAvIF9fYjsKLX0KLQotc3RhdGljIHZlY3RvciBzaWduZWQgc2hvcnQgX19BVFRSU19vX2FpIHZlY19kaXYodmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYikgewotICByZXR1cm4gX19hIC8gX19iOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfZGl2KHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuIF9fYSAvIF9fYjsKLX0KLQotc3RhdGljIHZlY3RvciBzaWduZWQgaW50IF9fQVRUUlNfb19haSB2ZWNfZGl2KHZlY3RvciBzaWduZWQgaW50IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGludCBfX2IpIHsKLSAgcmV0dXJuIF9fYSAvIF9fYjsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpIHZlY19kaXYodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgewotICByZXR1cm4gX19hIC8gX19iOwotfQotCi0jaWZkZWYgX19WU1hfXwotc3RhdGljIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQotdmVjX2Rpdih2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgewotICByZXR1cm4gX19hIC8gX19iOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKLXZlY19kaXYodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7Ci0gIHJldHVybiBfX2EgLyBfX2I7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgZmxvYXQgX19BVFRSU19vX2FpIHZlY19kaXYodmVjdG9yIGZsb2F0IF9fYSwgdmVjdG9yIGZsb2F0IF9fYikgewotICByZXR1cm4gX19hIC8gX19iOwotfQotCi1zdGF0aWMgdmVjdG9yIGRvdWJsZSBfX0FUVFJTX29fYWkgdmVjX2Rpdih2ZWN0b3IgZG91YmxlIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBkb3VibGUgX19iKSB7Ci0gIHJldHVybiBfX2EgLyBfX2I7Ci19Ci0jZW5kaWYKLQotLyogdmVjX2RzcyAqLwotCi1zdGF0aWMgdm9pZCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpIHZlY19kc3MoaW50IF9fYSkgewotICBfX2J1aWx0aW5fYWx0aXZlY19kc3MoX19hKTsKLX0KLQotLyogdmVjX2Rzc2FsbCAqLwotCi1zdGF0aWMgdm9pZCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpIHZlY19kc3NhbGwodm9pZCkgewotICBfX2J1aWx0aW5fYWx0aXZlY19kc3NhbGwoKTsKLX0KLQotLyogdmVjX2RzdCAqLwotCi1zdGF0aWMgdm9pZCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCi12ZWNfZHN0KGNvbnN0IHZvaWQgKl9fYSwgaW50IF9fYiwgaW50IF9fYykgewotICBfX2J1aWx0aW5fYWx0aXZlY19kc3QoX19hLCBfX2IsIF9fYyk7Ci19Ci0KLS8qIHZlY19kc3RzdCAqLwotCi1zdGF0aWMgdm9pZCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCi12ZWNfZHN0c3QoY29uc3Qgdm9pZCAqX19hLCBpbnQgX19iLCBpbnQgX19jKSB7Ci0gIF9fYnVpbHRpbl9hbHRpdmVjX2RzdHN0KF9fYSwgX19iLCBfX2MpOwotfQotCi0vKiB2ZWNfZHN0c3R0ICovCi0KLXN0YXRpYyB2b2lkIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKLXZlY19kc3RzdHQoY29uc3Qgdm9pZCAqX19hLCBpbnQgX19iLCBpbnQgX19jKSB7Ci0gIF9fYnVpbHRpbl9hbHRpdmVjX2RzdHN0dChfX2EsIF9fYiwgX19jKTsKLX0KLQotLyogdmVjX2RzdHQgKi8KLQotc3RhdGljIHZvaWQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQotdmVjX2RzdHQoY29uc3Qgdm9pZCAqX19hLCBpbnQgX19iLCBpbnQgX19jKSB7Ci0gIF9fYnVpbHRpbl9hbHRpdmVjX2RzdHQoX19hLCBfX2IsIF9fYyk7Ci19Ci0KLS8qIHZlY19lcXYgKi8KLQotI2lmZGVmIF9fUE9XRVI4X1ZFQ1RPUl9fCi1zdGF0aWMgdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfZXF2KHZlY3RvciBzaWduZWQgY2hhciBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19idWlsdGluX3ZzeF94eGxlcXYoKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY19lcXYodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYnVpbHRpbl92c3hfeHhsZXF2KCh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIGJvb2wgY2hhciBfX0FUVFJTX29fYWkgdmVjX2Vxdih2ZWN0b3IgYm9vbCBjaGFyIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGNoYXIgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIGJvb2wgY2hhcilfX2J1aWx0aW5fdnN4X3h4bGVxdigodmVjdG9yIHVuc2lnbmVkIGludClfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX2Vxdih2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgc2hvcnQgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHNpZ25lZCBzaG9ydClfX2J1aWx0aW5fdnN4X3h4bGVxdigodmVjdG9yIHVuc2lnbmVkIGludClfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfZXF2KHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19idWlsdGluX3ZzeF94eGxlcXYoKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIGJvb2wgc2hvcnQgX19BVFRSU19vX2FpIHZlY19lcXYodmVjdG9yIGJvb2wgc2hvcnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIHNob3J0IF9fYikgewotICByZXR1cm4gKHZlY3RvciBib29sIHNob3J0KV9fYnVpbHRpbl92c3hfeHhsZXF2KCh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIHNpZ25lZCBpbnQgX19BVFRSU19vX2FpIHZlY19lcXYodmVjdG9yIHNpZ25lZCBpbnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgaW50IF9fYikgewotICByZXR1cm4gKHZlY3RvciBzaWduZWQgaW50KV9fYnVpbHRpbl92c3hfeHhsZXF2KCh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkgdmVjX2Vxdih2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fdnN4X3h4bGVxdihfX2EsIF9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgYm9vbCBpbnQgX19BVFRSU19vX2FpIHZlY19lcXYodmVjdG9yIGJvb2wgaW50IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgaW50IF9fYikgewotICByZXR1cm4gKHZlY3RvciBib29sIGludClfX2J1aWx0aW5fdnN4X3h4bGVxdigodmVjdG9yIHVuc2lnbmVkIGludClfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQotdmVjX2Vxdih2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgewotICByZXR1cm4gKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKQotICAgIF9fYnVpbHRpbl92c3hfeHhsZXF2KCh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSwgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCi12ZWNfZXF2KHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgewotICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpCi0gICAgX19idWlsdGluX3ZzeF94eGxlcXYoKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hLCAodmVjdG9yIHVuc2lnbmVkIGludClfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fQVRUUlNfb19haQotdmVjX2Vxdih2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIGJvb2wgbG9uZyBsb25nKQotICAgIF9fYnVpbHRpbl92c3hfeHhsZXF2KCh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSwgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciBmbG9hdCBfX0FUVFJTX29fYWkgdmVjX2Vxdih2ZWN0b3IgZmxvYXQgX19hLCB2ZWN0b3IgZmxvYXQgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIGZsb2F0KV9fYnVpbHRpbl92c3hfeHhsZXF2KCh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciBkb3VibGUgX19BVFRSU19vX2FpIHZlY19lcXYodmVjdG9yIGRvdWJsZSBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgZG91YmxlIF9fYikgewotICByZXR1cm4gKHZlY3RvciBkb3VibGUpX19idWlsdGluX3ZzeF94eGxlcXYoKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iKTsKLX0KLSNlbmRpZgotCi0vKiB2ZWNfZXhwdGUgKi8KLQotc3RhdGljIHZlY3RvciBmbG9hdCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCi12ZWNfZXhwdGUodmVjdG9yIGZsb2F0IF9fYSkgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmV4cHRlZnAoX19hKTsKLX0KLQotLyogdmVjX3ZleHB0ZWZwICovCi0KLXN0YXRpYyB2ZWN0b3IgZmxvYXQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQotdmVjX3ZleHB0ZWZwKHZlY3RvciBmbG9hdCBfX2EpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZleHB0ZWZwKF9fYSk7Ci19Ci0KLS8qIHZlY19mbG9vciAqLwotCi1zdGF0aWMgdmVjdG9yIGZsb2F0IF9fQVRUUlNfb19haSB2ZWNfZmxvb3IodmVjdG9yIGZsb2F0IF9fYSkgewotI2lmZGVmIF9fVlNYX18KLSAgcmV0dXJuIF9fYnVpbHRpbl92c3hfeHZyc3BpbShfX2EpOwotI2Vsc2UKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZyZmltKF9fYSk7Ci0jZW5kaWYKLX0KLQotI2lmZGVmIF9fVlNYX18KLXN0YXRpYyB2ZWN0b3IgZG91YmxlIF9fQVRUUlNfb19haSB2ZWNfZmxvb3IodmVjdG9yIGRvdWJsZSBfX2EpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl92c3hfeHZyZHBpbShfX2EpOwotfQotI2VuZGlmCi0KLS8qIHZlY192cmZpbSAqLwotCi1zdGF0aWMgdmVjdG9yIGZsb2F0IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKLXZlY192cmZpbSh2ZWN0b3IgZmxvYXQgX19hKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192cmZpbShfX2EpOwotfQotCi0vKiB2ZWNfbGQgKi8KLQotc3RhdGljIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX2xkKGludCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmVjdG9yIHNpZ25lZCBjaGFyICpfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfbHZ4KF9fYSwgX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX2xkKGludCBfX2EsIGNvbnN0IHNpZ25lZCBjaGFyICpfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfbHZ4KF9fYSwgX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQotdmVjX2xkKGludCBfX2EsIGNvbnN0IHZlY3RvciB1bnNpZ25lZCBjaGFyICpfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2J1aWx0aW5fYWx0aXZlY19sdngoX19hLCBfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY19sZChpbnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfbHZ4KF9fYSwgX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciBib29sIGNoYXIgX19BVFRSU19vX2FpIHZlY19sZChpbnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2ZWN0b3IgYm9vbCBjaGFyICpfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgYm9vbCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX2x2eChfX2EsIF9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY19sZChpbnQgX19hLCBjb25zdCB2ZWN0b3Igc2hvcnQgKl9fYikgewotICByZXR1cm4gKHZlY3RvciBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY19sdngoX19hLCBfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfbGQoaW50IF9fYSwgY29uc3Qgc2hvcnQgKl9fYikgewotICByZXR1cm4gKHZlY3RvciBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY19sdngoX19hLCBfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haQotdmVjX2xkKGludCBfX2EsIGNvbnN0IHZlY3RvciB1bnNpZ25lZCBzaG9ydCAqX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX2x2eChfX2EsIF9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpIHZlY19sZChpbnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0ICpfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19idWlsdGluX2FsdGl2ZWNfbHZ4KF9fYSwgX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciBib29sIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfbGQoaW50IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZlY3RvciBib29sIHNob3J0ICpfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgYm9vbCBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY19sdngoX19hLCBfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIHBpeGVsIF9fQVRUUlNfb19haSB2ZWNfbGQoaW50IF9fYSwgY29uc3QgdmVjdG9yIHBpeGVsICpfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgcGl4ZWwpX19idWlsdGluX2FsdGl2ZWNfbHZ4KF9fYSwgX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY19sZChpbnQgX19hLCBjb25zdCB2ZWN0b3IgaW50ICpfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgaW50KV9fYnVpbHRpbl9hbHRpdmVjX2x2eChfX2EsIF9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfbGQoaW50IF9fYSwgY29uc3QgaW50ICpfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgaW50KV9fYnVpbHRpbl9hbHRpdmVjX2x2eChfX2EsIF9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haSB2ZWNfbGQoaW50IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmVjdG9yIHVuc2lnbmVkIGludCAqX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGludClfX2J1aWx0aW5fYWx0aXZlY19sdngoX19hLCBfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkgdmVjX2xkKGludCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCAqX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGludClfX2J1aWx0aW5fYWx0aXZlY19sdngoX19hLCBfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIGJvb2wgaW50IF9fQVRUUlNfb19haSB2ZWNfbGQoaW50IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2ZWN0b3IgYm9vbCBpbnQgKl9fYikgewotICByZXR1cm4gKHZlY3RvciBib29sIGludClfX2J1aWx0aW5fYWx0aXZlY19sdngoX19hLCBfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIGZsb2F0IF9fQVRUUlNfb19haSB2ZWNfbGQoaW50IF9fYSwgY29uc3QgdmVjdG9yIGZsb2F0ICpfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgZmxvYXQpX19idWlsdGluX2FsdGl2ZWNfbHZ4KF9fYSwgX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciBmbG9hdCBfX0FUVFJTX29fYWkgdmVjX2xkKGludCBfX2EsIGNvbnN0IGZsb2F0ICpfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgZmxvYXQpX19idWlsdGluX2FsdGl2ZWNfbHZ4KF9fYSwgX19iKTsKLX0KLQotLyogdmVjX2x2eCAqLwotCi1zdGF0aWMgdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfbHZ4KGludCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZlY3RvciBzaWduZWQgY2hhciAqX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX2x2eChfX2EsIF9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY19sdngoaW50IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2lnbmVkIGNoYXIgKl9fYikgewotICByZXR1cm4gKHZlY3RvciBzaWduZWQgY2hhcilfX2J1aWx0aW5fYWx0aXZlY19sdngoX19hLCBfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCi12ZWNfbHZ4KGludCBfX2EsIGNvbnN0IHZlY3RvciB1bnNpZ25lZCBjaGFyICpfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2J1aWx0aW5fYWx0aXZlY19sdngoX19hLCBfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY19sdngoaW50IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2J1aWx0aW5fYWx0aXZlY19sdngoX19hLCBfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIGJvb2wgY2hhciBfX0FUVFJTX29fYWkgdmVjX2x2eChpbnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmVjdG9yIGJvb2wgY2hhciAqX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIGJvb2wgY2hhcilfX2J1aWx0aW5fYWx0aXZlY19sdngoX19hLCBfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfbHZ4KGludCBfX2EsIGNvbnN0IHZlY3RvciBzaG9ydCAqX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX2x2eChfX2EsIF9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY19sdngoaW50IF9fYSwgY29uc3Qgc2hvcnQgKl9fYikgewotICByZXR1cm4gKHZlY3RvciBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY19sdngoX19hLCBfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haQotdmVjX2x2eChpbnQgX19hLCBjb25zdCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgKl9fYikgewotICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY19sdngoX19hLCBfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfbHZ4KGludCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0ICpfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19idWlsdGluX2FsdGl2ZWNfbHZ4KF9fYSwgX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciBib29sIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfbHZ4KGludCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmVjdG9yIGJvb2wgc2hvcnQgKl9fYikgewotICByZXR1cm4gKHZlY3RvciBib29sIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX2x2eChfX2EsIF9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgcGl4ZWwgX19BVFRSU19vX2FpIHZlY19sdngoaW50IF9fYSwgY29uc3QgdmVjdG9yIHBpeGVsICpfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgcGl4ZWwpX19idWlsdGluX2FsdGl2ZWNfbHZ4KF9fYSwgX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY19sdngoaW50IF9fYSwgY29uc3QgdmVjdG9yIGludCAqX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIGludClfX2J1aWx0aW5fYWx0aXZlY19sdngoX19hLCBfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX2x2eChpbnQgX19hLCBjb25zdCBpbnQgKl9fYikgewotICByZXR1cm4gKHZlY3RvciBpbnQpX19idWlsdGluX2FsdGl2ZWNfbHZ4KF9fYSwgX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpCi12ZWNfbHZ4KGludCBfX2EsIGNvbnN0IHZlY3RvciB1bnNpZ25lZCBpbnQgKl9fYikgewotICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBpbnQpX19idWlsdGluX2FsdGl2ZWNfbHZ4KF9fYSwgX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpIHZlY19sdngoaW50IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCAqX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGludClfX2J1aWx0aW5fYWx0aXZlY19sdngoX19hLCBfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIGJvb2wgaW50IF9fQVRUUlNfb19haSB2ZWNfbHZ4KGludCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZlY3RvciBib29sIGludCAqX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIGJvb2wgaW50KV9fYnVpbHRpbl9hbHRpdmVjX2x2eChfX2EsIF9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgZmxvYXQgX19BVFRSU19vX2FpIHZlY19sdngoaW50IF9fYSwgY29uc3QgdmVjdG9yIGZsb2F0ICpfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgZmxvYXQpX19idWlsdGluX2FsdGl2ZWNfbHZ4KF9fYSwgX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciBmbG9hdCBfX0FUVFJTX29fYWkgdmVjX2x2eChpbnQgX19hLCBjb25zdCBmbG9hdCAqX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIGZsb2F0KV9fYnVpbHRpbl9hbHRpdmVjX2x2eChfX2EsIF9fYik7Ci19Ci0KLS8qIHZlY19sZGUgKi8KLQotc3RhdGljIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX2xkZShpbnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzaWduZWQgY2hhciAqX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX2x2ZWJ4KF9fYSwgX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfbGRlKGludCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfbHZlYngoX19hLCBfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfbGRlKGludCBfX2EsIGNvbnN0IHNob3J0ICpfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3Igc2hvcnQpX19idWlsdGluX2FsdGl2ZWNfbHZlaHgoX19hLCBfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfbGRlKGludCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0ICpfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19idWlsdGluX2FsdGl2ZWNfbHZlaHgoX19hLCBfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX2xkZShpbnQgX19hLCBjb25zdCBpbnQgKl9fYikgewotICByZXR1cm4gKHZlY3RvciBpbnQpX19idWlsdGluX2FsdGl2ZWNfbHZld3goX19hLCBfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkgdmVjX2xkZShpbnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50ICpfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYnVpbHRpbl9hbHRpdmVjX2x2ZXd4KF9fYSwgX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciBmbG9hdCBfX0FUVFJTX29fYWkgdmVjX2xkZShpbnQgX19hLCBjb25zdCBmbG9hdCAqX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIGZsb2F0KV9fYnVpbHRpbl9hbHRpdmVjX2x2ZXd4KF9fYSwgX19iKTsKLX0KLQotLyogdmVjX2x2ZWJ4ICovCi0KLXN0YXRpYyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY19sdmVieChpbnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpZ25lZCBjaGFyICpfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfbHZlYngoX19hLCBfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY19sdmVieChpbnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfbHZlYngoX19hLCBfX2IpOwotfQotCi0vKiB2ZWNfbHZlaHggKi8KLQotc3RhdGljIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX2x2ZWh4KGludCBfX2EsIGNvbnN0IHNob3J0ICpfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3Igc2hvcnQpX19idWlsdGluX2FsdGl2ZWNfbHZlaHgoX19hLCBfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfbHZlaHgoaW50IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCAqX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX2x2ZWh4KF9fYSwgX19iKTsKLX0KLQotLyogdmVjX2x2ZXd4ICovCi0KLXN0YXRpYyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfbHZld3goaW50IF9fYSwgY29uc3QgaW50ICpfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgaW50KV9fYnVpbHRpbl9hbHRpdmVjX2x2ZXd4KF9fYSwgX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpIHZlY19sdmV3eChpbnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgKl9fYikgewotICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBpbnQpX19idWlsdGluX2FsdGl2ZWNfbHZld3goX19hLCBfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIGZsb2F0IF9fQVRUUlNfb19haSB2ZWNfbHZld3goaW50IF9fYSwgY29uc3QgZmxvYXQgKl9fYikgewotICByZXR1cm4gKHZlY3RvciBmbG9hdClfX2J1aWx0aW5fYWx0aXZlY19sdmV3eChfX2EsIF9fYik7Ci19Ci0KLS8qIHZlY19sZGwgKi8KLQotc3RhdGljIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX2xkbChpbnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2ZWN0b3Igc2lnbmVkIGNoYXIgKl9fYikgewotICByZXR1cm4gKHZlY3RvciBzaWduZWQgY2hhcilfX2J1aWx0aW5fYWx0aXZlY19sdnhsKF9fYSwgX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX2xkbChpbnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzaWduZWQgY2hhciAqX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX2x2eGwoX19hLCBfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCi12ZWNfbGRsKGludCBfX2EsIGNvbnN0IHZlY3RvciB1bnNpZ25lZCBjaGFyICpfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2J1aWx0aW5fYWx0aXZlY19sdnhsKF9fYSwgX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfbGRsKGludCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfbHZ4bChfX2EsIF9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgYm9vbCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfbGRsKGludCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2ZWN0b3IgYm9vbCBjaGFyICpfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgYm9vbCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX2x2eGwoX19hLCBfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfbGRsKGludCBfX2EsIGNvbnN0IHZlY3RvciBzaG9ydCAqX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX2x2eGwoX19hLCBfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfbGRsKGludCBfX2EsIGNvbnN0IHNob3J0ICpfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3Igc2hvcnQpX19idWlsdGluX2FsdGl2ZWNfbHZ4bChfX2EsIF9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCi12ZWNfbGRsKGludCBfX2EsIGNvbnN0IHZlY3RvciB1bnNpZ25lZCBzaG9ydCAqX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX2x2eGwoX19hLCBfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfbGRsKGludCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0ICpfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19idWlsdGluX2FsdGl2ZWNfbHZ4bChfX2EsIF9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgYm9vbCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX2xkbChpbnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZlY3RvciBib29sIHNob3J0ICpfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgYm9vbCBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY19sdnhsKF9fYSwgX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciBwaXhlbCBfX0FUVFJTX29fYWkgdmVjX2xkbChpbnQgX19hLCBjb25zdCB2ZWN0b3IgcGl4ZWwgKl9fYikgewotICByZXR1cm4gKHZlY3RvciBwaXhlbCBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY19sdnhsKF9fYSwgX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY19sZGwoaW50IF9fYSwgY29uc3QgdmVjdG9yIGludCAqX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIGludClfX2J1aWx0aW5fYWx0aXZlY19sdnhsKF9fYSwgX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY19sZGwoaW50IF9fYSwgY29uc3QgaW50ICpfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgaW50KV9fYnVpbHRpbl9hbHRpdmVjX2x2eGwoX19hLCBfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkKLXZlY19sZGwoaW50IF9fYSwgY29uc3QgdmVjdG9yIHVuc2lnbmVkIGludCAqX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGludClfX2J1aWx0aW5fYWx0aXZlY19sdnhsKF9fYSwgX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpIHZlY19sZGwoaW50IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCAqX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGludClfX2J1aWx0aW5fYWx0aXZlY19sdnhsKF9fYSwgX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciBib29sIGludCBfX0FUVFJTX29fYWkgdmVjX2xkbChpbnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2ZWN0b3IgYm9vbCBpbnQgKl9fYikgewotICByZXR1cm4gKHZlY3RvciBib29sIGludClfX2J1aWx0aW5fYWx0aXZlY19sdnhsKF9fYSwgX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciBmbG9hdCBfX0FUVFJTX29fYWkgdmVjX2xkbChpbnQgX19hLCBjb25zdCB2ZWN0b3IgZmxvYXQgKl9fYikgewotICByZXR1cm4gKHZlY3RvciBmbG9hdClfX2J1aWx0aW5fYWx0aXZlY19sdnhsKF9fYSwgX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciBmbG9hdCBfX0FUVFJTX29fYWkgdmVjX2xkbChpbnQgX19hLCBjb25zdCBmbG9hdCAqX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIGZsb2F0KV9fYnVpbHRpbl9hbHRpdmVjX2x2eGwoX19hLCBfX2IpOwotfQotCi0vKiB2ZWNfbHZ4bCAqLwotCi1zdGF0aWMgdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfbHZ4bChpbnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmVjdG9yIHNpZ25lZCBjaGFyICpfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfbHZ4bChfX2EsIF9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY19sdnhsKGludCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzaWduZWQgY2hhciAqX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX2x2eGwoX19hLCBfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCi12ZWNfbHZ4bChpbnQgX19hLCBjb25zdCB2ZWN0b3IgdW5zaWduZWQgY2hhciAqX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfbHZ4bChfX2EsIF9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX2x2eGwoaW50IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfbHZ4bChfX2EsIF9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgYm9vbCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfbHZ4bChpbnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZlY3RvciBib29sIGNoYXIgKl9fYikgewotICByZXR1cm4gKHZlY3RvciBib29sIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfbHZ4bChfX2EsIF9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY19sdnhsKGludCBfX2EsIGNvbnN0IHZlY3RvciBzaG9ydCAqX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX2x2eGwoX19hLCBfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfbHZ4bChpbnQgX19hLCBjb25zdCBzaG9ydCAqX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX2x2eGwoX19hLCBfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haQotdmVjX2x2eGwoaW50IF9fYSwgY29uc3QgdmVjdG9yIHVuc2lnbmVkIHNob3J0ICpfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19idWlsdGluX2FsdGl2ZWNfbHZ4bChfX2EsIF9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpIHZlY19sdnhsKGludCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCAqX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX2x2eGwoX19hLCBfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIGJvb2wgc2hvcnQgX19BVFRSU19vX2FpIHZlY19sdnhsKGludCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZlY3RvciBib29sIHNob3J0ICpfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgYm9vbCBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY19sdnhsKF9fYSwgX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciBwaXhlbCBfX0FUVFJTX29fYWkgdmVjX2x2eGwoaW50IF9fYSwgY29uc3QgdmVjdG9yIHBpeGVsICpfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgcGl4ZWwpX19idWlsdGluX2FsdGl2ZWNfbHZ4bChfX2EsIF9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfbHZ4bChpbnQgX19hLCBjb25zdCB2ZWN0b3IgaW50ICpfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgaW50KV9fYnVpbHRpbl9hbHRpdmVjX2x2eGwoX19hLCBfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX2x2eGwoaW50IF9fYSwgY29uc3QgaW50ICpfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgaW50KV9fYnVpbHRpbl9hbHRpdmVjX2x2eGwoX19hLCBfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkKLXZlY19sdnhsKGludCBfX2EsIGNvbnN0IHZlY3RvciB1bnNpZ25lZCBpbnQgKl9fYikgewotICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBpbnQpX19idWlsdGluX2FsdGl2ZWNfbHZ4bChfX2EsIF9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haSB2ZWNfbHZ4bChpbnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCAqX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGludClfX2J1aWx0aW5fYWx0aXZlY19sdnhsKF9fYSwgX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciBib29sIGludCBfX0FUVFJTX29fYWkgdmVjX2x2eGwoaW50IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZlY3RvciBib29sIGludCAqX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIGJvb2wgaW50KV9fYnVpbHRpbl9hbHRpdmVjX2x2eGwoX19hLCBfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIGZsb2F0IF9fQVRUUlNfb19haSB2ZWNfbHZ4bChpbnQgX19hLCBjb25zdCB2ZWN0b3IgZmxvYXQgKl9fYikgewotICByZXR1cm4gKHZlY3RvciBmbG9hdClfX2J1aWx0aW5fYWx0aXZlY19sdnhsKF9fYSwgX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciBmbG9hdCBfX0FUVFJTX29fYWkgdmVjX2x2eGwoaW50IF9fYSwgY29uc3QgZmxvYXQgKl9fYikgewotICByZXR1cm4gKHZlY3RvciBmbG9hdClfX2J1aWx0aW5fYWx0aXZlY19sdnhsKF9fYSwgX19iKTsKLX0KLQotLyogdmVjX2xvZ2UgKi8KLQotc3RhdGljIHZlY3RvciBmbG9hdCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCi12ZWNfbG9nZSh2ZWN0b3IgZmxvYXQgX19hKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bG9nZWZwKF9fYSk7Ci19Ci0KLS8qIHZlY192bG9nZWZwICovCi0KLXN0YXRpYyB2ZWN0b3IgZmxvYXQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQotdmVjX3Zsb2dlZnAodmVjdG9yIGZsb2F0IF9fYSkgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmxvZ2VmcChfX2EpOwotfQotCi0vKiB2ZWNfbHZzbCAqLwotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkKLSAgICBfX2F0dHJpYnV0ZV9fKChfX2RlcHJlY2F0ZWRfXygidXNlIGFzc2lnbm1lbnQgZm9yIHVuYWxpZ25lZCBsaXR0bGUgZW5kaWFuIFwKLWxvYWRzL3N0b3JlcyIpKSkgdmVjX2x2c2woaW50IF9fYSwgY29uc3Qgc2lnbmVkIGNoYXIgKl9fYikgewotICB2ZWN0b3IgdW5zaWduZWQgY2hhciBtYXNrID0KLSAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2J1aWx0aW5fYWx0aXZlY19sdnNsKF9fYSwgX19iKTsKLSAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgcmV2ZXJzZSA9IHsxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcsICA2LCAgNSwgIDQsICAzLCAgMiwgIDEsIDB9OwotICByZXR1cm4gdmVjX3Blcm0obWFzaywgbWFzaywgcmV2ZXJzZSk7Ci19Ci0jZWxzZQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfbHZzbChpbnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzaWduZWQgY2hhciAqX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfbHZzbChfX2EsIF9fYik7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCi0gICAgX19hdHRyaWJ1dGVfXygoX19kZXByZWNhdGVkX18oInVzZSBhc3NpZ25tZW50IGZvciB1bmFsaWduZWQgbGl0dGxlIGVuZGlhbiBcCi1sb2Fkcy9zdG9yZXMiKSkpIHZlY19sdnNsKGludCBfX2EsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKl9fYikgewotICB2ZWN0b3IgdW5zaWduZWQgY2hhciBtYXNrID0KLSAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2J1aWx0aW5fYWx0aXZlY19sdnNsKF9fYSwgX19iKTsKLSAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgcmV2ZXJzZSA9IHsxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcsICA2LCAgNSwgIDQsICAzLCAgMiwgIDEsIDB9OwotICByZXR1cm4gdmVjX3Blcm0obWFzaywgbWFzaywgcmV2ZXJzZSk7Ci19Ci0jZWxzZQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfbHZzbChpbnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2J1aWx0aW5fYWx0aXZlY19sdnNsKF9fYSwgX19iKTsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkKLSAgICBfX2F0dHJpYnV0ZV9fKChfX2RlcHJlY2F0ZWRfXygidXNlIGFzc2lnbm1lbnQgZm9yIHVuYWxpZ25lZCBsaXR0bGUgZW5kaWFuIFwKLWxvYWRzL3N0b3JlcyIpKSkgdmVjX2x2c2woaW50IF9fYSwgY29uc3Qgc2hvcnQgKl9fYikgewotICB2ZWN0b3IgdW5zaWduZWQgY2hhciBtYXNrID0KLSAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2J1aWx0aW5fYWx0aXZlY19sdnNsKF9fYSwgX19iKTsKLSAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgcmV2ZXJzZSA9IHsxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcsICA2LCAgNSwgIDQsICAzLCAgMiwgIDEsIDB9OwotICByZXR1cm4gdmVjX3Blcm0obWFzaywgbWFzaywgcmV2ZXJzZSk7Ci19Ci0jZWxzZQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfbHZzbChpbnQgX19hLCBjb25zdCBzaG9ydCAqX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfbHZzbChfX2EsIF9fYik7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCi0gICAgX19hdHRyaWJ1dGVfXygoX19kZXByZWNhdGVkX18oInVzZSBhc3NpZ25tZW50IGZvciB1bmFsaWduZWQgbGl0dGxlIGVuZGlhbiBcCi1sb2Fkcy9zdG9yZXMiKSkpIHZlY19sdnNsKGludCBfX2EsIGNvbnN0IHVuc2lnbmVkIHNob3J0ICpfX2IpIHsKLSAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgbWFzayA9Ci0gICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfbHZzbChfX2EsIF9fYik7Ci0gIHZlY3RvciB1bnNpZ25lZCBjaGFyIHJldmVyc2UgPSB7MTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3LCAgNiwgIDUsICA0LCAgMywgIDIsICAxLCAwfTsKLSAgcmV0dXJuIHZlY19wZXJtKG1hc2ssIG1hc2ssIHJldmVyc2UpOwotfQotI2Vsc2UKLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX2x2c2woaW50IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgKl9fYikgewotICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX2x2c2woX19hLCBfX2IpOwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQotICAgIF9fYXR0cmlidXRlX18oKF9fZGVwcmVjYXRlZF9fKCJ1c2UgYXNzaWdubWVudCBmb3IgdW5hbGlnbmVkIGxpdHRsZSBlbmRpYW4gXAotbG9hZHMvc3RvcmVzIikpKSB2ZWNfbHZzbChpbnQgX19hLCBjb25zdCBpbnQgKl9fYikgewotICB2ZWN0b3IgdW5zaWduZWQgY2hhciBtYXNrID0KLSAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2J1aWx0aW5fYWx0aXZlY19sdnNsKF9fYSwgX19iKTsKLSAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgcmV2ZXJzZSA9IHsxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcsICA2LCAgNSwgIDQsICAzLCAgMiwgIDEsIDB9OwotICByZXR1cm4gdmVjX3Blcm0obWFzaywgbWFzaywgcmV2ZXJzZSk7Ci19Ci0jZWxzZQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfbHZzbChpbnQgX19hLCBjb25zdCBpbnQgKl9fYikgewotICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX2x2c2woX19hLCBfX2IpOwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQotICAgIF9fYXR0cmlidXRlX18oKF9fZGVwcmVjYXRlZF9fKCJ1c2UgYXNzaWdubWVudCBmb3IgdW5hbGlnbmVkIGxpdHRsZSBlbmRpYW4gXAotbG9hZHMvc3RvcmVzIikpKSB2ZWNfbHZzbChpbnQgX19hLCBjb25zdCB1bnNpZ25lZCBpbnQgKl9fYikgewotICB2ZWN0b3IgdW5zaWduZWQgY2hhciBtYXNrID0KLSAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2J1aWx0aW5fYWx0aXZlY19sdnNsKF9fYSwgX19iKTsKLSAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgcmV2ZXJzZSA9IHsxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcsICA2LCAgNSwgIDQsICAzLCAgMiwgIDEsIDB9OwotICByZXR1cm4gdmVjX3Blcm0obWFzaywgbWFzaywgcmV2ZXJzZSk7Ci19Ci0jZWxzZQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfbHZzbChpbnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgKl9fYikgewotICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX2x2c2woX19hLCBfX2IpOwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQotICAgIF9fYXR0cmlidXRlX18oKF9fZGVwcmVjYXRlZF9fKCJ1c2UgYXNzaWdubWVudCBmb3IgdW5hbGlnbmVkIGxpdHRsZSBlbmRpYW4gXAotbG9hZHMvc3RvcmVzIikpKSB2ZWNfbHZzbChpbnQgX19hLCBjb25zdCBmbG9hdCAqX19iKSB7Ci0gIHZlY3RvciB1bnNpZ25lZCBjaGFyIG1hc2sgPQotICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX2x2c2woX19hLCBfX2IpOwotICB2ZWN0b3IgdW5zaWduZWQgY2hhciByZXZlcnNlID0gezE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNywgIDYsICA1LCAgNCwgIDMsICAyLCAgMSwgMH07Ci0gIHJldHVybiB2ZWNfcGVybShtYXNrLCBtYXNrLCByZXZlcnNlKTsKLX0KLSNlbHNlCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY19sdnNsKGludCBfX2EsIGNvbnN0IGZsb2F0ICpfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2J1aWx0aW5fYWx0aXZlY19sdnNsKF9fYSwgX19iKTsKLX0KLSNlbmRpZgotCi0vKiB2ZWNfbHZzciAqLwotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkKLSAgICBfX2F0dHJpYnV0ZV9fKChfX2RlcHJlY2F0ZWRfXygidXNlIGFzc2lnbm1lbnQgZm9yIHVuYWxpZ25lZCBsaXR0bGUgZW5kaWFuIFwKLWxvYWRzL3N0b3JlcyIpKSkgdmVjX2x2c3IoaW50IF9fYSwgY29uc3Qgc2lnbmVkIGNoYXIgKl9fYikgewotICB2ZWN0b3IgdW5zaWduZWQgY2hhciBtYXNrID0KLSAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2J1aWx0aW5fYWx0aXZlY19sdnNyKF9fYSwgX19iKTsKLSAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgcmV2ZXJzZSA9IHsxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcsICA2LCAgNSwgIDQsICAzLCAgMiwgIDEsIDB9OwotICByZXR1cm4gdmVjX3Blcm0obWFzaywgbWFzaywgcmV2ZXJzZSk7Ci19Ci0jZWxzZQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfbHZzcihpbnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzaWduZWQgY2hhciAqX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfbHZzcihfX2EsIF9fYik7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCi0gICAgX19hdHRyaWJ1dGVfXygoX19kZXByZWNhdGVkX18oInVzZSBhc3NpZ25tZW50IGZvciB1bmFsaWduZWQgbGl0dGxlIGVuZGlhbiBcCi1sb2Fkcy9zdG9yZXMiKSkpIHZlY19sdnNyKGludCBfX2EsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKl9fYikgewotICB2ZWN0b3IgdW5zaWduZWQgY2hhciBtYXNrID0KLSAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2J1aWx0aW5fYWx0aXZlY19sdnNyKF9fYSwgX19iKTsKLSAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgcmV2ZXJzZSA9IHsxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcsICA2LCAgNSwgIDQsICAzLCAgMiwgIDEsIDB9OwotICByZXR1cm4gdmVjX3Blcm0obWFzaywgbWFzaywgcmV2ZXJzZSk7Ci19Ci0jZWxzZQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfbHZzcihpbnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2J1aWx0aW5fYWx0aXZlY19sdnNyKF9fYSwgX19iKTsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkKLSAgICBfX2F0dHJpYnV0ZV9fKChfX2RlcHJlY2F0ZWRfXygidXNlIGFzc2lnbm1lbnQgZm9yIHVuYWxpZ25lZCBsaXR0bGUgZW5kaWFuIFwKLWxvYWRzL3N0b3JlcyIpKSkgdmVjX2x2c3IoaW50IF9fYSwgY29uc3Qgc2hvcnQgKl9fYikgewotICB2ZWN0b3IgdW5zaWduZWQgY2hhciBtYXNrID0KLSAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2J1aWx0aW5fYWx0aXZlY19sdnNyKF9fYSwgX19iKTsKLSAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgcmV2ZXJzZSA9IHsxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcsICA2LCAgNSwgIDQsICAzLCAgMiwgIDEsIDB9OwotICByZXR1cm4gdmVjX3Blcm0obWFzaywgbWFzaywgcmV2ZXJzZSk7Ci19Ci0jZWxzZQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfbHZzcihpbnQgX19hLCBjb25zdCBzaG9ydCAqX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfbHZzcihfX2EsIF9fYik7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCi0gICAgX19hdHRyaWJ1dGVfXygoX19kZXByZWNhdGVkX18oInVzZSBhc3NpZ25tZW50IGZvciB1bmFsaWduZWQgbGl0dGxlIGVuZGlhbiBcCi1sb2Fkcy9zdG9yZXMiKSkpIHZlY19sdnNyKGludCBfX2EsIGNvbnN0IHVuc2lnbmVkIHNob3J0ICpfX2IpIHsKLSAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgbWFzayA9Ci0gICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfbHZzcihfX2EsIF9fYik7Ci0gIHZlY3RvciB1bnNpZ25lZCBjaGFyIHJldmVyc2UgPSB7MTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3LCAgNiwgIDUsICA0LCAgMywgIDIsICAxLCAwfTsKLSAgcmV0dXJuIHZlY19wZXJtKG1hc2ssIG1hc2ssIHJldmVyc2UpOwotfQotI2Vsc2UKLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX2x2c3IoaW50IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgKl9fYikgewotICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX2x2c3IoX19hLCBfX2IpOwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQotICAgIF9fYXR0cmlidXRlX18oKF9fZGVwcmVjYXRlZF9fKCJ1c2UgYXNzaWdubWVudCBmb3IgdW5hbGlnbmVkIGxpdHRsZSBlbmRpYW4gXAotbG9hZHMvc3RvcmVzIikpKSB2ZWNfbHZzcihpbnQgX19hLCBjb25zdCBpbnQgKl9fYikgewotICB2ZWN0b3IgdW5zaWduZWQgY2hhciBtYXNrID0KLSAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2J1aWx0aW5fYWx0aXZlY19sdnNyKF9fYSwgX19iKTsKLSAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgcmV2ZXJzZSA9IHsxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcsICA2LCAgNSwgIDQsICAzLCAgMiwgIDEsIDB9OwotICByZXR1cm4gdmVjX3Blcm0obWFzaywgbWFzaywgcmV2ZXJzZSk7Ci19Ci0jZWxzZQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfbHZzcihpbnQgX19hLCBjb25zdCBpbnQgKl9fYikgewotICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX2x2c3IoX19hLCBfX2IpOwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQotICAgIF9fYXR0cmlidXRlX18oKF9fZGVwcmVjYXRlZF9fKCJ1c2UgYXNzaWdubWVudCBmb3IgdW5hbGlnbmVkIGxpdHRsZSBlbmRpYW4gXAotbG9hZHMvc3RvcmVzIikpKSB2ZWNfbHZzcihpbnQgX19hLCBjb25zdCB1bnNpZ25lZCBpbnQgKl9fYikgewotICB2ZWN0b3IgdW5zaWduZWQgY2hhciBtYXNrID0KLSAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2J1aWx0aW5fYWx0aXZlY19sdnNyKF9fYSwgX19iKTsKLSAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgcmV2ZXJzZSA9IHsxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcsICA2LCAgNSwgIDQsICAzLCAgMiwgIDEsIDB9OwotICByZXR1cm4gdmVjX3Blcm0obWFzaywgbWFzaywgcmV2ZXJzZSk7Ci19Ci0jZWxzZQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfbHZzcihpbnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgKl9fYikgewotICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX2x2c3IoX19hLCBfX2IpOwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQotICAgIF9fYXR0cmlidXRlX18oKF9fZGVwcmVjYXRlZF9fKCJ1c2UgYXNzaWdubWVudCBmb3IgdW5hbGlnbmVkIGxpdHRsZSBlbmRpYW4gXAotbG9hZHMvc3RvcmVzIikpKSB2ZWNfbHZzcihpbnQgX19hLCBjb25zdCBmbG9hdCAqX19iKSB7Ci0gIHZlY3RvciB1bnNpZ25lZCBjaGFyIG1hc2sgPQotICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX2x2c3IoX19hLCBfX2IpOwotICB2ZWN0b3IgdW5zaWduZWQgY2hhciByZXZlcnNlID0gezE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNywgIDYsICA1LCAgNCwgIDMsICAyLCAgMSwgMH07Ci0gIHJldHVybiB2ZWNfcGVybShtYXNrLCBtYXNrLCByZXZlcnNlKTsKLX0KLSNlbHNlCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY19sdnNyKGludCBfX2EsIGNvbnN0IGZsb2F0ICpfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2J1aWx0aW5fYWx0aXZlY19sdnNyKF9fYSwgX19iKTsKLX0KLSNlbmRpZgotCi0vKiB2ZWNfbWFkZCAqLwotc3RhdGljIHZlY3RvciBzaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCi12ZWNfbWxhZGQodmVjdG9yIHNpZ25lZCBzaG9ydCwgdmVjdG9yIHNpZ25lZCBzaG9ydCwgdmVjdG9yIHNpZ25lZCBzaG9ydCk7Ci1zdGF0aWMgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKLXZlY19tbGFkZCh2ZWN0b3Igc2lnbmVkIHNob3J0LCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCk7Ci1zdGF0aWMgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKLXZlY19tbGFkZCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQsIHZlY3RvciBzaWduZWQgc2hvcnQsIHZlY3RvciBzaWduZWQgc2hvcnQpOwotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKLXZlY19tbGFkZCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCwgdmVjdG9yIHVuc2lnbmVkIHNob3J0KTsKLQotc3RhdGljIHZlY3RvciBzaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCi12ZWNfbWFkZCh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2IsCi0gICAgICAgICB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYykgewotICByZXR1cm4gIHZlY19tbGFkZChfX2EsIF9fYiwgX19jKTsKLX0KLQotc3RhdGljIHZlY3RvciBzaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCi12ZWNfbWFkZCh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYiwKLSAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2MpIHsKLSAgcmV0dXJuIHZlY19tbGFkZChfX2EsIF9fYiwgX19jKTsKLX0KLQotc3RhdGljIHZlY3RvciBzaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCi12ZWNfbWFkZCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYiwKLSAgICAgICAgIHZlY3RvciBzaWduZWQgc2hvcnQgX19jKSB7Ci0gIHJldHVybiB2ZWNfbWxhZGQoX19hLCBfX2IsIF9fYyk7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCi12ZWNfbWFkZCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iLAotICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYykgewotICByZXR1cm4gdmVjX21sYWRkKF9fYSwgX19iLCBfX2MpOwotfQotCi1zdGF0aWMgdmVjdG9yIGZsb2F0IF9fQVRUUlNfb19haQotdmVjX21hZGQodmVjdG9yIGZsb2F0IF9fYSwgdmVjdG9yIGZsb2F0IF9fYiwgdmVjdG9yIGZsb2F0IF9fYykgewotI2lmZGVmIF9fVlNYX18KLSAgcmV0dXJuIF9fYnVpbHRpbl92c3hfeHZtYWRkYXNwKF9fYSwgX19iLCBfX2MpOwotI2Vsc2UKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtYWRkZnAoX19hLCBfX2IsIF9fYyk7Ci0jZW5kaWYKLX0KLQotI2lmZGVmIF9fVlNYX18KLXN0YXRpYyB2ZWN0b3IgZG91YmxlIF9fQVRUUlNfb19haQotdmVjX21hZGQodmVjdG9yIGRvdWJsZSBfX2EsIHZlY3RvciBkb3VibGUgX19iLCB2ZWN0b3IgZG91YmxlIF9fYykgewotICByZXR1cm4gX19idWlsdGluX3ZzeF94dm1hZGRhZHAoX19hLCBfX2IsIF9fYyk7Ci19Ci0jZW5kaWYKLQotLyogdmVjX3ZtYWRkZnAgKi8KLQotc3RhdGljIHZlY3RvciBmbG9hdCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCi12ZWNfdm1hZGRmcCh2ZWN0b3IgZmxvYXQgX19hLCB2ZWN0b3IgZmxvYXQgX19iLCB2ZWN0b3IgZmxvYXQgX19jKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bWFkZGZwKF9fYSwgX19iLCBfX2MpOwotfQotCi0vKiB2ZWNfbWFkZHMgKi8KLQotc3RhdGljIHZlY3RvciBzaWduZWQgc2hvcnQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQotdmVjX21hZGRzKHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYiwKLSAgICAgICAgICB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYykgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1oYWRkc2hzKF9fYSwgX19iLCBfX2MpOwotfQotCi0vKiB2ZWNfdm1oYWRkc2hzICovCi1zdGF0aWMgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCi12ZWNfdm1oYWRkc2hzKHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYiwKLSAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2MpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtaGFkZHNocyhfX2EsIF9fYiwgX19jKTsKLX0KLQotLyogdmVjX21zdWIgKi8KLQotI2lmZGVmIF9fVlNYX18KLXN0YXRpYyB2ZWN0b3IgZmxvYXQgX19BVFRSU19vX2FpCi12ZWNfbXN1Yih2ZWN0b3IgZmxvYXQgX19hLCB2ZWN0b3IgZmxvYXQgX19iLCB2ZWN0b3IgZmxvYXQgX19jKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fdnN4X3h2bXN1YmFzcChfX2EsIF9fYiwgX19jKTsKLX0KLQotc3RhdGljIHZlY3RvciBkb3VibGUgX19BVFRSU19vX2FpCi12ZWNfbXN1Yih2ZWN0b3IgZG91YmxlIF9fYSwgdmVjdG9yIGRvdWJsZSBfX2IsIHZlY3RvciBkb3VibGUgX19jKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fdnN4X3h2bXN1YmFkcChfX2EsIF9fYiwgX19jKTsKLX0KLSNlbmRpZgotCi0vKiB2ZWNfbWF4ICovCi0KLXN0YXRpYyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY19tYXgodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1heHNiKF9fYSwgX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX21heCh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1heHNiKCh2ZWN0b3Igc2lnbmVkIGNoYXIpX19hLCBfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfbWF4KHZlY3RvciBzaWduZWQgY2hhciBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGNoYXIgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bWF4c2IoX19hLCAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX21heCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bWF4dWIoX19hLCBfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY19tYXgodmVjdG9yIGJvb2wgY2hhciBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bWF4dWIoKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfbWF4KHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1heHViKF9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY19tYXgodmVjdG9yIHNob3J0IF9fYSwgdmVjdG9yIHNob3J0IF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1heHNoKF9fYSwgX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX21heCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtYXhzaCgodmVjdG9yIHNob3J0KV9fYSwgX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX21heCh2ZWN0b3Igc2hvcnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtYXhzaChfX2EsICh2ZWN0b3Igc2hvcnQpX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX21heCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bWF4dWgoX19hLCBfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfbWF4KHZlY3RvciBib29sIHNob3J0IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1heHVoKCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hLCBfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfbWF4KHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIHNob3J0IF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1heHVoKF9fYSwgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX21heCh2ZWN0b3IgaW50IF9fYSwgdmVjdG9yIGludCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtYXhzdyhfX2EsIF9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfbWF4KHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciBpbnQgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bWF4c3coKHZlY3RvciBpbnQpX19hLCBfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX21heCh2ZWN0b3IgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1heHN3KF9fYSwgKHZlY3RvciBpbnQpX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpIHZlY19tYXgodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1heHV3KF9fYSwgX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpIHZlY19tYXgodmVjdG9yIGJvb2wgaW50IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bWF4dXcoKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hLCBfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkgdmVjX21heCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGludCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtYXh1dyhfX2EsICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYik7Ci19Ci0KLSNpZmRlZiBfX1BPV0VSOF9WRUNUT1JfXwotc3RhdGljIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQotdmVjX21heCh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1heHNkKF9fYSwgX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQotdmVjX21heCh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtYXhzZCgodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19hLCBfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpIHZlY19tYXgodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtYXhzZChfX2EsICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKLXZlY19tYXgodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bWF4dWQoX19hLCBfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKLXZlY19tYXgodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtYXh1ZCgodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2EsIF9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQotdmVjX21heCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1heHVkKF9fYSwgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19iKTsKLX0KLSNlbmRpZgotCi1zdGF0aWMgdmVjdG9yIGZsb2F0IF9fQVRUUlNfb19haSB2ZWNfbWF4KHZlY3RvciBmbG9hdCBfX2EsIHZlY3RvciBmbG9hdCBfX2IpIHsKLSNpZmRlZiBfX1ZTWF9fCi0gIHJldHVybiBfX2J1aWx0aW5fdnN4X3h2bWF4c3AoX19hLCBfX2IpOwotI2Vsc2UKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtYXhmcChfX2EsIF9fYik7Ci0jZW5kaWYKLX0KLQotI2lmZGVmIF9fVlNYX18KLXN0YXRpYyB2ZWN0b3IgZG91YmxlIF9fQVRUUlNfb19haSB2ZWNfbWF4KHZlY3RvciBkb3VibGUgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGRvdWJsZSBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl92c3hfeHZtYXhkcChfX2EsIF9fYik7Ci19Ci0jZW5kaWYKLQotLyogdmVjX3ZtYXhzYiAqLwotCi1zdGF0aWMgdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfdm1heHNiKHZlY3RvciBzaWduZWQgY2hhciBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtYXhzYihfX2EsIF9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY192bWF4c2IodmVjdG9yIGJvb2wgY2hhciBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtYXhzYigodmVjdG9yIHNpZ25lZCBjaGFyKV9fYSwgX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX3ZtYXhzYih2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1heHNiKF9fYSwgKHZlY3RvciBzaWduZWQgY2hhcilfX2IpOwotfQotCi0vKiB2ZWNfdm1heHViICovCi0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX3ZtYXh1Yih2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bWF4dWIoX19hLCBfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY192bWF4dWIodmVjdG9yIGJvb2wgY2hhciBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bWF4dWIoKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfdm1heHViKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1heHViKF9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Ci19Ci0KLS8qIHZlY192bWF4c2ggKi8KLQotc3RhdGljIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3ZtYXhzaCh2ZWN0b3Igc2hvcnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2hvcnQgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bWF4c2goX19hLCBfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfdm1heHNoKHZlY3RvciBib29sIHNob3J0IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNob3J0IF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1heHNoKCh2ZWN0b3Igc2hvcnQpX19hLCBfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfdm1heHNoKHZlY3RvciBzaG9ydCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIHNob3J0IF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1heHNoKF9fYSwgKHZlY3RvciBzaG9ydClfX2IpOwotfQotCi0vKiB2ZWNfdm1heHVoICovCi0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCi12ZWNfdm1heHVoKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtYXh1aChfX2EsIF9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCi12ZWNfdm1heHVoKHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1heHVoKCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hLCBfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfdm1heHVoKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIHNob3J0IF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1heHVoKF9fYSwgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2IpOwotfQotCi0vKiB2ZWNfdm1heHN3ICovCi0KLXN0YXRpYyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfdm1heHN3KHZlY3RvciBpbnQgX19hLCB2ZWN0b3IgaW50IF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1heHN3KF9fYSwgX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY192bWF4c3codmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIGludCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtYXhzdygodmVjdG9yIGludClfX2EsIF9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfdm1heHN3KHZlY3RvciBpbnQgX19hLCB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bWF4c3coX19hLCAodmVjdG9yIGludClfX2IpOwotfQotCi0vKiB2ZWNfdm1heHV3ICovCi0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haSB2ZWNfdm1heHV3KHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtYXh1dyhfX2EsIF9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haSB2ZWNfdm1heHV3KHZlY3RvciBib29sIGludCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1heHV3KCh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSwgX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpIHZlY192bWF4dXcodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bWF4dXcoX19hLCAodmVjdG9yIHVuc2lnbmVkIGludClfX2IpOwotfQotCi0vKiB2ZWNfdm1heGZwICovCi0KLXN0YXRpYyB2ZWN0b3IgZmxvYXQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQotdmVjX3ZtYXhmcCh2ZWN0b3IgZmxvYXQgX19hLCB2ZWN0b3IgZmxvYXQgX19iKSB7Ci0jaWZkZWYgX19WU1hfXwotICByZXR1cm4gX19idWlsdGluX3ZzeF94dm1heHNwKF9fYSwgX19iKTsKLSNlbHNlCi0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bWF4ZnAoX19hLCBfX2IpOwotI2VuZGlmCi19Ci0KLS8qIHZlY19tZXJnZWggKi8KLQotc3RhdGljIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX21lcmdlaCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7Ci0gIHJldHVybiB2ZWNfcGVybShfX2EsIF9fYiwKLSAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMHgwMCwgMHgxMCwgMHgwMSwgMHgxMSwgMHgwMiwgMHgxMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMywgMHgxMywgMHgwNCwgMHgxNCwgMHgwNSwgMHgxNSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNiwgMHgxNiwgMHgwNywgMHgxNykpOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY19tZXJnZWgodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2IsCi0gICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDAsIDB4MTAsIDB4MDEsIDB4MTEsIDB4MDIsIDB4MTIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDMsIDB4MTMsIDB4MDQsIDB4MTQsIDB4MDUsIDB4MTUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDYsIDB4MTYsIDB4MDcsIDB4MTcpKTsKLX0KLQotc3RhdGljIHZlY3RvciBib29sIGNoYXIgX19BVFRSU19vX2FpIHZlY19tZXJnZWgodmVjdG9yIGJvb2wgY2hhciBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgewotICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2IsCi0gICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDAsIDB4MTAsIDB4MDEsIDB4MTEsIDB4MDIsIDB4MTIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDMsIDB4MTMsIDB4MDQsIDB4MTQsIDB4MDUsIDB4MTUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDYsIDB4MTYsIDB4MDcsIDB4MTcpKTsKLX0KLQotc3RhdGljIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX21lcmdlaCh2ZWN0b3Igc2hvcnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2hvcnQgX19iKSB7Ci0gIHJldHVybiB2ZWNfcGVybShfX2EsIF9fYiwKLSAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMHgwMCwgMHgwMSwgMHgxMCwgMHgxMSwgMHgwMiwgMHgwMywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMiwgMHgxMywgMHgwNCwgMHgwNSwgMHgxNCwgMHgxNSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNiwgMHgwNywgMHgxNiwgMHgxNykpOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haQotdmVjX21lcmdlaCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7Ci0gIHJldHVybiB2ZWNfcGVybShfX2EsIF9fYiwKLSAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMHgwMCwgMHgwMSwgMHgxMCwgMHgxMSwgMHgwMiwgMHgwMywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMiwgMHgxMywgMHgwNCwgMHgwNSwgMHgxNCwgMHgxNSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNiwgMHgwNywgMHgxNiwgMHgxNykpOwotfQotCi1zdGF0aWMgdmVjdG9yIGJvb2wgc2hvcnQgX19BVFRSU19vX2FpIHZlY19tZXJnZWgodmVjdG9yIGJvb2wgc2hvcnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIHNob3J0IF9fYikgewotICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2IsCi0gICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDAsIDB4MDEsIDB4MTAsIDB4MTEsIDB4MDIsIDB4MDMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTIsIDB4MTMsIDB4MDQsIDB4MDUsIDB4MTQsIDB4MTUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDYsIDB4MDcsIDB4MTYsIDB4MTcpKTsKLX0KLQotc3RhdGljIHZlY3RvciBwaXhlbCBfX0FUVFJTX29fYWkgdmVjX21lcmdlaCh2ZWN0b3IgcGl4ZWwgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgcGl4ZWwgX19iKSB7Ci0gIHJldHVybiB2ZWNfcGVybShfX2EsIF9fYiwKLSAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMHgwMCwgMHgwMSwgMHgxMCwgMHgxMSwgMHgwMiwgMHgwMywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMiwgMHgxMywgMHgwNCwgMHgwNSwgMHgxNCwgMHgxNSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNiwgMHgwNywgMHgxNiwgMHgxNykpOwotfQotCi1zdGF0aWMgdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX21lcmdlaCh2ZWN0b3IgaW50IF9fYSwgdmVjdG9yIGludCBfX2IpIHsKLSAgcmV0dXJuIHZlY19wZXJtKF9fYSwgX19iLAotICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDEwLCAweDExLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEyLCAweDEzLCAweDA0LCAweDA1LCAweDA2LCAweDA3LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE0LCAweDE1LCAweDE2LCAweDE3KSk7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haSB2ZWNfbWVyZ2VoKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKLSAgcmV0dXJuIHZlY19wZXJtKF9fYSwgX19iLAotICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDEwLCAweDExLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEyLCAweDEzLCAweDA0LCAweDA1LCAweDA2LCAweDA3LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE0LCAweDE1LCAweDE2LCAweDE3KSk7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgYm9vbCBpbnQgX19BVFRSU19vX2FpIHZlY19tZXJnZWgodmVjdG9yIGJvb2wgaW50IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgaW50IF9fYikgewotICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2IsCi0gICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MTAsIDB4MTEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTIsIDB4MTMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTQsIDB4MTUsIDB4MTYsIDB4MTcpKTsKLX0KLQotc3RhdGljIHZlY3RvciBmbG9hdCBfX0FUVFJTX29fYWkgdmVjX21lcmdlaCh2ZWN0b3IgZmxvYXQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgZmxvYXQgX19iKSB7Ci0gIHJldHVybiB2ZWNfcGVybShfX2EsIF9fYiwKLSAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgxMCwgMHgxMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMiwgMHgxMywgMHgwNCwgMHgwNSwgMHgwNiwgMHgwNywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNCwgMHgxNSwgMHgxNiwgMHgxNykpOwotfQotCi0jaWZkZWYgX19WU1hfXwotc3RhdGljIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQotdmVjX21lcmdlaCh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgewotICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2IsCi0gICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTAsIDB4MTEsIDB4MTIsIDB4MTMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTQsIDB4MTUsIDB4MTYsIDB4MTcpKTsKLX0KLQotc3RhdGljIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQotdmVjX21lcmdlaCh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKLSAgcmV0dXJuIHZlY19wZXJtKF9fYSwgKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYiwKLSAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNCwgMHgwNSwgMHgwNiwgMHgwNywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMCwgMHgxMSwgMHgxMiwgMHgxMywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNCwgMHgxNSwgMHgxNiwgMHgxNykpOwotfQotCi1zdGF0aWMgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCi12ZWNfbWVyZ2VoKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgewotICByZXR1cm4gdmVjX3Blcm0oKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYSwgX19iLAotICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgweDAwLCAweDAxLCAweDAyLCAweDAzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA0LCAweDA1LCAweDA2LCAweDA3LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEwLCAweDExLCAweDEyLCAweDEzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE0LCAweDE1LCAweDE2LCAweDE3KSk7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQotdmVjX21lcmdlaCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKLSAgcmV0dXJuIHZlY19wZXJtKF9fYSwgX19iLAotICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgweDAwLCAweDAxLCAweDAyLCAweDAzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA0LCAweDA1LCAweDA2LCAweDA3LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEwLCAweDExLCAweDEyLCAweDEzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE0LCAweDE1LCAweDE2LCAweDE3KSk7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQotdmVjX21lcmdlaCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgewotICByZXR1cm4gdmVjX3Blcm0oX19hLCAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2IsCi0gICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTAsIDB4MTEsIDB4MTIsIDB4MTMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTQsIDB4MTUsIDB4MTYsIDB4MTcpKTsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCi12ZWNfbWVyZ2VoKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7Ci0gIHJldHVybiB2ZWNfcGVybSgodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2EsIF9fYiwKLSAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNCwgMHgwNSwgMHgwNiwgMHgwNywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMCwgMHgxMSwgMHgxMiwgMHgxMywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNCwgMHgxNSwgMHgxNiwgMHgxNykpOwotfQotCi1zdGF0aWMgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fQVRUUlNfb19haQotdmVjX21lcmdlaCh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7Ci0gIHJldHVybiB2ZWNfcGVybShfX2EsIF9fYiwKLSAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgweDAwLCAweDAxLCAweDAyLCAweDAzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMCwgMHgxMSwgMHgxMiwgMHgxMywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE0LCAweDE1LCAweDE2LCAweDE3KSk7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgZG91YmxlIF9fQVRUUlNfb19haSB2ZWNfbWVyZ2VoKHZlY3RvciBkb3VibGUgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGRvdWJsZSBfX2IpIHsKLSAgcmV0dXJuIHZlY19wZXJtKF9fYSwgX19iLAotICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgweDAwLCAweDAxLCAweDAyLCAweDAzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA0LCAweDA1LCAweDA2LCAweDA3LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEwLCAweDExLCAweDEyLCAweDEzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE0LCAweDE1LCAweDE2LCAweDE3KSk7Ci19Ci1zdGF0aWMgdmVjdG9yIGRvdWJsZSBfX0FUVFJTX29fYWkgdmVjX21lcmdlaCh2ZWN0b3IgZG91YmxlIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKLSAgcmV0dXJuIHZlY19wZXJtKF9fYSwgKHZlY3RvciBkb3VibGUpX19iLAotICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgweDAwLCAweDAxLCAweDAyLCAweDAzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA0LCAweDA1LCAweDA2LCAweDA3LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEwLCAweDExLCAweDEyLCAweDEzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE0LCAweDE1LCAweDE2LCAweDE3KSk7Ci19Ci1zdGF0aWMgdmVjdG9yIGRvdWJsZSBfX0FUVFJTX29fYWkgdmVjX21lcmdlaCh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGRvdWJsZSBfX2IpIHsKLSAgcmV0dXJuIHZlY19wZXJtKCh2ZWN0b3IgZG91YmxlKV9fYSwgX19iLAotICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgweDAwLCAweDAxLCAweDAyLCAweDAzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA0LCAweDA1LCAweDA2LCAweDA3LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEwLCAweDExLCAweDEyLCAweDEzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE0LCAweDE1LCAweDE2LCAweDE3KSk7Ci19Ci0jZW5kaWYKLQotLyogdmVjX3ZtcmdoYiAqLwotCi0jZGVmaW5lIF9fYnVpbHRpbl9hbHRpdmVjX3ZtcmdoYiB2ZWNfdm1yZ2hiCi0KLXN0YXRpYyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY192bXJnaGIodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2IsCi0gICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDAsIDB4MTAsIDB4MDEsIDB4MTEsIDB4MDIsIDB4MTIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDMsIDB4MTMsIDB4MDQsIDB4MTQsIDB4MDUsIDB4MTUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDYsIDB4MTYsIDB4MDcsIDB4MTcpKTsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfdm1yZ2hiKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKLSAgcmV0dXJuIHZlY19wZXJtKF9fYSwgX19iLAotICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgweDAwLCAweDEwLCAweDAxLCAweDExLCAweDAyLCAweDEyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAzLCAweDEzLCAweDA0LCAweDE0LCAweDA1LCAweDE1LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA2LCAweDE2LCAweDA3LCAweDE3KSk7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgYm9vbCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfdm1yZ2hiKHZlY3RvciBib29sIGNoYXIgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKLSAgcmV0dXJuIHZlY19wZXJtKF9fYSwgX19iLAotICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgweDAwLCAweDEwLCAweDAxLCAweDExLCAweDAyLCAweDEyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAzLCAweDEzLCAweDA0LCAweDE0LCAweDA1LCAweDE1LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA2LCAweDE2LCAweDA3LCAweDE3KSk7Ci19Ci0KLS8qIHZlY192bXJnaGggKi8KLQotI2RlZmluZSBfX2J1aWx0aW5fYWx0aXZlY192bXJnaGggdmVjX3ZtcmdoaAotCi1zdGF0aWMgdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfdm1yZ2hoKHZlY3RvciBzaG9ydCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuIHZlY19wZXJtKF9fYSwgX19iLAotICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgweDAwLCAweDAxLCAweDEwLCAweDExLCAweDAyLCAweDAzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEyLCAweDEzLCAweDA0LCAweDA1LCAweDE0LCAweDE1LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA2LCAweDA3LCAweDE2LCAweDE3KSk7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCi12ZWNfdm1yZ2hoKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuIHZlY19wZXJtKF9fYSwgX19iLAotICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgweDAwLCAweDAxLCAweDEwLCAweDExLCAweDAyLCAweDAzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEyLCAweDEzLCAweDA0LCAweDA1LCAweDE0LCAweDE1LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA2LCAweDA3LCAweDE2LCAweDE3KSk7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgYm9vbCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3ZtcmdoaCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7Ci0gIHJldHVybiB2ZWNfcGVybShfX2EsIF9fYiwKLSAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMHgwMCwgMHgwMSwgMHgxMCwgMHgxMSwgMHgwMiwgMHgwMywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMiwgMHgxMywgMHgwNCwgMHgwNSwgMHgxNCwgMHgxNSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNiwgMHgwNywgMHgxNiwgMHgxNykpOwotfQotCi1zdGF0aWMgdmVjdG9yIHBpeGVsIF9fQVRUUlNfb19haSB2ZWNfdm1yZ2hoKHZlY3RvciBwaXhlbCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBwaXhlbCBfX2IpIHsKLSAgcmV0dXJuIHZlY19wZXJtKF9fYSwgX19iLAotICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgweDAwLCAweDAxLCAweDEwLCAweDExLCAweDAyLCAweDAzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEyLCAweDEzLCAweDA0LCAweDA1LCAweDE0LCAweDE1LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA2LCAweDA3LCAweDE2LCAweDE3KSk7Ci19Ci0KLS8qIHZlY192bXJnaHcgKi8KLQotI2RlZmluZSBfX2J1aWx0aW5fYWx0aXZlY192bXJnaHcgdmVjX3ZtcmdodwotCi1zdGF0aWMgdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX3Ztcmdodyh2ZWN0b3IgaW50IF9fYSwgdmVjdG9yIGludCBfX2IpIHsKLSAgcmV0dXJuIHZlY19wZXJtKF9fYSwgX19iLAotICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDEwLCAweDExLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEyLCAweDEzLCAweDA0LCAweDA1LCAweDA2LCAweDA3LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE0LCAweDE1LCAweDE2LCAweDE3KSk7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haSB2ZWNfdm1yZ2h3KHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKLSAgcmV0dXJuIHZlY19wZXJtKF9fYSwgX19iLAotICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDEwLCAweDExLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEyLCAweDEzLCAweDA0LCAweDA1LCAweDA2LCAweDA3LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE0LCAweDE1LCAweDE2LCAweDE3KSk7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgYm9vbCBpbnQgX19BVFRSU19vX2FpIHZlY192bXJnaHcodmVjdG9yIGJvb2wgaW50IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgaW50IF9fYikgewotICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2IsCi0gICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MTAsIDB4MTEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTIsIDB4MTMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTQsIDB4MTUsIDB4MTYsIDB4MTcpKTsKLX0KLQotc3RhdGljIHZlY3RvciBmbG9hdCBfX0FUVFJTX29fYWkgdmVjX3Ztcmdodyh2ZWN0b3IgZmxvYXQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgZmxvYXQgX19iKSB7Ci0gIHJldHVybiB2ZWNfcGVybShfX2EsIF9fYiwKLSAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgxMCwgMHgxMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMiwgMHgxMywgMHgwNCwgMHgwNSwgMHgwNiwgMHgwNywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNCwgMHgxNSwgMHgxNiwgMHgxNykpOwotfQotCi0vKiB2ZWNfbWVyZ2VsICovCi0KLXN0YXRpYyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY19tZXJnZWwodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2IsCi0gICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDgsIDB4MTgsIDB4MDksIDB4MTksIDB4MEEsIDB4MUEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEIsIDB4MUIsIDB4MEMsIDB4MUMsIDB4MEQsIDB4MUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEUsIDB4MUUsIDB4MEYsIDB4MUYpKTsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfbWVyZ2VsKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKLSAgcmV0dXJuIHZlY19wZXJtKF9fYSwgX19iLAotICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgweDA4LCAweDE4LCAweDA5LCAweDE5LCAweDBBLCAweDFBLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBCLCAweDFCLCAweDBDLCAweDFDLCAweDBELCAweDFELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBFLCAweDFFLCAweDBGLCAweDFGKSk7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgYm9vbCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfbWVyZ2VsKHZlY3RvciBib29sIGNoYXIgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKLSAgcmV0dXJuIHZlY19wZXJtKF9fYSwgX19iLAotICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgweDA4LCAweDE4LCAweDA5LCAweDE5LCAweDBBLCAweDFBLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBCLCAweDFCLCAweDBDLCAweDFDLCAweDBELCAweDFELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBFLCAweDFFLCAweDBGLCAweDFGKSk7Ci19Ci0KLXN0YXRpYyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY19tZXJnZWwodmVjdG9yIHNob3J0IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNob3J0IF9fYikgewotICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2IsCi0gICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDgsIDB4MDksIDB4MTgsIDB4MTksIDB4MEEsIDB4MEIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MUEsIDB4MUIsIDB4MEMsIDB4MEQsIDB4MUMsIDB4MUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEUsIDB4MEYsIDB4MUUsIDB4MUYpKTsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKLXZlY19tZXJnZWwodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgewotICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2IsCi0gICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDgsIDB4MDksIDB4MTgsIDB4MTksIDB4MEEsIDB4MEIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MUEsIDB4MUIsIDB4MEMsIDB4MEQsIDB4MUMsIDB4MUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEUsIDB4MEYsIDB4MUUsIDB4MUYpKTsKLX0KLQotc3RhdGljIHZlY3RvciBib29sIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfbWVyZ2VsKHZlY3RvciBib29sIHNob3J0IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuIHZlY19wZXJtKF9fYSwgX19iLAotICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgweDA4LCAweDA5LCAweDE4LCAweDE5LCAweDBBLCAweDBCLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDFBLCAweDFCLCAweDBDLCAweDBELCAweDFDLCAweDFELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBFLCAweDBGLCAweDFFLCAweDFGKSk7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgcGl4ZWwgX19BVFRSU19vX2FpIHZlY19tZXJnZWwodmVjdG9yIHBpeGVsIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHBpeGVsIF9fYikgewotICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2IsCi0gICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDgsIDB4MDksIDB4MTgsIDB4MTksIDB4MEEsIDB4MEIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MUEsIDB4MUIsIDB4MEMsIDB4MEQsIDB4MUMsIDB4MUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEUsIDB4MEYsIDB4MUUsIDB4MUYpKTsKLX0KLQotc3RhdGljIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY19tZXJnZWwodmVjdG9yIGludCBfX2EsIHZlY3RvciBpbnQgX19iKSB7Ci0gIHJldHVybiB2ZWNfcGVybShfX2EsIF9fYiwKLSAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMHgwOCwgMHgwOSwgMHgwQSwgMHgwQiwgMHgxOCwgMHgxOSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxQSwgMHgxQiwgMHgwQywgMHgwRCwgMHgwRSwgMHgwRiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxQywgMHgxRCwgMHgxRSwgMHgxRikpOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkgdmVjX21lcmdlbCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7Ci0gIHJldHVybiB2ZWNfcGVybShfX2EsIF9fYiwKLSAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMHgwOCwgMHgwOSwgMHgwQSwgMHgwQiwgMHgxOCwgMHgxOSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxQSwgMHgxQiwgMHgwQywgMHgwRCwgMHgwRSwgMHgwRiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxQywgMHgxRCwgMHgxRSwgMHgxRikpOwotfQotCi1zdGF0aWMgdmVjdG9yIGJvb2wgaW50IF9fQVRUUlNfb19haSB2ZWNfbWVyZ2VsKHZlY3RvciBib29sIGludCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGludCBfX2IpIHsKLSAgcmV0dXJuIHZlY19wZXJtKF9fYSwgX19iLAotICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgweDA4LCAweDA5LCAweDBBLCAweDBCLCAweDE4LCAweDE5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDFBLCAweDFCLCAweDBDLCAweDBELCAweDBFLCAweDBGLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDFDLCAweDFELCAweDFFLCAweDFGKSk7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgZmxvYXQgX19BVFRSU19vX2FpIHZlY19tZXJnZWwodmVjdG9yIGZsb2F0IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGZsb2F0IF9fYikgewotICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2IsCi0gICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDgsIDB4MDksIDB4MEEsIDB4MEIsIDB4MTgsIDB4MTksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MUEsIDB4MUIsIDB4MEMsIDB4MEQsIDB4MEUsIDB4MEYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MUMsIDB4MUQsIDB4MUUsIDB4MUYpKTsKLX0KLQotI2lmZGVmIF9fVlNYX18KLXN0YXRpYyB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKLXZlY19tZXJnZWwodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKLSAgcmV0dXJuIHZlY19wZXJtKF9fYSwgX19iLAotICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgweDA4LCAweDA5LCAweDBBLCAweDBCLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBDLCAweDBELCAweDBFLCAweDBGLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE4LCAwWDE5LCAweDFBLCAweDFCLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDFDLCAweDFELCAweDFFLCAweDFGKSk7Ci19Ci1zdGF0aWMgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCi12ZWNfbWVyZ2VsKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgewotICByZXR1cm4gdmVjX3Blcm0oX19hLCAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19iLAotICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgweDA4LCAweDA5LCAweDBBLCAweDBCLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBDLCAweDBELCAweDBFLCAweDBGLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE4LCAwWDE5LCAweDFBLCAweDFCLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDFDLCAweDFELCAweDFFLCAweDFGKSk7Ci19Ci1zdGF0aWMgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCi12ZWNfbWVyZ2VsKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgewotICByZXR1cm4gdmVjX3Blcm0oKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYSwgX19iLAotICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgweDA4LCAweDA5LCAweDBBLCAweDBCLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBDLCAweDBELCAweDBFLCAweDBGLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE4LCAwWDE5LCAweDFBLCAweDFCLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDFDLCAweDFELCAweDFFLCAweDFGKSk7Ci19Ci1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKLXZlY19tZXJnZWwodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7Ci0gIHJldHVybiB2ZWNfcGVybShfX2EsIF9fYiwKLSAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMHgwOCwgMHgwOSwgMHgwQSwgMHgwQiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQywgMHgwRCwgMHgwRSwgMHgwRiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxOCwgMFgxOSwgMHgxQSwgMHgxQiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxQywgMHgxRCwgMHgxRSwgMHgxRikpOwotfQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCi12ZWNfbWVyZ2VsKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7Ci0gIHJldHVybiB2ZWNfcGVybShfX2EsICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYiwKLSAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMHgwOCwgMHgwOSwgMHgwQSwgMHgwQiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQywgMHgwRCwgMHgwRSwgMHgwRiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxOCwgMFgxOSwgMHgxQSwgMHgxQiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxQywgMHgxRCwgMHgxRSwgMHgxRikpOwotfQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCi12ZWNfbWVyZ2VsKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7Ci0gIHJldHVybiB2ZWNfcGVybSgodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2EsIF9fYiwKLSAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMHgwOCwgMHgwOSwgMHgwQSwgMHgwQiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQywgMHgwRCwgMHgwRSwgMHgwRiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxOCwgMFgxOSwgMHgxQSwgMHgxQiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxQywgMHgxRCwgMHgxRSwgMHgxRikpOwotfQotc3RhdGljIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKLXZlY19tZXJnZWwodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgewotICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2IsCi0gICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDgsIDB4MDksIDB4MEEsIDB4MEIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEMsIDB4MEQsIDB4MEUsIDB4MEYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTgsIDBYMTksIDB4MUEsIDB4MUIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MUMsIDB4MUQsIDB4MUUsIDB4MUYpKTsKLX0KLXN0YXRpYyB2ZWN0b3IgZG91YmxlIF9fQVRUUlNfb19haQotdmVjX21lcmdlbCh2ZWN0b3IgZG91YmxlIF9fYSwgdmVjdG9yIGRvdWJsZSBfX2IpIHsKLSAgcmV0dXJuIHZlY19wZXJtKF9fYSwgX19iLAotICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgweDA4LCAweDA5LCAweDBBLCAweDBCLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBDLCAweDBELCAweDBFLCAweDBGLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE4LCAwWDE5LCAweDFBLCAweDFCLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDFDLCAweDFELCAweDFFLCAweDFGKSk7Ci19Ci1zdGF0aWMgdmVjdG9yIGRvdWJsZSBfX0FUVFJTX29fYWkKLXZlY19tZXJnZWwodmVjdG9yIGRvdWJsZSBfX2EsIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKLSAgcmV0dXJuIHZlY19wZXJtKF9fYSwgKHZlY3RvciBkb3VibGUpX19iLAotICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgweDA4LCAweDA5LCAweDBBLCAweDBCLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBDLCAweDBELCAweDBFLCAweDBGLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE4LCAwWDE5LCAweDFBLCAweDFCLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDFDLCAweDFELCAweDFFLCAweDFGKSk7Ci19Ci1zdGF0aWMgdmVjdG9yIGRvdWJsZSBfX0FUVFJTX29fYWkKLXZlY19tZXJnZWwodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIGRvdWJsZSBfX2IpIHsKLSAgcmV0dXJuIHZlY19wZXJtKCh2ZWN0b3IgZG91YmxlKV9fYSwgX19iLAotICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgweDA4LCAweDA5LCAweDBBLCAweDBCLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBDLCAweDBELCAweDBFLCAweDBGLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE4LCAwWDE5LCAweDFBLCAweDFCLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDFDLCAweDFELCAweDFFLCAweDFGKSk7Ci19Ci0jZW5kaWYKLQotLyogdmVjX3ZtcmdsYiAqLwotCi0jZGVmaW5lIF9fYnVpbHRpbl9hbHRpdmVjX3ZtcmdsYiB2ZWNfdm1yZ2xiCi0KLXN0YXRpYyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY192bXJnbGIodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2IsCi0gICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDgsIDB4MTgsIDB4MDksIDB4MTksIDB4MEEsIDB4MUEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEIsIDB4MUIsIDB4MEMsIDB4MUMsIDB4MEQsIDB4MUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEUsIDB4MUUsIDB4MEYsIDB4MUYpKTsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfdm1yZ2xiKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKLSAgcmV0dXJuIHZlY19wZXJtKF9fYSwgX19iLAotICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgweDA4LCAweDE4LCAweDA5LCAweDE5LCAweDBBLCAweDFBLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBCLCAweDFCLCAweDBDLCAweDFDLCAweDBELCAweDFELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBFLCAweDFFLCAweDBGLCAweDFGKSk7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgYm9vbCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfdm1yZ2xiKHZlY3RvciBib29sIGNoYXIgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKLSAgcmV0dXJuIHZlY19wZXJtKF9fYSwgX19iLAotICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgweDA4LCAweDE4LCAweDA5LCAweDE5LCAweDBBLCAweDFBLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBCLCAweDFCLCAweDBDLCAweDFDLCAweDBELCAweDFELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBFLCAweDFFLCAweDBGLCAweDFGKSk7Ci19Ci0KLS8qIHZlY192bXJnbGggKi8KLQotI2RlZmluZSBfX2J1aWx0aW5fYWx0aXZlY192bXJnbGggdmVjX3ZtcmdsaAotCi1zdGF0aWMgdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfdm1yZ2xoKHZlY3RvciBzaG9ydCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuIHZlY19wZXJtKF9fYSwgX19iLAotICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgweDA4LCAweDA5LCAweDE4LCAweDE5LCAweDBBLCAweDBCLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDFBLCAweDFCLCAweDBDLCAweDBELCAweDFDLCAweDFELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBFLCAweDBGLCAweDFFLCAweDFGKSk7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCi12ZWNfdm1yZ2xoKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuIHZlY19wZXJtKF9fYSwgX19iLAotICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgweDA4LCAweDA5LCAweDE4LCAweDE5LCAweDBBLCAweDBCLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDFBLCAweDFCLCAweDBDLCAweDBELCAweDFDLCAweDFELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBFLCAweDBGLCAweDFFLCAweDFGKSk7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgYm9vbCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3ZtcmdsaCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7Ci0gIHJldHVybiB2ZWNfcGVybShfX2EsIF9fYiwKLSAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMHgwOCwgMHgwOSwgMHgxOCwgMHgxOSwgMHgwQSwgMHgwQiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxQSwgMHgxQiwgMHgwQywgMHgwRCwgMHgxQywgMHgxRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRSwgMHgwRiwgMHgxRSwgMHgxRikpOwotfQotCi1zdGF0aWMgdmVjdG9yIHBpeGVsIF9fQVRUUlNfb19haSB2ZWNfdm1yZ2xoKHZlY3RvciBwaXhlbCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBwaXhlbCBfX2IpIHsKLSAgcmV0dXJuIHZlY19wZXJtKF9fYSwgX19iLAotICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgweDA4LCAweDA5LCAweDE4LCAweDE5LCAweDBBLCAweDBCLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDFBLCAweDFCLCAweDBDLCAweDBELCAweDFDLCAweDFELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBFLCAweDBGLCAweDFFLCAweDFGKSk7Ci19Ci0KLS8qIHZlY192bXJnbHcgKi8KLQotI2RlZmluZSBfX2J1aWx0aW5fYWx0aXZlY192bXJnbHcgdmVjX3ZtcmdsdwotCi1zdGF0aWMgdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX3Ztcmdsdyh2ZWN0b3IgaW50IF9fYSwgdmVjdG9yIGludCBfX2IpIHsKLSAgcmV0dXJuIHZlY19wZXJtKF9fYSwgX19iLAotICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgweDA4LCAweDA5LCAweDBBLCAweDBCLCAweDE4LCAweDE5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDFBLCAweDFCLCAweDBDLCAweDBELCAweDBFLCAweDBGLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDFDLCAweDFELCAweDFFLCAweDFGKSk7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haSB2ZWNfdm1yZ2x3KHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKLSAgcmV0dXJuIHZlY19wZXJtKF9fYSwgX19iLAotICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgweDA4LCAweDA5LCAweDBBLCAweDBCLCAweDE4LCAweDE5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDFBLCAweDFCLCAweDBDLCAweDBELCAweDBFLCAweDBGLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDFDLCAweDFELCAweDFFLCAweDFGKSk7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgYm9vbCBpbnQgX19BVFRSU19vX2FpIHZlY192bXJnbHcodmVjdG9yIGJvb2wgaW50IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgaW50IF9fYikgewotICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2IsCi0gICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDgsIDB4MDksIDB4MEEsIDB4MEIsIDB4MTgsIDB4MTksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MUEsIDB4MUIsIDB4MEMsIDB4MEQsIDB4MEUsIDB4MEYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MUMsIDB4MUQsIDB4MUUsIDB4MUYpKTsKLX0KLQotc3RhdGljIHZlY3RvciBmbG9hdCBfX0FUVFJTX29fYWkgdmVjX3Ztcmdsdyh2ZWN0b3IgZmxvYXQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgZmxvYXQgX19iKSB7Ci0gIHJldHVybiB2ZWNfcGVybShfX2EsIF9fYiwKLSAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMHgwOCwgMHgwOSwgMHgwQSwgMHgwQiwgMHgxOCwgMHgxOSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxQSwgMHgxQiwgMHgwQywgMHgwRCwgMHgwRSwgMHgwRiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxQywgMHgxRCwgMHgxRSwgMHgxRikpOwotfQotCi0KLSNpZmRlZiBfX1BPV0VSOF9WRUNUT1JfXwotLyogdmVjX21lcmdlZSAqLwotCi1zdGF0aWMgdmVjdG9yIGJvb2wgaW50IF9fQVRUUlNfb19haQotdmVjX21lcmdlZSh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7Ci0gIHJldHVybiB2ZWNfcGVybShfX2EsIF9fYiwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKQotICAgICAgICAgICAgICAgICAgKDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MTAsIDB4MTEsIDB4MTIsIDB4MTMsCi0gICAgICAgICAgICAgICAgICAgMHgwOCwgMHgwOSwgMHgwQSwgMHgwQiwgMHgxOCwgMHgxOSwgMHgxQSwgMHgxQikpOwotfQotCi1zdGF0aWMgdmVjdG9yIHNpZ25lZCBpbnQgX19BVFRSU19vX2FpCi12ZWNfbWVyZ2VlKHZlY3RvciBzaWduZWQgaW50IF9fYSwgdmVjdG9yIHNpZ25lZCBpbnQgX19iKSB7Ci0gIHJldHVybiB2ZWNfcGVybShfX2EsIF9fYiwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKQotICAgICAgICAgICAgICAgICAgKDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MTAsIDB4MTEsIDB4MTIsIDB4MTMsCi0gICAgICAgICAgICAgICAgICAgMHgwOCwgMHgwOSwgMHgwQSwgMHgwQiwgMHgxOCwgMHgxOSwgMHgxQSwgMHgxQikpOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkKLXZlY19tZXJnZWUodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7Ci0gIHJldHVybiB2ZWNfcGVybShfX2EsIF9fYiwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKQotICAgICAgICAgICAgICAgICAgKDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MTAsIDB4MTEsIDB4MTIsIDB4MTMsCi0gICAgICAgICAgICAgICAgICAgMHgwOCwgMHgwOSwgMHgwQSwgMHgwQiwgMHgxOCwgMHgxOSwgMHgxQSwgMHgxQikpOwotfQotCi0vKiB2ZWNfbWVyZ2VvICovCi0KLXN0YXRpYyB2ZWN0b3IgYm9vbCBpbnQgIF9fQVRUUlNfb19haQotdmVjX21lcmdlbyh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7Ci0gIHJldHVybiB2ZWNfcGVybShfX2EsIF9fYiwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKQotICAgICAgICAgICAgICAgICAgKDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsIDB4MTQsIDB4MTUsIDB4MTYsIDB4MTcsCi0gICAgICAgICAgICAgICAgICAgMHgwQywgMHgwRCwgMHgwRSwgMHgwRiwgMHgxQywgMHgxRCwgMHgxRSwgMHgxRikpOwotfQotCi1zdGF0aWMgdmVjdG9yIHNpZ25lZCBpbnQgIF9fQVRUUlNfb19haQotdmVjX21lcmdlbyh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYikgewotICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2IsICh2ZWN0b3IgdW5zaWduZWQgY2hhcikKLSAgICAgICAgICAgICAgICAgICgweDA0LCAweDA1LCAweDA2LCAweDA3LCAweDE0LCAweDE1LCAweDE2LCAweDE3LAotICAgICAgICAgICAgICAgICAgIDB4MEMsIDB4MEQsIDB4MEUsIDB4MEYsIDB4MUMsIDB4MUQsIDB4MUUsIDB4MUYpKTsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBpbnQgIF9fQVRUUlNfb19haQotdmVjX21lcmdlbyh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKLSAgcmV0dXJuIHZlY19wZXJtKF9fYSwgX19iLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpCi0gICAgICAgICAgICAgICAgICAoMHgwNCwgMHgwNSwgMHgwNiwgMHgwNywgMHgxNCwgMHgxNSwgMHgxNiwgMHgxNywKLSAgICAgICAgICAgICAgICAgICAweDBDLCAweDBELCAweDBFLCAweDBGLCAweDFDLCAweDFELCAweDFFLCAweDFGKSk7Ci19Ci0KLSNlbmRpZgotCi0vKiB2ZWNfbWZ2c2NyICovCi0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQotdmVjX21mdnNjcih2b2lkKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY19tZnZzY3IoKTsKLX0KLQotLyogdmVjX21pbiAqLwotCi1zdGF0aWMgdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfbWluKHZlY3RvciBzaWduZWQgY2hhciBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtaW5zYihfX2EsIF9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY19taW4odmVjdG9yIGJvb2wgY2hhciBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtaW5zYigodmVjdG9yIHNpZ25lZCBjaGFyKV9fYSwgX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX21pbih2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1pbnNiKF9fYSwgKHZlY3RvciBzaWduZWQgY2hhcilfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY19taW4odmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1pbnViKF9fYSwgX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfbWluKHZlY3RvciBib29sIGNoYXIgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1pbnViKCh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsIF9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX21pbih2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtaW51YihfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfbWluKHZlY3RvciBzaG9ydCBfX2EsIHZlY3RvciBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtaW5zaChfX2EsIF9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY19taW4odmVjdG9yIGJvb2wgc2hvcnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2hvcnQgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bWluc2goKHZlY3RvciBzaG9ydClfX2EsIF9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY19taW4odmVjdG9yIHNob3J0IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bWluc2goX19hLCAodmVjdG9yIHNob3J0KV9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpIHZlY19taW4odmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1pbnVoKF9fYSwgX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX21pbih2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtaW51aCgodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSwgX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX21pbih2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtaW51aChfX2EsICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY19taW4odmVjdG9yIGludCBfX2EsIHZlY3RvciBpbnQgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bWluc3coX19hLCBfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX21pbih2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgaW50IF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1pbnN3KCh2ZWN0b3IgaW50KV9fYSwgX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY19taW4odmVjdG9yIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtaW5zdyhfX2EsICh2ZWN0b3IgaW50KV9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haSB2ZWNfbWluKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtaW51dyhfX2EsIF9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haSB2ZWNfbWluKHZlY3RvciBib29sIGludCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1pbnV3KCh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSwgX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpIHZlY19taW4odmVjdG9yIHVuc2lnbmVkIGludCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bWludXcoX19hLCAodmVjdG9yIHVuc2lnbmVkIGludClfX2IpOwotfQotCi0jaWZkZWYgX19QT1dFUjhfVkVDVE9SX18KLXN0YXRpYyB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKLXZlY19taW4odmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtaW5zZChfX2EsIF9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKLXZlY19taW4odmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bWluc2QoKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYSwgX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haSB2ZWNfbWluKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bWluc2QoX19hLCAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCi12ZWNfbWluKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1pbnVkKF9fYSwgX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCi12ZWNfbWluKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bWludWQoKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19hLCBfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKLXZlY19taW4odmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtaW51ZChfX2EsICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYik7Ci19Ci0jZW5kaWYKLQotc3RhdGljIHZlY3RvciBmbG9hdCBfX0FUVFJTX29fYWkgdmVjX21pbih2ZWN0b3IgZmxvYXQgX19hLCB2ZWN0b3IgZmxvYXQgX19iKSB7Ci0jaWZkZWYgX19WU1hfXwotICByZXR1cm4gX19idWlsdGluX3ZzeF94dm1pbnNwKF9fYSwgX19iKTsKLSNlbHNlCi0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bWluZnAoX19hLCBfX2IpOwotI2VuZGlmCi19Ci0KLSNpZmRlZiBfX1ZTWF9fCi1zdGF0aWMgdmVjdG9yIGRvdWJsZSBfX0FUVFJTX29fYWkgdmVjX21pbih2ZWN0b3IgZG91YmxlIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBkb3VibGUgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fdnN4X3h2bWluZHAoX19hLCBfX2IpOwotfQotI2VuZGlmCi0KLS8qIHZlY192bWluc2IgKi8KLQotc3RhdGljIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX3ZtaW5zYih2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bWluc2IoX19hLCBfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfdm1pbnNiKHZlY3RvciBib29sIGNoYXIgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bWluc2IoKHZlY3RvciBzaWduZWQgY2hhcilfX2EsIF9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY192bWluc2IodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtaW5zYihfX2EsICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19iKTsKLX0KLQotLyogdmVjX3ZtaW51YiAqLwotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY192bWludWIodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1pbnViKF9fYSwgX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfdm1pbnViKHZlY3RvciBib29sIGNoYXIgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1pbnViKCh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsIF9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX3ZtaW51Yih2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtaW51YihfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOwotfQotCi0vKiB2ZWNfdm1pbnNoICovCi0KLXN0YXRpYyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY192bWluc2godmVjdG9yIHNob3J0IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNob3J0IF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1pbnNoKF9fYSwgX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3ZtaW5zaCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtaW5zaCgodmVjdG9yIHNob3J0KV9fYSwgX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3ZtaW5zaCh2ZWN0b3Igc2hvcnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtaW5zaChfX2EsICh2ZWN0b3Igc2hvcnQpX19iKTsKLX0KLQotLyogdmVjX3ZtaW51aCAqLwotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haQotdmVjX3ZtaW51aCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bWludWgoX19hLCBfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haQotdmVjX3ZtaW51aCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtaW51aCgodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSwgX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3ZtaW51aCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtaW51aChfX2EsICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19iKTsKLX0KLQotLyogdmVjX3ZtaW5zdyAqLwotCi1zdGF0aWMgdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX3ZtaW5zdyh2ZWN0b3IgaW50IF9fYSwgdmVjdG9yIGludCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtaW5zdyhfX2EsIF9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfdm1pbnN3KHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciBpbnQgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bWluc3coKHZlY3RvciBpbnQpX19hLCBfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX3ZtaW5zdyh2ZWN0b3IgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1pbnN3KF9fYSwgKHZlY3RvciBpbnQpX19iKTsKLX0KLQotLyogdmVjX3ZtaW51dyAqLwotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkgdmVjX3ZtaW51dyh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bWludXcoX19hLCBfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkgdmVjX3ZtaW51dyh2ZWN0b3IgYm9vbCBpbnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtaW51dygodmVjdG9yIHVuc2lnbmVkIGludClfX2EsIF9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haSB2ZWNfdm1pbnV3KHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgaW50IF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1pbnV3KF9fYSwgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iKTsKLX0KLQotLyogdmVjX3ZtaW5mcCAqLwotCi1zdGF0aWMgdmVjdG9yIGZsb2F0IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKLXZlY192bWluZnAodmVjdG9yIGZsb2F0IF9fYSwgdmVjdG9yIGZsb2F0IF9fYikgewotI2lmZGVmIF9fVlNYX18KLSAgcmV0dXJuIF9fYnVpbHRpbl92c3hfeHZtaW5zcChfX2EsIF9fYik7Ci0jZWxzZQotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1pbmZwKF9fYSwgX19iKTsKLSNlbmRpZgotfQotCi0vKiB2ZWNfbWxhZGQgKi8KLQotI2RlZmluZSBfX2J1aWx0aW5fYWx0aXZlY192bWxhZGR1aG0gdmVjX21sYWRkCi0KLXN0YXRpYyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY19tbGFkZCh2ZWN0b3Igc2hvcnQgX19hLCB2ZWN0b3Igc2hvcnQgX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaG9ydCBfX2MpIHsKLSAgcmV0dXJuIF9fYSAqIF9fYiArIF9fYzsKLX0KLQotc3RhdGljIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX21sYWRkKHZlY3RvciBzaG9ydCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19jKSB7Ci0gIHJldHVybiBfX2EgKiAodmVjdG9yIHNob3J0KV9fYiArICh2ZWN0b3Igc2hvcnQpX19jOwotfQotCi1zdGF0aWMgdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfbWxhZGQodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2hvcnQgX19iLCB2ZWN0b3Igc2hvcnQgX19jKSB7Ci0gIHJldHVybiAodmVjdG9yIHNob3J0KV9fYSAqIF9fYiArIF9fYzsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX21sYWRkKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19jKSB7Ci0gIHJldHVybiBfX2EgKiBfX2IgKyBfX2M7Ci19Ci0KLS8qIHZlY192bWxhZGR1aG0gKi8KLQotc3RhdGljIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3ZtbGFkZHVobSh2ZWN0b3Igc2hvcnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2hvcnQgX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2hvcnQgX19jKSB7Ci0gIHJldHVybiBfX2EgKiBfX2IgKyBfX2M7Ci19Ci0KLXN0YXRpYyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY192bWxhZGR1aG0odmVjdG9yIHNob3J0IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYykgewotICByZXR1cm4gX19hICogKHZlY3RvciBzaG9ydClfX2IgKyAodmVjdG9yIHNob3J0KV9fYzsKLX0KLQotc3RhdGljIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3ZtbGFkZHVobSh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2hvcnQgX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2hvcnQgX19jKSB7Ci0gIHJldHVybiAodmVjdG9yIHNob3J0KV9fYSAqIF9fYiArIF9fYzsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKLXZlY192bWxhZGR1aG0odmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYiwKLSAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYykgewotICByZXR1cm4gX19hICogX19iICsgX19jOwotfQotCi0vKiB2ZWNfbXJhZGRzICovCi0KLXN0YXRpYyB2ZWN0b3Igc2hvcnQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQotdmVjX21yYWRkcyh2ZWN0b3Igc2hvcnQgX19hLCB2ZWN0b3Igc2hvcnQgX19iLCB2ZWN0b3Igc2hvcnQgX19jKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bWhyYWRkc2hzKF9fYSwgX19iLCBfX2MpOwotfQotCi0vKiB2ZWNfdm1ocmFkZHNocyAqLwotCi1zdGF0aWMgdmVjdG9yIHNob3J0IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKLXZlY192bWhyYWRkc2hzKHZlY3RvciBzaG9ydCBfX2EsIHZlY3RvciBzaG9ydCBfX2IsIHZlY3RvciBzaG9ydCBfX2MpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtaHJhZGRzaHMoX19hLCBfX2IsIF9fYyk7Ci19Ci0KLS8qIHZlY19tc3VtICovCi0KLXN0YXRpYyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfbXN1bSh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgaW50IF9fYykgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1zdW1tYm0oX19hLCBfX2IsIF9fYyk7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haSB2ZWNfbXN1bSh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19jKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bXN1bXVibShfX2EsIF9fYiwgX19jKTsKLX0KLQotc3RhdGljIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY19tc3VtKHZlY3RvciBzaG9ydCBfX2EsIHZlY3RvciBzaG9ydCBfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGludCBfX2MpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3Ztc3Vtc2htKF9fYSwgX19iLCBfX2MpOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkgdmVjX21zdW0odmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19jKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bXN1bXVobShfX2EsIF9fYiwgX19jKTsKLX0KLQotLyogdmVjX3Ztc3VtbWJtICovCi0KLXN0YXRpYyB2ZWN0b3IgaW50IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKLXZlY192bXN1bW1ibSh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IsIHZlY3RvciBpbnQgX19jKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bXN1bW1ibShfX2EsIF9fYiwgX19jKTsKLX0KLQotLyogdmVjX3Ztc3VtdWJtICovCi0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKLXZlY192bXN1bXVibSh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYiwKLSAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYykgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1zdW11Ym0oX19hLCBfX2IsIF9fYyk7Ci19Ci0KLS8qIHZlY192bXN1bXNobSAqLwotCi1zdGF0aWMgdmVjdG9yIGludCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCi12ZWNfdm1zdW1zaG0odmVjdG9yIHNob3J0IF9fYSwgdmVjdG9yIHNob3J0IF9fYiwgdmVjdG9yIGludCBfX2MpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3Ztc3Vtc2htKF9fYSwgX19iLCBfX2MpOwotfQotCi0vKiB2ZWNfdm1zdW11aG0gKi8KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBpbnQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQotdmVjX3Ztc3VtdWhtKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IsCi0gICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2MpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3Ztc3VtdWhtKF9fYSwgX19iLCBfX2MpOwotfQotCi0vKiB2ZWNfbXN1bXMgKi8KLQotc3RhdGljIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY19tc3Vtcyh2ZWN0b3Igc2hvcnQgX19hLCB2ZWN0b3Igc2hvcnQgX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgaW50IF9fYykgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1zdW1zaHMoX19hLCBfX2IsIF9fYyk7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haSB2ZWNfbXN1bXModmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2MpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3Ztc3VtdWhzKF9fYSwgX19iLCBfX2MpOwotfQotCi0vKiB2ZWNfdm1zdW1zaHMgKi8KLQotc3RhdGljIHZlY3RvciBpbnQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQotdmVjX3Ztc3Vtc2hzKHZlY3RvciBzaG9ydCBfX2EsIHZlY3RvciBzaG9ydCBfX2IsIHZlY3RvciBpbnQgX19jKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bXN1bXNocyhfX2EsIF9fYiwgX19jKTsKLX0KLQotLyogdmVjX3Ztc3VtdWhzICovCi0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKLXZlY192bXN1bXVocyh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iLAotICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19jKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bXN1bXVocyhfX2EsIF9fYiwgX19jKTsKLX0KLQotLyogdmVjX210dnNjciAqLwotCi1zdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX210dnNjcih2ZWN0b3Igc2lnbmVkIGNoYXIgX19hKSB7Ci0gIF9fYnVpbHRpbl9hbHRpdmVjX210dnNjcigodmVjdG9yIGludClfX2EpOwotfQotCi1zdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX210dnNjcih2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EpIHsKLSAgX19idWlsdGluX2FsdGl2ZWNfbXR2c2NyKCh2ZWN0b3IgaW50KV9fYSk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfbXR2c2NyKHZlY3RvciBib29sIGNoYXIgX19hKSB7Ci0gIF9fYnVpbHRpbl9hbHRpdmVjX210dnNjcigodmVjdG9yIGludClfX2EpOwotfQotCi1zdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX210dnNjcih2ZWN0b3Igc2hvcnQgX19hKSB7Ci0gIF9fYnVpbHRpbl9hbHRpdmVjX210dnNjcigodmVjdG9yIGludClfX2EpOwotfQotCi1zdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX210dnNjcih2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hKSB7Ci0gIF9fYnVpbHRpbl9hbHRpdmVjX210dnNjcigodmVjdG9yIGludClfX2EpOwotfQotCi1zdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX210dnNjcih2ZWN0b3IgYm9vbCBzaG9ydCBfX2EpIHsKLSAgX19idWlsdGluX2FsdGl2ZWNfbXR2c2NyKCh2ZWN0b3IgaW50KV9fYSk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfbXR2c2NyKHZlY3RvciBwaXhlbCBfX2EpIHsKLSAgX19idWlsdGluX2FsdGl2ZWNfbXR2c2NyKCh2ZWN0b3IgaW50KV9fYSk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfbXR2c2NyKHZlY3RvciBpbnQgX19hKSB7Ci0gIF9fYnVpbHRpbl9hbHRpdmVjX210dnNjcigodmVjdG9yIGludClfX2EpOwotfQotCi1zdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX210dnNjcih2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSkgewotICBfX2J1aWx0aW5fYWx0aXZlY19tdHZzY3IoKHZlY3RvciBpbnQpX19hKTsKLX0KLQotc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19tdHZzY3IodmVjdG9yIGJvb2wgaW50IF9fYSkgewotICBfX2J1aWx0aW5fYWx0aXZlY19tdHZzY3IoKHZlY3RvciBpbnQpX19hKTsKLX0KLQotc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19tdHZzY3IodmVjdG9yIGZsb2F0IF9fYSkgewotICBfX2J1aWx0aW5fYWx0aXZlY19tdHZzY3IoKHZlY3RvciBpbnQpX19hKTsKLX0KLQotLyogdmVjX211bCAqLwotCi0vKiBJbnRlZ2VyIHZlY3RvciBtdWx0aXBsaWNhdGlvbiB3aWxsIGludm9sdmUgbXVsdGlwbGljYXRpb24gb2YgdGhlIG9kZC9ldmVuCi0gICBlbGVtZW50cyBzZXBhcmF0ZWx5LCB0aGVuIHRydW5jYXRpbmcgdGhlIHJlc3VsdHMgYW5kIG1vdmluZyB0byB0aGUKLSAgIHJlc3VsdCB2ZWN0b3IuCi0qLwotc3RhdGljIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX211bCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7Ci0gIHJldHVybiBfX2EgKiBfX2I7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX211bCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7Ci0gIHJldHVybiBfX2EgKiBfX2I7Ci19Ci0KLXN0YXRpYyB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfbXVsKHZlY3RvciBzaWduZWQgc2hvcnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuIF9fYSAqIF9fYjsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX211bCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7Ci0gIHJldHVybiBfX2EgKiBfX2I7Ci19Ci0KLXN0YXRpYyB2ZWN0b3Igc2lnbmVkIGludCBfX0FUVFJTX29fYWkgdmVjX211bCh2ZWN0b3Igc2lnbmVkIGludCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBpbnQgX19iKSB7Ci0gIHJldHVybiBfX2EgKiBfX2I7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haSB2ZWNfbXVsKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKLSAgcmV0dXJuIF9fYSAqIF9fYjsKLX0KLQotI2lmZGVmIF9fVlNYX18KLXN0YXRpYyB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKLXZlY19tdWwodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKLSAgcmV0dXJuIF9fYSAqIF9fYjsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCi12ZWNfbXVsKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgewotICByZXR1cm4gX19hICogX19iOwotfQotI2VuZGlmCi0KLXN0YXRpYyB2ZWN0b3IgZmxvYXQgX19BVFRSU19vX2FpIHZlY19tdWwodmVjdG9yIGZsb2F0IF9fYSwgdmVjdG9yIGZsb2F0IF9fYikgewotICByZXR1cm4gX19hICogX19iOwotfQotCi0jaWZkZWYgX19WU1hfXwotc3RhdGljIHZlY3RvciBkb3VibGUgX19BVFRSU19vX2FpCi12ZWNfbXVsKHZlY3RvciBkb3VibGUgX19hLCB2ZWN0b3IgZG91YmxlIF9fYikgewotICByZXR1cm4gX19hICogX19iOwotfQotI2VuZGlmCi0KLS8qIFRoZSB2bXVsb3MqIGFuZCB2bXVsZXMqIGluc3RydWN0aW9ucyBoYXZlIGEgYmlnIGVuZGlhbiBiaWFzLCBzbwotICAgd2UgbXVzdCByZXZlcnNlIHRoZSBtZWFuaW5nIG9mICJldmVuIiBhbmQgIm9kZCIgZm9yIGxpdHRsZSBlbmRpYW4uICAqLwotCi0vKiB2ZWNfbXVsZSAqLwotCi1zdGF0aWMgdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfbXVsZSh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgewotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bXVsb3NiKF9fYSwgX19iKTsKLSNlbHNlCi0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bXVsZXNiKF9fYSwgX19iKTsKLSNlbmRpZgotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfbXVsZSh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm11bG91YihfX2EsIF9fYik7Ci0jZWxzZQotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm11bGV1YihfX2EsIF9fYik7Ci0jZW5kaWYKLX0KLQotc3RhdGljIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY19tdWxlKHZlY3RvciBzaG9ydCBfX2EsIHZlY3RvciBzaG9ydCBfX2IpIHsKLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm11bG9zaChfX2EsIF9fYik7Ci0jZWxzZQotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm11bGVzaChfX2EsIF9fYik7Ci0jZW5kaWYKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpIHZlY19tdWxlKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgewotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bXVsb3VoKF9fYSwgX19iKTsKLSNlbHNlCi0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bXVsZXVoKF9fYSwgX19iKTsKLSNlbmRpZgotfQotCi0jaWZkZWYgX19QT1dFUjhfVkVDVE9SX18KLXN0YXRpYyB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkgdmVjX211bGUodmVjdG9yIHNpZ25lZCBpbnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGludCBfX2IpIHsKLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm11bG9zdyhfX2EsIF9fYik7Ci0jZWxzZQotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm11bGVzdyhfX2EsIF9fYik7Ci0jZW5kaWYKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCi12ZWNfbXVsZSh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm11bG91dyhfX2EsIF9fYik7Ci0jZWxzZQotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm11bGV1dyhfX2EsIF9fYik7Ci0jZW5kaWYKLX0KLSNlbmRpZgotCi0vKiB2ZWNfdm11bGVzYiAqLwotCi1zdGF0aWMgdmVjdG9yIHNob3J0IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKLXZlY192bXVsZXNiKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm11bG9zYihfX2EsIF9fYik7Ci0jZWxzZQotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm11bGVzYihfX2EsIF9fYik7Ci0jZW5kaWYKLX0KLQotLyogdmVjX3ZtdWxldWIgKi8KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCi12ZWNfdm11bGV1Yih2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgewotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bXVsb3ViKF9fYSwgX19iKTsKLSNlbHNlCi0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bXVsZXViKF9fYSwgX19iKTsKLSNlbmRpZgotfQotCi0vKiB2ZWNfdm11bGVzaCAqLwotCi1zdGF0aWMgdmVjdG9yIGludCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCi12ZWNfdm11bGVzaCh2ZWN0b3Igc2hvcnQgX19hLCB2ZWN0b3Igc2hvcnQgX19iKSB7Ci0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtdWxvc2goX19hLCBfX2IpOwotI2Vsc2UKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtdWxlc2goX19hLCBfX2IpOwotI2VuZGlmCi19Ci0KLS8qIHZlY192bXVsZXVoICovCi0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKLXZlY192bXVsZXVoKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm11bG91aChfX2EsIF9fYik7Ci0jZWxzZQotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm11bGV1aChfX2EsIF9fYik7Ci0jZW5kaWYKLX0KLQotLyogdmVjX211bG8gKi8KLQotc3RhdGljIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX211bG8odmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm11bGVzYihfX2EsIF9fYik7Ci0jZWxzZQotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm11bG9zYihfX2EsIF9fYik7Ci0jZW5kaWYKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX211bG8odmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7Ci0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtdWxldWIoX19hLCBfX2IpOwotI2Vsc2UKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtdWxvdWIoX19hLCBfX2IpOwotI2VuZGlmCi19Ci0KLXN0YXRpYyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfbXVsbyh2ZWN0b3Igc2hvcnQgX19hLCB2ZWN0b3Igc2hvcnQgX19iKSB7Ci0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtdWxlc2goX19hLCBfX2IpOwotI2Vsc2UKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtdWxvc2goX19hLCBfX2IpOwotI2VuZGlmCi19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haSB2ZWNfbXVsbyh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm11bGV1aChfX2EsIF9fYik7Ci0jZWxzZQotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm11bG91aChfX2EsIF9fYik7Ci0jZW5kaWYKLX0KLQotI2lmZGVmIF9fUE9XRVI4X1ZFQ1RPUl9fCi1zdGF0aWMgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpIHZlY19tdWxvKHZlY3RvciBzaWduZWQgaW50IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBpbnQgX19iKSB7Ci0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtdWxlc3coX19hLCBfX2IpOwotI2Vsc2UKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtdWxvc3coX19hLCBfX2IpOwotI2VuZGlmCi19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQotdmVjX211bG8odmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7Ci0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtdWxldXcoX19hLCBfX2IpOwotI2Vsc2UKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtdWxvdXcoX19hLCBfX2IpOwotI2VuZGlmCi19Ci0jZW5kaWYKLQotLyogdmVjX3ZtdWxvc2IgKi8KLQotc3RhdGljIHZlY3RvciBzaG9ydCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCi12ZWNfdm11bG9zYih2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7Ci0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtdWxlc2IoX19hLCBfX2IpOwotI2Vsc2UKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtdWxvc2IoX19hLCBfX2IpOwotI2VuZGlmCi19Ci0KLS8qIHZlY192bXVsb3ViICovCi0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQotdmVjX3ZtdWxvdWIodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm11bGV1YihfX2EsIF9fYik7Ci0jZWxzZQotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm11bG91YihfX2EsIF9fYik7Ci0jZW5kaWYKLX0KLQotLyogdmVjX3ZtdWxvc2ggKi8KLQotc3RhdGljIHZlY3RvciBpbnQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQotdmVjX3ZtdWxvc2godmVjdG9yIHNob3J0IF9fYSwgdmVjdG9yIHNob3J0IF9fYikgewotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bXVsZXNoKF9fYSwgX19iKTsKLSNlbHNlCi0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bXVsb3NoKF9fYSwgX19iKTsKLSNlbmRpZgotfQotCi0vKiB2ZWNfdm11bG91aCAqLwotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGludCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCi12ZWNfdm11bG91aCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7Ci0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtdWxldWgoX19hLCBfX2IpOwotI2Vsc2UKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtdWxvdWgoX19hLCBfX2IpOwotI2VuZGlmCi19Ci0KLS8qICB2ZWNfbmFuZCAqLwotCi0jaWZkZWYgX19QT1dFUjhfVkVDVE9SX18KLXN0YXRpYyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY19uYW5kKHZlY3RvciBzaWduZWQgY2hhciBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7Ci0gIHJldHVybiB+KF9fYSAmIF9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY19uYW5kKHZlY3RvciBzaWduZWQgY2hhciBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgewotICByZXR1cm4gfihfX2EgJiBfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfbmFuZCh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKLSAgcmV0dXJuIH4oX19hICYgX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfbmFuZCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gfihfX2EgJiBfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY19uYW5kKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKLSAgcmV0dXJuIH4oX19hICYgX19iKTsKLQotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY19uYW5kKHZlY3RvciBib29sIGNoYXIgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKLSAgcmV0dXJuIH4oX19hICYgX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciBib29sIGNoYXIgX19BVFRSU19vX2FpIHZlY19uYW5kKHZlY3RvciBib29sIGNoYXIgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGNoYXIgX19iKSB7Ci0gIHJldHVybiB+KF9fYSAmIF9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfbmFuZCh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYikgewotICByZXR1cm4gfihfX2EgJiBfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX25hbmQodmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7Ci0gIHJldHVybiB+KF9fYSAmIF9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfbmFuZCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuIH4oX19hICYgX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX25hbmQodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuIH4oX19hICYgX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX25hbmQodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIHNob3J0IF9fYikgewotICByZXR1cm4gfihfX2EgJiBfX2IpOwotCi19Ci0KLXN0YXRpYyB2ZWN0b3IgYm9vbCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX25hbmQodmVjdG9yIGJvb2wgc2hvcnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuIH4oX19hICYgX19iKTsKLQotfQotCi1zdGF0aWMgdmVjdG9yIHNpZ25lZCBpbnQgX19BVFRSU19vX2FpIHZlY19uYW5kKHZlY3RvciBzaWduZWQgaW50IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBpbnQgX19iKSB7Ci0gIHJldHVybiB+KF9fYSAmIF9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3Igc2lnbmVkIGludCBfX0FUVFJTX29fYWkgdmVjX25hbmQodmVjdG9yIHNpZ25lZCBpbnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7Ci0gIHJldHVybiB+KF9fYSAmIF9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3Igc2lnbmVkIGludCBfX0FUVFJTX29fYWkgdmVjX25hbmQodmVjdG9yIGJvb2wgaW50IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBpbnQgX19iKSB7Ci0gIHJldHVybiB+KF9fYSAmIF9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haSB2ZWNfbmFuZCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgewotICByZXR1cm4gfihfX2EgJiBfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkgdmVjX25hbmQodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgaW50IF9fYikgewotICByZXR1cm4gfihfX2EgJiBfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkgdmVjX25hbmQodmVjdG9yIGJvb2wgaW50IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgewotICByZXR1cm4gfihfX2EgJiBfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIGJvb2wgaW50IF9fQVRUUlNfb19haSB2ZWNfbmFuZCh2ZWN0b3IgYm9vbCBpbnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgaW50IF9fYikgewotICByZXR1cm4gfihfX2EgJiBfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCi12ZWNfbmFuZCh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgewotICByZXR1cm4gfihfX2EgJiBfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCi12ZWNfbmFuZCh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKLSAgcmV0dXJuIH4oX19hICYgX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQotdmVjX25hbmQodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7Ci0gIHJldHVybiB+KF9fYSAmIF9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQotdmVjX25hbmQodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7Ci0gIHJldHVybiB+KF9fYSAmIF9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQotdmVjX25hbmQodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKLSAgcmV0dXJuIH4oX19hICYgX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCi12ZWNfbmFuZCh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgewotICByZXR1cm4gfihfX2EgJiBfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fQVRUUlNfb19haQotdmVjX25hbmQodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgewotICByZXR1cm4gfihfX2EgJiBfX2IpOwotfQotCi0jZW5kaWYKLQotLyogdmVjX25tYWRkICovCi0KLSNpZmRlZiBfX1ZTWF9fCi1zdGF0aWMgdmVjdG9yIGZsb2F0IF9fQVRUUlNfb19haQotdmVjX25tYWRkKHZlY3RvciBmbG9hdCBfX2EsIHZlY3RvciBmbG9hdCBfX2IsIHZlY3RvciBmbG9hdCBfX2MpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl92c3hfeHZubWFkZGFzcChfX2EsIF9fYiwgX19jKTsKLX0KLQotc3RhdGljIHZlY3RvciBkb3VibGUgX19BVFRSU19vX2FpCi12ZWNfbm1hZGQodmVjdG9yIGRvdWJsZSBfX2EsIHZlY3RvciBkb3VibGUgX19iLCB2ZWN0b3IgZG91YmxlIF9fYykgewotICByZXR1cm4gX19idWlsdGluX3ZzeF94dm5tYWRkYWRwKF9fYSwgX19iLCBfX2MpOwotfQotI2VuZGlmCi0KLS8qIHZlY19ubXN1YiAqLwotCi1zdGF0aWMgdmVjdG9yIGZsb2F0IF9fQVRUUlNfb19haQotdmVjX25tc3ViKHZlY3RvciBmbG9hdCBfX2EsIHZlY3RvciBmbG9hdCBfX2IsIHZlY3RvciBmbG9hdCBfX2MpIHsKLSNpZmRlZiBfX1ZTWF9fCi0gIHJldHVybiBfX2J1aWx0aW5fdnN4X3h2bm1zdWJhc3AoX19hLCBfX2IsIF9fYyk7Ci0jZWxzZQotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm5tc3ViZnAoX19hLCBfX2IsIF9fYyk7Ci0jZW5kaWYKLX0KLQotI2lmZGVmIF9fVlNYX18KLXN0YXRpYyB2ZWN0b3IgZG91YmxlIF9fQVRUUlNfb19haQotdmVjX25tc3ViKHZlY3RvciBkb3VibGUgX19hLCB2ZWN0b3IgZG91YmxlIF9fYiwgdmVjdG9yIGRvdWJsZSBfX2MpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl92c3hfeHZubXN1YmFkcChfX2EsIF9fYiwgX19jKTsKLX0KLSNlbmRpZgotCi0vKiB2ZWNfdm5tc3ViZnAgKi8KLQotc3RhdGljIHZlY3RvciBmbG9hdCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCi12ZWNfdm5tc3ViZnAodmVjdG9yIGZsb2F0IF9fYSwgdmVjdG9yIGZsb2F0IF9fYiwgdmVjdG9yIGZsb2F0IF9fYykgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm5tc3ViZnAoX19hLCBfX2IsIF9fYyk7Ci19Ci0KLS8qIHZlY19ub3IgKi8KLQotI2RlZmluZSBfX2J1aWx0aW5fYWx0aXZlY192bm9yIHZlY19ub3IKLQotc3RhdGljIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX25vcih2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7Ci0gIHJldHVybiB+KF9fYSB8IF9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX25vcih2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7Ci0gIHJldHVybiB+KF9fYSB8IF9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgYm9vbCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfbm9yKHZlY3RvciBib29sIGNoYXIgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKLSAgcmV0dXJuIH4oX19hIHwgX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX25vcih2ZWN0b3Igc2hvcnQgX19hLCB2ZWN0b3Igc2hvcnQgX19iKSB7Ci0gIHJldHVybiB+KF9fYSB8IF9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpIHZlY19ub3IodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgewotICByZXR1cm4gfihfX2EgfCBfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIGJvb2wgc2hvcnQgX19BVFRSU19vX2FpIHZlY19ub3IodmVjdG9yIGJvb2wgc2hvcnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIHNob3J0IF9fYikgewotICByZXR1cm4gfihfX2EgfCBfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX25vcih2ZWN0b3IgaW50IF9fYSwgdmVjdG9yIGludCBfX2IpIHsKLSAgcmV0dXJuIH4oX19hIHwgX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpIHZlY19ub3IodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgewotICByZXR1cm4gfihfX2EgfCBfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIGJvb2wgaW50IF9fQVRUUlNfb19haSB2ZWNfbm9yKHZlY3RvciBib29sIGludCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGludCBfX2IpIHsKLSAgcmV0dXJuIH4oX19hIHwgX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciBmbG9hdCBfX0FUVFJTX29fYWkgdmVjX25vcih2ZWN0b3IgZmxvYXQgX19hLCB2ZWN0b3IgZmxvYXQgX19iKSB7Ci0gIHZlY3RvciB1bnNpZ25lZCBpbnQgX19yZXMgPQotICAgICAgfigodmVjdG9yIHVuc2lnbmVkIGludClfX2EgfCAodmVjdG9yIHVuc2lnbmVkIGludClfX2IpOwotICByZXR1cm4gKHZlY3RvciBmbG9hdClfX3JlczsKLX0KLQotI2lmZGVmIF9fVlNYX18KLXN0YXRpYyB2ZWN0b3IgZG91YmxlIF9fQVRUUlNfb19haQotdmVjX25vcih2ZWN0b3IgZG91YmxlIF9fYSwgdmVjdG9yIGRvdWJsZSBfX2IpIHsKLSAgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX3JlcyA9Ci0gICAgICB+KCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYSB8ICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYik7Ci0gIHJldHVybiAodmVjdG9yIGRvdWJsZSlfX3JlczsKLX0KLSNlbmRpZgotCi0vKiB2ZWNfdm5vciAqLwotCi1zdGF0aWMgdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfdm5vcih2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gfihfX2EgfCBfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY192bm9yKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7Ci0gIHJldHVybiB+KF9fYSB8IF9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgYm9vbCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfdm5vcih2ZWN0b3IgYm9vbCBjaGFyIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgewotICByZXR1cm4gfihfX2EgfCBfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfdm5vcih2ZWN0b3Igc2hvcnQgX19hLCB2ZWN0b3Igc2hvcnQgX19iKSB7Ci0gIHJldHVybiB+KF9fYSB8IF9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpIHZlY192bm9yKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7Ci0gIHJldHVybiB+KF9fYSB8IF9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgYm9vbCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3Zub3IodmVjdG9yIGJvb2wgc2hvcnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuIH4oX19hIHwgX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY192bm9yKHZlY3RvciBpbnQgX19hLCB2ZWN0b3IgaW50IF9fYikgewotICByZXR1cm4gfihfX2EgfCBfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkgdmVjX3Zub3IodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKLSAgcmV0dXJuIH4oX19hIHwgX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciBib29sIGludCBfX0FUVFJTX29fYWkgdmVjX3Zub3IodmVjdG9yIGJvb2wgaW50IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGludCBfX2IpIHsKLSAgcmV0dXJuIH4oX19hIHwgX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciBmbG9hdCBfX0FUVFJTX29fYWkgdmVjX3Zub3IodmVjdG9yIGZsb2F0IF9fYSwgdmVjdG9yIGZsb2F0IF9fYikgewotICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fcmVzID0KLSAgICAgIH4oKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hIHwgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iKTsKLSAgcmV0dXJuICh2ZWN0b3IgZmxvYXQpX19yZXM7Ci19Ci0KLSNpZmRlZiBfX1ZTWF9fCi1zdGF0aWMgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCi12ZWNfbm9yKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7Ci0gIHJldHVybiB+KF9fYSB8IF9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQotdmVjX25vcih2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKLSAgcmV0dXJuIH4oX19hIHwgX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkgdmVjX25vcih2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7Ci0gIHJldHVybiB+KF9fYSB8IF9fYik7Ci19Ci0jZW5kaWYKLQotLyogdmVjX29yICovCi0KLSNkZWZpbmUgX19idWlsdGluX2FsdGl2ZWNfdm9yIHZlY19vcgotCi1zdGF0aWMgdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfb3IodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7Ci0gIHJldHVybiBfX2EgfCBfX2I7Ci19Ci0KLXN0YXRpYyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY19vcih2ZWN0b3IgYm9vbCBjaGFyIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYSB8IF9fYjsKLX0KLQotc3RhdGljIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX29yKHZlY3RvciBzaWduZWQgY2hhciBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKLSAgcmV0dXJuIF9fYSB8ICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19iOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY19vcih2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKLSAgcmV0dXJuIF9fYSB8IF9fYjsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfb3IodmVjdG9yIGJvb2wgY2hhciBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EgfCBfX2I7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX29yKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGNoYXIgX19iKSB7Ci0gIHJldHVybiBfX2EgfCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iOwotfQotCi1zdGF0aWMgdmVjdG9yIGJvb2wgY2hhciBfX0FUVFJTX29fYWkgdmVjX29yKHZlY3RvciBib29sIGNoYXIgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgewotICByZXR1cm4gX19hIHwgX19iOwotfQotCi1zdGF0aWMgdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfb3IodmVjdG9yIHNob3J0IF9fYSwgdmVjdG9yIHNob3J0IF9fYikgewotICByZXR1cm4gX19hIHwgX19iOwotfQotCi1zdGF0aWMgdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfb3IodmVjdG9yIGJvb2wgc2hvcnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3Igc2hvcnQpX19hIHwgX19iOwotfQotCi1zdGF0aWMgdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfb3IodmVjdG9yIHNob3J0IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuIF9fYSB8ICh2ZWN0b3Igc2hvcnQpX19iOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfb3IodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7Ci0gIHJldHVybiBfX2EgfCBfX2I7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpIHZlY19vcih2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgewotICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EgfCBfX2I7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpIHZlY19vcih2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIHNob3J0IF9fYikgewotICByZXR1cm4gX19hIHwgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2I7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgYm9vbCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX29yKHZlY3RvciBib29sIHNob3J0IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIHNob3J0IF9fYikgewotICByZXR1cm4gX19hIHwgX19iOwotfQotCi1zdGF0aWMgdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX29yKHZlY3RvciBpbnQgX19hLCB2ZWN0b3IgaW50IF9fYikgewotICByZXR1cm4gX19hIHwgX19iOwotfQotCi1zdGF0aWMgdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX29yKHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciBpbnQgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIGludClfX2EgfCBfX2I7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfb3IodmVjdG9yIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IpIHsKLSAgcmV0dXJuIF9fYSB8ICh2ZWN0b3IgaW50KV9fYjsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpIHZlY19vcih2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKLSAgcmV0dXJuIF9fYSB8IF9fYjsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpIHZlY19vcih2ZWN0b3IgYm9vbCBpbnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgewotICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hIHwgX19iOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkgdmVjX29yKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7Ci0gIHJldHVybiBfX2EgfCAodmVjdG9yIHVuc2lnbmVkIGludClfX2I7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgYm9vbCBpbnQgX19BVFRSU19vX2FpIHZlY19vcih2ZWN0b3IgYm9vbCBpbnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGludCBfX2IpIHsKLSAgcmV0dXJuIF9fYSB8IF9fYjsKLX0KLQotc3RhdGljIHZlY3RvciBmbG9hdCBfX0FUVFJTX29fYWkgdmVjX29yKHZlY3RvciBmbG9hdCBfX2EsIHZlY3RvciBmbG9hdCBfX2IpIHsKLSAgdmVjdG9yIHVuc2lnbmVkIGludCBfX3JlcyA9Ci0gICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2EgfCAodmVjdG9yIHVuc2lnbmVkIGludClfX2I7Ci0gIHJldHVybiAodmVjdG9yIGZsb2F0KV9fcmVzOwotfQotCi1zdGF0aWMgdmVjdG9yIGZsb2F0IF9fQVRUUlNfb19haSB2ZWNfb3IodmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIGZsb2F0IF9fYikgewotICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fcmVzID0KLSAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSB8ICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYjsKLSAgcmV0dXJuICh2ZWN0b3IgZmxvYXQpX19yZXM7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgZmxvYXQgX19BVFRSU19vX2FpIHZlY19vcih2ZWN0b3IgZmxvYXQgX19hLCB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7Ci0gIHZlY3RvciB1bnNpZ25lZCBpbnQgX19yZXMgPQotICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hIHwgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iOwotICByZXR1cm4gKHZlY3RvciBmbG9hdClfX3JlczsKLX0KLQotI2lmZGVmIF9fVlNYX18KLXN0YXRpYyB2ZWN0b3IgZG91YmxlIF9fQVRUUlNfb19haSB2ZWNfb3IodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGRvdWJsZSBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYSB8ICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYjsKLX0KLQotc3RhdGljIHZlY3RvciBkb3VibGUgX19BVFRSU19vX2FpIHZlY19vcih2ZWN0b3IgZG91YmxlIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgewotICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19hIHwgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19iOwotfQotCi1zdGF0aWMgdmVjdG9yIGRvdWJsZSBfX0FUVFJTX29fYWkgdmVjX29yKHZlY3RvciBkb3VibGUgX19hLCB2ZWN0b3IgZG91YmxlIF9fYikgewotICB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fcmVzID0KLSAgICAgICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYSB8ICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYjsKLSAgcmV0dXJuICh2ZWN0b3IgZG91YmxlKV9fcmVzOwotfQotCi1zdGF0aWMgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCi12ZWNfb3IodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKLSAgcmV0dXJuIF9fYSB8IF9fYjsKLX0KLQotc3RhdGljIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQotdmVjX29yKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgewotICByZXR1cm4gKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYSB8IF9fYjsKLX0KLQotc3RhdGljIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haSB2ZWNfb3IodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgewotICByZXR1cm4gX19hIHwgKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYjsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCi12ZWNfb3IodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7Ci0gIHJldHVybiBfX2EgfCBfX2I7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQotdmVjX29yKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2EgfCBfX2I7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQotdmVjX29yKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7Ci0gIHJldHVybiBfX2EgfCAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2I7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19BVFRSU19vX2FpIHZlY19vcih2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKLSAgcmV0dXJuIF9fYSB8IF9fYjsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19QT1dFUjhfVkVDVE9SX18KLXN0YXRpYyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY19vcmModmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gX19hIHwgfl9fYjsKLX0KLQotc3RhdGljIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX29yYyh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgewotICByZXR1cm4gX19hIHwgfl9fYjsKLX0KLQotc3RhdGljIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX29yYyh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gX19hIHwgfl9fYjsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfb3JjKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKLSAgcmV0dXJuIF9fYSB8IH5fX2I7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX29yYyh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKLSAgcmV0dXJuIF9fYSB8IH5fX2I7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX29yYyh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKLSAgcmV0dXJuIF9fYSB8IH5fX2I7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgYm9vbCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfb3JjKHZlY3RvciBib29sIGNoYXIgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKLSAgcmV0dXJuIF9fYSB8IH5fX2I7Ci19Ci0KLXN0YXRpYyB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfb3JjKHZlY3RvciBzaWduZWQgc2hvcnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuIF9fYSB8IH5fX2I7Ci19Ci0KLXN0YXRpYyB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfb3JjKHZlY3RvciBzaWduZWQgc2hvcnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7Ci0gIHJldHVybiBfX2EgfCB+X19iOwotfQotCi1zdGF0aWMgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX29yYyh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYikgewotICByZXR1cm4gX19hIHwgfl9fYjsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX29yYyh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7Ci0gIHJldHVybiBfX2EgfCB+X19iOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfb3JjKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIHNob3J0IF9fYikgewotICByZXR1cm4gX19hIHwgfl9fYjsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKLXZlY19vcmModmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7Ci0gIHJldHVybiBfX2EgfCB+X19iOwotfQotCi1zdGF0aWMgdmVjdG9yIGJvb2wgc2hvcnQgX19BVFRSU19vX2FpIHZlY19vcmModmVjdG9yIGJvb2wgc2hvcnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIHNob3J0IF9fYikgewotICByZXR1cm4gX19hIHwgfl9fYjsKLX0KLQotc3RhdGljIHZlY3RvciBzaWduZWQgaW50IF9fQVRUUlNfb19haSB2ZWNfb3JjKHZlY3RvciBzaWduZWQgaW50IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGludCBfX2IpIHsKLSAgcmV0dXJuIF9fYSB8IH5fX2I7Ci19Ci0KLXN0YXRpYyB2ZWN0b3Igc2lnbmVkIGludCBfX0FUVFJTX29fYWkgdmVjX29yYyh2ZWN0b3Igc2lnbmVkIGludCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgaW50IF9fYikgewotICByZXR1cm4gX19hIHwgfl9fYjsKLX0KLQotc3RhdGljIHZlY3RvciBzaWduZWQgaW50IF9fQVRUUlNfb19haSB2ZWNfb3JjKHZlY3RvciBib29sIGludCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBpbnQgX19iKSB7Ci0gIHJldHVybiBfX2EgfCB+X19iOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkgdmVjX29yYyh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7Ci0gIHJldHVybiBfX2EgfCB+X19iOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkgdmVjX29yYyh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGludCBfX2IpIHsKLSAgcmV0dXJuIF9fYSB8IH5fX2I7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haSB2ZWNfb3JjKHZlY3RvciBib29sIGludCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgewotICByZXR1cm4gX19hIHwgfl9fYjsKLX0KLQotc3RhdGljIHZlY3RvciBib29sIGludCBfX0FUVFJTX29fYWkgdmVjX29yYyh2ZWN0b3IgYm9vbCBpbnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7Ci0gIHJldHVybiBfX2EgfCB+X19iOwotfQotCi1zdGF0aWMgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCi12ZWNfb3JjKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7Ci0gIHJldHVybiBfX2EgfCB+X19iOwotfQotCi1zdGF0aWMgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpIHZlY19vcmModmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKLSAgcmV0dXJuIF9fYSB8IH5fX2I7Ci19Ci0KLXN0YXRpYyB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKLXZlY19vcmModmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7Ci0gIHJldHVybiBfX2EgfCB+X19iOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKLXZlY19vcmModmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7Ci0gIHJldHVybiBfX2EgfCB+X19iOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKLXZlY19vcmModmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKLSAgcmV0dXJuIF9fYSB8IH5fX2I7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQotdmVjX29yYyh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgewotICByZXR1cm4gX19hIHwgfl9fYjsKLX0KLQotc3RhdGljIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKLXZlY19vcmModmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgewotICByZXR1cm4gX19hIHwgfl9fYjsKLX0KLSNlbmRpZgotCi0vKiB2ZWNfdm9yICovCi0KLXN0YXRpYyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY192b3IodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gX19hIHwgX19iOwotfQotCi1zdGF0aWMgdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfdm9yKHZlY3RvciBib29sIGNoYXIgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYSB8IF9fYjsKLX0KLQotc3RhdGljIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX3Zvcih2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgewotICByZXR1cm4gX19hIHwgKHZlY3RvciBzaWduZWQgY2hhcilfX2I7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX3Zvcih2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7Ci0gIHJldHVybiBfX2EgfCBfX2I7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX3Zvcih2ZWN0b3IgYm9vbCBjaGFyIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EgfCBfX2I7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX3Zvcih2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKLSAgcmV0dXJuIF9fYSB8ICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2I7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgYm9vbCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfdm9yKHZlY3RvciBib29sIGNoYXIgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKLSAgcmV0dXJuIF9fYSB8IF9fYjsKLX0KLQotc3RhdGljIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3Zvcih2ZWN0b3Igc2hvcnQgX19hLCB2ZWN0b3Igc2hvcnQgX19iKSB7Ci0gIHJldHVybiBfX2EgfCBfX2I7Ci19Ci0KLXN0YXRpYyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY192b3IodmVjdG9yIGJvb2wgc2hvcnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2hvcnQgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHNob3J0KV9fYSB8IF9fYjsKLX0KLQotc3RhdGljIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3Zvcih2ZWN0b3Igc2hvcnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuIF9fYSB8ICh2ZWN0b3Igc2hvcnQpX19iOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfdm9yKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuIF9fYSB8IF9fYjsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3Zvcih2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hIHwgX19iOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfdm9yKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIHNob3J0IF9fYikgewotICByZXR1cm4gX19hIHwgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2I7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgYm9vbCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3Zvcih2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7Ci0gIHJldHVybiBfX2EgfCBfX2I7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfdm9yKHZlY3RvciBpbnQgX19hLCB2ZWN0b3IgaW50IF9fYikgewotICByZXR1cm4gX19hIHwgX19iOwotfQotCi1zdGF0aWMgdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX3Zvcih2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgaW50IF9fYikgewotICByZXR1cm4gKHZlY3RvciBpbnQpX19hIHwgX19iOwotfQotCi1zdGF0aWMgdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX3Zvcih2ZWN0b3IgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYikgewotICByZXR1cm4gX19hIHwgKHZlY3RvciBpbnQpX19iOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkgdmVjX3Zvcih2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7Ci0gIHJldHVybiBfX2EgfCBfX2I7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haSB2ZWNfdm9yKHZlY3RvciBib29sIGludCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgewotICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hIHwgX19iOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkgdmVjX3Zvcih2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGludCBfX2IpIHsKLSAgcmV0dXJuIF9fYSB8ICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYjsKLX0KLQotc3RhdGljIHZlY3RvciBib29sIGludCBfX0FUVFJTX29fYWkgdmVjX3Zvcih2ZWN0b3IgYm9vbCBpbnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7Ci0gIHJldHVybiBfX2EgfCBfX2I7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgZmxvYXQgX19BVFRSU19vX2FpIHZlY192b3IodmVjdG9yIGZsb2F0IF9fYSwgdmVjdG9yIGZsb2F0IF9fYikgewotICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fcmVzID0KLSAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSB8ICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYjsKLSAgcmV0dXJuICh2ZWN0b3IgZmxvYXQpX19yZXM7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgZmxvYXQgX19BVFRSU19vX2FpIHZlY192b3IodmVjdG9yIGJvb2wgaW50IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGZsb2F0IF9fYikgewotICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fcmVzID0KLSAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSB8ICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYjsKLSAgcmV0dXJuICh2ZWN0b3IgZmxvYXQpX19yZXM7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgZmxvYXQgX19BVFRSU19vX2FpIHZlY192b3IodmVjdG9yIGZsb2F0IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgaW50IF9fYikgewotICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fcmVzID0KLSAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSB8ICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYjsKLSAgcmV0dXJuICh2ZWN0b3IgZmxvYXQpX19yZXM7Ci19Ci0KLSNpZmRlZiBfX1ZTWF9fCi1zdGF0aWMgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCi12ZWNfdm9yKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7Ci0gIHJldHVybiBfX2EgfCBfX2I7Ci19Ci0KLXN0YXRpYyB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKLXZlY192b3IodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19hIHwgX19iOwotfQotCi1zdGF0aWMgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpIHZlY192b3IodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKLSAgcmV0dXJuIF9fYSB8ICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2I7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQotdmVjX3Zvcih2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKLSAgcmV0dXJuIF9fYSB8IF9fYjsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCi12ZWNfdm9yKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2EgfCBfX2I7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQotdmVjX3Zvcih2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgewotICByZXR1cm4gX19hIHwgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19iOwotfQotCi1zdGF0aWMgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fQVRUUlNfb19haSB2ZWNfdm9yKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKLSAgcmV0dXJuIF9fYSB8IF9fYjsKLX0KLSNlbmRpZgotCi0vKiB2ZWNfcGFjayAqLwotCi0vKiBUaGUgdmFyaW91cyB2ZWN0b3IgcGFjayBpbnN0cnVjdGlvbnMgaGF2ZSBhIGJpZy1lbmRpYW4gYmlhcywgc28gZm9yCi0gICBsaXR0bGUgZW5kaWFuIHdlIG11c3QgaGFuZGxlIHJldmVyc2VkIGVsZW1lbnQgbnVtYmVyaW5nLiAgKi8KLQotc3RhdGljIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX3BhY2sodmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYikgewotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0gIHJldHVybiAodmVjdG9yIHNpZ25lZCBjaGFyKXZlY19wZXJtKAotICAgICAgX19hLCBfX2IsCi0gICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDAsIDB4MDIsIDB4MDQsIDB4MDYsIDB4MDgsIDB4MEEsIDB4MEMsIDB4MEUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTAsIDB4MTIsIDB4MTQsIDB4MTYsIDB4MTgsIDB4MUEsIDB4MUMsIDB4MUUpKTsKLSNlbHNlCi0gIHJldHVybiAodmVjdG9yIHNpZ25lZCBjaGFyKXZlY19wZXJtKAotICAgICAgX19hLCBfX2IsCi0gICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDEsIDB4MDMsIDB4MDUsIDB4MDcsIDB4MDksIDB4MEIsIDB4MEQsIDB4MEYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTEsIDB4MTMsIDB4MTUsIDB4MTcsIDB4MTksIDB4MUIsIDB4MUQsIDB4MUYpKTsKLSNlbmRpZgotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY19wYWNrKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBjaGFyKXZlY19wZXJtKAotICAgICAgX19hLCBfX2IsCi0gICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDAsIDB4MDIsIDB4MDQsIDB4MDYsIDB4MDgsIDB4MEEsIDB4MEMsIDB4MEUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTAsIDB4MTIsIDB4MTQsIDB4MTYsIDB4MTgsIDB4MUEsIDB4MUMsIDB4MUUpKTsKLSNlbHNlCi0gIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGNoYXIpdmVjX3Blcm0oCi0gICAgICBfX2EsIF9fYiwKLSAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMHgwMSwgMHgwMywgMHgwNSwgMHgwNywgMHgwOSwgMHgwQiwgMHgwRCwgMHgwRiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMSwgMHgxMywgMHgxNSwgMHgxNywgMHgxOSwgMHgxQiwgMHgxRCwgMHgxRikpOwotI2VuZGlmCi19Ci0KLXN0YXRpYyB2ZWN0b3IgYm9vbCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfcGFjayh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7Ci0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSAgcmV0dXJuICh2ZWN0b3IgYm9vbCBjaGFyKXZlY19wZXJtKAotICAgICAgX19hLCBfX2IsCi0gICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDAsIDB4MDIsIDB4MDQsIDB4MDYsIDB4MDgsIDB4MEEsIDB4MEMsIDB4MEUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTAsIDB4MTIsIDB4MTQsIDB4MTYsIDB4MTgsIDB4MUEsIDB4MUMsIDB4MUUpKTsKLSNlbHNlCi0gIHJldHVybiAodmVjdG9yIGJvb2wgY2hhcil2ZWNfcGVybSgKLSAgICAgIF9fYSwgX19iLAotICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgweDAxLCAweDAzLCAweDA1LCAweDA3LCAweDA5LCAweDBCLCAweDBELCAweDBGLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDExLCAweDEzLCAweDE1LCAweDE3LCAweDE5LCAweDFCLCAweDFELCAweDFGKSk7Ci0jZW5kaWYKLX0KLQotc3RhdGljIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3BhY2sodmVjdG9yIGludCBfX2EsIHZlY3RvciBpbnQgX19iKSB7Ci0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSAgcmV0dXJuICh2ZWN0b3Igc2hvcnQpdmVjX3Blcm0oCi0gICAgICBfX2EsIF9fYiwKLSAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMHgwMCwgMHgwMSwgMHgwNCwgMHgwNSwgMHgwOCwgMHgwOSwgMHgwQywgMHgwRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMCwgMHgxMSwgMHgxNCwgMHgxNSwgMHgxOCwgMHgxOSwgMHgxQywgMHgxRCkpOwotI2Vsc2UKLSAgcmV0dXJuICh2ZWN0b3Igc2hvcnQpdmVjX3Blcm0oCi0gICAgICBfX2EsIF9fYiwKLSAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMHgwMiwgMHgwMywgMHgwNiwgMHgwNywgMHgwQSwgMHgwQiwgMHgwRSwgMHgwRiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMiwgMHgxMywgMHgxNiwgMHgxNywgMHgxQSwgMHgxQiwgMHgxRSwgMHgxRikpOwotI2VuZGlmCi19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpIHZlY19wYWNrKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBzaG9ydCl2ZWNfcGVybSgKLSAgICAgIF9fYSwgX19iLAotICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgweDAwLCAweDAxLCAweDA0LCAweDA1LCAweDA4LCAweDA5LCAweDBDLCAweDBELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEwLCAweDExLCAweDE0LCAweDE1LCAweDE4LCAweDE5LCAweDFDLCAweDFEKSk7Ci0jZWxzZQotICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBzaG9ydCl2ZWNfcGVybSgKLSAgICAgIF9fYSwgX19iLAotICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgweDAyLCAweDAzLCAweDA2LCAweDA3LCAweDBBLCAweDBCLCAweDBFLCAweDBGLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEyLCAweDEzLCAweDE2LCAweDE3LCAweDFBLCAweDFCLCAweDFFLCAweDFGKSk7Ci0jZW5kaWYKLX0KLQotc3RhdGljIHZlY3RvciBib29sIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfcGFjayh2ZWN0b3IgYm9vbCBpbnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7Ci0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSAgcmV0dXJuICh2ZWN0b3IgYm9vbCBzaG9ydCl2ZWNfcGVybSgKLSAgICAgIF9fYSwgX19iLAotICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgweDAwLCAweDAxLCAweDA0LCAweDA1LCAweDA4LCAweDA5LCAweDBDLCAweDBELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEwLCAweDExLCAweDE0LCAweDE1LCAweDE4LCAweDE5LCAweDFDLCAweDFEKSk7Ci0jZWxzZQotICByZXR1cm4gKHZlY3RvciBib29sIHNob3J0KXZlY19wZXJtKAotICAgICAgX19hLCBfX2IsCi0gICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDIsIDB4MDMsIDB4MDYsIDB4MDcsIDB4MEEsIDB4MEIsIDB4MEUsIDB4MEYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTIsIDB4MTMsIDB4MTYsIDB4MTcsIDB4MUEsIDB4MUIsIDB4MUUsIDB4MUYpKTsKLSNlbmRpZgotfQotCi0jaWZkZWYgX19WU1hfXwotc3RhdGljIHZlY3RvciBzaWduZWQgaW50IF9fQVRUUlNfb19haSB2ZWNfcGFjayh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgewotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0gIHJldHVybiAodmVjdG9yIHNpZ25lZCBpbnQpdmVjX3Blcm0oCi0gICAgICBfX2EsIF9fYiwKLSAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwOCwgMHgwOSwgMHgwQSwgMHgwQiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMCwgMHgxMSwgMHgxMiwgMHgxMywgMHgxOCwgMHgxOSwgMHgxQSwgMHgxQikpOwotI2Vsc2UKLSAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGludCl2ZWNfcGVybSgKLSAgICAgIF9fYSwgX19iLAotICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgweDA0LCAweDA1LCAweDA2LCAweDA3LCAweDBDLCAweDBELCAweDBFLCAweDBGLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE0LCAweDE1LCAweDE2LCAweDE3LCAweDFDLCAweDFELCAweDFFLCAweDFGKSk7Ci0jZW5kaWYKLX0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haQotdmVjX3BhY2sodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7Ci0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgaW50KXZlY19wZXJtKAotICAgICAgX19hLCBfX2IsCi0gICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDgsIDB4MDksIDB4MEEsIDB4MEIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTAsIDB4MTEsIDB4MTIsIDB4MTMsIDB4MTgsIDB4MTksIDB4MUEsIDB4MUIpKTsKLSNlbHNlCi0gIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGludCl2ZWNfcGVybSgKLSAgICAgIF9fYSwgX19iLAotICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgweDA0LCAweDA1LCAweDA2LCAweDA3LCAweDBDLCAweDBELCAweDBFLCAweDBGLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE0LCAweDE1LCAweDE2LCAweDE3LCAweDFDLCAweDFELCAweDFFLCAweDFGKSk7Ci0jZW5kaWYKLX0KLQotc3RhdGljIHZlY3RvciBib29sIGludCBfX0FUVFJTX29fYWkgdmVjX3BhY2sodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotICByZXR1cm4gKHZlY3RvciBib29sIGludCl2ZWNfcGVybSgKLSAgICAgIF9fYSwgX19iLAotICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA4LCAweDA5LCAweDBBLCAweDBCLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEwLCAweDExLCAweDEyLCAweDEzLCAweDE4LCAweDE5LCAweDFBLCAweDFCKSk7Ci0jZWxzZQotICByZXR1cm4gKHZlY3RvciBib29sIGludCl2ZWNfcGVybSgKLSAgICAgIF9fYSwgX19iLAotICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgweDA0LCAweDA1LCAweDA2LCAweDA3LCAweDBDLCAweDBELCAweDBFLCAweDBGLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE0LCAweDE1LCAweDE2LCAweDE3LCAweDFDLCAweDFELCAweDFFLCAweDFGKSk7Ci0jZW5kaWYKLX0KLQotI2VuZGlmCi0KLS8qIHZlY192cGt1aHVtICovCi0KLSNkZWZpbmUgX19idWlsdGluX2FsdGl2ZWNfdnBrdWh1bSB2ZWNfdnBrdWh1bQotCi1zdGF0aWMgdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfdnBrdWh1bSh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgc2hvcnQgX19iKSB7Ci0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpdmVjX3Blcm0oCi0gICAgICBfX2EsIF9fYiwKLSAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMHgwMCwgMHgwMiwgMHgwNCwgMHgwNiwgMHgwOCwgMHgwQSwgMHgwQywgMHgwRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMCwgMHgxMiwgMHgxNCwgMHgxNiwgMHgxOCwgMHgxQSwgMHgxQywgMHgxRSkpOwotI2Vsc2UKLSAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpdmVjX3Blcm0oCi0gICAgICBfX2EsIF9fYiwKLSAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMHgwMSwgMHgwMywgMHgwNSwgMHgwNywgMHgwOSwgMHgwQiwgMHgwRCwgMHgwRiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMSwgMHgxMywgMHgxNSwgMHgxNywgMHgxOSwgMHgxQiwgMHgxRCwgMHgxRikpOwotI2VuZGlmCi19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkKLXZlY192cGt1aHVtKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBjaGFyKXZlY19wZXJtKAotICAgICAgX19hLCBfX2IsCi0gICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDAsIDB4MDIsIDB4MDQsIDB4MDYsIDB4MDgsIDB4MEEsIDB4MEMsIDB4MEUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTAsIDB4MTIsIDB4MTQsIDB4MTYsIDB4MTgsIDB4MUEsIDB4MUMsIDB4MUUpKTsKLSNlbHNlCi0gIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGNoYXIpdmVjX3Blcm0oCi0gICAgICBfX2EsIF9fYiwKLSAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMHgwMSwgMHgwMywgMHgwNSwgMHgwNywgMHgwOSwgMHgwQiwgMHgwRCwgMHgwRiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMSwgMHgxMywgMHgxNSwgMHgxNywgMHgxOSwgMHgxQiwgMHgxRCwgMHgxRikpOwotI2VuZGlmCi19Ci0KLXN0YXRpYyB2ZWN0b3IgYm9vbCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfdnBrdWh1bSh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7Ci0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSAgcmV0dXJuICh2ZWN0b3IgYm9vbCBjaGFyKXZlY19wZXJtKAotICAgICAgX19hLCBfX2IsCi0gICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDAsIDB4MDIsIDB4MDQsIDB4MDYsIDB4MDgsIDB4MEEsIDB4MEMsIDB4MEUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTAsIDB4MTIsIDB4MTQsIDB4MTYsIDB4MTgsIDB4MUEsIDB4MUMsIDB4MUUpKTsKLSNlbHNlCi0gIHJldHVybiAodmVjdG9yIGJvb2wgY2hhcil2ZWNfcGVybSgKLSAgICAgIF9fYSwgX19iLAotICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgweDAxLCAweDAzLCAweDA1LCAweDA3LCAweDA5LCAweDBCLCAweDBELCAweDBGLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDExLCAweDEzLCAweDE1LCAweDE3LCAweDE5LCAweDFCLCAweDFELCAweDFGKSk7Ci0jZW5kaWYKLX0KLQotLyogdmVjX3Zwa3V3dW0gKi8KLQotI2RlZmluZSBfX2J1aWx0aW5fYWx0aXZlY192cGt1d3VtIHZlY192cGt1d3VtCi0KLXN0YXRpYyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY192cGt1d3VtKHZlY3RvciBpbnQgX19hLCB2ZWN0b3IgaW50IF9fYikgewotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0gIHJldHVybiAodmVjdG9yIHNob3J0KXZlY19wZXJtKAotICAgICAgX19hLCBfX2IsCi0gICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDAsIDB4MDEsIDB4MDQsIDB4MDUsIDB4MDgsIDB4MDksIDB4MEMsIDB4MEQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTAsIDB4MTEsIDB4MTQsIDB4MTUsIDB4MTgsIDB4MTksIDB4MUMsIDB4MUQpKTsKLSNlbHNlCi0gIHJldHVybiAodmVjdG9yIHNob3J0KXZlY19wZXJtKAotICAgICAgX19hLCBfX2IsCi0gICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDIsIDB4MDMsIDB4MDYsIDB4MDcsIDB4MEEsIDB4MEIsIDB4MEUsIDB4MEYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTIsIDB4MTMsIDB4MTYsIDB4MTcsIDB4MUEsIDB4MUIsIDB4MUUsIDB4MUYpKTsKLSNlbmRpZgotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfdnBrdXd1bSh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7Ci0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpdmVjX3Blcm0oCi0gICAgICBfX2EsIF9fYiwKLSAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMHgwMCwgMHgwMSwgMHgwNCwgMHgwNSwgMHgwOCwgMHgwOSwgMHgwQywgMHgwRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMCwgMHgxMSwgMHgxNCwgMHgxNSwgMHgxOCwgMHgxOSwgMHgxQywgMHgxRCkpOwotI2Vsc2UKLSAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpdmVjX3Blcm0oCi0gICAgICBfX2EsIF9fYiwKLSAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMHgwMiwgMHgwMywgMHgwNiwgMHgwNywgMHgwQSwgMHgwQiwgMHgwRSwgMHgwRiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMiwgMHgxMywgMHgxNiwgMHgxNywgMHgxQSwgMHgxQiwgMHgxRSwgMHgxRikpOwotI2VuZGlmCi19Ci0KLXN0YXRpYyB2ZWN0b3IgYm9vbCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3Zwa3V3dW0odmVjdG9yIGJvb2wgaW50IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgaW50IF9fYikgewotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0gIHJldHVybiAodmVjdG9yIGJvb2wgc2hvcnQpdmVjX3Blcm0oCi0gICAgICBfX2EsIF9fYiwKLSAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMHgwMCwgMHgwMSwgMHgwNCwgMHgwNSwgMHgwOCwgMHgwOSwgMHgwQywgMHgwRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMCwgMHgxMSwgMHgxNCwgMHgxNSwgMHgxOCwgMHgxOSwgMHgxQywgMHgxRCkpOwotI2Vsc2UKLSAgcmV0dXJuICh2ZWN0b3IgYm9vbCBzaG9ydCl2ZWNfcGVybSgKLSAgICAgIF9fYSwgX19iLAotICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgweDAyLCAweDAzLCAweDA2LCAweDA3LCAweDBBLCAweDBCLCAweDBFLCAweDBGLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEyLCAweDEzLCAweDE2LCAweDE3LCAweDFBLCAweDFCLCAweDFFLCAweDFGKSk7Ci0jZW5kaWYKLX0KLQotLyogdmVjX3Zwa3VkdW0gKi8KLQotI2lmZGVmIF9fUE9XRVI4X1ZFQ1RPUl9fCi0jZGVmaW5lIF9fYnVpbHRpbl9hbHRpdmVjX3Zwa3VkdW0gdmVjX3Zwa3VkdW0KLQotc3RhdGljIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY192cGt1ZHVtKHZlY3RvciBsb25nIGxvbmcgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBsb25nIGxvbmcgX19iKSB7Ci0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSAgcmV0dXJuICh2ZWN0b3IgaW50KXZlY19wZXJtKAotICAgICAgX19hLCBfX2IsCi0gICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDgsIDB4MDksIDB4MEEsIDB4MEIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTAsIDB4MTEsIDB4MTIsIDB4MTMsIDB4MTgsIDB4MTksIDB4MUEsIDB4MUIpKTsKLSNlbHNlCi0gIHJldHVybiAodmVjdG9yIGludCl2ZWNfcGVybSgKLSAgICAgIF9fYSwgX19iLAotICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgweDA0LCAweDA1LCAweDA2LCAweDA3LCAweDBDLCAweDBELCAweDBFLCAweDBGLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE0LCAweDE1LCAweDE2LCAweDE3LCAweDFDLCAweDFELCAweDFFLCAweDFGKSk7Ci0jZW5kaWYKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpCi12ZWNfdnBrdWR1bSh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBpbnQpdmVjX3Blcm0oCi0gICAgICBfX2EsIF9fYiwKLSAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwOCwgMHgwOSwgMHgwQSwgMHgwQiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMCwgMHgxMSwgMHgxMiwgMHgxMywgMHgxOCwgMHgxOSwgMHgxQSwgMHgxQikpOwotI2Vsc2UKLSAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgaW50KXZlY19wZXJtKAotICAgICAgX19hLCBfX2IsCi0gICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsIDB4MEMsIDB4MEQsIDB4MEUsIDB4MEYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTQsIDB4MTUsIDB4MTYsIDB4MTcsIDB4MUMsIDB4MUQsIDB4MUUsIDB4MUYpKTsKLSNlbmRpZgotfQotCi1zdGF0aWMgdmVjdG9yIGJvb2wgaW50IF9fQVRUUlNfb19haSB2ZWNfdnBrdWR1bSh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgewotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0gIHJldHVybiAodmVjdG9yIGJvb2wgaW50KXZlY19wZXJtKAotICAgICAgKHZlY3RvciBsb25nIGxvbmcpX19hLCAodmVjdG9yIGxvbmcgbG9uZylfX2IsCi0gICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDgsIDB4MDksIDB4MEEsIDB4MEIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTAsIDB4MTEsIDB4MTIsIDB4MTMsIDB4MTgsIDB4MTksIDB4MUEsIDB4MUIpKTsKLSNlbHNlCi0gIHJldHVybiAodmVjdG9yIGJvb2wgaW50KXZlY19wZXJtKAotICAgICAgKHZlY3RvciBsb25nIGxvbmcpX19hLCAodmVjdG9yIGxvbmcgbG9uZylfX2IsCi0gICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsIDB4MEMsIDB4MEQsIDB4MEUsIDB4MEYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTQsIDB4MTUsIDB4MTYsIDB4MTcsIDB4MUMsIDB4MUQsIDB4MUUsIDB4MUYpKTsKLSNlbmRpZgotfQotI2VuZGlmCi0KLS8qIHZlY19wYWNrcHggKi8KLQotc3RhdGljIHZlY3RvciBwaXhlbCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCi12ZWNfcGFja3B4KHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgewotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0gIHJldHVybiAodmVjdG9yIHBpeGVsKV9fYnVpbHRpbl9hbHRpdmVjX3Zwa3B4KF9fYiwgX19hKTsKLSNlbHNlCi0gIHJldHVybiAodmVjdG9yIHBpeGVsKV9fYnVpbHRpbl9hbHRpdmVjX3Zwa3B4KF9fYSwgX19iKTsKLSNlbmRpZgotfQotCi0vKiB2ZWNfdnBrcHggKi8KLQotc3RhdGljIHZlY3RvciBwaXhlbCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCi12ZWNfdnBrcHgodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7Ci0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSAgcmV0dXJuICh2ZWN0b3IgcGl4ZWwpX19idWlsdGluX2FsdGl2ZWNfdnBrcHgoX19iLCBfX2EpOwotI2Vsc2UKLSAgcmV0dXJuICh2ZWN0b3IgcGl4ZWwpX19idWlsdGluX2FsdGl2ZWNfdnBrcHgoX19hLCBfX2IpOwotI2VuZGlmCi19Ci0KLS8qIHZlY19wYWNrcyAqLwotCi1zdGF0aWMgdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfcGFja3ModmVjdG9yIHNob3J0IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2hvcnQgX19iKSB7Ci0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3Zwa3Noc3MoX19iLCBfX2EpOwotI2Vsc2UKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3Zwa3Noc3MoX19hLCBfX2IpOwotI2VuZGlmCi19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX3BhY2tzKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7Ci0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3Zwa3VodXMoX19iLCBfX2EpOwotI2Vsc2UKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3Zwa3VodXMoX19hLCBfX2IpOwotI2VuZGlmCi19Ci0KLXN0YXRpYyB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfcGFja3ModmVjdG9yIGludCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBpbnQgX19iKSB7Ci0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3Zwa3N3c3MoX19iLCBfX2EpOwotI2Vsc2UKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3Zwa3N3c3MoX19hLCBfX2IpOwotI2VuZGlmCi19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpIHZlY19wYWNrcyh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgewotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192cGt1d3VzKF9fYiwgX19hKTsKLSNlbHNlCi0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192cGt1d3VzKF9fYSwgX19iKTsKLSNlbmRpZgotfQotCi0jaWZkZWYgX19QT1dFUjhfVkVDVE9SX18KLXN0YXRpYyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfcGFja3ModmVjdG9yIGxvbmcgbG9uZyBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBsb25nIGxvbmcgX19iKSB7Ci0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3Zwa3Nkc3MoX19iLCBfX2EpOwotI2Vsc2UKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3Zwa3Nkc3MoX19hLCBfX2IpOwotI2VuZGlmCi19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haQotdmVjX3BhY2tzKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgewotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192cGt1ZHVzKF9fYiwgX19hKTsKLSNlbHNlCi0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192cGt1ZHVzKF9fYSwgX19iKTsKLSNlbmRpZgotfQotI2VuZGlmCi0KLS8qIHZlY192cGtzaHNzICovCi0KLXN0YXRpYyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQotdmVjX3Zwa3Noc3ModmVjdG9yIHNob3J0IF9fYSwgdmVjdG9yIHNob3J0IF9fYikgewotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192cGtzaHNzKF9fYiwgX19hKTsKLSNlbHNlCi0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192cGtzaHNzKF9fYSwgX19iKTsKLSNlbmRpZgotfQotCi0vKiB2ZWNfdnBrc2RzcyAqLwotCi0jaWZkZWYgX19QT1dFUjhfVkVDVE9SX18KLXN0YXRpYyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfdnBrc2Rzcyh2ZWN0b3IgbG9uZyBsb25nIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgbG9uZyBsb25nIF9fYikgewotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192cGtzZHNzKF9fYiwgX19hKTsKLSNlbHNlCi0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192cGtzZHNzKF9fYSwgX19iKTsKLSNlbmRpZgotfQotI2VuZGlmCi0KLS8qIHZlY192cGt1aHVzICovCi0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCi12ZWNfdnBrdWh1cyh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7Ci0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3Zwa3VodXMoX19iLCBfX2EpOwotI2Vsc2UKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3Zwa3VodXMoX19hLCBfX2IpOwotI2VuZGlmCi19Ci0KLS8qIHZlY192cGt1ZHVzICovCi0KLSNpZmRlZiBfX1BPV0VSOF9WRUNUT1JfXwotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBpbnQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQotdmVjX3Zwa3VkdXModmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7Ci0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3Zwa3VkdXMoX19iLCBfX2EpOwotI2Vsc2UKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3Zwa3VkdXMoX19hLCBfX2IpOwotI2VuZGlmCi19Ci0jZW5kaWYKLQotLyogdmVjX3Zwa3N3c3MgKi8KLQotc3RhdGljIHZlY3RvciBzaWduZWQgc2hvcnQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQotdmVjX3Zwa3N3c3ModmVjdG9yIGludCBfX2EsIHZlY3RvciBpbnQgX19iKSB7Ci0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3Zwa3N3c3MoX19iLCBfX2EpOwotI2Vsc2UKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3Zwa3N3c3MoX19hLCBfX2IpOwotI2VuZGlmCi19Ci0KLS8qIHZlY192cGt1d3VzICovCi0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQotdmVjX3Zwa3V3dXModmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7Ci0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3Zwa3V3dXMoX19iLCBfX2EpOwotI2Vsc2UKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3Zwa3V3dXMoX19hLCBfX2IpOwotI2VuZGlmCi19Ci0KLS8qIHZlY19wYWNrc3UgKi8KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfcGFja3N1KHZlY3RvciBzaG9ydCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNob3J0IF9fYikgewotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192cGtzaHVzKF9fYiwgX19hKTsKLSNlbHNlCi0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192cGtzaHVzKF9fYSwgX19iKTsKLSNlbmRpZgotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY19wYWNrc3UodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7Ci0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3Zwa3VodXMoX19iLCBfX2EpOwotI2Vsc2UKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3Zwa3VodXMoX19hLCBfX2IpOwotI2VuZGlmCi19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpIHZlY19wYWNrc3UodmVjdG9yIGludCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBpbnQgX19iKSB7Ci0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3Zwa3N3dXMoX19iLCBfX2EpOwotI2Vsc2UKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3Zwa3N3dXMoX19hLCBfX2IpOwotI2VuZGlmCi19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpIHZlY19wYWNrc3UodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7Ci0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3Zwa3V3dXMoX19iLCBfX2EpOwotI2Vsc2UKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3Zwa3V3dXMoX19hLCBfX2IpOwotI2VuZGlmCi19Ci0KLSNpZmRlZiBfX1BPV0VSOF9WRUNUT1JfXwotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpIHZlY19wYWNrc3UodmVjdG9yIGxvbmcgbG9uZyBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgbG9uZyBsb25nIF9fYikgewotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192cGtzZHVzKF9fYiwgX19hKTsKLSNlbHNlCi0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192cGtzZHVzKF9fYSwgX19iKTsKLSNlbmRpZgotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkKLXZlY19wYWNrc3UodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7Ci0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3Zwa3VkdXMoX19iLCBfX2EpOwotI2Vsc2UKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3Zwa3VkdXMoX19hLCBfX2IpOwotI2VuZGlmCi19Ci0jZW5kaWYKLQotLyogdmVjX3Zwa3NodXMgKi8KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfdnBrc2h1cyh2ZWN0b3Igc2hvcnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2hvcnQgX19iKSB7Ci0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3Zwa3NodXMoX19iLCBfX2EpOwotI2Vsc2UKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3Zwa3NodXMoX19hLCBfX2IpOwotI2VuZGlmCi19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkKLXZlY192cGtzaHVzKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnBrdWh1cyhfX2IsIF9fYSk7Ci0jZWxzZQotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnBrdWh1cyhfX2EsIF9fYik7Ci0jZW5kaWYKLX0KLQotLyogdmVjX3Zwa3N3dXMgKi8KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3Zwa3N3dXModmVjdG9yIGludCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgaW50IF9fYikgewotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192cGtzd3VzKF9fYiwgX19hKTsKLSNlbHNlCi0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192cGtzd3VzKF9fYSwgX19iKTsKLSNlbmRpZgotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfdnBrc3d1cyh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7Ci0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3Zwa3V3dXMoX19iLCBfX2EpOwotI2Vsc2UKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3Zwa3V3dXMoX19hLCBfX2IpOwotI2VuZGlmCi19Ci0KLS8qIHZlY192cGtzZHVzICovCi0KLSNpZmRlZiBfX1BPV0VSOF9WRUNUT1JfXwotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpIHZlY192cGtzZHVzKHZlY3RvciBsb25nIGxvbmcgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBsb25nIGxvbmcgX19iKSB7Ci0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3Zwa3NkdXMoX19iLCBfX2EpOwotI2Vsc2UKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3Zwa3NkdXMoX19hLCBfX2IpOwotI2VuZGlmCi19Ci0jZW5kaWYKLQotLyogdmVjX3Blcm0gKi8KLQotLy8gVGhlIHZwZXJtIGluc3RydWN0aW9uIGlzIGRlZmluZWQgYXJjaGl0ZWN0dXJhbGx5IHdpdGggYSBiaWctZW5kaWFuIGJpYXMuCi0vLyBGb3IgbGl0dGxlIGVuZGlhbiwgd2Ugc3dhcCB0aGUgaW5wdXQgb3BlcmFuZHMgYW5kIGludmVydCB0aGUgcGVybXV0ZQotLy8gY29udHJvbCB2ZWN0b3IuICBPbmx5IHRoZSByaWdodG1vc3QgNSBiaXRzIG1hdHRlciwgc28gd2UgY291bGQgdXNlCi0vLyBhIHZlY3RvciBvZiBhbGwgMzFzIGluc3RlYWQgb2YgYWxsIDI1NXMgdG8gcGVyZm9ybSB0aGUgaW52ZXJzaW9uLgotLy8gSG93ZXZlciwgd2hlbiB0aGUgUENWIGlzIG5vdCBhIGNvbnN0YW50LCB1c2luZyAyNTUgaGFzIGFuIGFkdmFudGFnZQotLy8gaW4gdGhhdCB0aGUgdmVjX3hvciBjYW4gYmUgcmVjb2duaXplZCBhcyBhIHZlY19ub3IgKGFuZCBmb3IgUDggYW5kCi0vLyBsYXRlciwgcG9zc2libHkgYSB2ZWNfbmFuZCkuCi0KLXN0YXRpYyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY19wZXJtKHZlY3RvciBzaWduZWQgY2hhciBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19jKSB7Ci0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19kID0gezI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTV9OwotICBfX2QgPSB2ZWNfeG9yKF9fYywgX19kKTsKLSAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfdnBlcm1fNHNpKCh2ZWN0b3IgaW50KV9fYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYSwgX19kKTsKLSNlbHNlCi0gIHJldHVybiAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX3ZwZXJtXzRzaSgodmVjdG9yIGludClfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IsIF9fYyk7Ci0jZW5kaWYKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfcGVybSh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19jKSB7Ci0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19kID0gezI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTV9OwotICBfX2QgPSB2ZWNfeG9yKF9fYywgX19kKTsKLSAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2J1aWx0aW5fYWx0aXZlY192cGVybV80c2koCi0gICAgICAodmVjdG9yIGludClfX2IsICh2ZWN0b3IgaW50KV9fYSwgX19kKTsKLSNlbHNlCi0gIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfdnBlcm1fNHNpKAotICAgICAgKHZlY3RvciBpbnQpX19hLCAodmVjdG9yIGludClfX2IsIF9fYyk7Ci0jZW5kaWYKLX0KLQotc3RhdGljIHZlY3RvciBib29sIGNoYXIgX19BVFRSU19vX2FpIHZlY19wZXJtKHZlY3RvciBib29sIGNoYXIgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGNoYXIgX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYykgewotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0gIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fZCA9IHsyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1fTsKLSAgX19kID0gdmVjX3hvcihfX2MsIF9fZCk7Ci0gIHJldHVybiAodmVjdG9yIGJvb2wgY2hhcilfX2J1aWx0aW5fYWx0aXZlY192cGVybV80c2koKHZlY3RvciBpbnQpX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYSwgX19kKTsKLSNlbHNlCi0gIHJldHVybiAodmVjdG9yIGJvb2wgY2hhcilfX2J1aWx0aW5fYWx0aXZlY192cGVybV80c2koKHZlY3RvciBpbnQpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYiwgX19jKTsKLSNlbmRpZgotfQotCi1zdGF0aWMgdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfcGVybSh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgc2hvcnQgX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19jKSB7Ci0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19kID0gezI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTV9OwotICBfX2QgPSB2ZWNfeG9yKF9fYywgX19kKTsKLSAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX3ZwZXJtXzRzaSgodmVjdG9yIGludClfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19hLCBfX2QpOwotI2Vsc2UKLSAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX3ZwZXJtXzRzaSgodmVjdG9yIGludClfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iLCBfX2MpOwotI2VuZGlmCi19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpIHZlY19wZXJtKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19jKSB7Ci0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19kID0gezI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTV9OwotICBfX2QgPSB2ZWNfeG9yKF9fYywgX19kKTsKLSAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19idWlsdGluX2FsdGl2ZWNfdnBlcm1fNHNpKAotICAgICAgKHZlY3RvciBpbnQpX19iLCAodmVjdG9yIGludClfX2EsIF9fZCk7Ci0jZWxzZQotICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY192cGVybV80c2koCi0gICAgICAodmVjdG9yIGludClfX2EsICh2ZWN0b3IgaW50KV9fYiwgX19jKTsKLSNlbmRpZgotfQotCi1zdGF0aWMgdmVjdG9yIGJvb2wgc2hvcnQgX19BVFRSU19vX2FpIHZlY19wZXJtKHZlY3RvciBib29sIHNob3J0IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgc2hvcnQgX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2MpIHsKLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2QgPSB7MjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NX07Ci0gIF9fZCA9IHZlY194b3IoX19jLCBfX2QpOwotICByZXR1cm4gKHZlY3RvciBib29sIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX3ZwZXJtXzRzaSgodmVjdG9yIGludClfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYSwgX19kKTsKLSNlbHNlCi0gIHJldHVybiAodmVjdG9yIGJvb2wgc2hvcnQpX19idWlsdGluX2FsdGl2ZWNfdnBlcm1fNHNpKCh2ZWN0b3IgaW50KV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iLCBfX2MpOwotI2VuZGlmCi19Ci0KLXN0YXRpYyB2ZWN0b3IgcGl4ZWwgX19BVFRSU19vX2FpIHZlY19wZXJtKHZlY3RvciBwaXhlbCBfX2EsIHZlY3RvciBwaXhlbCBfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2MpIHsKLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2QgPSB7MjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NX07Ci0gIF9fZCA9IHZlY194b3IoX19jLCBfX2QpOwotICByZXR1cm4gKHZlY3RvciBwaXhlbClfX2J1aWx0aW5fYWx0aXZlY192cGVybV80c2koKHZlY3RvciBpbnQpX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19hLCBfX2QpOwotI2Vsc2UKLSAgcmV0dXJuICh2ZWN0b3IgcGl4ZWwpX19idWlsdGluX2FsdGl2ZWNfdnBlcm1fNHNpKCh2ZWN0b3IgaW50KV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYiwgX19jKTsKLSNlbmRpZgotfQotCi1zdGF0aWMgdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX3Blcm0odmVjdG9yIHNpZ25lZCBpbnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgaW50IF9fYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2MpIHsKLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2QgPSB7MjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NX07Ci0gIF9fZCA9IHZlY194b3IoX19jLCBfX2QpOwotICByZXR1cm4gKHZlY3RvciBzaWduZWQgaW50KV9fYnVpbHRpbl9hbHRpdmVjX3ZwZXJtXzRzaShfX2IsIF9fYSwgX19kKTsKLSNlbHNlCi0gIHJldHVybiAodmVjdG9yIHNpZ25lZCBpbnQpX19idWlsdGluX2FsdGl2ZWNfdnBlcm1fNHNpKF9fYSwgX19iLCBfX2MpOwotI2VuZGlmCi19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haSB2ZWNfcGVybSh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2MpIHsKLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2QgPSB7MjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NX07Ci0gIF9fZCA9IHZlY194b3IoX19jLCBfX2QpOwotICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBpbnQpX19idWlsdGluX2FsdGl2ZWNfdnBlcm1fNHNpKCh2ZWN0b3IgaW50KV9fYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2EsIF9fZCk7Ci0jZWxzZQotICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBpbnQpX19idWlsdGluX2FsdGl2ZWNfdnBlcm1fNHNpKCh2ZWN0b3IgaW50KV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IsIF9fYyk7Ci0jZW5kaWYKLX0KLQotc3RhdGljIHZlY3RvciBib29sIGludCBfX0FUVFJTX29fYWkgdmVjX3Blcm0odmVjdG9yIGJvb2wgaW50IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGludCBfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2MpIHsKLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2QgPSB7MjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NX07Ci0gIF9fZCA9IHZlY194b3IoX19jLCBfX2QpOwotICByZXR1cm4gKHZlY3RvciBib29sIGludClfX2J1aWx0aW5fYWx0aXZlY192cGVybV80c2koKHZlY3RvciBpbnQpX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19hLCBfX2QpOwotI2Vsc2UKLSAgcmV0dXJuICh2ZWN0b3IgYm9vbCBpbnQpX19idWlsdGluX2FsdGl2ZWNfdnBlcm1fNHNpKCh2ZWN0b3IgaW50KV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYiwgX19jKTsKLSNlbmRpZgotfQotCi1zdGF0aWMgdmVjdG9yIGZsb2F0IF9fQVRUUlNfb19haSB2ZWNfcGVybSh2ZWN0b3IgZmxvYXQgX19hLCB2ZWN0b3IgZmxvYXQgX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19jKSB7Ci0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19kID0gezI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTV9OwotICBfX2QgPSB2ZWNfeG9yKF9fYywgX19kKTsKLSAgcmV0dXJuICh2ZWN0b3IgZmxvYXQpX19idWlsdGluX2FsdGl2ZWNfdnBlcm1fNHNpKCh2ZWN0b3IgaW50KV9fYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYSwgX19kKTsKLSNlbHNlCi0gIHJldHVybiAodmVjdG9yIGZsb2F0KV9fYnVpbHRpbl9hbHRpdmVjX3ZwZXJtXzRzaSgodmVjdG9yIGludClfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IsIF9fYyk7Ci0jZW5kaWYKLX0KLQotI2lmZGVmIF9fVlNYX18KLXN0YXRpYyB2ZWN0b3IgbG9uZyBsb25nIF9fQVRUUlNfb19haSB2ZWNfcGVybSh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYykgewotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0gIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fZCA9IHsyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1fTsKLSAgX19kID0gdmVjX3hvcihfX2MsIF9fZCk7Ci0gIHJldHVybiAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19idWlsdGluX2FsdGl2ZWNfdnBlcm1fNHNpKAotICAgICAgKHZlY3RvciBpbnQpX19iLCAodmVjdG9yIGludClfX2EsIF9fZCk7Ci0jZWxzZQotICByZXR1cm4gKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYnVpbHRpbl9hbHRpdmVjX3ZwZXJtXzRzaSgKLSAgICAgICh2ZWN0b3IgaW50KV9fYSwgKHZlY3RvciBpbnQpX19iLCBfX2MpOwotI2VuZGlmCi19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQotdmVjX3Blcm0odmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iLAotICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19jKSB7Ci0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19kID0gezI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTV9OwotICBfX2QgPSB2ZWNfeG9yKF9fYywgX19kKTsKLSAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYnVpbHRpbl9hbHRpdmVjX3ZwZXJtXzRzaSgKLSAgICAgICh2ZWN0b3IgaW50KV9fYiwgKHZlY3RvciBpbnQpX19hLCBfX2QpOwotI2Vsc2UKLSAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYnVpbHRpbl9hbHRpdmVjX3ZwZXJtXzRzaSgKLSAgICAgICh2ZWN0b3IgaW50KV9fYSwgKHZlY3RvciBpbnQpX19iLCBfX2MpOwotI2VuZGlmCi19Ci0KLXN0YXRpYyB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19BVFRSU19vX2FpCi12ZWNfcGVybSh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iLAotICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19jKSB7Ci0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19kID0gezI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTV9OwotICBfX2QgPSB2ZWNfeG9yKF9fYywgX19kKTsKLSAgcmV0dXJuICh2ZWN0b3IgYm9vbCBsb25nIGxvbmcpX19idWlsdGluX2FsdGl2ZWNfdnBlcm1fNHNpKAotICAgICAgKHZlY3RvciBpbnQpX19iLCAodmVjdG9yIGludClfX2EsIF9fZCk7Ci0jZWxzZQotICByZXR1cm4gKHZlY3RvciBib29sIGxvbmcgbG9uZylfX2J1aWx0aW5fYWx0aXZlY192cGVybV80c2koCi0gICAgICAodmVjdG9yIGludClfX2EsICh2ZWN0b3IgaW50KV9fYiwgX19jKTsKLSNlbmRpZgotfQotCi1zdGF0aWMgdmVjdG9yIGRvdWJsZSBfX0FUVFJTX29fYWkgdmVjX3Blcm0odmVjdG9yIGRvdWJsZSBfX2EsIHZlY3RvciBkb3VibGUgX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYykgewotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0gIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fZCA9IHsyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1fTsKLSAgX19kID0gdmVjX3hvcihfX2MsIF9fZCk7Ci0gIHJldHVybiAodmVjdG9yIGRvdWJsZSlfX2J1aWx0aW5fYWx0aXZlY192cGVybV80c2koKHZlY3RvciBpbnQpX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYSwgX19kKTsKLSNlbHNlCi0gIHJldHVybiAodmVjdG9yIGRvdWJsZSlfX2J1aWx0aW5fYWx0aXZlY192cGVybV80c2koKHZlY3RvciBpbnQpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYiwgX19jKTsKLSNlbmRpZgotfQotI2VuZGlmCi0KLS8qIHZlY192cGVybSAqLwotCi1zdGF0aWMgdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfdnBlcm0odmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYykgewotICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2IsIF9fYyk7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX3ZwZXJtKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYykgewotICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2IsIF9fYyk7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgYm9vbCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfdnBlcm0odmVjdG9yIGJvb2wgY2hhciBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGNoYXIgX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2MpIHsKLSAgcmV0dXJuIHZlY19wZXJtKF9fYSwgX19iLCBfX2MpOwotfQotCi1zdGF0aWMgdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfdnBlcm0odmVjdG9yIHNob3J0IF9fYSwgdmVjdG9yIHNob3J0IF9fYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2MpIHsKLSAgcmV0dXJuIHZlY19wZXJtKF9fYSwgX19iLCBfX2MpOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfdnBlcm0odmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYykgewotICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2IsIF9fYyk7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgYm9vbCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3ZwZXJtKHZlY3RvciBib29sIHNob3J0IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIHNob3J0IF9fYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYykgewotICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2IsIF9fYyk7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgcGl4ZWwgX19BVFRSU19vX2FpIHZlY192cGVybSh2ZWN0b3IgcGl4ZWwgX19hLCB2ZWN0b3IgcGl4ZWwgX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYykgewotICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2IsIF9fYyk7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfdnBlcm0odmVjdG9yIGludCBfX2EsIHZlY3RvciBpbnQgX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2MpIHsKLSAgcmV0dXJuIHZlY19wZXJtKF9fYSwgX19iLCBfX2MpOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkgdmVjX3ZwZXJtKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19jKSB7Ci0gIHJldHVybiB2ZWNfcGVybShfX2EsIF9fYiwgX19jKTsKLX0KLQotc3RhdGljIHZlY3RvciBib29sIGludCBfX0FUVFJTX29fYWkgdmVjX3ZwZXJtKHZlY3RvciBib29sIGludCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgaW50IF9fYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2MpIHsKLSAgcmV0dXJuIHZlY19wZXJtKF9fYSwgX19iLCBfX2MpOwotfQotCi1zdGF0aWMgdmVjdG9yIGZsb2F0IF9fQVRUUlNfb19haSB2ZWNfdnBlcm0odmVjdG9yIGZsb2F0IF9fYSwgdmVjdG9yIGZsb2F0IF9fYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2MpIHsKLSAgcmV0dXJuIHZlY19wZXJtKF9fYSwgX19iLCBfX2MpOwotfQotCi0jaWZkZWYgX19WU1hfXwotc3RhdGljIHZlY3RvciBsb25nIGxvbmcgX19BVFRSU19vX2FpIHZlY192cGVybSh2ZWN0b3IgbG9uZyBsb25nIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGxvbmcgbG9uZyBfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYykgewotICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2IsIF9fYyk7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQotdmVjX3ZwZXJtKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYiwKLSAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2MpIHsKLSAgcmV0dXJuIHZlY19wZXJtKF9fYSwgX19iLCBfX2MpOwotfQotCi1zdGF0aWMgdmVjdG9yIGRvdWJsZSBfX0FUVFJTX29fYWkgdmVjX3ZwZXJtKHZlY3RvciBkb3VibGUgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgZG91YmxlIF9fYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19jKSB7Ci0gIHJldHVybiB2ZWNfcGVybShfX2EsIF9fYiwgX19jKTsKLX0KLSNlbmRpZgotCi0vKiB2ZWNfcmUgKi8KLQotc3RhdGljIHZlY3RvciBmbG9hdCBfX0FUVFJTX29fYWkKLXZlY19yZSh2ZWN0b3IgZmxvYXQgX19hKSB7Ci0jaWZkZWYgX19WU1hfXwotICByZXR1cm4gX19idWlsdGluX3ZzeF94dnJlc3AoX19hKTsKLSNlbHNlCi0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192cmVmcChfX2EpOwotI2VuZGlmCi19Ci0KLSNpZmRlZiBfX1ZTWF9fCi1zdGF0aWMgdmVjdG9yIGRvdWJsZSBfX0FUVFJTX29fYWkgdmVjX3JlKHZlY3RvciBkb3VibGUgX19hKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fdnN4X3h2cmVkcChfX2EpOwotfQotI2VuZGlmCi0KLS8qIHZlY192cmVmcCAqLwotCi1zdGF0aWMgdmVjdG9yIGZsb2F0IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKLXZlY192cmVmcCh2ZWN0b3IgZmxvYXQgX19hKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192cmVmcChfX2EpOwotfQotCi0vKiB2ZWNfcmwgKi8KLQotc3RhdGljIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX3JsKHZlY3RvciBzaWduZWQgY2hhciBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX3ZybGIoKHZlY3RvciBjaGFyKV9fYSwgX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfcmwodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfdnJsYigodmVjdG9yIGNoYXIpX19hLCBfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfcmwodmVjdG9yIHNob3J0IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192cmxoKF9fYSwgX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3JsKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgewotICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY192cmxoKCh2ZWN0b3Igc2hvcnQpX19hLCBfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX3JsKHZlY3RvciBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnJsdyhfX2EsIF9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haSB2ZWNfcmwodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGludClfX2J1aWx0aW5fYWx0aXZlY192cmx3KCh2ZWN0b3IgaW50KV9fYSwgX19iKTsKLX0KLQotI2lmZGVmIF9fUE9XRVI4X1ZFQ1RPUl9fCi1zdGF0aWMgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCi12ZWNfcmwodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnJsZChfX2EsIF9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQotdmVjX3JsKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnJsZChfX2EsIF9fYik7Ci19Ci0jZW5kaWYKLQotLyogdmVjX3ZybGIgKi8KLQotc3RhdGljIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX3ZybGIodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gKHZlY3RvciBzaWduZWQgY2hhcilfX2J1aWx0aW5fYWx0aXZlY192cmxiKCh2ZWN0b3IgY2hhcilfX2EsIF9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX3ZybGIodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2J1aWx0aW5fYWx0aXZlY192cmxiKCh2ZWN0b3IgY2hhcilfX2EsIF9fYik7Ci19Ci0KLS8qIHZlY192cmxoICovCi0KLXN0YXRpYyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY192cmxoKHZlY3RvciBzaG9ydCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192cmxoKF9fYSwgX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3ZybGgodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19idWlsdGluX2FsdGl2ZWNfdnJsaCgodmVjdG9yIHNob3J0KV9fYSwgX19iKTsKLX0KLQotLyogdmVjX3ZybHcgKi8KLQotc3RhdGljIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY192cmx3KHZlY3RvciBpbnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192cmx3KF9fYSwgX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpIHZlY192cmx3KHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGludClfX2J1aWx0aW5fYWx0aXZlY192cmx3KCh2ZWN0b3IgaW50KV9fYSwgX19iKTsKLX0KLQotLyogdmVjX3JvdW5kICovCi0KLXN0YXRpYyB2ZWN0b3IgZmxvYXQgX19BVFRSU19vX2FpIHZlY19yb3VuZCh2ZWN0b3IgZmxvYXQgX19hKSB7Ci0jaWZkZWYgX19WU1hfXwotICByZXR1cm4gX19idWlsdGluX3ZzeF94dnJzcGkoX19hKTsKLSNlbHNlCi0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192cmZpbihfX2EpOwotI2VuZGlmCi19Ci0KLSNpZmRlZiBfX1ZTWF9fCi1zdGF0aWMgdmVjdG9yIGRvdWJsZSBfX0FUVFJTX29fYWkgdmVjX3JvdW5kKHZlY3RvciBkb3VibGUgX19hKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fdnN4X3h2cmRwaShfX2EpOwotfQotCi0vKiB2ZWNfcmludCAqLwotCi1zdGF0aWMgdmVjdG9yIGZsb2F0IF9fQVRUUlNfb19haQotdmVjX3JpbnQodmVjdG9yIGZsb2F0IF9fYSkgewotICByZXR1cm4gX19idWlsdGluX3ZzeF94dnJzcGljKF9fYSk7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgZG91YmxlIF9fQVRUUlNfb19haQotdmVjX3JpbnQodmVjdG9yIGRvdWJsZSBfX2EpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl92c3hfeHZyZHBpYyhfX2EpOwotfQotCi0vKiB2ZWNfbmVhcmJ5aW50ICovCi0KLXN0YXRpYyB2ZWN0b3IgZmxvYXQgX19BVFRSU19vX2FpIHZlY19uZWFyYnlpbnQodmVjdG9yIGZsb2F0IF9fYSkgewotICByZXR1cm4gX19idWlsdGluX3ZzeF94dnJzcGkoX19hKTsKLX0KLQotc3RhdGljIHZlY3RvciBkb3VibGUgX19BVFRSU19vX2FpIHZlY19uZWFyYnlpbnQodmVjdG9yIGRvdWJsZSBfX2EpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl92c3hfeHZyZHBpKF9fYSk7Ci19Ci0jZW5kaWYKLQotLyogdmVjX3ZyZmluICovCi0KLXN0YXRpYyB2ZWN0b3IgZmxvYXQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQotdmVjX3ZyZmluKHZlY3RvciBmbG9hdCBfX2EpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZyZmluKF9fYSk7Ci19Ci0KLS8qIHZlY19zcXJ0ICovCi0KLSNpZmRlZiBfX1ZTWF9fCi1zdGF0aWMgdmVjdG9yIGZsb2F0IF9fQVRUUlNfb19haSB2ZWNfc3FydCh2ZWN0b3IgZmxvYXQgX19hKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fdnN4X3h2c3FydHNwKF9fYSk7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgZG91YmxlIF9fQVRUUlNfb19haSB2ZWNfc3FydCh2ZWN0b3IgZG91YmxlIF9fYSkgewotICByZXR1cm4gX19idWlsdGluX3ZzeF94dnNxcnRkcChfX2EpOwotfQotI2VuZGlmCi0KLS8qIHZlY19yc3FydGUgKi8KLQotc3RhdGljIHZlY3RvciBmbG9hdCBfX0FUVFJTX29fYWkKLXZlY19yc3FydGUodmVjdG9yIGZsb2F0IF9fYSkgewotI2lmZGVmIF9fVlNYX18KLSAgcmV0dXJuIF9fYnVpbHRpbl92c3hfeHZyc3FydGVzcChfX2EpOwotI2Vsc2UKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3Zyc3FydGVmcChfX2EpOwotI2VuZGlmCi19Ci0KLSNpZmRlZiBfX1ZTWF9fCi1zdGF0aWMgdmVjdG9yIGRvdWJsZSBfX0FUVFJTX29fYWkgdmVjX3JzcXJ0ZSh2ZWN0b3IgZG91YmxlIF9fYSkgewotICByZXR1cm4gX19idWlsdGluX3ZzeF94dnJzcXJ0ZWRwKF9fYSk7Ci19Ci0jZW5kaWYKLQotLyogdmVjX3Zyc3FydGVmcCAqLwotCi1zdGF0aWMgX192ZWN0b3IgZmxvYXQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQotdmVjX3Zyc3FydGVmcCh2ZWN0b3IgZmxvYXQgX19hKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192cnNxcnRlZnAoX19hKTsKLX0KLQotLyogdmVjX3NlbCAqLwotCi0jZGVmaW5lIF9fYnVpbHRpbl9hbHRpdmVjX3ZzZWxfNHNpIHZlY19zZWwKLQotc3RhdGljIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX3NlbCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2MpIHsKLSAgcmV0dXJuIChfX2EgJiB+KHZlY3RvciBzaWduZWQgY2hhcilfX2MpIHwgKF9fYiAmICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19jKTsKLX0KLQotc3RhdGljIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX3NlbCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBjaGFyIF9fYykgewotICByZXR1cm4gKF9fYSAmIH4odmVjdG9yIHNpZ25lZCBjaGFyKV9fYykgfCAoX19iICYgKHZlY3RvciBzaWduZWQgY2hhcilfX2MpOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY19zZWwodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2MpIHsKLSAgcmV0dXJuIChfX2EgJiB+X19jKSB8IChfX2IgJiBfX2MpOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY19zZWwodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBjaGFyIF9fYykgewotICByZXR1cm4gKF9fYSAmIH4odmVjdG9yIHVuc2lnbmVkIGNoYXIpX19jKSB8IChfX2IgJiAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19jKTsKLX0KLQotc3RhdGljIHZlY3RvciBib29sIGNoYXIgX19BVFRSU19vX2FpIHZlY19zZWwodmVjdG9yIGJvb2wgY2hhciBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBjaGFyIF9fYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYykgewotICByZXR1cm4gKF9fYSAmIH4odmVjdG9yIGJvb2wgY2hhcilfX2MpIHwgKF9fYiAmICh2ZWN0b3IgYm9vbCBjaGFyKV9fYyk7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgYm9vbCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfc2VsKHZlY3RvciBib29sIGNoYXIgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgY2hhciBfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBjaGFyIF9fYykgewotICByZXR1cm4gKF9fYSAmIH5fX2MpIHwgKF9fYiAmIF9fYyk7Ci19Ci0KLXN0YXRpYyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY19zZWwodmVjdG9yIHNob3J0IF9fYSwgdmVjdG9yIHNob3J0IF9fYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYykgewotICByZXR1cm4gKF9fYSAmIH4odmVjdG9yIHNob3J0KV9fYykgfCAoX19iICYgKHZlY3RvciBzaG9ydClfX2MpOwotfQotCi1zdGF0aWMgdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfc2VsKHZlY3RvciBzaG9ydCBfX2EsIHZlY3RvciBzaG9ydCBfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIHNob3J0IF9fYykgewotICByZXR1cm4gKF9fYSAmIH4odmVjdG9yIHNob3J0KV9fYykgfCAoX19iICYgKHZlY3RvciBzaG9ydClfX2MpOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfc2VsKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2MpIHsKLSAgcmV0dXJuIChfX2EgJiB+X19jKSB8IChfX2IgJiBfX2MpOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfc2VsKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIHNob3J0IF9fYykgewotICByZXR1cm4gKF9fYSAmIH4odmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYykgfAotICAgICAgICAgKF9fYiAmICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19jKTsKLX0KLQotc3RhdGljIHZlY3RvciBib29sIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfc2VsKHZlY3RvciBib29sIHNob3J0IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYykgewotICByZXR1cm4gKF9fYSAmIH4odmVjdG9yIGJvb2wgc2hvcnQpX19jKSB8IChfX2IgJiAodmVjdG9yIGJvb2wgc2hvcnQpX19jKTsKLX0KLQotc3RhdGljIHZlY3RvciBib29sIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfc2VsKHZlY3RvciBib29sIHNob3J0IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgc2hvcnQgX19jKSB7Ci0gIHJldHVybiAoX19hICYgfl9fYykgfCAoX19iICYgX19jKTsKLX0KLQotc3RhdGljIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY19zZWwodmVjdG9yIGludCBfX2EsIHZlY3RvciBpbnQgX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2MpIHsKLSAgcmV0dXJuIChfX2EgJiB+KHZlY3RvciBpbnQpX19jKSB8IChfX2IgJiAodmVjdG9yIGludClfX2MpOwotfQotCi1zdGF0aWMgdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX3NlbCh2ZWN0b3IgaW50IF9fYSwgdmVjdG9yIGludCBfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBpbnQgX19jKSB7Ci0gIHJldHVybiAoX19hICYgfih2ZWN0b3IgaW50KV9fYykgfCAoX19iICYgKHZlY3RvciBpbnQpX19jKTsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpIHZlY19zZWwodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19jKSB7Ci0gIHJldHVybiAoX19hICYgfl9fYykgfCAoX19iICYgX19jKTsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpIHZlY19zZWwodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGludCBfX2MpIHsKLSAgcmV0dXJuIChfX2EgJiB+KHZlY3RvciB1bnNpZ25lZCBpbnQpX19jKSB8IChfX2IgJiAodmVjdG9yIHVuc2lnbmVkIGludClfX2MpOwotfQotCi1zdGF0aWMgdmVjdG9yIGJvb2wgaW50IF9fQVRUUlNfb19haSB2ZWNfc2VsKHZlY3RvciBib29sIGludCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGludCBfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19jKSB7Ci0gIHJldHVybiAoX19hICYgfih2ZWN0b3IgYm9vbCBpbnQpX19jKSB8IChfX2IgJiAodmVjdG9yIGJvb2wgaW50KV9fYyk7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgYm9vbCBpbnQgX19BVFRSU19vX2FpIHZlY19zZWwodmVjdG9yIGJvb2wgaW50IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgaW50IF9fYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgaW50IF9fYykgewotICByZXR1cm4gKF9fYSAmIH5fX2MpIHwgKF9fYiAmIF9fYyk7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgZmxvYXQgX19BVFRSU19vX2FpIHZlY19zZWwodmVjdG9yIGZsb2F0IF9fYSwgdmVjdG9yIGZsb2F0IF9fYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2MpIHsKLSAgdmVjdG9yIGludCBfX3JlcyA9ICgodmVjdG9yIGludClfX2EgJiB+KHZlY3RvciBpbnQpX19jKSB8Ci0gICAgICAgICAgICAgICAgICAgICAoKHZlY3RvciBpbnQpX19iICYgKHZlY3RvciBpbnQpX19jKTsKLSAgcmV0dXJuICh2ZWN0b3IgZmxvYXQpX19yZXM7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgZmxvYXQgX19BVFRSU19vX2FpIHZlY19zZWwodmVjdG9yIGZsb2F0IF9fYSwgdmVjdG9yIGZsb2F0IF9fYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgaW50IF9fYykgewotICB2ZWN0b3IgaW50IF9fcmVzID0gKCh2ZWN0b3IgaW50KV9fYSAmIH4odmVjdG9yIGludClfX2MpIHwKLSAgICAgICAgICAgICAgICAgICAgICgodmVjdG9yIGludClfX2IgJiAodmVjdG9yIGludClfX2MpOwotICByZXR1cm4gKHZlY3RvciBmbG9hdClfX3JlczsKLX0KLQotI2lmZGVmIF9fVlNYX18KLXN0YXRpYyB2ZWN0b3IgZG91YmxlIF9fQVRUUlNfb19haSB2ZWNfc2VsKHZlY3RvciBkb3VibGUgX19hLCB2ZWN0b3IgZG91YmxlIF9fYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2MpIHsKLSAgdmVjdG9yIGxvbmcgbG9uZyBfX3JlcyA9ICgodmVjdG9yIGxvbmcgbG9uZylfX2EgJiB+KHZlY3RvciBsb25nIGxvbmcpX19jKSB8Ci0gICAgICAgICAgICAgICAgICAgICAoKHZlY3RvciBsb25nIGxvbmcpX19iICYgKHZlY3RvciBsb25nIGxvbmcpX19jKTsKLSAgcmV0dXJuICh2ZWN0b3IgZG91YmxlKV9fcmVzOwotfQotCi1zdGF0aWMgdmVjdG9yIGRvdWJsZSBfX0FUVFJTX29fYWkgdmVjX3NlbCh2ZWN0b3IgZG91YmxlIF9fYSwgdmVjdG9yIGRvdWJsZSBfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYykgewotICB2ZWN0b3IgbG9uZyBsb25nIF9fcmVzID0gKCh2ZWN0b3IgbG9uZyBsb25nKV9fYSAmIH4odmVjdG9yIGxvbmcgbG9uZylfX2MpIHwKLSAgICAgICAgICAgICAgICAgICAgICgodmVjdG9yIGxvbmcgbG9uZylfX2IgJiAodmVjdG9yIGxvbmcgbG9uZylfX2MpOwotICByZXR1cm4gKHZlY3RvciBkb3VibGUpX19yZXM7Ci19Ci0jZW5kaWYKLQotLyogdmVjX3ZzZWwgKi8KLQotc3RhdGljIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX3ZzZWwodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgY2hhciBfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2MpIHsKLSAgcmV0dXJuIChfX2EgJiB+KHZlY3RvciBzaWduZWQgY2hhcilfX2MpIHwgKF9fYiAmICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19jKTsKLX0KLQotc3RhdGljIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX3ZzZWwodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgY2hhciBfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBjaGFyIF9fYykgewotICByZXR1cm4gKF9fYSAmIH4odmVjdG9yIHNpZ25lZCBjaGFyKV9fYykgfCAoX19iICYgKHZlY3RvciBzaWduZWQgY2hhcilfX2MpOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY192c2VsKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2MpIHsKLSAgcmV0dXJuIChfX2EgJiB+X19jKSB8IChfX2IgJiBfX2MpOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY192c2VsKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBjaGFyIF9fYykgewotICByZXR1cm4gKF9fYSAmIH4odmVjdG9yIHVuc2lnbmVkIGNoYXIpX19jKSB8IChfX2IgJiAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19jKTsKLX0KLQotc3RhdGljIHZlY3RvciBib29sIGNoYXIgX19BVFRSU19vX2FpIHZlY192c2VsKHZlY3RvciBib29sIGNoYXIgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGNoYXIgX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYykgewotICByZXR1cm4gKF9fYSAmIH4odmVjdG9yIGJvb2wgY2hhcilfX2MpIHwgKF9fYiAmICh2ZWN0b3IgYm9vbCBjaGFyKV9fYyk7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgYm9vbCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfdnNlbCh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBjaGFyIF9fYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBjaGFyIF9fYykgewotICByZXR1cm4gKF9fYSAmIH5fX2MpIHwgKF9fYiAmIF9fYyk7Ci19Ci0KLXN0YXRpYyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY192c2VsKHZlY3RvciBzaG9ydCBfX2EsIHZlY3RvciBzaG9ydCBfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19jKSB7Ci0gIHJldHVybiAoX19hICYgfih2ZWN0b3Igc2hvcnQpX19jKSB8IChfX2IgJiAodmVjdG9yIHNob3J0KV9fYyk7Ci19Ci0KLXN0YXRpYyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY192c2VsKHZlY3RvciBzaG9ydCBfX2EsIHZlY3RvciBzaG9ydCBfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBzaG9ydCBfX2MpIHsKLSAgcmV0dXJuIChfX2EgJiB+KHZlY3RvciBzaG9ydClfX2MpIHwgKF9fYiAmICh2ZWN0b3Igc2hvcnQpX19jKTsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3ZzZWwodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19jKSB7Ci0gIHJldHVybiAoX19hICYgfl9fYykgfCAoX19iICYgX19jKTsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3ZzZWwodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBzaG9ydCBfX2MpIHsKLSAgcmV0dXJuIChfX2EgJiB+KHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2MpIHwKLSAgICAgICAgIChfX2IgJiAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYyk7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgYm9vbCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3ZzZWwodmVjdG9yIGJvb2wgc2hvcnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2MpIHsKLSAgcmV0dXJuIChfX2EgJiB+KHZlY3RvciBib29sIHNob3J0KV9fYykgfCAoX19iICYgKHZlY3RvciBib29sIHNob3J0KV9fYyk7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgYm9vbCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3ZzZWwodmVjdG9yIGJvb2wgc2hvcnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIHNob3J0IF9fYykgewotICByZXR1cm4gKF9fYSAmIH5fX2MpIHwgKF9fYiAmIF9fYyk7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfdnNlbCh2ZWN0b3IgaW50IF9fYSwgdmVjdG9yIGludCBfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2MpIHsKLSAgcmV0dXJuIChfX2EgJiB+KHZlY3RvciBpbnQpX19jKSB8IChfX2IgJiAodmVjdG9yIGludClfX2MpOwotfQotCi1zdGF0aWMgdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX3ZzZWwodmVjdG9yIGludCBfX2EsIHZlY3RvciBpbnQgX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGludCBfX2MpIHsKLSAgcmV0dXJuIChfX2EgJiB+KHZlY3RvciBpbnQpX19jKSB8IChfX2IgJiAodmVjdG9yIGludClfX2MpOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkgdmVjX3ZzZWwodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2MpIHsKLSAgcmV0dXJuIChfX2EgJiB+X19jKSB8IChfX2IgJiBfX2MpOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkgdmVjX3ZzZWwodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgaW50IF9fYykgewotICByZXR1cm4gKF9fYSAmIH4odmVjdG9yIHVuc2lnbmVkIGludClfX2MpIHwgKF9fYiAmICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYyk7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgYm9vbCBpbnQgX19BVFRSU19vX2FpIHZlY192c2VsKHZlY3RvciBib29sIGludCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBpbnQgX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2MpIHsKLSAgcmV0dXJuIChfX2EgJiB+KHZlY3RvciBib29sIGludClfX2MpIHwgKF9fYiAmICh2ZWN0b3IgYm9vbCBpbnQpX19jKTsKLX0KLQotc3RhdGljIHZlY3RvciBib29sIGludCBfX0FUVFJTX29fYWkgdmVjX3ZzZWwodmVjdG9yIGJvb2wgaW50IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGludCBfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBpbnQgX19jKSB7Ci0gIHJldHVybiAoX19hICYgfl9fYykgfCAoX19iICYgX19jKTsKLX0KLQotc3RhdGljIHZlY3RvciBmbG9hdCBfX0FUVFJTX29fYWkgdmVjX3ZzZWwodmVjdG9yIGZsb2F0IF9fYSwgdmVjdG9yIGZsb2F0IF9fYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19jKSB7Ci0gIHZlY3RvciBpbnQgX19yZXMgPSAoKHZlY3RvciBpbnQpX19hICYgfih2ZWN0b3IgaW50KV9fYykgfAotICAgICAgICAgICAgICAgICAgICAgKCh2ZWN0b3IgaW50KV9fYiAmICh2ZWN0b3IgaW50KV9fYyk7Ci0gIHJldHVybiAodmVjdG9yIGZsb2F0KV9fcmVzOwotfQotCi1zdGF0aWMgdmVjdG9yIGZsb2F0IF9fQVRUUlNfb19haSB2ZWNfdnNlbCh2ZWN0b3IgZmxvYXQgX19hLCB2ZWN0b3IgZmxvYXQgX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgaW50IF9fYykgewotICB2ZWN0b3IgaW50IF9fcmVzID0gKCh2ZWN0b3IgaW50KV9fYSAmIH4odmVjdG9yIGludClfX2MpIHwKLSAgICAgICAgICAgICAgICAgICAgICgodmVjdG9yIGludClfX2IgJiAodmVjdG9yIGludClfX2MpOwotICByZXR1cm4gKHZlY3RvciBmbG9hdClfX3JlczsKLX0KLQotLyogdmVjX3NsICovCi0KLXN0YXRpYyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY19zbCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gX19hIDw8ICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19iOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY19zbCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKLSAgcmV0dXJuIF9fYSA8PCBfX2I7Ci19Ci0KLXN0YXRpYyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY19zbCh2ZWN0b3Igc2hvcnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuIF9fYSA8PCAodmVjdG9yIHNob3J0KV9fYjsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3NsKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgewotICByZXR1cm4gX19hIDw8IF9fYjsKLX0KLQotc3RhdGljIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY19zbCh2ZWN0b3IgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKLSAgcmV0dXJuIF9fYSA8PCAodmVjdG9yIGludClfX2I7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haSB2ZWNfc2wodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7Ci0gIHJldHVybiBfX2EgPDwgX19iOwotfQotCi0jaWZkZWYgX19QT1dFUjhfVkVDVE9SX18KLXN0YXRpYyB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKLXZlY19zbCh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7Ci0gIHJldHVybiBfX2EgPDwgKHZlY3RvciBsb25nIGxvbmcpX19iOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKLXZlY19zbCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKLSAgcmV0dXJuIF9fYSA8PCBfX2I7Ci19Ci0jZW5kaWYKLQotLyogdmVjX3ZzbGIgKi8KLQotI2RlZmluZSBfX2J1aWx0aW5fYWx0aXZlY192c2xiIHZlY192c2xiCi0KLXN0YXRpYyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY192c2xiKHZlY3RvciBzaWduZWQgY2hhciBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKLSAgcmV0dXJuIHZlY19zbChfX2EsIF9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX3ZzbGIodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKLSAgcmV0dXJuIHZlY19zbChfX2EsIF9fYik7Ci19Ci0KLS8qIHZlY192c2xoICovCi0KLSNkZWZpbmUgX19idWlsdGluX2FsdGl2ZWNfdnNsaCB2ZWNfdnNsaAotCi1zdGF0aWMgdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfdnNsaCh2ZWN0b3Igc2hvcnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgewotICByZXR1cm4gdmVjX3NsKF9fYSwgX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3ZzbGgodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuIHZlY19zbChfX2EsIF9fYik7Ci19Ci0KLS8qIHZlY192c2x3ICovCi0KLSNkZWZpbmUgX19idWlsdGluX2FsdGl2ZWNfdnNsdyB2ZWNfdnNsdwotCi1zdGF0aWMgdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX3ZzbHcodmVjdG9yIGludCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKLSAgcmV0dXJuIHZlY19zbChfX2EsIF9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haSB2ZWNfdnNsdyh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgewotICByZXR1cm4gdmVjX3NsKF9fYSwgX19iKTsKLX0KLQotLyogdmVjX3NsZCAqLwotCi0jZGVmaW5lIF9fYnVpbHRpbl9hbHRpdmVjX3ZzbGRvaV80c2kgdmVjX3NsZAotCi1zdGF0aWMgdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfc2xkKHZlY3RvciBzaWduZWQgY2hhciBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgY2hhciBfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNvbnN0IGludCBfX2MpIHsKLSAgdW5zaWduZWQgY2hhciBfX2QgPSBfX2MgJiAweDBGOwotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0gIHJldHVybiB2ZWNfcGVybSgKLSAgICAgIF9fYiwgX19hLAotICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgxNiAtIF9fZCwgMTcgLSBfX2QsIDE4IC0gX19kLCAxOSAtIF9fZCwgMjAgLSBfX2QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxIC0gX19kLCAyMiAtIF9fZCwgMjMgLSBfX2QsIDI0IC0gX19kLCAyNSAtIF9fZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjYgLSBfX2QsIDI3IC0gX19kLCAyOCAtIF9fZCwgMjkgLSBfX2QsIDMwIC0gX19kLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMSAtIF9fZCkpOwotI2Vsc2UKLSAgcmV0dXJuIHZlY19wZXJtKAotICAgICAgX19hLCBfX2IsCi0gICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKF9fZCwgX19kICsgMSwgX19kICsgMiwgX19kICsgMywgX19kICsgNCwgX19kICsgNSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19kICsgNiwgX19kICsgNywgX19kICsgOCwgX19kICsgOSwgX19kICsgMTAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZCArIDExLCBfX2QgKyAxMiwgX19kICsgMTMsIF9fZCArIDE0LCBfX2QgKyAxNSkpOwotI2VuZGlmCi19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX3NsZCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNvbnN0IGludCBfX2MpIHsKLSAgdW5zaWduZWQgY2hhciBfX2QgPSBfX2MgJiAweDBGOwotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0gIHJldHVybiB2ZWNfcGVybSgKLSAgICAgIF9fYiwgX19hLAotICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgxNiAtIF9fZCwgMTcgLSBfX2QsIDE4IC0gX19kLCAxOSAtIF9fZCwgMjAgLSBfX2QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxIC0gX19kLCAyMiAtIF9fZCwgMjMgLSBfX2QsIDI0IC0gX19kLCAyNSAtIF9fZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjYgLSBfX2QsIDI3IC0gX19kLCAyOCAtIF9fZCwgMjkgLSBfX2QsIDMwIC0gX19kLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMSAtIF9fZCkpOwotI2Vsc2UKLSAgcmV0dXJuIHZlY19wZXJtKAotICAgICAgX19hLCBfX2IsCi0gICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKF9fZCwgX19kICsgMSwgX19kICsgMiwgX19kICsgMywgX19kICsgNCwgX19kICsgNSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19kICsgNiwgX19kICsgNywgX19kICsgOCwgX19kICsgOSwgX19kICsgMTAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZCArIDExLCBfX2QgKyAxMiwgX19kICsgMTMsIF9fZCArIDE0LCBfX2QgKyAxNSkpOwotI2VuZGlmCi19Ci0KLXN0YXRpYyB2ZWN0b3IgYm9vbCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfc2xkKHZlY3RvciBib29sIGNoYXIgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgY2hhciBfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjb25zdCBpbnQgX19jKSB7Ci0gIHVuc2lnbmVkIGNoYXIgX19kID0gX19jICYgMHgwRjsKLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotICByZXR1cm4gdmVjX3Blcm0oCi0gICAgICBfX2IsIF9fYSwKLSAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMTYgLSBfX2QsIDE3IC0gX19kLCAxOCAtIF9fZCwgMTkgLSBfX2QsIDIwIC0gX19kLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMSAtIF9fZCwgMjIgLSBfX2QsIDIzIC0gX19kLCAyNCAtIF9fZCwgMjUgLSBfX2QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI2IC0gX19kLCAyNyAtIF9fZCwgMjggLSBfX2QsIDI5IC0gX19kLCAzMCAtIF9fZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEgLSBfX2QpKTsKLSNlbHNlCi0gIHJldHVybiB2ZWNfcGVybSgKLSAgICAgIF9fYSwgX19iLAotICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKShfX2QsIF9fZCArIDEsIF9fZCArIDIsIF9fZCArIDMsIF9fZCArIDQsIF9fZCArIDUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZCArIDYsIF9fZCArIDcsIF9fZCArIDgsIF9fZCArIDksIF9fZCArIDEwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2QgKyAxMSwgX19kICsgMTIsIF9fZCArIDEzLCBfX2QgKyAxNCwgX19kICsgMTUpKTsKLSNlbmRpZgotfQotCi1zdGF0aWMgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3NsZCh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgc2hvcnQgX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY29uc3QgaW50IF9fYykgewotICB1bnNpZ25lZCBjaGFyIF9fZCA9IF9fYyAmIDB4MEY7Ci0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSAgcmV0dXJuIHZlY19wZXJtKAotICAgICAgX19iLCBfX2EsCi0gICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDE2IC0gX19kLCAxNyAtIF9fZCwgMTggLSBfX2QsIDE5IC0gX19kLCAyMCAtIF9fZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjEgLSBfX2QsIDIyIC0gX19kLCAyMyAtIF9fZCwgMjQgLSBfX2QsIDI1IC0gX19kLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNiAtIF9fZCwgMjcgLSBfX2QsIDI4IC0gX19kLCAyOSAtIF9fZCwgMzAgLSBfX2QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxIC0gX19kKSk7Ci0jZWxzZQotICByZXR1cm4gdmVjX3Blcm0oCi0gICAgICBfX2EsIF9fYiwKLSAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoX19kLCBfX2QgKyAxLCBfX2QgKyAyLCBfX2QgKyAzLCBfX2QgKyA0LCBfX2QgKyA1LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2QgKyA2LCBfX2QgKyA3LCBfX2QgKyA4LCBfX2QgKyA5LCBfX2QgKyAxMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19kICsgMTEsIF9fZCArIDEyLCBfX2QgKyAxMywgX19kICsgMTQsIF9fZCArIDE1KSk7Ci0jZW5kaWYKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3NsZCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjb25zdCBpbnQgX19jKSB7Ci0gIHVuc2lnbmVkIGNoYXIgX19kID0gX19jICYgMHgwRjsKLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotICByZXR1cm4gdmVjX3Blcm0oCi0gICAgICBfX2IsIF9fYSwKLSAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMTYgLSBfX2QsIDE3IC0gX19kLCAxOCAtIF9fZCwgMTkgLSBfX2QsIDIwIC0gX19kLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMSAtIF9fZCwgMjIgLSBfX2QsIDIzIC0gX19kLCAyNCAtIF9fZCwgMjUgLSBfX2QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI2IC0gX19kLCAyNyAtIF9fZCwgMjggLSBfX2QsIDI5IC0gX19kLCAzMCAtIF9fZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEgLSBfX2QpKTsKLSNlbHNlCi0gIHJldHVybiB2ZWNfcGVybSgKLSAgICAgIF9fYSwgX19iLAotICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKShfX2QsIF9fZCArIDEsIF9fZCArIDIsIF9fZCArIDMsIF9fZCArIDQsIF9fZCArIDUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZCArIDYsIF9fZCArIDcsIF9fZCArIDgsIF9fZCArIDksIF9fZCArIDEwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2QgKyAxMSwgX19kICsgMTIsIF9fZCArIDEzLCBfX2QgKyAxNCwgX19kICsgMTUpKTsKLSNlbmRpZgotfQotCi1zdGF0aWMgdmVjdG9yIGJvb2wgc2hvcnQgX19BVFRSU19vX2FpIHZlY19zbGQodmVjdG9yIGJvb2wgc2hvcnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIHNob3J0IF9fYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjb25zdCBpbnQgX19jKSB7Ci0gIHVuc2lnbmVkIGNoYXIgX19kID0gX19jICYgMHgwRjsKLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotICByZXR1cm4gdmVjX3Blcm0oCi0gICAgICBfX2IsIF9fYSwKLSAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMTYgLSBfX2QsIDE3IC0gX19kLCAxOCAtIF9fZCwgMTkgLSBfX2QsIDIwIC0gX19kLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMSAtIF9fZCwgMjIgLSBfX2QsIDIzIC0gX19kLCAyNCAtIF9fZCwgMjUgLSBfX2QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI2IC0gX19kLCAyNyAtIF9fZCwgMjggLSBfX2QsIDI5IC0gX19kLCAzMCAtIF9fZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEgLSBfX2QpKTsKLSNlbHNlCi0gIHJldHVybiB2ZWNfcGVybSgKLSAgICAgIF9fYSwgX19iLAotICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKShfX2QsIF9fZCArIDEsIF9fZCArIDIsIF9fZCArIDMsIF9fZCArIDQsIF9fZCArIDUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZCArIDYsIF9fZCArIDcsIF9fZCArIDgsIF9fZCArIDksIF9fZCArIDEwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2QgKyAxMSwgX19kICsgMTIsIF9fZCArIDEzLCBfX2QgKyAxNCwgX19kICsgMTUpKTsKLSNlbmRpZgotfQotCi1zdGF0aWMgdmVjdG9yIHBpeGVsIF9fQVRUUlNfb19haSB2ZWNfc2xkKHZlY3RvciBwaXhlbCBfX2EsIHZlY3RvciBwaXhlbCBfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNvbnN0IGludCBfX2MpIHsKLSAgdW5zaWduZWQgY2hhciBfX2QgPSBfX2MgJiAweDBGOwotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0gIHJldHVybiB2ZWNfcGVybSgKLSAgICAgIF9fYiwgX19hLAotICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgxNiAtIF9fZCwgMTcgLSBfX2QsIDE4IC0gX19kLCAxOSAtIF9fZCwgMjAgLSBfX2QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxIC0gX19kLCAyMiAtIF9fZCwgMjMgLSBfX2QsIDI0IC0gX19kLCAyNSAtIF9fZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjYgLSBfX2QsIDI3IC0gX19kLCAyOCAtIF9fZCwgMjkgLSBfX2QsIDMwIC0gX19kLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMSAtIF9fZCkpOwotI2Vsc2UKLSAgcmV0dXJuIHZlY19wZXJtKAotICAgICAgX19hLCBfX2IsCi0gICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKF9fZCwgX19kICsgMSwgX19kICsgMiwgX19kICsgMywgX19kICsgNCwgX19kICsgNSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19kICsgNiwgX19kICsgNywgX19kICsgOCwgX19kICsgOSwgX19kICsgMTAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZCArIDExLCBfX2QgKyAxMiwgX19kICsgMTMsIF9fZCArIDE0LCBfX2QgKyAxNSkpOwotI2VuZGlmCi19Ci0KLXN0YXRpYyB2ZWN0b3Igc2lnbmVkIGludCBfX0FUVFJTX29fYWkgdmVjX3NsZCh2ZWN0b3Igc2lnbmVkIGludCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBpbnQgX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNvbnN0IGludCBfX2MpIHsKLSAgdW5zaWduZWQgY2hhciBfX2QgPSBfX2MgJiAweDBGOwotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0gIHJldHVybiB2ZWNfcGVybSgKLSAgICAgIF9fYiwgX19hLAotICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgxNiAtIF9fZCwgMTcgLSBfX2QsIDE4IC0gX19kLCAxOSAtIF9fZCwgMjAgLSBfX2QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxIC0gX19kLCAyMiAtIF9fZCwgMjMgLSBfX2QsIDI0IC0gX19kLCAyNSAtIF9fZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjYgLSBfX2QsIDI3IC0gX19kLCAyOCAtIF9fZCwgMjkgLSBfX2QsIDMwIC0gX19kLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMSAtIF9fZCkpOwotI2Vsc2UKLSAgcmV0dXJuIHZlY19wZXJtKAotICAgICAgX19hLCBfX2IsCi0gICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKF9fZCwgX19kICsgMSwgX19kICsgMiwgX19kICsgMywgX19kICsgNCwgX19kICsgNSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19kICsgNiwgX19kICsgNywgX19kICsgOCwgX19kICsgOSwgX19kICsgMTAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZCArIDExLCBfX2QgKyAxMiwgX19kICsgMTMsIF9fZCArIDE0LCBfX2QgKyAxNSkpOwotI2VuZGlmCi19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haSB2ZWNfc2xkKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjb25zdCBpbnQgX19jKSB7Ci0gIHVuc2lnbmVkIGNoYXIgX19kID0gX19jICYgMHgwRjsKLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotICByZXR1cm4gdmVjX3Blcm0oCi0gICAgICBfX2IsIF9fYSwKLSAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMTYgLSBfX2QsIDE3IC0gX19kLCAxOCAtIF9fZCwgMTkgLSBfX2QsIDIwIC0gX19kLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMSAtIF9fZCwgMjIgLSBfX2QsIDIzIC0gX19kLCAyNCAtIF9fZCwgMjUgLSBfX2QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI2IC0gX19kLCAyNyAtIF9fZCwgMjggLSBfX2QsIDI5IC0gX19kLCAzMCAtIF9fZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEgLSBfX2QpKTsKLSNlbHNlCi0gIHJldHVybiB2ZWNfcGVybSgKLSAgICAgIF9fYSwgX19iLAotICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKShfX2QsIF9fZCArIDEsIF9fZCArIDIsIF9fZCArIDMsIF9fZCArIDQsIF9fZCArIDUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZCArIDYsIF9fZCArIDcsIF9fZCArIDgsIF9fZCArIDksIF9fZCArIDEwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2QgKyAxMSwgX19kICsgMTIsIF9fZCArIDEzLCBfX2QgKyAxNCwgX19kICsgMTUpKTsKLSNlbmRpZgotfQotCi1zdGF0aWMgdmVjdG9yIGJvb2wgaW50IF9fQVRUUlNfb19haSB2ZWNfc2xkKHZlY3RvciBib29sIGludCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGludCBfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNvbnN0IGludCBfX2MpIHsKLSAgdW5zaWduZWQgY2hhciBfX2QgPSBfX2MgJiAweDBGOwotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0gIHJldHVybiB2ZWNfcGVybSgKLSAgICAgIF9fYiwgX19hLAotICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgxNiAtIF9fZCwgMTcgLSBfX2QsIDE4IC0gX19kLCAxOSAtIF9fZCwgMjAgLSBfX2QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxIC0gX19kLCAyMiAtIF9fZCwgMjMgLSBfX2QsIDI0IC0gX19kLCAyNSAtIF9fZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjYgLSBfX2QsIDI3IC0gX19kLCAyOCAtIF9fZCwgMjkgLSBfX2QsIDMwIC0gX19kLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMSAtIF9fZCkpOwotI2Vsc2UKLSAgcmV0dXJuIHZlY19wZXJtKAotICAgICAgX19hLCBfX2IsCi0gICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKF9fZCwgX19kICsgMSwgX19kICsgMiwgX19kICsgMywgX19kICsgNCwgX19kICsgNSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19kICsgNiwgX19kICsgNywgX19kICsgOCwgX19kICsgOSwgX19kICsgMTAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZCArIDExLCBfX2QgKyAxMiwgX19kICsgMTMsIF9fZCArIDE0LCBfX2QgKyAxNSkpOwotI2VuZGlmCi19Ci0KLXN0YXRpYyB2ZWN0b3IgZmxvYXQgX19BVFRSU19vX2FpIHZlY19zbGQodmVjdG9yIGZsb2F0IF9fYSwgdmVjdG9yIGZsb2F0IF9fYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY29uc3QgaW50IF9fYykgewotICB1bnNpZ25lZCBjaGFyIF9fZCA9IF9fYyAmIDB4MEY7Ci0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSAgcmV0dXJuIHZlY19wZXJtKAotICAgICAgX19iLCBfX2EsCi0gICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDE2IC0gX19kLCAxNyAtIF9fZCwgMTggLSBfX2QsIDE5IC0gX19kLCAyMCAtIF9fZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjEgLSBfX2QsIDIyIC0gX19kLCAyMyAtIF9fZCwgMjQgLSBfX2QsIDI1IC0gX19kLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNiAtIF9fZCwgMjcgLSBfX2QsIDI4IC0gX19kLCAyOSAtIF9fZCwgMzAgLSBfX2QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxIC0gX19kKSk7Ci0jZWxzZQotICByZXR1cm4gdmVjX3Blcm0oCi0gICAgICBfX2EsIF9fYiwKLSAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoX19kLCBfX2QgKyAxLCBfX2QgKyAyLCBfX2QgKyAzLCBfX2QgKyA0LCBfX2QgKyA1LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2QgKyA2LCBfX2QgKyA3LCBfX2QgKyA4LCBfX2QgKyA5LCBfX2QgKyAxMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19kICsgMTEsIF9fZCArIDEyLCBfX2QgKyAxMywgX19kICsgMTQsIF9fZCArIDE1KSk7Ci0jZW5kaWYKLX0KLQotLyogdmVjX3ZzbGRvaSAqLwotCi1zdGF0aWMgdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfdnNsZG9pKHZlY3RvciBzaWduZWQgY2hhciBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgY2hhciBfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgX19jKSB7Ci0gIHVuc2lnbmVkIGNoYXIgX19kID0gX19jICYgMHgwRjsKLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotICByZXR1cm4gdmVjX3Blcm0oCi0gICAgICBfX2IsIF9fYSwKLSAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMTYgLSBfX2QsIDE3IC0gX19kLCAxOCAtIF9fZCwgMTkgLSBfX2QsIDIwIC0gX19kLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMSAtIF9fZCwgMjIgLSBfX2QsIDIzIC0gX19kLCAyNCAtIF9fZCwgMjUgLSBfX2QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI2IC0gX19kLCAyNyAtIF9fZCwgMjggLSBfX2QsIDI5IC0gX19kLCAzMCAtIF9fZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEgLSBfX2QpKTsKLSNlbHNlCi0gIHJldHVybiB2ZWNfcGVybSgKLSAgICAgIF9fYSwgX19iLAotICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKShfX2QsIF9fZCArIDEsIF9fZCArIDIsIF9fZCArIDMsIF9fZCArIDQsIF9fZCArIDUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZCArIDYsIF9fZCArIDcsIF9fZCArIDgsIF9fZCArIDksIF9fZCArIDEwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2QgKyAxMSwgX19kICsgMTIsIF9fZCArIDEzLCBfX2QgKyAxNCwgX19kICsgMTUpKTsKLSNlbmRpZgotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY192c2xkb2kodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIF9fYykgewotICB1bnNpZ25lZCBjaGFyIF9fZCA9IF9fYyAmIDB4MEY7Ci0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSAgcmV0dXJuIHZlY19wZXJtKAotICAgICAgX19iLCBfX2EsCi0gICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDE2IC0gX19kLCAxNyAtIF9fZCwgMTggLSBfX2QsIDE5IC0gX19kLCAyMCAtIF9fZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjEgLSBfX2QsIDIyIC0gX19kLCAyMyAtIF9fZCwgMjQgLSBfX2QsIDI1IC0gX19kLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNiAtIF9fZCwgMjcgLSBfX2QsIDI4IC0gX19kLCAyOSAtIF9fZCwgMzAgLSBfX2QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxIC0gX19kKSk7Ci0jZWxzZQotICByZXR1cm4gdmVjX3Blcm0oCi0gICAgICBfX2EsIF9fYiwKLSAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoX19kLCBfX2QgKyAxLCBfX2QgKyAyLCBfX2QgKyAzLCBfX2QgKyA0LCBfX2QgKyA1LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2QgKyA2LCBfX2QgKyA3LCBfX2QgKyA4LCBfX2QgKyA5LCBfX2QgKyAxMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19kICsgMTEsIF9fZCArIDEyLCBfX2QgKyAxMywgX19kICsgMTQsIF9fZCArIDE1KSk7Ci0jZW5kaWYKLX0KLQotc3RhdGljIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3ZzbGRvaSh2ZWN0b3Igc2hvcnQgX19hLCB2ZWN0b3Igc2hvcnQgX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIF9fYykgewotICB1bnNpZ25lZCBjaGFyIF9fZCA9IF9fYyAmIDB4MEY7Ci0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSAgcmV0dXJuIHZlY19wZXJtKAotICAgICAgX19iLCBfX2EsCi0gICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDE2IC0gX19kLCAxNyAtIF9fZCwgMTggLSBfX2QsIDE5IC0gX19kLCAyMCAtIF9fZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjEgLSBfX2QsIDIyIC0gX19kLCAyMyAtIF9fZCwgMjQgLSBfX2QsIDI1IC0gX19kLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNiAtIF9fZCwgMjcgLSBfX2QsIDI4IC0gX19kLCAyOSAtIF9fZCwgMzAgLSBfX2QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxIC0gX19kKSk7Ci0jZWxzZQotICByZXR1cm4gdmVjX3Blcm0oCi0gICAgICBfX2EsIF9fYiwKLSAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoX19kLCBfX2QgKyAxLCBfX2QgKyAyLCBfX2QgKyAzLCBfX2QgKyA0LCBfX2QgKyA1LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2QgKyA2LCBfX2QgKyA3LCBfX2QgKyA4LCBfX2QgKyA5LCBfX2QgKyAxMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19kICsgMTEsIF9fZCArIDEyLCBfX2QgKyAxMywgX19kICsgMTQsIF9fZCArIDE1KSk7Ci0jZW5kaWYKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3ZzbGRvaSh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIF9fYykgewotICB1bnNpZ25lZCBjaGFyIF9fZCA9IF9fYyAmIDB4MEY7Ci0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSAgcmV0dXJuIHZlY19wZXJtKAotICAgICAgX19iLCBfX2EsCi0gICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDE2IC0gX19kLCAxNyAtIF9fZCwgMTggLSBfX2QsIDE5IC0gX19kLCAyMCAtIF9fZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjEgLSBfX2QsIDIyIC0gX19kLCAyMyAtIF9fZCwgMjQgLSBfX2QsIDI1IC0gX19kLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNiAtIF9fZCwgMjcgLSBfX2QsIDI4IC0gX19kLCAyOSAtIF9fZCwgMzAgLSBfX2QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxIC0gX19kKSk7Ci0jZWxzZQotICByZXR1cm4gdmVjX3Blcm0oCi0gICAgICBfX2EsIF9fYiwKLSAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoX19kLCBfX2QgKyAxLCBfX2QgKyAyLCBfX2QgKyAzLCBfX2QgKyA0LCBfX2QgKyA1LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2QgKyA2LCBfX2QgKyA3LCBfX2QgKyA4LCBfX2QgKyA5LCBfX2QgKyAxMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19kICsgMTEsIF9fZCArIDEyLCBfX2QgKyAxMywgX19kICsgMTQsIF9fZCArIDE1KSk7Ci0jZW5kaWYKLX0KLQotc3RhdGljIHZlY3RvciBwaXhlbCBfX0FUVFJTX29fYWkgdmVjX3ZzbGRvaSh2ZWN0b3IgcGl4ZWwgX19hLCB2ZWN0b3IgcGl4ZWwgX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIF9fYykgewotICB1bnNpZ25lZCBjaGFyIF9fZCA9IF9fYyAmIDB4MEY7Ci0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSAgcmV0dXJuIHZlY19wZXJtKAotICAgICAgX19iLCBfX2EsCi0gICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDE2IC0gX19kLCAxNyAtIF9fZCwgMTggLSBfX2QsIDE5IC0gX19kLCAyMCAtIF9fZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjEgLSBfX2QsIDIyIC0gX19kLCAyMyAtIF9fZCwgMjQgLSBfX2QsIDI1IC0gX19kLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNiAtIF9fZCwgMjcgLSBfX2QsIDI4IC0gX19kLCAyOSAtIF9fZCwgMzAgLSBfX2QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxIC0gX19kKSk7Ci0jZWxzZQotICByZXR1cm4gdmVjX3Blcm0oCi0gICAgICBfX2EsIF9fYiwKLSAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoX19kLCBfX2QgKyAxLCBfX2QgKyAyLCBfX2QgKyAzLCBfX2QgKyA0LCBfX2QgKyA1LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2QgKyA2LCBfX2QgKyA3LCBfX2QgKyA4LCBfX2QgKyA5LCBfX2QgKyAxMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19kICsgMTEsIF9fZCArIDEyLCBfX2QgKyAxMywgX19kICsgMTQsIF9fZCArIDE1KSk7Ci0jZW5kaWYKLX0KLQotc3RhdGljIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY192c2xkb2kodmVjdG9yIGludCBfX2EsIHZlY3RvciBpbnQgX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBfX2MpIHsKLSAgdW5zaWduZWQgY2hhciBfX2QgPSBfX2MgJiAweDBGOwotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0gIHJldHVybiB2ZWNfcGVybSgKLSAgICAgIF9fYiwgX19hLAotICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgxNiAtIF9fZCwgMTcgLSBfX2QsIDE4IC0gX19kLCAxOSAtIF9fZCwgMjAgLSBfX2QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxIC0gX19kLCAyMiAtIF9fZCwgMjMgLSBfX2QsIDI0IC0gX19kLCAyNSAtIF9fZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjYgLSBfX2QsIDI3IC0gX19kLCAyOCAtIF9fZCwgMjkgLSBfX2QsIDMwIC0gX19kLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMSAtIF9fZCkpOwotI2Vsc2UKLSAgcmV0dXJuIHZlY19wZXJtKAotICAgICAgX19hLCBfX2IsCi0gICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKF9fZCwgX19kICsgMSwgX19kICsgMiwgX19kICsgMywgX19kICsgNCwgX19kICsgNSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19kICsgNiwgX19kICsgNywgX19kICsgOCwgX19kICsgOSwgX19kICsgMTAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZCArIDExLCBfX2QgKyAxMiwgX19kICsgMTMsIF9fZCArIDE0LCBfX2QgKyAxNSkpOwotI2VuZGlmCi19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haSB2ZWNfdnNsZG9pKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIF9fYykgewotICB1bnNpZ25lZCBjaGFyIF9fZCA9IF9fYyAmIDB4MEY7Ci0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSAgcmV0dXJuIHZlY19wZXJtKAotICAgICAgX19iLCBfX2EsCi0gICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDE2IC0gX19kLCAxNyAtIF9fZCwgMTggLSBfX2QsIDE5IC0gX19kLCAyMCAtIF9fZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjEgLSBfX2QsIDIyIC0gX19kLCAyMyAtIF9fZCwgMjQgLSBfX2QsIDI1IC0gX19kLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNiAtIF9fZCwgMjcgLSBfX2QsIDI4IC0gX19kLCAyOSAtIF9fZCwgMzAgLSBfX2QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxIC0gX19kKSk7Ci0jZWxzZQotICByZXR1cm4gdmVjX3Blcm0oCi0gICAgICBfX2EsIF9fYiwKLSAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoX19kLCBfX2QgKyAxLCBfX2QgKyAyLCBfX2QgKyAzLCBfX2QgKyA0LCBfX2QgKyA1LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2QgKyA2LCBfX2QgKyA3LCBfX2QgKyA4LCBfX2QgKyA5LCBfX2QgKyAxMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19kICsgMTEsIF9fZCArIDEyLCBfX2QgKyAxMywgX19kICsgMTQsIF9fZCArIDE1KSk7Ci0jZW5kaWYKLX0KLQotc3RhdGljIHZlY3RvciBmbG9hdCBfX0FUVFJTX29fYWkgdmVjX3ZzbGRvaSh2ZWN0b3IgZmxvYXQgX19hLCB2ZWN0b3IgZmxvYXQgX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIF9fYykgewotICB1bnNpZ25lZCBjaGFyIF9fZCA9IF9fYyAmIDB4MEY7Ci0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSAgcmV0dXJuIHZlY19wZXJtKAotICAgICAgX19iLCBfX2EsCi0gICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDE2IC0gX19kLCAxNyAtIF9fZCwgMTggLSBfX2QsIDE5IC0gX19kLCAyMCAtIF9fZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjEgLSBfX2QsIDIyIC0gX19kLCAyMyAtIF9fZCwgMjQgLSBfX2QsIDI1IC0gX19kLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNiAtIF9fZCwgMjcgLSBfX2QsIDI4IC0gX19kLCAyOSAtIF9fZCwgMzAgLSBfX2QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxIC0gX19kKSk7Ci0jZWxzZQotICByZXR1cm4gdmVjX3Blcm0oCi0gICAgICBfX2EsIF9fYiwKLSAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoX19kLCBfX2QgKyAxLCBfX2QgKyAyLCBfX2QgKyAzLCBfX2QgKyA0LCBfX2QgKyA1LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2QgKyA2LCBfX2QgKyA3LCBfX2QgKyA4LCBfX2QgKyA5LCBfX2QgKyAxMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19kICsgMTEsIF9fZCArIDEyLCBfX2QgKyAxMywgX19kICsgMTQsIF9fZCArIDE1KSk7Ci0jZW5kaWYKLX0KLQotLyogdmVjX3NsbCAqLwotCi1zdGF0aWMgdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfc2xsKHZlY3RvciBzaWduZWQgY2hhciBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gKHZlY3RvciBzaWduZWQgY2hhcilfX2J1aWx0aW5fYWx0aXZlY192c2woKHZlY3RvciBpbnQpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX3NsbCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX3ZzbCgodmVjdG9yIGludClfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfc2xsKHZlY3RvciBzaWduZWQgY2hhciBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX3ZzbCgodmVjdG9yIGludClfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY19zbGwodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX3ZzbCgodmVjdG9yIGludClfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX3NsbCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgewotICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX3ZzbCgodmVjdG9yIGludClfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX3NsbCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2J1aWx0aW5fYWx0aXZlY192c2woKHZlY3RvciBpbnQpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIGJvb2wgY2hhciBfX0FUVFJTX29fYWkgdmVjX3NsbCh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gKHZlY3RvciBib29sIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfdnNsKCh2ZWN0b3IgaW50KV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIGJvb2wgY2hhciBfX0FUVFJTX29fYWkgdmVjX3NsbCh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgYm9vbCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX3ZzbCgodmVjdG9yIGludClfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciBib29sIGNoYXIgX19BVFRSU19vX2FpIHZlY19zbGwodmVjdG9yIGJvb2wgY2hhciBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgewotICByZXR1cm4gKHZlY3RvciBib29sIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfdnNsKCh2ZWN0b3IgaW50KV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfc2xsKHZlY3RvciBzaG9ydCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gKHZlY3RvciBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY192c2woKHZlY3RvciBpbnQpX19hLCAodmVjdG9yIGludClfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfc2xsKHZlY3RvciBzaG9ydCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3Igc2hvcnQpX19idWlsdGluX2FsdGl2ZWNfdnNsKCh2ZWN0b3IgaW50KV9fYSwgKHZlY3RvciBpbnQpX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3NsbCh2ZWN0b3Igc2hvcnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgewotICByZXR1cm4gKHZlY3RvciBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY192c2woKHZlY3RvciBpbnQpX19hLCAodmVjdG9yIGludClfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfc2xsKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY192c2woKHZlY3RvciBpbnQpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3NsbCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX3ZzbCgodmVjdG9yIGludClfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfc2xsKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX3ZzbCgodmVjdG9yIGludClfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIGJvb2wgc2hvcnQgX19BVFRSU19vX2FpIHZlY19zbGwodmVjdG9yIGJvb2wgc2hvcnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gKHZlY3RvciBib29sIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX3ZzbCgodmVjdG9yIGludClfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgYm9vbCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3NsbCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgewotICByZXR1cm4gKHZlY3RvciBib29sIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX3ZzbCgodmVjdG9yIGludClfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgYm9vbCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3NsbCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgYm9vbCBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY192c2woKHZlY3RvciBpbnQpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIHBpeGVsIF9fQVRUUlNfb19haSB2ZWNfc2xsKHZlY3RvciBwaXhlbCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gKHZlY3RvciBwaXhlbClfX2J1aWx0aW5fYWx0aXZlY192c2woKHZlY3RvciBpbnQpX19hLCAodmVjdG9yIGludClfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIHBpeGVsIF9fQVRUUlNfb19haSB2ZWNfc2xsKHZlY3RvciBwaXhlbCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgcGl4ZWwpX19idWlsdGluX2FsdGl2ZWNfdnNsKCh2ZWN0b3IgaW50KV9fYSwgKHZlY3RvciBpbnQpX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciBwaXhlbCBfX0FUVFJTX29fYWkgdmVjX3NsbCh2ZWN0b3IgcGl4ZWwgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgewotICByZXR1cm4gKHZlY3RvciBwaXhlbClfX2J1aWx0aW5fYWx0aXZlY192c2woKHZlY3RvciBpbnQpX19hLCAodmVjdG9yIGludClfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX3NsbCh2ZWN0b3IgaW50IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gKHZlY3RvciBpbnQpX19idWlsdGluX2FsdGl2ZWNfdnNsKF9fYSwgKHZlY3RvciBpbnQpX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY19zbGwodmVjdG9yIGludCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIGludClfX2J1aWx0aW5fYWx0aXZlY192c2woX19hLCAodmVjdG9yIGludClfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX3NsbCh2ZWN0b3IgaW50IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIGludClfX2J1aWx0aW5fYWx0aXZlY192c2woX19hLCAodmVjdG9yIGludClfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkgdmVjX3NsbCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBpbnQpX19idWlsdGluX2FsdGl2ZWNfdnNsKCh2ZWN0b3IgaW50KV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkgdmVjX3NsbCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYnVpbHRpbl9hbHRpdmVjX3ZzbCgodmVjdG9yIGludClfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpIHZlY19zbGwodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgewotICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBpbnQpX19idWlsdGluX2FsdGl2ZWNfdnNsKCh2ZWN0b3IgaW50KV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIGJvb2wgaW50IF9fQVRUUlNfb19haSB2ZWNfc2xsKHZlY3RvciBib29sIGludCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gKHZlY3RvciBib29sIGludClfX2J1aWx0aW5fYWx0aXZlY192c2woKHZlY3RvciBpbnQpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciBib29sIGludCBfX0FUVFJTX29fYWkgdmVjX3NsbCh2ZWN0b3IgYm9vbCBpbnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIGJvb2wgaW50KV9fYnVpbHRpbl9hbHRpdmVjX3ZzbCgodmVjdG9yIGludClfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIGJvb2wgaW50IF9fQVRUUlNfb19haSB2ZWNfc2xsKHZlY3RvciBib29sIGludCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIGJvb2wgaW50KV9fYnVpbHRpbl9hbHRpdmVjX3ZzbCgodmVjdG9yIGludClfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOwotfQotCi0vKiB2ZWNfdnNsICovCi0KLXN0YXRpYyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY192c2wodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX3ZzbCgodmVjdG9yIGludClfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfdnNsKHZlY3RvciBzaWduZWQgY2hhciBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfdnNsKCh2ZWN0b3IgaW50KV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY192c2wodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfdnNsKCh2ZWN0b3IgaW50KV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX3ZzbCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfdnNsKCh2ZWN0b3IgaW50KV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfdnNsKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfdnNsKCh2ZWN0b3IgaW50KV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfdnNsKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgewotICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX3ZzbCgodmVjdG9yIGludClfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgYm9vbCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfdnNsKHZlY3RvciBib29sIGNoYXIgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIGJvb2wgY2hhcilfX2J1aWx0aW5fYWx0aXZlY192c2woKHZlY3RvciBpbnQpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgYm9vbCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfdnNsKHZlY3RvciBib29sIGNoYXIgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgewotICByZXR1cm4gKHZlY3RvciBib29sIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfdnNsKCh2ZWN0b3IgaW50KV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIGJvb2wgY2hhciBfX0FUVFJTX29fYWkgdmVjX3ZzbCh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIGJvb2wgY2hhcilfX2J1aWx0aW5fYWx0aXZlY192c2woKHZlY3RvciBpbnQpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY192c2wodmVjdG9yIHNob3J0IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX3ZzbCgodmVjdG9yIGludClfX2EsICh2ZWN0b3IgaW50KV9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY192c2wodmVjdG9yIHNob3J0IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgewotICByZXR1cm4gKHZlY3RvciBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY192c2woKHZlY3RvciBpbnQpX19hLCAodmVjdG9yIGludClfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfdnNsKHZlY3RvciBzaG9ydCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX3ZzbCgodmVjdG9yIGludClfX2EsICh2ZWN0b3IgaW50KV9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpIHZlY192c2wodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX3ZzbCgodmVjdG9yIGludClfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfdnNsKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19idWlsdGluX2FsdGl2ZWNfdnNsKCh2ZWN0b3IgaW50KV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpIHZlY192c2wodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19idWlsdGluX2FsdGl2ZWNfdnNsKCh2ZWN0b3IgaW50KV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgYm9vbCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3ZzbCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIGJvb2wgc2hvcnQpX19idWlsdGluX2FsdGl2ZWNfdnNsKCh2ZWN0b3IgaW50KV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciBib29sIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfdnNsKHZlY3RvciBib29sIHNob3J0IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIGJvb2wgc2hvcnQpX19idWlsdGluX2FsdGl2ZWNfdnNsKCh2ZWN0b3IgaW50KV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciBib29sIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfdnNsKHZlY3RvciBib29sIHNob3J0IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgewotICByZXR1cm4gKHZlY3RvciBib29sIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX3ZzbCgodmVjdG9yIGludClfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgcGl4ZWwgX19BVFRSU19vX2FpIHZlY192c2wodmVjdG9yIHBpeGVsIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHBpeGVsKV9fYnVpbHRpbl9hbHRpdmVjX3ZzbCgodmVjdG9yIGludClfX2EsICh2ZWN0b3IgaW50KV9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgcGl4ZWwgX19BVFRSU19vX2FpIHZlY192c2wodmVjdG9yIHBpeGVsIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgewotICByZXR1cm4gKHZlY3RvciBwaXhlbClfX2J1aWx0aW5fYWx0aXZlY192c2woKHZlY3RvciBpbnQpX19hLCAodmVjdG9yIGludClfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIHBpeGVsIF9fQVRUUlNfb19haSB2ZWNfdnNsKHZlY3RvciBwaXhlbCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHBpeGVsKV9fYnVpbHRpbl9hbHRpdmVjX3ZzbCgodmVjdG9yIGludClfX2EsICh2ZWN0b3IgaW50KV9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfdnNsKHZlY3RvciBpbnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIGludClfX2J1aWx0aW5fYWx0aXZlY192c2woX19hLCAodmVjdG9yIGludClfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX3ZzbCh2ZWN0b3IgaW50IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgaW50KV9fYnVpbHRpbl9hbHRpdmVjX3ZzbChfX2EsICh2ZWN0b3IgaW50KV9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfdnNsKHZlY3RvciBpbnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgaW50KV9fYnVpbHRpbl9hbHRpdmVjX3ZzbChfX2EsICh2ZWN0b3IgaW50KV9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haSB2ZWNfdnNsKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGludClfX2J1aWx0aW5fYWx0aXZlY192c2woKHZlY3RvciBpbnQpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haSB2ZWNfdnNsKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgewotICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBpbnQpX19idWlsdGluX2FsdGl2ZWNfdnNsKCh2ZWN0b3IgaW50KV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkgdmVjX3ZzbCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGludClfX2J1aWx0aW5fYWx0aXZlY192c2woKHZlY3RvciBpbnQpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgYm9vbCBpbnQgX19BVFRSU19vX2FpIHZlY192c2wodmVjdG9yIGJvb2wgaW50IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIGJvb2wgaW50KV9fYnVpbHRpbl9hbHRpdmVjX3ZzbCgodmVjdG9yIGludClfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIGJvb2wgaW50IF9fQVRUUlNfb19haSB2ZWNfdnNsKHZlY3RvciBib29sIGludCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgYm9vbCBpbnQpX19idWlsdGluX2FsdGl2ZWNfdnNsKCh2ZWN0b3IgaW50KV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgYm9vbCBpbnQgX19BVFRSU19vX2FpIHZlY192c2wodmVjdG9yIGJvb2wgaW50IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgYm9vbCBpbnQpX19idWlsdGluX2FsdGl2ZWNfdnNsKCh2ZWN0b3IgaW50KV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Ci19Ci0KLS8qIHZlY19zbG8gKi8KLQotc3RhdGljIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX3Nsbyh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX3ZzbG8oKHZlY3RvciBpbnQpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY19zbG8odmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX3ZzbG8oKHZlY3RvciBpbnQpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX3Nsbyh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX3ZzbG8oKHZlY3RvciBpbnQpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfc2xvKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2J1aWx0aW5fYWx0aXZlY192c2xvKCh2ZWN0b3IgaW50KV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY19zbG8odmVjdG9yIHNob3J0IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gKHZlY3RvciBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY192c2xvKCh2ZWN0b3IgaW50KV9fYSwgKHZlY3RvciBpbnQpX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3Nsbyh2ZWN0b3Igc2hvcnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3Igc2hvcnQpX19idWlsdGluX2FsdGl2ZWNfdnNsbygodmVjdG9yIGludClfX2EsICh2ZWN0b3IgaW50KV9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpIHZlY19zbG8odmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY192c2xvKCh2ZWN0b3IgaW50KV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfc2xvKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY192c2xvKCh2ZWN0b3IgaW50KV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIHBpeGVsIF9fQVRUUlNfb19haSB2ZWNfc2xvKHZlY3RvciBwaXhlbCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgcGl4ZWwpX19idWlsdGluX2FsdGl2ZWNfdnNsbygodmVjdG9yIGludClfX2EsICh2ZWN0b3IgaW50KV9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgcGl4ZWwgX19BVFRSU19vX2FpIHZlY19zbG8odmVjdG9yIHBpeGVsIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHBpeGVsKV9fYnVpbHRpbl9hbHRpdmVjX3ZzbG8oKHZlY3RvciBpbnQpX19hLCAodmVjdG9yIGludClfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX3Nsbyh2ZWN0b3IgaW50IF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gKHZlY3RvciBpbnQpX19idWlsdGluX2FsdGl2ZWNfdnNsbyhfX2EsICh2ZWN0b3IgaW50KV9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfc2xvKHZlY3RvciBpbnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIGludClfX2J1aWx0aW5fYWx0aXZlY192c2xvKF9fYSwgKHZlY3RvciBpbnQpX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpIHZlY19zbG8odmVjdG9yIHVuc2lnbmVkIGludCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGludClfX2J1aWx0aW5fYWx0aXZlY192c2xvKCh2ZWN0b3IgaW50KV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpIHZlY19zbG8odmVjdG9yIHVuc2lnbmVkIGludCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYnVpbHRpbl9hbHRpdmVjX3ZzbG8oKHZlY3RvciBpbnQpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIGZsb2F0IF9fQVRUUlNfb19haSB2ZWNfc2xvKHZlY3RvciBmbG9hdCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgZmxvYXQpX19idWlsdGluX2FsdGl2ZWNfdnNsbygodmVjdG9yIGludClfX2EsICh2ZWN0b3IgaW50KV9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgZmxvYXQgX19BVFRSU19vX2FpIHZlY19zbG8odmVjdG9yIGZsb2F0IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIGZsb2F0KV9fYnVpbHRpbl9hbHRpdmVjX3ZzbG8oKHZlY3RvciBpbnQpX19hLCAodmVjdG9yIGludClfX2IpOwotfQotCi0vKiB2ZWNfdnNsbyAqLwotCi1zdGF0aWMgdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfdnNsbyh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gKHZlY3RvciBzaWduZWQgY2hhcilfX2J1aWx0aW5fYWx0aXZlY192c2xvKCh2ZWN0b3IgaW50KV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfdnNsbyh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX3ZzbG8oKHZlY3RvciBpbnQpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX3ZzbG8odmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfdnNsbygodmVjdG9yIGludClfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY192c2xvKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfdnNsbygodmVjdG9yIGludClfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfdnNsbyh2ZWN0b3Igc2hvcnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gKHZlY3RvciBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY192c2xvKCh2ZWN0b3IgaW50KV9fYSwgKHZlY3RvciBpbnQpX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3ZzbG8odmVjdG9yIHNob3J0IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gKHZlY3RvciBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY192c2xvKCh2ZWN0b3IgaW50KV9fYSwgKHZlY3RvciBpbnQpX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3ZzbG8odmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19idWlsdGluX2FsdGl2ZWNfdnNsbygodmVjdG9yIGludClfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3ZzbG8odmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY192c2xvKCh2ZWN0b3IgaW50KV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIHBpeGVsIF9fQVRUUlNfb19haSB2ZWNfdnNsbyh2ZWN0b3IgcGl4ZWwgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gKHZlY3RvciBwaXhlbClfX2J1aWx0aW5fYWx0aXZlY192c2xvKCh2ZWN0b3IgaW50KV9fYSwgKHZlY3RvciBpbnQpX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciBwaXhlbCBfX0FUVFJTX29fYWkgdmVjX3ZzbG8odmVjdG9yIHBpeGVsIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gKHZlY3RvciBwaXhlbClfX2J1aWx0aW5fYWx0aXZlY192c2xvKCh2ZWN0b3IgaW50KV9fYSwgKHZlY3RvciBpbnQpX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY192c2xvKHZlY3RvciBpbnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgaW50KV9fYnVpbHRpbl9hbHRpdmVjX3ZzbG8oX19hLCAodmVjdG9yIGludClfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX3ZzbG8odmVjdG9yIGludCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIGludClfX2J1aWx0aW5fYWx0aXZlY192c2xvKF9fYSwgKHZlY3RvciBpbnQpX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpIHZlY192c2xvKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYnVpbHRpbl9hbHRpdmVjX3ZzbG8oKHZlY3RvciBpbnQpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkgdmVjX3ZzbG8odmVjdG9yIHVuc2lnbmVkIGludCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGludClfX2J1aWx0aW5fYWx0aXZlY192c2xvKCh2ZWN0b3IgaW50KV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciBmbG9hdCBfX0FUVFJTX29fYWkgdmVjX3ZzbG8odmVjdG9yIGZsb2F0IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgZmxvYXQpX19idWlsdGluX2FsdGl2ZWNfdnNsbygodmVjdG9yIGludClfX2EsICh2ZWN0b3IgaW50KV9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgZmxvYXQgX19BVFRSU19vX2FpIHZlY192c2xvKHZlY3RvciBmbG9hdCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgZmxvYXQpX19idWlsdGluX2FsdGl2ZWNfdnNsbygodmVjdG9yIGludClfX2EsICh2ZWN0b3IgaW50KV9fYik7Ci19Ci0KLS8qIHZlY19zcGxhdCAqLwotCi1zdGF0aWMgdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfc3BsYXQodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjb25zdCBpbnQgX19iKSB7Ci0gIHJldHVybiB2ZWNfcGVybShfX2EsIF9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKShfX2IgJiAweDBGKSk7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX3NwbGF0KHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNvbnN0IGludCBfX2IpIHsKLSAgcmV0dXJuIHZlY19wZXJtKF9fYSwgX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKF9fYiAmIDB4MEYpKTsKLX0KLQotc3RhdGljIHZlY3RvciBib29sIGNoYXIgX19BVFRSU19vX2FpIHZlY19zcGxhdCh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY29uc3QgaW50IF9fYikgewotICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoX19iICYgMHgwRikpOwotfQotCi1zdGF0aWMgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3NwbGF0KHZlY3RvciBzaWduZWQgc2hvcnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjb25zdCBpbnQgX19iKSB7Ci0gIHVuc2lnbmVkIGNoYXIgYjAgPSAoX19iICYgMHgwNykgKiAyOwotICB1bnNpZ25lZCBjaGFyIGIxID0gYjAgKyAxOwotICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2EsCi0gICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKGIwLCBiMSwgYjAsIGIxLCBiMCwgYjEsIGIwLCBiMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYjAsIGIxLCBiMCwgYjEsIGIwLCBiMSwgYjAsIGIxKSk7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpIHZlY19zcGxhdCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNvbnN0IGludCBfX2IpIHsKLSAgdW5zaWduZWQgY2hhciBiMCA9IChfX2IgJiAweDA3KSAqIDI7Ci0gIHVuc2lnbmVkIGNoYXIgYjEgPSBiMCArIDE7Ci0gIHJldHVybiB2ZWNfcGVybShfX2EsIF9fYSwKLSAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoYjAsIGIxLCBiMCwgYjEsIGIwLCBiMSwgYjAsIGIxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiMCwgYjEsIGIwLCBiMSwgYjAsIGIxLCBiMCwgYjEpKTsKLX0KLQotc3RhdGljIHZlY3RvciBib29sIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfc3BsYXQodmVjdG9yIGJvb2wgc2hvcnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY29uc3QgaW50IF9fYikgewotICB1bnNpZ25lZCBjaGFyIGIwID0gKF9fYiAmIDB4MDcpICogMjsKLSAgdW5zaWduZWQgY2hhciBiMSA9IGIwICsgMTsKLSAgcmV0dXJuIHZlY19wZXJtKF9fYSwgX19hLAotICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKShiMCwgYjEsIGIwLCBiMSwgYjAsIGIxLCBiMCwgYjEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIwLCBiMSwgYjAsIGIxLCBiMCwgYjEsIGIwLCBiMSkpOwotfQotCi1zdGF0aWMgdmVjdG9yIHBpeGVsIF9fQVRUUlNfb19haSB2ZWNfc3BsYXQodmVjdG9yIHBpeGVsIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjb25zdCBpbnQgX19iKSB7Ci0gIHVuc2lnbmVkIGNoYXIgYjAgPSAoX19iICYgMHgwNykgKiAyOwotICB1bnNpZ25lZCBjaGFyIGIxID0gYjAgKyAxOwotICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2EsCi0gICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKGIwLCBiMSwgYjAsIGIxLCBiMCwgYjEsIGIwLCBiMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYjAsIGIxLCBiMCwgYjEsIGIwLCBiMSwgYjAsIGIxKSk7Ci19Ci0KLXN0YXRpYyB2ZWN0b3Igc2lnbmVkIGludCBfX0FUVFJTX29fYWkgdmVjX3NwbGF0KHZlY3RvciBzaWduZWQgaW50IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNvbnN0IGludCBfX2IpIHsKLSAgdW5zaWduZWQgY2hhciBiMCA9IChfX2IgJiAweDAzKSAqIDQ7Ci0gIHVuc2lnbmVkIGNoYXIgYjEgPSBiMCArIDEsIGIyID0gYjAgKyAyLCBiMyA9IGIwICsgMzsKLSAgcmV0dXJuIHZlY19wZXJtKF9fYSwgX19hLAotICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKShiMCwgYjEsIGIyLCBiMywgYjAsIGIxLCBiMiwgYjMsIGIwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiMSwgYjIsIGIzLCBiMCwgYjEsIGIyLCBiMykpOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkgdmVjX3NwbGF0KHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjb25zdCBpbnQgX19iKSB7Ci0gIHVuc2lnbmVkIGNoYXIgYjAgPSAoX19iICYgMHgwMykgKiA0OwotICB1bnNpZ25lZCBjaGFyIGIxID0gYjAgKyAxLCBiMiA9IGIwICsgMiwgYjMgPSBiMCArIDM7Ci0gIHJldHVybiB2ZWNfcGVybShfX2EsIF9fYSwKLSAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoYjAsIGIxLCBiMiwgYjMsIGIwLCBiMSwgYjIsIGIzLCBiMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYjEsIGIyLCBiMywgYjAsIGIxLCBiMiwgYjMpKTsKLX0KLQotc3RhdGljIHZlY3RvciBib29sIGludCBfX0FUVFJTX29fYWkgdmVjX3NwbGF0KHZlY3RvciBib29sIGludCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY29uc3QgaW50IF9fYikgewotICB1bnNpZ25lZCBjaGFyIGIwID0gKF9fYiAmIDB4MDMpICogNDsKLSAgdW5zaWduZWQgY2hhciBiMSA9IGIwICsgMSwgYjIgPSBiMCArIDIsIGIzID0gYjAgKyAzOwotICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2EsCi0gICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKGIwLCBiMSwgYjIsIGIzLCBiMCwgYjEsIGIyLCBiMywgYjAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIxLCBiMiwgYjMsIGIwLCBiMSwgYjIsIGIzKSk7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgZmxvYXQgX19BVFRSU19vX2FpIHZlY19zcGxhdCh2ZWN0b3IgZmxvYXQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNvbnN0IGludCBfX2IpIHsKLSAgdW5zaWduZWQgY2hhciBiMCA9IChfX2IgJiAweDAzKSAqIDQ7Ci0gIHVuc2lnbmVkIGNoYXIgYjEgPSBiMCArIDEsIGIyID0gYjAgKyAyLCBiMyA9IGIwICsgMzsKLSAgcmV0dXJuIHZlY19wZXJtKF9fYSwgX19hLAotICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKShiMCwgYjEsIGIyLCBiMywgYjAsIGIxLCBiMiwgYjMsIGIwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiMSwgYjIsIGIzLCBiMCwgYjEsIGIyLCBiMykpOwotfQotCi0jaWZkZWYgX19WU1hfXwotc3RhdGljIHZlY3RvciBkb3VibGUgX19BVFRSU19vX2FpIHZlY19zcGxhdCh2ZWN0b3IgZG91YmxlIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY29uc3QgaW50IF9fYikgewotICB1bnNpZ25lZCBjaGFyIGIwID0gKF9fYiAmIDB4MDEpICogODsKLSAgdW5zaWduZWQgY2hhciBiMSA9IGIwICsgMSwgYjIgPSBiMCArIDIsIGIzID0gYjAgKyAzLCBiNCA9IGIwICsgNCwKLSAgICAgICAgICAgICAgICBiNSA9IGIwICsgNSwgYjYgPSBiMCArIDYsIGI3ID0gYjAgKyA3OwotICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2EsCi0gICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKGIwLCBiMSwgYjIsIGIzLCBiNCwgYjUsIGI2LCBiNywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYjAsIGIxLCBiMiwgYjMsIGI0LCBiNSwgYjYsIGI3KSk7Ci19Ci1zdGF0aWMgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fQVRUUlNfb19haSB2ZWNfc3BsYXQodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjb25zdCBpbnQgX19iKSB7Ci0gIHVuc2lnbmVkIGNoYXIgYjAgPSAoX19iICYgMHgwMSkgKiA4OwotICB1bnNpZ25lZCBjaGFyIGIxID0gYjAgKyAxLCBiMiA9IGIwICsgMiwgYjMgPSBiMCArIDMsIGI0ID0gYjAgKyA0LAotICAgICAgICAgICAgICAgIGI1ID0gYjAgKyA1LCBiNiA9IGIwICsgNiwgYjcgPSBiMCArIDc7Ci0gIHJldHVybiB2ZWNfcGVybShfX2EsIF9fYSwKLSAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoYjAsIGIxLCBiMiwgYjMsIGI0LCBiNSwgYjYsIGI3LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiMCwgYjEsIGIyLCBiMywgYjQsIGI1LCBiNiwgYjcpKTsKLX0KLXN0YXRpYyB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKLXZlY19zcGxhdCh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHVuc2lnbmVkIGNvbnN0IGludCBfX2IpIHsKLSAgdW5zaWduZWQgY2hhciBiMCA9IChfX2IgJiAweDAxKSAqIDg7Ci0gIHVuc2lnbmVkIGNoYXIgYjEgPSBiMCArIDEsIGIyID0gYjAgKyAyLCBiMyA9IGIwICsgMywgYjQgPSBiMCArIDQsCi0gICAgICAgICAgICAgICAgYjUgPSBiMCArIDUsIGI2ID0gYjAgKyA2LCBiNyA9IGIwICsgNzsKLSAgcmV0dXJuIHZlY19wZXJtKF9fYSwgX19hLAotICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKShiMCwgYjEsIGIyLCBiMywgYjQsIGI1LCBiNiwgYjcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIwLCBiMSwgYjIsIGIzLCBiNCwgYjUsIGI2LCBiNykpOwotfQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCi12ZWNfc3BsYXQodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHVuc2lnbmVkIGNvbnN0IGludCBfX2IpIHsKLSAgdW5zaWduZWQgY2hhciBiMCA9IChfX2IgJiAweDAxKSAqIDg7Ci0gIHVuc2lnbmVkIGNoYXIgYjEgPSBiMCArIDEsIGIyID0gYjAgKyAyLCBiMyA9IGIwICsgMywgYjQgPSBiMCArIDQsCi0gICAgICAgICAgICAgICAgYjUgPSBiMCArIDUsIGI2ID0gYjAgKyA2LCBiNyA9IGIwICsgNzsKLSAgcmV0dXJuIHZlY19wZXJtKF9fYSwgX19hLAotICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKShiMCwgYjEsIGIyLCBiMywgYjQsIGI1LCBiNiwgYjcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIwLCBiMSwgYjIsIGIzLCBiNCwgYjUsIGI2LCBiNykpOwotfQotI2VuZGlmCi0KLS8qIHZlY192c3BsdGIgKi8KLQotI2RlZmluZSBfX2J1aWx0aW5fYWx0aXZlY192c3BsdGIgdmVjX3ZzcGx0YgotCi1zdGF0aWMgdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfdnNwbHRiKHZlY3RvciBzaWduZWQgY2hhciBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgX19iKSB7Ci0gIHJldHVybiB2ZWNfcGVybShfX2EsIF9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKShfX2IpKTsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfdnNwbHRiKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoX19iKSk7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgYm9vbCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfdnNwbHRiKHZlY3RvciBib29sIGNoYXIgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBfX2IpIHsKLSAgcmV0dXJuIHZlY19wZXJtKF9fYSwgX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKF9fYikpOwotfQotCi0vKiB2ZWNfdnNwbHRoICovCi0KLSNkZWZpbmUgX19idWlsdGluX2FsdGl2ZWNfdnNwbHRoIHZlY192c3BsdGgKLQotc3RhdGljIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3ZzcGx0aCh2ZWN0b3Igc2hvcnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIF9fYikgewotICBfX2IgKj0gMjsKLSAgdW5zaWduZWQgY2hhciBiMSA9IF9fYiArIDE7Ci0gIHJldHVybiB2ZWNfcGVybShfX2EsIF9fYSwKLSAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoX19iLCBiMSwgX19iLCBiMSwgX19iLCBiMSwgX19iLCBiMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19iLCBiMSwgX19iLCBiMSwgX19iLCBiMSwgX19iLCBiMSkpOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfdnNwbHRoKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgX19iKSB7Ci0gIF9fYiAqPSAyOwotICB1bnNpZ25lZCBjaGFyIGIxID0gX19iICsgMTsKLSAgcmV0dXJuIHZlY19wZXJtKF9fYSwgX19hLAotICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKShfX2IsIGIxLCBfX2IsIGIxLCBfX2IsIGIxLCBfX2IsIGIxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2IsIGIxLCBfX2IsIGIxLCBfX2IsIGIxLCBfX2IsIGIxKSk7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgYm9vbCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3ZzcGx0aCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBfX2IpIHsKLSAgX19iICo9IDI7Ci0gIHVuc2lnbmVkIGNoYXIgYjEgPSBfX2IgKyAxOwotICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2EsCi0gICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKF9fYiwgYjEsIF9fYiwgYjEsIF9fYiwgYjEsIF9fYiwgYjEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYiwgYjEsIF9fYiwgYjEsIF9fYiwgYjEsIF9fYiwgYjEpKTsKLX0KLQotc3RhdGljIHZlY3RvciBwaXhlbCBfX0FUVFJTX29fYWkgdmVjX3ZzcGx0aCh2ZWN0b3IgcGl4ZWwgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIF9fYikgewotICBfX2IgKj0gMjsKLSAgdW5zaWduZWQgY2hhciBiMSA9IF9fYiArIDE7Ci0gIHJldHVybiB2ZWNfcGVybShfX2EsIF9fYSwKLSAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoX19iLCBiMSwgX19iLCBiMSwgX19iLCBiMSwgX19iLCBiMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19iLCBiMSwgX19iLCBiMSwgX19iLCBiMSwgX19iLCBiMSkpOwotfQotCi0vKiB2ZWNfdnNwbHR3ICovCi0KLSNkZWZpbmUgX19idWlsdGluX2FsdGl2ZWNfdnNwbHR3IHZlY192c3BsdHcKLQotc3RhdGljIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY192c3BsdHcodmVjdG9yIGludCBfX2EsIHVuc2lnbmVkIGNoYXIgX19iKSB7Ci0gIF9fYiAqPSA0OwotICB1bnNpZ25lZCBjaGFyIGIxID0gX19iICsgMSwgYjIgPSBfX2IgKyAyLCBiMyA9IF9fYiArIDM7Ci0gIHJldHVybiB2ZWNfcGVybShfX2EsIF9fYSwKLSAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoX19iLCBiMSwgYjIsIGIzLCBfX2IsIGIxLCBiMiwgYjMsIF9fYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYjEsIGIyLCBiMywgX19iLCBiMSwgYjIsIGIzKSk7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haSB2ZWNfdnNwbHR3KHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBfX2IpIHsKLSAgX19iICo9IDQ7Ci0gIHVuc2lnbmVkIGNoYXIgYjEgPSBfX2IgKyAxLCBiMiA9IF9fYiArIDIsIGIzID0gX19iICsgMzsKLSAgcmV0dXJuIHZlY19wZXJtKF9fYSwgX19hLAotICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKShfX2IsIGIxLCBiMiwgYjMsIF9fYiwgYjEsIGIyLCBiMywgX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiMSwgYjIsIGIzLCBfX2IsIGIxLCBiMiwgYjMpKTsKLX0KLQotc3RhdGljIHZlY3RvciBib29sIGludCBfX0FUVFJTX29fYWkgdmVjX3ZzcGx0dyh2ZWN0b3IgYm9vbCBpbnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIF9fYikgewotICBfX2IgKj0gNDsKLSAgdW5zaWduZWQgY2hhciBiMSA9IF9fYiArIDEsIGIyID0gX19iICsgMiwgYjMgPSBfX2IgKyAzOwotICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2EsCi0gICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKF9fYiwgYjEsIGIyLCBiMywgX19iLCBiMSwgYjIsIGIzLCBfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIxLCBiMiwgYjMsIF9fYiwgYjEsIGIyLCBiMykpOwotfQotCi1zdGF0aWMgdmVjdG9yIGZsb2F0IF9fQVRUUlNfb19haSB2ZWNfdnNwbHR3KHZlY3RvciBmbG9hdCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgX19iKSB7Ci0gIF9fYiAqPSA0OwotICB1bnNpZ25lZCBjaGFyIGIxID0gX19iICsgMSwgYjIgPSBfX2IgKyAyLCBiMyA9IF9fYiArIDM7Ci0gIHJldHVybiB2ZWNfcGVybShfX2EsIF9fYSwKLSAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoX19iLCBiMSwgYjIsIGIzLCBfX2IsIGIxLCBiMiwgYjMsIF9fYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYjEsIGIyLCBiMywgX19iLCBiMSwgYjIsIGIzKSk7Ci19Ci0KLS8qIHZlY19zcGxhdF9zOCAqLwotCi0jZGVmaW5lIF9fYnVpbHRpbl9hbHRpdmVjX3ZzcGx0aXNiIHZlY19zcGxhdF9zOAotCi0vLyBGSVhNRTogcGFyYW1ldGVyIHNob3VsZCBiZSB0cmVhdGVkIGFzIDUtYml0IHNpZ25lZCBsaXRlcmFsCi1zdGF0aWMgdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfc3BsYXRfczgoc2lnbmVkIGNoYXIgX19hKSB7Ci0gIHJldHVybiAodmVjdG9yIHNpZ25lZCBjaGFyKShfX2EpOwotfQotCi0vKiB2ZWNfdnNwbHRpc2IgKi8KLQotLy8gRklYTUU6IHBhcmFtZXRlciBzaG91bGQgYmUgdHJlYXRlZCBhcyA1LWJpdCBzaWduZWQgbGl0ZXJhbAotc3RhdGljIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX3ZzcGx0aXNiKHNpZ25lZCBjaGFyIF9fYSkgewotICByZXR1cm4gKHZlY3RvciBzaWduZWQgY2hhcikoX19hKTsKLX0KLQotLyogdmVjX3NwbGF0X3MxNiAqLwotCi0jZGVmaW5lIF9fYnVpbHRpbl9hbHRpdmVjX3ZzcGx0aXNoIHZlY19zcGxhdF9zMTYKLQotLy8gRklYTUU6IHBhcmFtZXRlciBzaG91bGQgYmUgdHJlYXRlZCBhcyA1LWJpdCBzaWduZWQgbGl0ZXJhbAotc3RhdGljIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3NwbGF0X3MxNihzaWduZWQgY2hhciBfX2EpIHsKLSAgcmV0dXJuICh2ZWN0b3Igc2hvcnQpKF9fYSk7Ci19Ci0KLS8qIHZlY192c3BsdGlzaCAqLwotCi0vLyBGSVhNRTogcGFyYW1ldGVyIHNob3VsZCBiZSB0cmVhdGVkIGFzIDUtYml0IHNpZ25lZCBsaXRlcmFsCi1zdGF0aWMgdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfdnNwbHRpc2goc2lnbmVkIGNoYXIgX19hKSB7Ci0gIHJldHVybiAodmVjdG9yIHNob3J0KShfX2EpOwotfQotCi0vKiB2ZWNfc3BsYXRfczMyICovCi0KLSNkZWZpbmUgX19idWlsdGluX2FsdGl2ZWNfdnNwbHRpc3cgdmVjX3NwbGF0X3MzMgotCi0vLyBGSVhNRTogcGFyYW1ldGVyIHNob3VsZCBiZSB0cmVhdGVkIGFzIDUtYml0IHNpZ25lZCBsaXRlcmFsCi1zdGF0aWMgdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX3NwbGF0X3MzMihzaWduZWQgY2hhciBfX2EpIHsKLSAgcmV0dXJuICh2ZWN0b3IgaW50KShfX2EpOwotfQotCi0vKiB2ZWNfdnNwbHRpc3cgKi8KLQotLy8gRklYTUU6IHBhcmFtZXRlciBzaG91bGQgYmUgdHJlYXRlZCBhcyA1LWJpdCBzaWduZWQgbGl0ZXJhbAotc3RhdGljIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY192c3BsdGlzdyhzaWduZWQgY2hhciBfX2EpIHsKLSAgcmV0dXJuICh2ZWN0b3IgaW50KShfX2EpOwotfQotCi0vKiB2ZWNfc3BsYXRfdTggKi8KLQotLy8gRklYTUU6IHBhcmFtZXRlciBzaG91bGQgYmUgdHJlYXRlZCBhcyA1LWJpdCBzaWduZWQgbGl0ZXJhbAotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfc3BsYXRfdTgodW5zaWduZWQgY2hhciBfX2EpIHsKLSAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoX19hKTsKLX0KLQotLyogdmVjX3NwbGF0X3UxNiAqLwotCi0vLyBGSVhNRTogcGFyYW1ldGVyIHNob3VsZCBiZSB0cmVhdGVkIGFzIDUtYml0IHNpZ25lZCBsaXRlcmFsCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfc3BsYXRfdTE2KHNpZ25lZCBjaGFyIF9fYSkgewotICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBzaG9ydCkoX19hKTsKLX0KLQotLyogdmVjX3NwbGF0X3UzMiAqLwotCi0vLyBGSVhNRTogcGFyYW1ldGVyIHNob3VsZCBiZSB0cmVhdGVkIGFzIDUtYml0IHNpZ25lZCBsaXRlcmFsCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkgdmVjX3NwbGF0X3UzMihzaWduZWQgY2hhciBfX2EpIHsKLSAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgaW50KShfX2EpOwotfQotCi0vKiB2ZWNfc3IgKi8KLQotc3RhdGljIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX3NyKHZlY3RvciBzaWduZWQgY2hhciBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7Ci0gIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fcmVzID0gKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSA+PiBfX2I7Ci0gIHJldHVybiAodmVjdG9yIHNpZ25lZCBjaGFyKV9fcmVzOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY19zcih2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKLSAgcmV0dXJuIF9fYSA+PiBfX2I7Ci19Ci0KLXN0YXRpYyB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfc3IodmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgewotICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19yZXMgPSAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSA+PiBfX2I7Ci0gIHJldHVybiAodmVjdG9yIHNpZ25lZCBzaG9ydClfX3JlczsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3NyKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgewotICByZXR1cm4gX19hID4+IF9fYjsKLX0KLQotc3RhdGljIHZlY3RvciBzaWduZWQgaW50IF9fQVRUUlNfb19haSB2ZWNfc3IodmVjdG9yIHNpZ25lZCBpbnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKLSAgdmVjdG9yIHVuc2lnbmVkIGludCBfX3JlcyA9ICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSA+PiBfX2I7Ci0gIHJldHVybiAodmVjdG9yIHNpZ25lZCBpbnQpX19yZXM7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haSB2ZWNfc3IodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7Ci0gIHJldHVybiBfX2EgPj4gX19iOwotfQotCi0jaWZkZWYgX19QT1dFUjhfVkVDVE9SX18KLXN0YXRpYyB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKLXZlY19zcih2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7Ci0gIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19yZXMgPSAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2EgPj4gX19iOwotICByZXR1cm4gKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fcmVzOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKLXZlY19zcih2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKLSAgcmV0dXJuIF9fYSA+PiBfX2I7Ci19Ci0jZW5kaWYKLQotLyogdmVjX3ZzcmIgKi8KLQotI2RlZmluZSBfX2J1aWx0aW5fYWx0aXZlY192c3JiIHZlY192c3JiCi0KLXN0YXRpYyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY192c3JiKHZlY3RvciBzaWduZWQgY2hhciBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKLSAgcmV0dXJuIF9fYSA+PiAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYjsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfdnNyYih2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gX19hID4+IF9fYjsKLX0KLQotLyogdmVjX3ZzcmggKi8KLQotI2RlZmluZSBfX2J1aWx0aW5fYWx0aXZlY192c3JoIHZlY192c3JoCi0KLXN0YXRpYyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY192c3JoKHZlY3RvciBzaG9ydCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7Ci0gIHJldHVybiBfX2EgPj4gKHZlY3RvciBzaG9ydClfX2I7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpIHZlY192c3JoKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7Ci0gIHJldHVybiBfX2EgPj4gX19iOwotfQotCi0vKiB2ZWNfdnNydyAqLwotCi0jZGVmaW5lIF9fYnVpbHRpbl9hbHRpdmVjX3ZzcncgdmVjX3ZzcncKLQotc3RhdGljIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY192c3J3KHZlY3RvciBpbnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7Ci0gIHJldHVybiBfX2EgPj4gKHZlY3RvciBpbnQpX19iOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkgdmVjX3ZzcncodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKLSAgcmV0dXJuIF9fYSA+PiBfX2I7Ci19Ci0KLS8qIHZlY19zcmEgKi8KLQotc3RhdGljIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX3NyYSh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfdnNyYWIoKHZlY3RvciBjaGFyKV9fYSwgX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfc3JhKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2J1aWx0aW5fYWx0aXZlY192c3JhYigodmVjdG9yIGNoYXIpX19hLCBfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfc3JhKHZlY3RvciBzaG9ydCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZzcmFoKF9fYSwgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfc3JhKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19idWlsdGluX2FsdGl2ZWNfdnNyYWgoKHZlY3RvciBzaG9ydClfX2EsIF9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfc3JhKHZlY3RvciBpbnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZzcmF3KF9fYSwgX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpIHZlY19zcmEodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgewotICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBpbnQpX19idWlsdGluX2FsdGl2ZWNfdnNyYXcoKHZlY3RvciBpbnQpX19hLCBfX2IpOwotfQotCi0jaWZkZWYgX19QT1dFUjhfVkVDVE9SX18KLXN0YXRpYyB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKLXZlY19zcmEodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgewotICByZXR1cm4gX19hID4+IF9fYjsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCi12ZWNfc3JhKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgewotICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpKCh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2EgPj4gX19iKTsKLX0KLSNlbmRpZgotCi0vKiB2ZWNfdnNyYWIgKi8KLQotc3RhdGljIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX3ZzcmFiKHZlY3RvciBzaWduZWQgY2hhciBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX3ZzcmFiKCh2ZWN0b3IgY2hhcilfX2EsIF9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX3ZzcmFiKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX3ZzcmFiKCh2ZWN0b3IgY2hhcilfX2EsIF9fYik7Ci19Ci0KLS8qIHZlY192c3JhaCAqLwotCi1zdGF0aWMgdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfdnNyYWgodmVjdG9yIHNob3J0IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192c3JhaChfX2EsICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3ZzcmFoKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgewotICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY192c3JhaCgodmVjdG9yIHNob3J0KV9fYSwgX19iKTsKLX0KLQotLyogdmVjX3ZzcmF3ICovCi0KLXN0YXRpYyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfdnNyYXcodmVjdG9yIGludCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192c3JhdyhfX2EsIF9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haSB2ZWNfdnNyYXcodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGludClfX2J1aWx0aW5fYWx0aXZlY192c3JhdygodmVjdG9yIGludClfX2EsIF9fYik7Ci19Ci0KLS8qIHZlY19zcmwgKi8KLQotc3RhdGljIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX3NybCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfdnNyKCh2ZWN0b3IgaW50KV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY19zcmwodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgewotICByZXR1cm4gKHZlY3RvciBzaWduZWQgY2hhcilfX2J1aWx0aW5fYWx0aXZlY192c3IoKHZlY3RvciBpbnQpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX3NybCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgewotICByZXR1cm4gKHZlY3RvciBzaWduZWQgY2hhcilfX2J1aWx0aW5fYWx0aXZlY192c3IoKHZlY3RvciBpbnQpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfc3JsKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2J1aWx0aW5fYWx0aXZlY192c3IoKHZlY3RvciBpbnQpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY19zcmwodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2J1aWx0aW5fYWx0aXZlY192c3IoKHZlY3RvciBpbnQpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY19zcmwodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfdnNyKCh2ZWN0b3IgaW50KV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciBib29sIGNoYXIgX19BVFRSU19vX2FpIHZlY19zcmwodmVjdG9yIGJvb2wgY2hhciBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgYm9vbCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX3ZzcigodmVjdG9yIGludClfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciBib29sIGNoYXIgX19BVFRSU19vX2FpIHZlY19zcmwodmVjdG9yIGJvb2wgY2hhciBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIGJvb2wgY2hhcilfX2J1aWx0aW5fYWx0aXZlY192c3IoKHZlY3RvciBpbnQpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgYm9vbCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfc3JsKHZlY3RvciBib29sIGNoYXIgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgYm9vbCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX3ZzcigodmVjdG9yIGludClfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3NybCh2ZWN0b3Igc2hvcnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3Igc2hvcnQpX19idWlsdGluX2FsdGl2ZWNfdnNyKCh2ZWN0b3IgaW50KV9fYSwgKHZlY3RvciBpbnQpX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3NybCh2ZWN0b3Igc2hvcnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX3ZzcigodmVjdG9yIGludClfX2EsICh2ZWN0b3IgaW50KV9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY19zcmwodmVjdG9yIHNob3J0IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3Igc2hvcnQpX19idWlsdGluX2FsdGl2ZWNfdnNyKCh2ZWN0b3IgaW50KV9fYSwgKHZlY3RvciBpbnQpX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3NybCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19idWlsdGluX2FsdGl2ZWNfdnNyKCh2ZWN0b3IgaW50KV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpIHZlY19zcmwodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgewotICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY192c3IoKHZlY3RvciBpbnQpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3NybCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgewotICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY192c3IoKHZlY3RvciBpbnQpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciBib29sIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfc3JsKHZlY3RvciBib29sIHNob3J0IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgYm9vbCBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY192c3IoKHZlY3RvciBpbnQpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIGJvb2wgc2hvcnQgX19BVFRSU19vX2FpIHZlY19zcmwodmVjdG9yIGJvb2wgc2hvcnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgYm9vbCBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY192c3IoKHZlY3RvciBpbnQpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIGJvb2wgc2hvcnQgX19BVFRSU19vX2FpIHZlY19zcmwodmVjdG9yIGJvb2wgc2hvcnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIGJvb2wgc2hvcnQpX19idWlsdGluX2FsdGl2ZWNfdnNyKCh2ZWN0b3IgaW50KV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciBwaXhlbCBfX0FUVFJTX29fYWkgdmVjX3NybCh2ZWN0b3IgcGl4ZWwgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgcGl4ZWwpX19idWlsdGluX2FsdGl2ZWNfdnNyKCh2ZWN0b3IgaW50KV9fYSwgKHZlY3RvciBpbnQpX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciBwaXhlbCBfX0FUVFJTX29fYWkgdmVjX3NybCh2ZWN0b3IgcGl4ZWwgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHBpeGVsKV9fYnVpbHRpbl9hbHRpdmVjX3ZzcigodmVjdG9yIGludClfX2EsICh2ZWN0b3IgaW50KV9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgcGl4ZWwgX19BVFRSU19vX2FpIHZlY19zcmwodmVjdG9yIHBpeGVsIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgcGl4ZWwpX19idWlsdGluX2FsdGl2ZWNfdnNyKCh2ZWN0b3IgaW50KV9fYSwgKHZlY3RvciBpbnQpX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY19zcmwodmVjdG9yIGludCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgaW50KV9fYnVpbHRpbl9hbHRpdmVjX3ZzcihfX2EsICh2ZWN0b3IgaW50KV9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfc3JsKHZlY3RvciBpbnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgewotICByZXR1cm4gKHZlY3RvciBpbnQpX19idWlsdGluX2FsdGl2ZWNfdnNyKF9fYSwgKHZlY3RvciBpbnQpX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY19zcmwodmVjdG9yIGludCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgewotICByZXR1cm4gKHZlY3RvciBpbnQpX19idWlsdGluX2FsdGl2ZWNfdnNyKF9fYSwgKHZlY3RvciBpbnQpX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpIHZlY19zcmwodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYnVpbHRpbl9hbHRpdmVjX3ZzcigodmVjdG9yIGludClfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpIHZlY19zcmwodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGludClfX2J1aWx0aW5fYWx0aXZlY192c3IoKHZlY3RvciBpbnQpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haSB2ZWNfc3JsKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYnVpbHRpbl9hbHRpdmVjX3ZzcigodmVjdG9yIGludClfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciBib29sIGludCBfX0FUVFJTX29fYWkgdmVjX3NybCh2ZWN0b3IgYm9vbCBpbnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgYm9vbCBpbnQpX19idWlsdGluX2FsdGl2ZWNfdnNyKCh2ZWN0b3IgaW50KV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgYm9vbCBpbnQgX19BVFRSU19vX2FpIHZlY19zcmwodmVjdG9yIGJvb2wgaW50IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgewotICByZXR1cm4gKHZlY3RvciBib29sIGludClfX2J1aWx0aW5fYWx0aXZlY192c3IoKHZlY3RvciBpbnQpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciBib29sIGludCBfX0FUVFJTX29fYWkgdmVjX3NybCh2ZWN0b3IgYm9vbCBpbnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgewotICByZXR1cm4gKHZlY3RvciBib29sIGludClfX2J1aWx0aW5fYWx0aXZlY192c3IoKHZlY3RvciBpbnQpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKLX0KLQotLyogdmVjX3ZzciAqLwotCi1zdGF0aWMgdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfdnNyKHZlY3RvciBzaWduZWQgY2hhciBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gKHZlY3RvciBzaWduZWQgY2hhcilfX2J1aWx0aW5fYWx0aXZlY192c3IoKHZlY3RvciBpbnQpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX3Zzcih2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX3ZzcigodmVjdG9yIGludClfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfdnNyKHZlY3RvciBzaWduZWQgY2hhciBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX3ZzcigodmVjdG9yIGludClfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY192c3IodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX3ZzcigodmVjdG9yIGludClfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX3Zzcih2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgewotICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX3ZzcigodmVjdG9yIGludClfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX3Zzcih2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2J1aWx0aW5fYWx0aXZlY192c3IoKHZlY3RvciBpbnQpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIGJvb2wgY2hhciBfX0FUVFJTX29fYWkgdmVjX3Zzcih2ZWN0b3IgYm9vbCBjaGFyIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gKHZlY3RvciBib29sIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfdnNyKCh2ZWN0b3IgaW50KV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIGJvb2wgY2hhciBfX0FUVFJTX29fYWkgdmVjX3Zzcih2ZWN0b3IgYm9vbCBjaGFyIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgYm9vbCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX3ZzcigodmVjdG9yIGludClfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciBib29sIGNoYXIgX19BVFRSU19vX2FpIHZlY192c3IodmVjdG9yIGJvb2wgY2hhciBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgewotICByZXR1cm4gKHZlY3RvciBib29sIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfdnNyKCh2ZWN0b3IgaW50KV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfdnNyKHZlY3RvciBzaG9ydCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gKHZlY3RvciBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY192c3IoKHZlY3RvciBpbnQpX19hLCAodmVjdG9yIGludClfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfdnNyKHZlY3RvciBzaG9ydCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3Igc2hvcnQpX19idWlsdGluX2FsdGl2ZWNfdnNyKCh2ZWN0b3IgaW50KV9fYSwgKHZlY3RvciBpbnQpX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3Zzcih2ZWN0b3Igc2hvcnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgewotICByZXR1cm4gKHZlY3RvciBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY192c3IoKHZlY3RvciBpbnQpX19hLCAodmVjdG9yIGludClfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfdnNyKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY192c3IoKHZlY3RvciBpbnQpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3Zzcih2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX3ZzcigodmVjdG9yIGludClfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfdnNyKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX3ZzcigodmVjdG9yIGludClfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIGJvb2wgc2hvcnQgX19BVFRSU19vX2FpIHZlY192c3IodmVjdG9yIGJvb2wgc2hvcnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gKHZlY3RvciBib29sIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX3ZzcigodmVjdG9yIGludClfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgYm9vbCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3Zzcih2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgewotICByZXR1cm4gKHZlY3RvciBib29sIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX3ZzcigodmVjdG9yIGludClfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgYm9vbCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3Zzcih2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgYm9vbCBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY192c3IoKHZlY3RvciBpbnQpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIHBpeGVsIF9fQVRUUlNfb19haSB2ZWNfdnNyKHZlY3RvciBwaXhlbCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gKHZlY3RvciBwaXhlbClfX2J1aWx0aW5fYWx0aXZlY192c3IoKHZlY3RvciBpbnQpX19hLCAodmVjdG9yIGludClfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIHBpeGVsIF9fQVRUUlNfb19haSB2ZWNfdnNyKHZlY3RvciBwaXhlbCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgcGl4ZWwpX19idWlsdGluX2FsdGl2ZWNfdnNyKCh2ZWN0b3IgaW50KV9fYSwgKHZlY3RvciBpbnQpX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciBwaXhlbCBfX0FUVFJTX29fYWkgdmVjX3Zzcih2ZWN0b3IgcGl4ZWwgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgewotICByZXR1cm4gKHZlY3RvciBwaXhlbClfX2J1aWx0aW5fYWx0aXZlY192c3IoKHZlY3RvciBpbnQpX19hLCAodmVjdG9yIGludClfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX3Zzcih2ZWN0b3IgaW50IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gKHZlY3RvciBpbnQpX19idWlsdGluX2FsdGl2ZWNfdnNyKF9fYSwgKHZlY3RvciBpbnQpX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY192c3IodmVjdG9yIGludCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIGludClfX2J1aWx0aW5fYWx0aXZlY192c3IoX19hLCAodmVjdG9yIGludClfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX3Zzcih2ZWN0b3IgaW50IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIGludClfX2J1aWx0aW5fYWx0aXZlY192c3IoX19hLCAodmVjdG9yIGludClfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkgdmVjX3Zzcih2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBpbnQpX19idWlsdGluX2FsdGl2ZWNfdnNyKCh2ZWN0b3IgaW50KV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkgdmVjX3Zzcih2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYnVpbHRpbl9hbHRpdmVjX3ZzcigodmVjdG9yIGludClfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpIHZlY192c3IodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgewotICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBpbnQpX19idWlsdGluX2FsdGl2ZWNfdnNyKCh2ZWN0b3IgaW50KV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIGJvb2wgaW50IF9fQVRUUlNfb19haSB2ZWNfdnNyKHZlY3RvciBib29sIGludCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gKHZlY3RvciBib29sIGludClfX2J1aWx0aW5fYWx0aXZlY192c3IoKHZlY3RvciBpbnQpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciBib29sIGludCBfX0FUVFJTX29fYWkgdmVjX3Zzcih2ZWN0b3IgYm9vbCBpbnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIGJvb2wgaW50KV9fYnVpbHRpbl9hbHRpdmVjX3ZzcigodmVjdG9yIGludClfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIGJvb2wgaW50IF9fQVRUUlNfb19haSB2ZWNfdnNyKHZlY3RvciBib29sIGludCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIGJvb2wgaW50KV9fYnVpbHRpbl9hbHRpdmVjX3ZzcigodmVjdG9yIGludClfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOwotfQotCi0vKiB2ZWNfc3JvICovCi0KLXN0YXRpYyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY19zcm8odmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gKHZlY3RvciBzaWduZWQgY2hhcilfX2J1aWx0aW5fYWx0aXZlY192c3JvKCh2ZWN0b3IgaW50KV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfc3JvKHZlY3RvciBzaWduZWQgY2hhciBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gKHZlY3RvciBzaWduZWQgY2hhcilfX2J1aWx0aW5fYWx0aXZlY192c3JvKCh2ZWN0b3IgaW50KV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY19zcm8odmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2J1aWx0aW5fYWx0aXZlY192c3JvKCh2ZWN0b3IgaW50KV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX3Nybyh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfdnNybygodmVjdG9yIGludClfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfc3JvKHZlY3RvciBzaG9ydCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3Igc2hvcnQpX19idWlsdGluX2FsdGl2ZWNfdnNybygodmVjdG9yIGludClfX2EsICh2ZWN0b3IgaW50KV9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY19zcm8odmVjdG9yIHNob3J0IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX3Zzcm8oKHZlY3RvciBpbnQpX19hLCAodmVjdG9yIGludClfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfc3JvKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19idWlsdGluX2FsdGl2ZWNfdnNybygodmVjdG9yIGludClfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3Nybyh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19idWlsdGluX2FsdGl2ZWNfdnNybygodmVjdG9yIGludClfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciBwaXhlbCBfX0FUVFJTX29fYWkgdmVjX3Nybyh2ZWN0b3IgcGl4ZWwgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHBpeGVsKV9fYnVpbHRpbl9hbHRpdmVjX3Zzcm8oKHZlY3RvciBpbnQpX19hLCAodmVjdG9yIGludClfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIHBpeGVsIF9fQVRUUlNfb19haSB2ZWNfc3JvKHZlY3RvciBwaXhlbCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gKHZlY3RvciBwaXhlbClfX2J1aWx0aW5fYWx0aXZlY192c3JvKCh2ZWN0b3IgaW50KV9fYSwgKHZlY3RvciBpbnQpX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY19zcm8odmVjdG9yIGludCBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgaW50KV9fYnVpbHRpbl9hbHRpdmVjX3Zzcm8oX19hLCAodmVjdG9yIGludClfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX3Nybyh2ZWN0b3IgaW50IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gKHZlY3RvciBpbnQpX19idWlsdGluX2FsdGl2ZWNfdnNybyhfX2EsICh2ZWN0b3IgaW50KV9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haSB2ZWNfc3JvKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBpbnQpX19idWlsdGluX2FsdGl2ZWNfdnNybygodmVjdG9yIGludClfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haSB2ZWNfc3JvKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGludClfX2J1aWx0aW5fYWx0aXZlY192c3JvKCh2ZWN0b3IgaW50KV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciBmbG9hdCBfX0FUVFJTX29fYWkgdmVjX3Nybyh2ZWN0b3IgZmxvYXQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIGZsb2F0KV9fYnVpbHRpbl9hbHRpdmVjX3Zzcm8oKHZlY3RvciBpbnQpX19hLCAodmVjdG9yIGludClfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIGZsb2F0IF9fQVRUUlNfb19haSB2ZWNfc3JvKHZlY3RvciBmbG9hdCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gKHZlY3RvciBmbG9hdClfX2J1aWx0aW5fYWx0aXZlY192c3JvKCh2ZWN0b3IgaW50KV9fYSwgKHZlY3RvciBpbnQpX19iKTsKLX0KLQotLyogdmVjX3Zzcm8gKi8KLQotc3RhdGljIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX3Zzcm8odmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfdnNybygodmVjdG9yIGludClfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX3Zzcm8odmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gKHZlY3RvciBzaWduZWQgY2hhcilfX2J1aWx0aW5fYWx0aXZlY192c3JvKCh2ZWN0b3IgaW50KV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY192c3JvKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX3Zzcm8oKHZlY3RvciBpbnQpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfdnNybyh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX3Zzcm8oKHZlY3RvciBpbnQpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3Zzcm8odmVjdG9yIHNob3J0IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3Igc2hvcnQpX19idWlsdGluX2FsdGl2ZWNfdnNybygodmVjdG9yIGludClfX2EsICh2ZWN0b3IgaW50KV9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY192c3JvKHZlY3RvciBzaG9ydCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3Igc2hvcnQpX19idWlsdGluX2FsdGl2ZWNfdnNybygodmVjdG9yIGludClfX2EsICh2ZWN0b3IgaW50KV9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpIHZlY192c3JvKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX3Zzcm8oKHZlY3RvciBpbnQpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpIHZlY192c3JvKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19idWlsdGluX2FsdGl2ZWNfdnNybygodmVjdG9yIGludClfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciBwaXhlbCBfX0FUVFJTX29fYWkgdmVjX3Zzcm8odmVjdG9yIHBpeGVsIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgcGl4ZWwpX19idWlsdGluX2FsdGl2ZWNfdnNybygodmVjdG9yIGludClfX2EsICh2ZWN0b3IgaW50KV9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgcGl4ZWwgX19BVFRSU19vX2FpIHZlY192c3JvKHZlY3RvciBwaXhlbCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgcGl4ZWwpX19idWlsdGluX2FsdGl2ZWNfdnNybygodmVjdG9yIGludClfX2EsICh2ZWN0b3IgaW50KV9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfdnNybyh2ZWN0b3IgaW50IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIGludClfX2J1aWx0aW5fYWx0aXZlY192c3JvKF9fYSwgKHZlY3RvciBpbnQpX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY192c3JvKHZlY3RvciBpbnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gKHZlY3RvciBpbnQpX19idWlsdGluX2FsdGl2ZWNfdnNybyhfX2EsICh2ZWN0b3IgaW50KV9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haSB2ZWNfdnNybyh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGludClfX2J1aWx0aW5fYWx0aXZlY192c3JvKCh2ZWN0b3IgaW50KV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpIHZlY192c3JvKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBpbnQpX19idWlsdGluX2FsdGl2ZWNfdnNybygodmVjdG9yIGludClfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgZmxvYXQgX19BVFRSU19vX2FpIHZlY192c3JvKHZlY3RvciBmbG9hdCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIGZsb2F0KV9fYnVpbHRpbl9hbHRpdmVjX3Zzcm8oKHZlY3RvciBpbnQpX19hLCAodmVjdG9yIGludClfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIGZsb2F0IF9fQVRUUlNfb19haSB2ZWNfdnNybyh2ZWN0b3IgZmxvYXQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIGZsb2F0KV9fYnVpbHRpbl9hbHRpdmVjX3Zzcm8oKHZlY3RvciBpbnQpX19hLCAodmVjdG9yIGludClfX2IpOwotfQotCi0vKiB2ZWNfc3QgKi8KLQotc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCBpbnQgX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgKl9fYykgewotICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4KCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOwotfQotCi1zdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0KHZlY3RvciBzaWduZWQgY2hhciBfX2EsIGludCBfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25lZCBjaGFyICpfX2MpIHsKLSAgX19idWlsdGluX2FsdGl2ZWNfc3R2eCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKLX0KLQotc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIGludCBfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyICpfX2MpIHsKLSAgX19idWlsdGluX2FsdGl2ZWNfc3R2eCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKLX0KLQotc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIGludCBfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKl9fYykgewotICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4KCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOwotfQotCi1zdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0KHZlY3RvciBib29sIGNoYXIgX19hLCBpbnQgX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduZWQgY2hhciAqX19jKSB7Ci0gIF9fYnVpbHRpbl9hbHRpdmVjX3N0dngoKHZlY3RvciBpbnQpX19hLCBfX2IsIF9fYyk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3QodmVjdG9yIGJvb2wgY2hhciBfX2EsIGludCBfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKl9fYykgewotICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4KCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOwotfQotCi1zdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0KHZlY3RvciBib29sIGNoYXIgX19hLCBpbnQgX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBjaGFyICpfX2MpIHsKLSAgX19idWlsdGluX2FsdGl2ZWNfc3R2eCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKLX0KLQotc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdCh2ZWN0b3Igc2hvcnQgX19hLCBpbnQgX19iLCB2ZWN0b3Igc2hvcnQgKl9fYykgewotICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4KCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOwotfQotCi1zdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0KHZlY3RvciBzaG9ydCBfX2EsIGludCBfX2IsIHNob3J0ICpfX2MpIHsKLSAgX19idWlsdGluX2FsdGl2ZWNfc3R2eCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKLX0KLQotc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCBpbnQgX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgKl9fYykgewotICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4KCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOwotfQotCi1zdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0KHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIGludCBfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0ICpfX2MpIHsKLSAgX19idWlsdGluX2FsdGl2ZWNfc3R2eCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKLX0KLQotc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIGludCBfX2IsIHNob3J0ICpfX2MpIHsKLSAgX19idWlsdGluX2FsdGl2ZWNfc3R2eCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKLX0KLQotc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIGludCBfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0ICpfX2MpIHsKLSAgX19idWlsdGluX2FsdGl2ZWNfc3R2eCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKLX0KLQotc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIGludCBfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIHNob3J0ICpfX2MpIHsKLSAgX19idWlsdGluX2FsdGl2ZWNfc3R2eCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKLX0KLQotc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdCh2ZWN0b3IgcGl4ZWwgX19hLCBpbnQgX19iLCBzaG9ydCAqX19jKSB7Ci0gIF9fYnVpbHRpbl9hbHRpdmVjX3N0dngoKHZlY3RvciBpbnQpX19hLCBfX2IsIF9fYyk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3QodmVjdG9yIHBpeGVsIF9fYSwgaW50IF9fYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgKl9fYykgewotICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4KCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOwotfQotCi1zdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0KHZlY3RvciBwaXhlbCBfX2EsIGludCBfX2IsIHZlY3RvciBwaXhlbCAqX19jKSB7Ci0gIF9fYnVpbHRpbl9hbHRpdmVjX3N0dngoKHZlY3RvciBpbnQpX19hLCBfX2IsIF9fYyk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3QodmVjdG9yIGludCBfX2EsIGludCBfX2IsIHZlY3RvciBpbnQgKl9fYykgewotICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4KF9fYSwgX19iLCBfX2MpOwotfQotCi1zdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0KHZlY3RvciBpbnQgX19hLCBpbnQgX19iLCBpbnQgKl9fYykgewotICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4KF9fYSwgX19iLCBfX2MpOwotfQotCi1zdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0KHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCBpbnQgX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50ICpfX2MpIHsKLSAgX19idWlsdGluX2FsdGl2ZWNfc3R2eCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKLX0KLQotc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgaW50IF9fYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpfX2MpIHsKLSAgX19idWlsdGluX2FsdGl2ZWNfc3R2eCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKLX0KLQotc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdCh2ZWN0b3IgYm9vbCBpbnQgX19hLCBpbnQgX19iLCBpbnQgKl9fYykgewotICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4KCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOwotfQotCi1zdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0KHZlY3RvciBib29sIGludCBfX2EsIGludCBfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqX19jKSB7Ci0gIF9fYnVpbHRpbl9hbHRpdmVjX3N0dngoKHZlY3RvciBpbnQpX19hLCBfX2IsIF9fYyk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3QodmVjdG9yIGJvb2wgaW50IF9fYSwgaW50IF9fYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgaW50ICpfX2MpIHsKLSAgX19idWlsdGluX2FsdGl2ZWNfc3R2eCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKLX0KLQotc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdCh2ZWN0b3IgZmxvYXQgX19hLCBpbnQgX19iLCB2ZWN0b3IgZmxvYXQgKl9fYykgewotICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4KCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOwotfQotCi1zdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0KHZlY3RvciBmbG9hdCBfX2EsIGludCBfX2IsIGZsb2F0ICpfX2MpIHsKLSAgX19idWlsdGluX2FsdGl2ZWNfc3R2eCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKLX0KLQotLyogdmVjX3N0dnggKi8KLQotc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZ4KHZlY3RvciBzaWduZWQgY2hhciBfX2EsIGludCBfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBjaGFyICpfX2MpIHsKLSAgX19idWlsdGluX2FsdGl2ZWNfc3R2eCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKLX0KLQotc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZ4KHZlY3RvciBzaWduZWQgY2hhciBfX2EsIGludCBfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmVkIGNoYXIgKl9fYykgewotICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4KCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOwotfQotCi1zdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dngodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCBpbnQgX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyICpfX2MpIHsKLSAgX19idWlsdGluX2FsdGl2ZWNfc3R2eCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKLX0KLQotc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZ4KHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgaW50IF9fYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpfX2MpIHsKLSAgX19idWlsdGluX2FsdGl2ZWNfc3R2eCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKLX0KLQotc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZ4KHZlY3RvciBib29sIGNoYXIgX19hLCBpbnQgX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25lZCBjaGFyICpfX2MpIHsKLSAgX19idWlsdGluX2FsdGl2ZWNfc3R2eCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKLX0KLQotc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZ4KHZlY3RvciBib29sIGNoYXIgX19hLCBpbnQgX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKl9fYykgewotICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4KCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOwotfQotCi1zdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dngodmVjdG9yIGJvb2wgY2hhciBfX2EsIGludCBfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgY2hhciAqX19jKSB7Ci0gIF9fYnVpbHRpbl9hbHRpdmVjX3N0dngoKHZlY3RvciBpbnQpX19hLCBfX2IsIF9fYyk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2eCh2ZWN0b3Igc2hvcnQgX19hLCBpbnQgX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaG9ydCAqX19jKSB7Ci0gIF9fYnVpbHRpbl9hbHRpdmVjX3N0dngoKHZlY3RvciBpbnQpX19hLCBfX2IsIF9fYyk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2eCh2ZWN0b3Igc2hvcnQgX19hLCBpbnQgX19iLCBzaG9ydCAqX19jKSB7Ci0gIF9fYnVpbHRpbl9hbHRpdmVjX3N0dngoKHZlY3RvciBpbnQpX19hLCBfX2IsIF9fYyk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2eCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCBpbnQgX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCAqX19jKSB7Ci0gIF9fYnVpbHRpbl9hbHRpdmVjX3N0dngoKHZlY3RvciBpbnQpX19hLCBfX2IsIF9fYyk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2eCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCBpbnQgX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0ICpfX2MpIHsKLSAgX19idWlsdGluX2FsdGl2ZWNfc3R2eCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKLX0KLQotc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZ4KHZlY3RvciBib29sIHNob3J0IF9fYSwgaW50IF9fYiwgc2hvcnQgKl9fYykgewotICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4KCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOwotfQotCi1zdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dngodmVjdG9yIGJvb2wgc2hvcnQgX19hLCBpbnQgX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0ICpfX2MpIHsKLSAgX19idWlsdGluX2FsdGl2ZWNfc3R2eCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKLX0KLQotc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZ4KHZlY3RvciBib29sIHNob3J0IF9fYSwgaW50IF9fYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBzaG9ydCAqX19jKSB7Ci0gIF9fYnVpbHRpbl9hbHRpdmVjX3N0dngoKHZlY3RvciBpbnQpX19hLCBfX2IsIF9fYyk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2eCh2ZWN0b3IgcGl4ZWwgX19hLCBpbnQgX19iLCBzaG9ydCAqX19jKSB7Ci0gIF9fYnVpbHRpbl9hbHRpdmVjX3N0dngoKHZlY3RvciBpbnQpX19hLCBfX2IsIF9fYyk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2eCh2ZWN0b3IgcGl4ZWwgX19hLCBpbnQgX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0ICpfX2MpIHsKLSAgX19idWlsdGluX2FsdGl2ZWNfc3R2eCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKLX0KLQotc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZ4KHZlY3RvciBwaXhlbCBfX2EsIGludCBfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHBpeGVsICpfX2MpIHsKLSAgX19idWlsdGluX2FsdGl2ZWNfc3R2eCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKLX0KLQotc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZ4KHZlY3RvciBpbnQgX19hLCBpbnQgX19iLCB2ZWN0b3IgaW50ICpfX2MpIHsKLSAgX19idWlsdGluX2FsdGl2ZWNfc3R2eChfX2EsIF9fYiwgX19jKTsKLX0KLQotc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZ4KHZlY3RvciBpbnQgX19hLCBpbnQgX19iLCBpbnQgKl9fYykgewotICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4KF9fYSwgX19iLCBfX2MpOwotfQotCi1zdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dngodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIGludCBfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCAqX19jKSB7Ci0gIF9fYnVpbHRpbl9hbHRpdmVjX3N0dngoKHZlY3RvciBpbnQpX19hLCBfX2IsIF9fYyk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2eCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgaW50IF9fYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKl9fYykgewotICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4KCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOwotfQotCi1zdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dngodmVjdG9yIGJvb2wgaW50IF9fYSwgaW50IF9fYiwgaW50ICpfX2MpIHsKLSAgX19idWlsdGluX2FsdGl2ZWNfc3R2eCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKLX0KLQotc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZ4KHZlY3RvciBib29sIGludCBfX2EsIGludCBfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpfX2MpIHsKLSAgX19idWlsdGluX2FsdGl2ZWNfc3R2eCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKLX0KLQotc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZ4KHZlY3RvciBib29sIGludCBfX2EsIGludCBfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgaW50ICpfX2MpIHsKLSAgX19idWlsdGluX2FsdGl2ZWNfc3R2eCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKLX0KLQotc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZ4KHZlY3RvciBmbG9hdCBfX2EsIGludCBfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGZsb2F0ICpfX2MpIHsKLSAgX19idWlsdGluX2FsdGl2ZWNfc3R2eCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKLX0KLQotc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZ4KHZlY3RvciBmbG9hdCBfX2EsIGludCBfX2IsIGZsb2F0ICpfX2MpIHsKLSAgX19idWlsdGluX2FsdGl2ZWNfc3R2eCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKLX0KLQotLyogdmVjX3N0ZSAqLwotCi1zdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0ZSh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCBpbnQgX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmVkIGNoYXIgKl9fYykgewotICBfX2J1aWx0aW5fYWx0aXZlY19zdHZlYngoKHZlY3RvciBjaGFyKV9fYSwgX19iLCBfX2MpOwotfQotCi1zdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0ZSh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIGludCBfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpfX2MpIHsKLSAgX19idWlsdGluX2FsdGl2ZWNfc3R2ZWJ4KCh2ZWN0b3IgY2hhcilfX2EsIF9fYiwgX19jKTsKLX0KLQotc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdGUodmVjdG9yIGJvb2wgY2hhciBfX2EsIGludCBfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduZWQgY2hhciAqX19jKSB7Ci0gIF9fYnVpbHRpbl9hbHRpdmVjX3N0dmVieCgodmVjdG9yIGNoYXIpX19hLCBfX2IsIF9fYyk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3RlKHZlY3RvciBib29sIGNoYXIgX19hLCBpbnQgX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqX19jKSB7Ci0gIF9fYnVpbHRpbl9hbHRpdmVjX3N0dmVieCgodmVjdG9yIGNoYXIpX19hLCBfX2IsIF9fYyk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3RlKHZlY3RvciBzaG9ydCBfX2EsIGludCBfX2IsIHNob3J0ICpfX2MpIHsKLSAgX19idWlsdGluX2FsdGl2ZWNfc3R2ZWh4KF9fYSwgX19iLCBfX2MpOwotfQotCi1zdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0ZSh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCBpbnQgX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgKl9fYykgewotICBfX2J1aWx0aW5fYWx0aXZlY19zdHZlaHgoKHZlY3RvciBzaG9ydClfX2EsIF9fYiwgX19jKTsKLX0KLQotc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdGUodmVjdG9yIGJvb2wgc2hvcnQgX19hLCBpbnQgX19iLCBzaG9ydCAqX19jKSB7Ci0gIF9fYnVpbHRpbl9hbHRpdmVjX3N0dmVoeCgodmVjdG9yIHNob3J0KV9fYSwgX19iLCBfX2MpOwotfQotCi1zdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0ZSh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIGludCBfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCAqX19jKSB7Ci0gIF9fYnVpbHRpbl9hbHRpdmVjX3N0dmVoeCgodmVjdG9yIHNob3J0KV9fYSwgX19iLCBfX2MpOwotfQotCi1zdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0ZSh2ZWN0b3IgcGl4ZWwgX19hLCBpbnQgX19iLCBzaG9ydCAqX19jKSB7Ci0gIF9fYnVpbHRpbl9hbHRpdmVjX3N0dmVoeCgodmVjdG9yIHNob3J0KV9fYSwgX19iLCBfX2MpOwotfQotCi1zdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0ZSh2ZWN0b3IgcGl4ZWwgX19hLCBpbnQgX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgKl9fYykgewotICBfX2J1aWx0aW5fYWx0aXZlY19zdHZlaHgoKHZlY3RvciBzaG9ydClfX2EsIF9fYiwgX19jKTsKLX0KLQotc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdGUodmVjdG9yIGludCBfX2EsIGludCBfX2IsIGludCAqX19jKSB7Ci0gIF9fYnVpbHRpbl9hbHRpdmVjX3N0dmV3eChfX2EsIF9fYiwgX19jKTsKLX0KLQotc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdGUodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIGludCBfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKl9fYykgewotICBfX2J1aWx0aW5fYWx0aXZlY19zdHZld3goKHZlY3RvciBpbnQpX19hLCBfX2IsIF9fYyk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3RlKHZlY3RvciBib29sIGludCBfX2EsIGludCBfX2IsIGludCAqX19jKSB7Ci0gIF9fYnVpbHRpbl9hbHRpdmVjX3N0dmV3eCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKLX0KLQotc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdGUodmVjdG9yIGJvb2wgaW50IF9fYSwgaW50IF9fYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqX19jKSB7Ci0gIF9fYnVpbHRpbl9hbHRpdmVjX3N0dmV3eCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKLX0KLQotc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdGUodmVjdG9yIGZsb2F0IF9fYSwgaW50IF9fYiwgZmxvYXQgKl9fYykgewotICBfX2J1aWx0aW5fYWx0aXZlY19zdHZld3goKHZlY3RvciBpbnQpX19hLCBfX2IsIF9fYyk7Ci19Ci0KLS8qIHZlY19zdHZlYnggKi8KLQotc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZlYngodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgaW50IF9fYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25lZCBjaGFyICpfX2MpIHsKLSAgX19idWlsdGluX2FsdGl2ZWNfc3R2ZWJ4KCh2ZWN0b3IgY2hhcilfX2EsIF9fYiwgX19jKTsKLX0KLQotc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZlYngodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCBpbnQgX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqX19jKSB7Ci0gIF9fYnVpbHRpbl9hbHRpdmVjX3N0dmVieCgodmVjdG9yIGNoYXIpX19hLCBfX2IsIF9fYyk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2ZWJ4KHZlY3RvciBib29sIGNoYXIgX19hLCBpbnQgX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmVkIGNoYXIgKl9fYykgewotICBfX2J1aWx0aW5fYWx0aXZlY19zdHZlYngoKHZlY3RvciBjaGFyKV9fYSwgX19iLCBfX2MpOwotfQotCi1zdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dmVieCh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgaW50IF9fYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKl9fYykgewotICBfX2J1aWx0aW5fYWx0aXZlY19zdHZlYngoKHZlY3RvciBjaGFyKV9fYSwgX19iLCBfX2MpOwotfQotCi0vKiB2ZWNfc3R2ZWh4ICovCi0KLXN0YXRpYyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2ZWh4KHZlY3RvciBzaG9ydCBfX2EsIGludCBfX2IsIHNob3J0ICpfX2MpIHsKLSAgX19idWlsdGluX2FsdGl2ZWNfc3R2ZWh4KF9fYSwgX19iLCBfX2MpOwotfQotCi1zdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dmVoeCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCBpbnQgX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgKl9fYykgewotICBfX2J1aWx0aW5fYWx0aXZlY19zdHZlaHgoKHZlY3RvciBzaG9ydClfX2EsIF9fYiwgX19jKTsKLX0KLQotc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZlaHgodmVjdG9yIGJvb2wgc2hvcnQgX19hLCBpbnQgX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvcnQgKl9fYykgewotICBfX2J1aWx0aW5fYWx0aXZlY19zdHZlaHgoKHZlY3RvciBzaG9ydClfX2EsIF9fYiwgX19jKTsKLX0KLQotc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZlaHgodmVjdG9yIGJvb2wgc2hvcnQgX19hLCBpbnQgX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgKl9fYykgewotICBfX2J1aWx0aW5fYWx0aXZlY19zdHZlaHgoKHZlY3RvciBzaG9ydClfX2EsIF9fYiwgX19jKTsKLX0KLQotc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZlaHgodmVjdG9yIHBpeGVsIF9fYSwgaW50IF9fYiwgc2hvcnQgKl9fYykgewotICBfX2J1aWx0aW5fYWx0aXZlY19zdHZlaHgoKHZlY3RvciBzaG9ydClfX2EsIF9fYiwgX19jKTsKLX0KLQotc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZlaHgodmVjdG9yIHBpeGVsIF9fYSwgaW50IF9fYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0ICpfX2MpIHsKLSAgX19idWlsdGluX2FsdGl2ZWNfc3R2ZWh4KCh2ZWN0b3Igc2hvcnQpX19hLCBfX2IsIF9fYyk7Ci19Ci0KLS8qIHZlY19zdHZld3ggKi8KLQotc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZld3godmVjdG9yIGludCBfX2EsIGludCBfX2IsIGludCAqX19jKSB7Ci0gIF9fYnVpbHRpbl9hbHRpdmVjX3N0dmV3eChfX2EsIF9fYiwgX19jKTsKLX0KLQotc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZld3godmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIGludCBfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKl9fYykgewotICBfX2J1aWx0aW5fYWx0aXZlY19zdHZld3goKHZlY3RvciBpbnQpX19hLCBfX2IsIF9fYyk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2ZXd4KHZlY3RvciBib29sIGludCBfX2EsIGludCBfX2IsIGludCAqX19jKSB7Ci0gIF9fYnVpbHRpbl9hbHRpdmVjX3N0dmV3eCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKLX0KLQotc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZld3godmVjdG9yIGJvb2wgaW50IF9fYSwgaW50IF9fYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqX19jKSB7Ci0gIF9fYnVpbHRpbl9hbHRpdmVjX3N0dmV3eCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKLX0KLQotc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZld3godmVjdG9yIGZsb2F0IF9fYSwgaW50IF9fYiwgZmxvYXQgKl9fYykgewotICBfX2J1aWx0aW5fYWx0aXZlY19zdHZld3goKHZlY3RvciBpbnQpX19hLCBfX2IsIF9fYyk7Ci19Ci0KLS8qIHZlY19zdGwgKi8KLQotc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdGwodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgaW50IF9fYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgY2hhciAqX19jKSB7Ci0gIF9fYnVpbHRpbl9hbHRpdmVjX3N0dnhsKCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOwotfQotCi1zdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0bCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCBpbnQgX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmVkIGNoYXIgKl9fYykgewotICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4bCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKLX0KLQotc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdGwodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCBpbnQgX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgKl9fYykgewotICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4bCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKLX0KLQotc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdGwodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCBpbnQgX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqX19jKSB7Ci0gIF9fYnVpbHRpbl9hbHRpdmVjX3N0dnhsKCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOwotfQotCi1zdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0bCh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgaW50IF9fYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25lZCBjaGFyICpfX2MpIHsKLSAgX19idWlsdGluX2FsdGl2ZWNfc3R2eGwoKHZlY3RvciBpbnQpX19hLCBfX2IsIF9fYyk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3RsKHZlY3RvciBib29sIGNoYXIgX19hLCBpbnQgX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqX19jKSB7Ci0gIF9fYnVpbHRpbl9hbHRpdmVjX3N0dnhsKCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOwotfQotCi1zdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0bCh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgaW50IF9fYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGNoYXIgKl9fYykgewotICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4bCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKLX0KLQotc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdGwodmVjdG9yIHNob3J0IF9fYSwgaW50IF9fYiwgdmVjdG9yIHNob3J0ICpfX2MpIHsKLSAgX19idWlsdGluX2FsdGl2ZWNfc3R2eGwoKHZlY3RvciBpbnQpX19hLCBfX2IsIF9fYyk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3RsKHZlY3RvciBzaG9ydCBfX2EsIGludCBfX2IsIHNob3J0ICpfX2MpIHsKLSAgX19idWlsdGluX2FsdGl2ZWNfc3R2eGwoKHZlY3RvciBpbnQpX19hLCBfX2IsIF9fYyk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3RsKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIGludCBfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgKl9fYykgewotICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4bCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKLX0KLQotc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdGwodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgaW50IF9fYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0ICpfX2MpIHsKLSAgX19idWlsdGluX2FsdGl2ZWNfc3R2eGwoKHZlY3RvciBpbnQpX19hLCBfX2IsIF9fYyk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3RsKHZlY3RvciBib29sIHNob3J0IF9fYSwgaW50IF9fYiwgc2hvcnQgKl9fYykgewotICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4bCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKLX0KLQotc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdGwodmVjdG9yIGJvb2wgc2hvcnQgX19hLCBpbnQgX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgKl9fYykgewotICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4bCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKLX0KLQotc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdGwodmVjdG9yIGJvb2wgc2hvcnQgX19hLCBpbnQgX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgc2hvcnQgKl9fYykgewotICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4bCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKLX0KLQotc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdGwodmVjdG9yIHBpeGVsIF9fYSwgaW50IF9fYiwgc2hvcnQgKl9fYykgewotICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4bCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKLX0KLQotc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdGwodmVjdG9yIHBpeGVsIF9fYSwgaW50IF9fYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0ICpfX2MpIHsKLSAgX19idWlsdGluX2FsdGl2ZWNfc3R2eGwoKHZlY3RvciBpbnQpX19hLCBfX2IsIF9fYyk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3RsKHZlY3RvciBwaXhlbCBfX2EsIGludCBfX2IsIHZlY3RvciBwaXhlbCAqX19jKSB7Ci0gIF9fYnVpbHRpbl9hbHRpdmVjX3N0dnhsKCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOwotfQotCi1zdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0bCh2ZWN0b3IgaW50IF9fYSwgaW50IF9fYiwgdmVjdG9yIGludCAqX19jKSB7Ci0gIF9fYnVpbHRpbl9hbHRpdmVjX3N0dnhsKF9fYSwgX19iLCBfX2MpOwotfQotCi1zdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0bCh2ZWN0b3IgaW50IF9fYSwgaW50IF9fYiwgaW50ICpfX2MpIHsKLSAgX19idWlsdGluX2FsdGl2ZWNfc3R2eGwoX19hLCBfX2IsIF9fYyk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3RsKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCBpbnQgX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCAqX19jKSB7Ci0gIF9fYnVpbHRpbl9hbHRpdmVjX3N0dnhsKCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOwotfQotCi1zdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0bCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgaW50IF9fYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqX19jKSB7Ci0gIF9fYnVpbHRpbl9hbHRpdmVjX3N0dnhsKCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOwotfQotCi1zdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0bCh2ZWN0b3IgYm9vbCBpbnQgX19hLCBpbnQgX19iLCBpbnQgKl9fYykgewotICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4bCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKLX0KLQotc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdGwodmVjdG9yIGJvb2wgaW50IF9fYSwgaW50IF9fYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqX19jKSB7Ci0gIF9fYnVpbHRpbl9hbHRpdmVjX3N0dnhsKCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOwotfQotCi1zdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0bCh2ZWN0b3IgYm9vbCBpbnQgX19hLCBpbnQgX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgaW50ICpfX2MpIHsKLSAgX19idWlsdGluX2FsdGl2ZWNfc3R2eGwoKHZlY3RvciBpbnQpX19hLCBfX2IsIF9fYyk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3RsKHZlY3RvciBmbG9hdCBfX2EsIGludCBfX2IsIHZlY3RvciBmbG9hdCAqX19jKSB7Ci0gIF9fYnVpbHRpbl9hbHRpdmVjX3N0dnhsKCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOwotfQotCi1zdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0bCh2ZWN0b3IgZmxvYXQgX19hLCBpbnQgX19iLCBmbG9hdCAqX19jKSB7Ci0gIF9fYnVpbHRpbl9hbHRpdmVjX3N0dnhsKCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOwotfQotCi0vKiB2ZWNfc3R2eGwgKi8KLQotc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZ4bCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCBpbnQgX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgKl9fYykgewotICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4bCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKLX0KLQotc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZ4bCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCBpbnQgX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduZWQgY2hhciAqX19jKSB7Ci0gIF9fYnVpbHRpbl9hbHRpdmVjX3N0dnhsKCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOwotfQotCi1zdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dnhsKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgaW50IF9fYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgKl9fYykgewotICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4bCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKLX0KLQotc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZ4bCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIGludCBfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKl9fYykgewotICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4bCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKLX0KLQotc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZ4bCh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgaW50IF9fYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmVkIGNoYXIgKl9fYykgewotICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4bCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKLX0KLQotc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZ4bCh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgaW50IF9fYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqX19jKSB7Ci0gIF9fYnVpbHRpbl9hbHRpdmVjX3N0dnhsKCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOwotfQotCi1zdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dnhsKHZlY3RvciBib29sIGNoYXIgX19hLCBpbnQgX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBjaGFyICpfX2MpIHsKLSAgX19idWlsdGluX2FsdGl2ZWNfc3R2eGwoKHZlY3RvciBpbnQpX19hLCBfX2IsIF9fYyk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2eGwodmVjdG9yIHNob3J0IF9fYSwgaW50IF9fYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNob3J0ICpfX2MpIHsKLSAgX19idWlsdGluX2FsdGl2ZWNfc3R2eGwoKHZlY3RvciBpbnQpX19hLCBfX2IsIF9fYyk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2eGwodmVjdG9yIHNob3J0IF9fYSwgaW50IF9fYiwgc2hvcnQgKl9fYykgewotICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4bCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKLX0KLQotc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZ4bCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCBpbnQgX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgKl9fYykgewotICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4bCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKLX0KLQotc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZ4bCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCBpbnQgX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCAqX19jKSB7Ci0gIF9fYnVpbHRpbl9hbHRpdmVjX3N0dnhsKCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOwotfQotCi1zdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dnhsKHZlY3RvciBib29sIHNob3J0IF9fYSwgaW50IF9fYiwgc2hvcnQgKl9fYykgewotICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4bCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKLX0KLQotc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZ4bCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIGludCBfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0ICpfX2MpIHsKLSAgX19idWlsdGluX2FsdGl2ZWNfc3R2eGwoKHZlY3RvciBpbnQpX19hLCBfX2IsIF9fYyk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2eGwodmVjdG9yIGJvb2wgc2hvcnQgX19hLCBpbnQgX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBzaG9ydCAqX19jKSB7Ci0gIF9fYnVpbHRpbl9hbHRpdmVjX3N0dnhsKCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOwotfQotCi1zdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dnhsKHZlY3RvciBwaXhlbCBfX2EsIGludCBfX2IsIHNob3J0ICpfX2MpIHsKLSAgX19idWlsdGluX2FsdGl2ZWNfc3R2eGwoKHZlY3RvciBpbnQpX19hLCBfX2IsIF9fYyk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2eGwodmVjdG9yIHBpeGVsIF9fYSwgaW50IF9fYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgKl9fYykgewotICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4bCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKLX0KLQotc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZ4bCh2ZWN0b3IgcGl4ZWwgX19hLCBpbnQgX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgcGl4ZWwgKl9fYykgewotICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4bCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKLX0KLQotc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZ4bCh2ZWN0b3IgaW50IF9fYSwgaW50IF9fYiwgdmVjdG9yIGludCAqX19jKSB7Ci0gIF9fYnVpbHRpbl9hbHRpdmVjX3N0dnhsKF9fYSwgX19iLCBfX2MpOwotfQotCi1zdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dnhsKHZlY3RvciBpbnQgX19hLCBpbnQgX19iLCBpbnQgKl9fYykgewotICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4bChfX2EsIF9fYiwgX19jKTsKLX0KLQotc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZ4bCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgaW50IF9fYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCAqX19jKSB7Ci0gIF9fYnVpbHRpbl9hbHRpdmVjX3N0dnhsKCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOwotfQotCi1zdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dnhsKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCBpbnQgX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKl9fYykgewotICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4bCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKLX0KLQotc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZ4bCh2ZWN0b3IgYm9vbCBpbnQgX19hLCBpbnQgX19iLCBpbnQgKl9fYykgewotICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4bCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKLX0KLQotc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZ4bCh2ZWN0b3IgYm9vbCBpbnQgX19hLCBpbnQgX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKl9fYykgewotICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4bCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKLX0KLQotc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZ4bCh2ZWN0b3IgYm9vbCBpbnQgX19hLCBpbnQgX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBpbnQgKl9fYykgewotICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4bCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKLX0KLQotc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZ4bCh2ZWN0b3IgZmxvYXQgX19hLCBpbnQgX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgZmxvYXQgKl9fYykgewotICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4bCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKLX0KLQotc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZ4bCh2ZWN0b3IgZmxvYXQgX19hLCBpbnQgX19iLCBmbG9hdCAqX19jKSB7Ci0gIF9fYnVpbHRpbl9hbHRpdmVjX3N0dnhsKCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOwotfQotCi0vKiB2ZWNfc3ViICovCi0KLXN0YXRpYyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY19zdWIodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gX19hIC0gX19iOwotfQotCi1zdGF0aWMgdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfc3ViKHZlY3RvciBib29sIGNoYXIgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYSAtIF9fYjsKLX0KLQotc3RhdGljIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX3N1Yih2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgewotICByZXR1cm4gX19hIC0gKHZlY3RvciBzaWduZWQgY2hhcilfX2I7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX3N1Yih2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7Ci0gIHJldHVybiBfX2EgLSBfX2I7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX3N1Yih2ZWN0b3IgYm9vbCBjaGFyIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EgLSBfX2I7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX3N1Yih2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKLSAgcmV0dXJuIF9fYSAtICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2I7Ci19Ci0KLXN0YXRpYyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY19zdWIodmVjdG9yIHNob3J0IF9fYSwgdmVjdG9yIHNob3J0IF9fYikgewotICByZXR1cm4gX19hIC0gX19iOwotfQotCi1zdGF0aWMgdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfc3ViKHZlY3RvciBib29sIHNob3J0IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNob3J0IF9fYikgewotICByZXR1cm4gKHZlY3RvciBzaG9ydClfX2EgLSBfX2I7Ci19Ci0KLXN0YXRpYyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY19zdWIodmVjdG9yIHNob3J0IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7Ci0gIHJldHVybiBfX2EgLSAodmVjdG9yIHNob3J0KV9fYjsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3N1Yih2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7Ci0gIHJldHVybiBfX2EgLSBfX2I7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpIHZlY19zdWIodmVjdG9yIGJvb2wgc2hvcnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSAtIF9fYjsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3N1Yih2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuIF9fYSAtICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19iOwotfQotCi1zdGF0aWMgdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX3N1Yih2ZWN0b3IgaW50IF9fYSwgdmVjdG9yIGludCBfX2IpIHsKLSAgcmV0dXJuIF9fYSAtIF9fYjsKLX0KLQotc3RhdGljIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY19zdWIodmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIGludCBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgaW50KV9fYSAtIF9fYjsKLX0KLQotc3RhdGljIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY19zdWIodmVjdG9yIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IpIHsKLSAgcmV0dXJuIF9fYSAtICh2ZWN0b3IgaW50KV9fYjsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpIHZlY19zdWIodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgewotICByZXR1cm4gX19hIC0gX19iOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkgdmVjX3N1Yih2ZWN0b3IgYm9vbCBpbnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSAtIF9fYjsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpIHZlY19zdWIodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7Ci0gIHJldHVybiBfX2EgLSAodmVjdG9yIHVuc2lnbmVkIGludClfX2I7Ci19Ci0KLSNpZiBkZWZpbmVkKF9fUE9XRVI4X1ZFQ1RPUl9fKSAmJiBkZWZpbmVkKF9fcG93ZXJwYzY0X18pCi1zdGF0aWMgdmVjdG9yIHNpZ25lZCBfX2ludDEyOCBfX0FUVFJTX29fYWkgdmVjX3N1Yih2ZWN0b3Igc2lnbmVkIF9faW50MTI4IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgX19pbnQxMjggX19iKSB7Ci0gIHJldHVybiBfX2EgLSBfX2I7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgX19pbnQxMjggX19BVFRSU19vX2FpCi12ZWNfc3ViKHZlY3RvciB1bnNpZ25lZCBfX2ludDEyOCBfX2EsIHZlY3RvciB1bnNpZ25lZCBfX2ludDEyOCBfX2IpIHsKLSAgcmV0dXJuIF9fYSAtIF9fYjsKLX0KLSNlbmRpZiAvLyBkZWZpbmVkKF9fUE9XRVI4X1ZFQ1RPUl9fKSAmJiBkZWZpbmVkKF9fcG93ZXJwYzY0X18pCi0KLSNpZmRlZiBfX1ZTWF9fCi1zdGF0aWMgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCi12ZWNfc3ViKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7Ci0gIHJldHVybiBfX2EgLSBfX2I7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQotdmVjX3N1Yih2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKLSAgcmV0dXJuIF9fYSAtIF9fYjsKLX0KLQotc3RhdGljIHZlY3RvciBkb3VibGUgX19BVFRSU19vX2FpCi12ZWNfc3ViKHZlY3RvciBkb3VibGUgX19hLCB2ZWN0b3IgZG91YmxlIF9fYikgewotICByZXR1cm4gX19hIC0gX19iOwotfQotI2VuZGlmCi0KLXN0YXRpYyB2ZWN0b3IgZmxvYXQgX19BVFRSU19vX2FpIHZlY19zdWIodmVjdG9yIGZsb2F0IF9fYSwgdmVjdG9yIGZsb2F0IF9fYikgewotICByZXR1cm4gX19hIC0gX19iOwotfQotCi0vKiB2ZWNfdnN1YnVibSAqLwotCi0jZGVmaW5lIF9fYnVpbHRpbl9hbHRpdmVjX3ZzdWJ1Ym0gdmVjX3ZzdWJ1Ym0KLQotc3RhdGljIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX3ZzdWJ1Ym0odmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKLSAgcmV0dXJuIF9fYSAtIF9fYjsKLX0KLQotc3RhdGljIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX3ZzdWJ1Ym0odmVjdG9yIGJvb2wgY2hhciBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYSAtIF9fYjsKLX0KLQotc3RhdGljIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX3ZzdWJ1Ym0odmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGNoYXIgX19iKSB7Ci0gIHJldHVybiBfX2EgLSAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYjsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfdnN1YnVibSh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gX19hIC0gX19iOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY192c3VidWJtKHZlY3RvciBib29sIGNoYXIgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EgLSBfX2I7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX3ZzdWJ1Ym0odmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgewotICByZXR1cm4gX19hIC0gKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYjsKLX0KLQotLyogdmVjX3ZzdWJ1aG0gKi8KLQotI2RlZmluZSBfX2J1aWx0aW5fYWx0aXZlY192c3VidWhtIHZlY192c3VidWhtCi0KLXN0YXRpYyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY192c3VidWhtKHZlY3RvciBzaG9ydCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2hvcnQgX19iKSB7Ci0gIHJldHVybiBfX2EgLSBfX2I7Ci19Ci0KLXN0YXRpYyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY192c3VidWhtKHZlY3RvciBib29sIHNob3J0IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3Igc2hvcnQpX19hIC0gX19iOwotfQotCi1zdGF0aWMgdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfdnN1YnVobSh2ZWN0b3Igc2hvcnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7Ci0gIHJldHVybiBfX2EgLSAodmVjdG9yIHNob3J0KV9fYjsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKLXZlY192c3VidWhtKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuIF9fYSAtIF9fYjsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKLXZlY192c3VidWhtKHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgewotICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EgLSBfX2I7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpIHZlY192c3VidWhtKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuIF9fYSAtICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19iOwotfQotCi0vKiB2ZWNfdnN1YnV3bSAqLwotCi0jZGVmaW5lIF9fYnVpbHRpbl9hbHRpdmVjX3ZzdWJ1d20gdmVjX3ZzdWJ1d20KLQotc3RhdGljIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY192c3VidXdtKHZlY3RvciBpbnQgX19hLCB2ZWN0b3IgaW50IF9fYikgewotICByZXR1cm4gX19hIC0gX19iOwotfQotCi1zdGF0aWMgdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX3ZzdWJ1d20odmVjdG9yIGJvb2wgaW50IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgaW50IF9fYikgewotICByZXR1cm4gKHZlY3RvciBpbnQpX19hIC0gX19iOwotfQotCi1zdGF0aWMgdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX3ZzdWJ1d20odmVjdG9yIGludCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgaW50IF9fYikgewotICByZXR1cm4gX19hIC0gKHZlY3RvciBpbnQpX19iOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkgdmVjX3ZzdWJ1d20odmVjdG9yIHVuc2lnbmVkIGludCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKLSAgcmV0dXJuIF9fYSAtIF9fYjsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpIHZlY192c3VidXdtKHZlY3RvciBib29sIGludCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSAtIF9fYjsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpIHZlY192c3VidXdtKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGludCBfX2IpIHsKLSAgcmV0dXJuIF9fYSAtICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYjsKLX0KLQotLyogdmVjX3ZzdWJmcCAqLwotCi0jZGVmaW5lIF9fYnVpbHRpbl9hbHRpdmVjX3ZzdWJmcCB2ZWNfdnN1YmZwCi0KLXN0YXRpYyB2ZWN0b3IgZmxvYXQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQotdmVjX3ZzdWJmcCh2ZWN0b3IgZmxvYXQgX19hLCB2ZWN0b3IgZmxvYXQgX19iKSB7Ci0gIHJldHVybiBfX2EgLSBfX2I7Ci19Ci0KLS8qIHZlY19zdWJjICovCi0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haSB2ZWNfc3ViYyh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnN1YmN1dyhfX2EsIF9fYik7Ci19Ci0KLSNpZiBkZWZpbmVkKF9fUE9XRVI4X1ZFQ1RPUl9fKSAmJiBkZWZpbmVkKF9fcG93ZXJwYzY0X18pCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIF9faW50MTI4IF9fQVRUUlNfb19haQotdmVjX3N1YmModmVjdG9yIHVuc2lnbmVkIF9faW50MTI4IF9fYSwgdmVjdG9yIHVuc2lnbmVkIF9faW50MTI4IF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnN1YmN1cShfX2EsIF9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3Igc2lnbmVkIF9faW50MTI4IF9fQVRUUlNfb19haQotdmVjX3N1YmModmVjdG9yIHNpZ25lZCBfX2ludDEyOCBfX2EsIHZlY3RvciBzaWduZWQgX19pbnQxMjggX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192c3ViY3VxKF9fYSwgX19iKTsKLX0KLSNlbmRpZiAvLyBkZWZpbmVkKF9fUE9XRVI4X1ZFQ1RPUl9fKSAmJiBkZWZpbmVkKF9fcG93ZXJwYzY0X18pCi0KLS8qIHZlY192c3ViY3V3ICovCi0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKLXZlY192c3ViY3V3KHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnN1YmN1dyhfX2EsIF9fYik7Ci19Ci0KLS8qIHZlY19zdWJzICovCi0KLXN0YXRpYyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY19zdWJzKHZlY3RvciBzaWduZWQgY2hhciBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192c3Vic2JzKF9fYSwgX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX3N1YnModmVjdG9yIGJvb2wgY2hhciBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192c3Vic2JzKCh2ZWN0b3Igc2lnbmVkIGNoYXIpX19hLCBfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfc3Vicyh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZzdWJzYnMoX19hLCAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX3N1YnModmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZzdWJ1YnMoX19hLCBfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY19zdWJzKHZlY3RvciBib29sIGNoYXIgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZzdWJ1YnMoKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfc3Vicyh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGNoYXIgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192c3VidWJzKF9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY19zdWJzKHZlY3RvciBzaG9ydCBfX2EsIHZlY3RvciBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZzdWJzaHMoX19hLCBfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfc3Vicyh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2hvcnQgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192c3Vic2hzKCh2ZWN0b3Igc2hvcnQpX19hLCBfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfc3Vicyh2ZWN0b3Igc2hvcnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192c3Vic2hzKF9fYSwgKHZlY3RvciBzaG9ydClfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfc3Vicyh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnN1YnVocyhfX2EsIF9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpIHZlY19zdWJzKHZlY3RvciBib29sIHNob3J0IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZzdWJ1aHMoKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EsIF9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpIHZlY19zdWJzKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZzdWJ1aHMoX19hLCAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfc3Vicyh2ZWN0b3IgaW50IF9fYSwgdmVjdG9yIGludCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZzdWJzd3MoX19hLCBfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX3N1YnModmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIGludCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZzdWJzd3MoKHZlY3RvciBpbnQpX19hLCBfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX3N1YnModmVjdG9yIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZzdWJzd3MoX19hLCAodmVjdG9yIGludClfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkgdmVjX3N1YnModmVjdG9yIHVuc2lnbmVkIGludCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZzdWJ1d3MoX19hLCBfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkgdmVjX3N1YnModmVjdG9yIGJvb2wgaW50IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnN1YnV3cygodmVjdG9yIHVuc2lnbmVkIGludClfX2EsIF9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haSB2ZWNfc3Vicyh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192c3VidXdzKF9fYSwgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iKTsKLX0KLQotLyogdmVjX3ZzdWJzYnMgKi8KLQotc3RhdGljIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX3ZzdWJzYnModmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZzdWJzYnMoX19hLCBfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfdnN1YnNicyh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZzdWJzYnMoKHZlY3RvciBzaWduZWQgY2hhcilfX2EsIF9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY192c3Vic2JzKHZlY3RvciBzaWduZWQgY2hhciBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnN1YnNicyhfX2EsICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19iKTsKLX0KLQotLyogdmVjX3ZzdWJ1YnMgKi8KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfdnN1YnVicyh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnN1YnVicyhfX2EsIF9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX3ZzdWJ1YnModmVjdG9yIGJvb2wgY2hhciBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnN1YnVicygodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCBfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY192c3VidWJzKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZzdWJ1YnMoX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKLX0KLQotLyogdmVjX3ZzdWJzaHMgKi8KLQotc3RhdGljIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3ZzdWJzaHModmVjdG9yIHNob3J0IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZzdWJzaHMoX19hLCBfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfdnN1YnNocyh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2hvcnQgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192c3Vic2hzKCh2ZWN0b3Igc2hvcnQpX19hLCBfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfdnN1YnNocyh2ZWN0b3Igc2hvcnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192c3Vic2hzKF9fYSwgKHZlY3RvciBzaG9ydClfX2IpOwotfQotCi0vKiB2ZWNfdnN1YnVocyAqLwotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haQotdmVjX3ZzdWJ1aHModmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnN1YnVocyhfX2EsIF9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCi12ZWNfdnN1YnVocyh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZzdWJ1aHMoKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EsIF9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpIHZlY192c3VidWhzKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZzdWJ1aHMoX19hLCAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYik7Ci19Ci0KLS8qIHZlY192c3Vic3dzICovCi0KLXN0YXRpYyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfdnN1YnN3cyh2ZWN0b3IgaW50IF9fYSwgdmVjdG9yIGludCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZzdWJzd3MoX19hLCBfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX3ZzdWJzd3ModmVjdG9yIGJvb2wgaW50IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgaW50IF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnN1YnN3cygodmVjdG9yIGludClfX2EsIF9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfdnN1YnN3cyh2ZWN0b3IgaW50IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192c3Vic3dzKF9fYSwgKHZlY3RvciBpbnQpX19iKTsKLX0KLQotLyogdmVjX3ZzdWJ1d3MgKi8KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpIHZlY192c3VidXdzKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192c3VidXdzKF9fYSwgX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpIHZlY192c3VidXdzKHZlY3RvciBib29sIGludCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZzdWJ1d3MoKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hLCBfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkgdmVjX3ZzdWJ1d3ModmVjdG9yIHVuc2lnbmVkIGludCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgaW50IF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnN1YnV3cyhfX2EsICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYik7Ci19Ci0KLSNpZiBkZWZpbmVkKF9fUE9XRVI4X1ZFQ1RPUl9fKSAmJiBkZWZpbmVkKF9fcG93ZXJwYzY0X18pCi0vKiB2ZWNfdnN1YnVxbSAqLwotCi1zdGF0aWMgdmVjdG9yIHNpZ25lZCBfX2ludDEyOCBfX0FUVFJTX29fYWkKLXZlY192c3VidXFtKHZlY3RvciBzaWduZWQgX19pbnQxMjggX19hLCB2ZWN0b3Igc2lnbmVkIF9faW50MTI4IF9fYikgewotICByZXR1cm4gX19hIC0gX19iOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIF9faW50MTI4IF9fQVRUUlNfb19haQotdmVjX3ZzdWJ1cW0odmVjdG9yIHVuc2lnbmVkIF9faW50MTI4IF9fYSwgdmVjdG9yIHVuc2lnbmVkIF9faW50MTI4IF9fYikgewotICByZXR1cm4gX19hIC0gX19iOwotfQotCi0vKiB2ZWNfdnN1YmV1cW0gKi8KLQotc3RhdGljIHZlY3RvciBzaWduZWQgX19pbnQxMjggX19BVFRSU19vX2FpCi12ZWNfdnN1YmV1cW0odmVjdG9yIHNpZ25lZCBfX2ludDEyOCBfX2EsIHZlY3RvciBzaWduZWQgX19pbnQxMjggX19iLAotICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgX19pbnQxMjggX19jKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192c3ViZXVxbShfX2EsIF9fYiwgX19jKTsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBfX2ludDEyOCBfX0FUVFJTX29fYWkKLXZlY192c3ViZXVxbSh2ZWN0b3IgdW5zaWduZWQgX19pbnQxMjggX19hLCB2ZWN0b3IgdW5zaWduZWQgX19pbnQxMjggX19iLAotICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBfX2ludDEyOCBfX2MpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZzdWJldXFtKF9fYSwgX19iLCBfX2MpOwotfQotCi0vKiB2ZWNfdnN1YmN1cSAqLwotCi1zdGF0aWMgdmVjdG9yIHNpZ25lZCBfX2ludDEyOCBfX0FUVFJTX29fYWkKLXZlY192c3ViY3VxKHZlY3RvciBzaWduZWQgX19pbnQxMjggX19hLCB2ZWN0b3Igc2lnbmVkIF9faW50MTI4IF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnN1YmN1cShfX2EsIF9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgX19pbnQxMjggX19BVFRSU19vX2FpCi12ZWNfdnN1YmN1cSh2ZWN0b3IgdW5zaWduZWQgX19pbnQxMjggX19hLCB2ZWN0b3IgdW5zaWduZWQgX19pbnQxMjggX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192c3ViY3VxKF9fYSwgX19iKTsKLX0KLQotLyogdmVjX3ZzdWJlY3VxICovCi0KLXN0YXRpYyB2ZWN0b3Igc2lnbmVkIF9faW50MTI4IF9fQVRUUlNfb19haQotdmVjX3ZzdWJlY3VxKHZlY3RvciBzaWduZWQgX19pbnQxMjggX19hLCB2ZWN0b3Igc2lnbmVkIF9faW50MTI4IF9fYiwKLSAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIF9faW50MTI4IF9fYykgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnN1YmVjdXEoX19hLCBfX2IsIF9fYyk7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgX19pbnQxMjggX19BVFRSU19vX2FpCi12ZWNfdnN1YmVjdXEodmVjdG9yIHVuc2lnbmVkIF9faW50MTI4IF9fYSwgdmVjdG9yIHVuc2lnbmVkIF9faW50MTI4IF9fYiwKLSAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgX19pbnQxMjggX19jKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192c3ViZWN1cShfX2EsIF9fYiwgX19jKTsKLX0KLSNlbmRpZiAvLyBkZWZpbmVkKF9fUE9XRVI4X1ZFQ1RPUl9fKSAmJiBkZWZpbmVkKF9fcG93ZXJwYzY0X18pCi0KLS8qIHZlY19zdW00cyAqLwotCi1zdGF0aWMgdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX3N1bTRzKHZlY3RvciBzaWduZWQgY2hhciBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBpbnQgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192c3VtNHNicyhfX2EsIF9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haSB2ZWNfc3VtNHModmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnN1bTR1YnMoX19hLCBfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX3N1bTRzKHZlY3RvciBzaWduZWQgc2hvcnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgaW50IF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnN1bTRzaHMoX19hLCBfX2IpOwotfQotCi0vKiB2ZWNfdnN1bTRzYnMgKi8KLQotc3RhdGljIHZlY3RvciBpbnQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQotdmVjX3ZzdW00c2JzKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBpbnQgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192c3VtNHNicyhfX2EsIF9fYik7Ci19Ci0KLS8qIHZlY192c3VtNHVicyAqLwotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGludCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCi12ZWNfdnN1bTR1YnModmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnN1bTR1YnMoX19hLCBfX2IpOwotfQotCi0vKiB2ZWNfdnN1bTRzaHMgKi8KLQotc3RhdGljIHZlY3RvciBpbnQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQotdmVjX3ZzdW00c2hzKHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgaW50IF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnN1bTRzaHMoX19hLCBfX2IpOwotfQotCi0vKiB2ZWNfc3VtMnMgKi8KLQotLyogVGhlIHZzdW0yc3dzIGluc3RydWN0aW9uIGhhcyBhIGJpZy1lbmRpYW4gYmlhcywgc28gdGhhdCB0aGUgc2Vjb25kCi0gICBpbnB1dCB2ZWN0b3IgYW5kIHRoZSByZXN1bHQgYWx3YXlzIHJlZmVyZW5jZSBiaWctZW5kaWFuIGVsZW1lbnRzCi0gICAxIGFuZCAzIChsaXR0bGUtZW5kaWFuIGVsZW1lbnQgMCBhbmQgMikuICBGb3IgZWFzZSBvZiBwb3J0aW5nIHRoZQotICAgcHJvZ3JhbW1lciB3YW50cyBlbGVtZW50cyAxIGFuZCAzIGluIGJvdGggY2FzZXMsIHNvIGZvciBsaXR0bGUKLSAgIGVuZGlhbiB3ZSBtdXN0IHBlcmZvcm0gc29tZSBwZXJtdXRlcy4gICovCi0KLXN0YXRpYyB2ZWN0b3Igc2lnbmVkIGludCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCi12ZWNfc3VtMnModmVjdG9yIGludCBfX2EsIHZlY3RvciBpbnQgX19iKSB7Ci0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSAgdmVjdG9yIGludCBfX2MgPSAodmVjdG9yIHNpZ25lZCBpbnQpdmVjX3Blcm0oCi0gICAgICBfX2IsIF9fYiwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSg0LCA1LCA2LCA3LCAwLCAxLCAyLCAzLCAxMiwgMTMsIDE0LCAxNSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgsIDksIDEwLCAxMSkpOwotICBfX2MgPSBfX2J1aWx0aW5fYWx0aXZlY192c3VtMnN3cyhfX2EsIF9fYyk7Ci0gIHJldHVybiAodmVjdG9yIHNpZ25lZCBpbnQpdmVjX3Blcm0oCi0gICAgICBfX2MsIF9fYywgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSg0LCA1LCA2LCA3LCAwLCAxLCAyLCAzLCAxMiwgMTMsIDE0LCAxNSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgsIDksIDEwLCAxMSkpOwotI2Vsc2UKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZzdW0yc3dzKF9fYSwgX19iKTsKLSNlbmRpZgotfQotCi0vKiB2ZWNfdnN1bTJzd3MgKi8KLQotc3RhdGljIHZlY3RvciBzaWduZWQgaW50IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKLXZlY192c3VtMnN3cyh2ZWN0b3IgaW50IF9fYSwgdmVjdG9yIGludCBfX2IpIHsKLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotICB2ZWN0b3IgaW50IF9fYyA9ICh2ZWN0b3Igc2lnbmVkIGludCl2ZWNfcGVybSgKLSAgICAgIF9fYiwgX19iLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDQsIDUsIDYsIDcsIDAsIDEsIDIsIDMsIDEyLCAxMywgMTQsIDE1LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCwgOSwgMTAsIDExKSk7Ci0gIF9fYyA9IF9fYnVpbHRpbl9hbHRpdmVjX3ZzdW0yc3dzKF9fYSwgX19jKTsKLSAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGludCl2ZWNfcGVybSgKLSAgICAgIF9fYywgX19jLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDQsIDUsIDYsIDcsIDAsIDEsIDIsIDMsIDEyLCAxMywgMTQsIDE1LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCwgOSwgMTAsIDExKSk7Ci0jZWxzZQotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnN1bTJzd3MoX19hLCBfX2IpOwotI2VuZGlmCi19Ci0KLS8qIHZlY19zdW1zICovCi0KLS8qIFRoZSB2c3Vtc3dzIGluc3RydWN0aW9uIGhhcyBhIGJpZy1lbmRpYW4gYmlhcywgc28gdGhhdCB0aGUgc2Vjb25kCi0gICBpbnB1dCB2ZWN0b3IgYW5kIHRoZSByZXN1bHQgYWx3YXlzIHJlZmVyZW5jZSBiaWctZW5kaWFuIGVsZW1lbnQgMwotICAgKGxpdHRsZS1lbmRpYW4gZWxlbWVudCAwKS4gIEZvciBlYXNlIG9mIHBvcnRpbmcgdGhlIHByb2dyYW1tZXIKLSAgIHdhbnRzIGVsZW1lbnQgMyBpbiBib3RoIGNhc2VzLCBzbyBmb3IgbGl0dGxlIGVuZGlhbiB3ZSBtdXN0IHBlcmZvcm0KLSAgIHNvbWUgcGVybXV0ZXMuICAqLwotCi1zdGF0aWMgdmVjdG9yIHNpZ25lZCBpbnQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQotdmVjX3N1bXModmVjdG9yIHNpZ25lZCBpbnQgX19hLCB2ZWN0b3Igc2lnbmVkIGludCBfX2IpIHsKLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotICBfX2IgPSAodmVjdG9yIHNpZ25lZCBpbnQpdmVjX3NwbGF0KF9fYiwgMyk7Ci0gIF9fYiA9IF9fYnVpbHRpbl9hbHRpdmVjX3ZzdW1zd3MoX19hLCBfX2IpOwotICByZXR1cm4gKHZlY3RvciBzaWduZWQgaW50KSgwLCAwLCAwLCBfX2JbMF0pOwotI2Vsc2UKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZzdW1zd3MoX19hLCBfX2IpOwotI2VuZGlmCi19Ci0KLS8qIHZlY192c3Vtc3dzICovCi0KLXN0YXRpYyB2ZWN0b3Igc2lnbmVkIGludCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCi12ZWNfdnN1bXN3cyh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYikgewotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0gIF9fYiA9ICh2ZWN0b3Igc2lnbmVkIGludCl2ZWNfc3BsYXQoX19iLCAzKTsKLSAgX19iID0gX19idWlsdGluX2FsdGl2ZWNfdnN1bXN3cyhfX2EsIF9fYik7Ci0gIHJldHVybiAodmVjdG9yIHNpZ25lZCBpbnQpKDAsIDAsIDAsIF9fYlswXSk7Ci0jZWxzZQotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnN1bXN3cyhfX2EsIF9fYik7Ci0jZW5kaWYKLX0KLQotLyogdmVjX3RydW5jICovCi0KLXN0YXRpYyB2ZWN0b3IgZmxvYXQgX19BVFRSU19vX2FpCi12ZWNfdHJ1bmModmVjdG9yIGZsb2F0IF9fYSkgewotI2lmZGVmIF9fVlNYX18KLSAgcmV0dXJuIF9fYnVpbHRpbl92c3hfeHZyc3BpeihfX2EpOwotI2Vsc2UKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZyZml6KF9fYSk7Ci0jZW5kaWYKLX0KLQotI2lmZGVmIF9fVlNYX18KLXN0YXRpYyB2ZWN0b3IgZG91YmxlIF9fQVRUUlNfb19haSB2ZWNfdHJ1bmModmVjdG9yIGRvdWJsZSBfX2EpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl92c3hfeHZyZHBpeihfX2EpOwotfQotI2VuZGlmCi0KLS8qIHZlY192cmZpeiAqLwotCi1zdGF0aWMgdmVjdG9yIGZsb2F0IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKLXZlY192cmZpeih2ZWN0b3IgZmxvYXQgX19hKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192cmZpeihfX2EpOwotfQotCi0vKiB2ZWNfdW5wYWNraCAqLwotCi0vKiBUaGUgdmVjdG9yIHVucGFjayBpbnN0cnVjdGlvbnMgYWxsIGhhdmUgYSBiaWctZW5kaWFuIGJpYXMsIHNvIGZvcgotICAgbGl0dGxlIGVuZGlhbiB3ZSBtdXN0IHJldmVyc2UgdGhlIG1lYW5pbmdzIG9mICJoaWdoIiBhbmQgImxvdy4iICAqLwotCi1zdGF0aWMgdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfdW5wYWNraCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hKSB7Ci0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3Z1cGtsc2IoKHZlY3RvciBjaGFyKV9fYSk7Ci0jZWxzZQotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnVwa2hzYigodmVjdG9yIGNoYXIpX19hKTsKLSNlbmRpZgotfQotCi1zdGF0aWMgdmVjdG9yIGJvb2wgc2hvcnQgX19BVFRSU19vX2FpIHZlY191bnBhY2toKHZlY3RvciBib29sIGNoYXIgX19hKSB7Ci0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSAgcmV0dXJuICh2ZWN0b3IgYm9vbCBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY192dXBrbHNiKCh2ZWN0b3IgY2hhcilfX2EpOwotI2Vsc2UKLSAgcmV0dXJuICh2ZWN0b3IgYm9vbCBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY192dXBraHNiKCh2ZWN0b3IgY2hhcilfX2EpOwotI2VuZGlmCi19Ci0KLXN0YXRpYyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfdW5wYWNraCh2ZWN0b3Igc2hvcnQgX19hKSB7Ci0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3Z1cGtsc2goX19hKTsKLSNlbHNlCi0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192dXBraHNoKF9fYSk7Ci0jZW5kaWYKLX0KLQotc3RhdGljIHZlY3RvciBib29sIGludCBfX0FUVFJTX29fYWkgdmVjX3VucGFja2godmVjdG9yIGJvb2wgc2hvcnQgX19hKSB7Ci0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSAgcmV0dXJuICh2ZWN0b3IgYm9vbCBpbnQpX19idWlsdGluX2FsdGl2ZWNfdnVwa2xzaCgodmVjdG9yIHNob3J0KV9fYSk7Ci0jZWxzZQotICByZXR1cm4gKHZlY3RvciBib29sIGludClfX2J1aWx0aW5fYWx0aXZlY192dXBraHNoKCh2ZWN0b3Igc2hvcnQpX19hKTsKLSNlbmRpZgotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkgdmVjX3VucGFja2godmVjdG9yIHBpeGVsIF9fYSkgewotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0gIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGludClfX2J1aWx0aW5fYWx0aXZlY192dXBrbHB4KCh2ZWN0b3Igc2hvcnQpX19hKTsKLSNlbHNlCi0gIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGludClfX2J1aWx0aW5fYWx0aXZlY192dXBraHB4KCh2ZWN0b3Igc2hvcnQpX19hKTsKLSNlbmRpZgotfQotCi0jaWZkZWYgX19QT1dFUjhfVkVDVE9SX18KLXN0YXRpYyB2ZWN0b3IgbG9uZyBsb25nIF9fQVRUUlNfb19haSB2ZWNfdW5wYWNraCh2ZWN0b3IgaW50IF9fYSkgewotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192dXBrbHN3KF9fYSk7Ci0jZWxzZQotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnVwa2hzdyhfX2EpOwotI2VuZGlmCi19Ci0KLXN0YXRpYyB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19BVFRSU19vX2FpIHZlY191bnBhY2toKHZlY3RvciBib29sIGludCBfX2EpIHsKLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotICByZXR1cm4gKHZlY3RvciBib29sIGxvbmcgbG9uZylfX2J1aWx0aW5fYWx0aXZlY192dXBrbHN3KCh2ZWN0b3IgaW50KV9fYSk7Ci0jZWxzZQotICByZXR1cm4gKHZlY3RvciBib29sIGxvbmcgbG9uZylfX2J1aWx0aW5fYWx0aXZlY192dXBraHN3KCh2ZWN0b3IgaW50KV9fYSk7Ci0jZW5kaWYKLX0KLSNlbmRpZgotCi0vKiB2ZWNfdnVwa2hzYiAqLwotCi1zdGF0aWMgdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfdnVwa2hzYih2ZWN0b3Igc2lnbmVkIGNoYXIgX19hKSB7Ci0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3Z1cGtsc2IoKHZlY3RvciBjaGFyKV9fYSk7Ci0jZWxzZQotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnVwa2hzYigodmVjdG9yIGNoYXIpX19hKTsKLSNlbmRpZgotfQotCi1zdGF0aWMgdmVjdG9yIGJvb2wgc2hvcnQgX19BVFRSU19vX2FpIHZlY192dXBraHNiKHZlY3RvciBib29sIGNoYXIgX19hKSB7Ci0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSAgcmV0dXJuICh2ZWN0b3IgYm9vbCBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY192dXBrbHNiKCh2ZWN0b3IgY2hhcilfX2EpOwotI2Vsc2UKLSAgcmV0dXJuICh2ZWN0b3IgYm9vbCBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY192dXBraHNiKCh2ZWN0b3IgY2hhcilfX2EpOwotI2VuZGlmCi19Ci0KLS8qIHZlY192dXBraHNoICovCi0KLXN0YXRpYyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfdnVwa2hzaCh2ZWN0b3Igc2hvcnQgX19hKSB7Ci0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3Z1cGtsc2goX19hKTsKLSNlbHNlCi0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192dXBraHNoKF9fYSk7Ci0jZW5kaWYKLX0KLQotc3RhdGljIHZlY3RvciBib29sIGludCBfX0FUVFJTX29fYWkgdmVjX3Z1cGtoc2godmVjdG9yIGJvb2wgc2hvcnQgX19hKSB7Ci0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSAgcmV0dXJuICh2ZWN0b3IgYm9vbCBpbnQpX19idWlsdGluX2FsdGl2ZWNfdnVwa2xzaCgodmVjdG9yIHNob3J0KV9fYSk7Ci0jZWxzZQotICByZXR1cm4gKHZlY3RvciBib29sIGludClfX2J1aWx0aW5fYWx0aXZlY192dXBraHNoKCh2ZWN0b3Igc2hvcnQpX19hKTsKLSNlbmRpZgotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkgdmVjX3Z1cGtoc2godmVjdG9yIHBpeGVsIF9fYSkgewotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0gIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGludClfX2J1aWx0aW5fYWx0aXZlY192dXBrbHB4KCh2ZWN0b3Igc2hvcnQpX19hKTsKLSNlbHNlCi0gIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGludClfX2J1aWx0aW5fYWx0aXZlY192dXBraHB4KCh2ZWN0b3Igc2hvcnQpX19hKTsKLSNlbmRpZgotfQotCi0vKiB2ZWNfdnVwa2hzdyAqLwotCi0jaWZkZWYgX19QT1dFUjhfVkVDVE9SX18KLXN0YXRpYyB2ZWN0b3IgbG9uZyBsb25nIF9fQVRUUlNfb19haSB2ZWNfdnVwa2hzdyh2ZWN0b3IgaW50IF9fYSkgewotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192dXBrbHN3KF9fYSk7Ci0jZWxzZQotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnVwa2hzdyhfX2EpOwotI2VuZGlmCi19Ci0KLXN0YXRpYyB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19BVFRSU19vX2FpIHZlY192dXBraHN3KHZlY3RvciBib29sIGludCBfX2EpIHsKLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotICByZXR1cm4gKHZlY3RvciBib29sIGxvbmcgbG9uZylfX2J1aWx0aW5fYWx0aXZlY192dXBrbHN3KCh2ZWN0b3IgaW50KV9fYSk7Ci0jZWxzZQotICByZXR1cm4gKHZlY3RvciBib29sIGxvbmcgbG9uZylfX2J1aWx0aW5fYWx0aXZlY192dXBraHN3KCh2ZWN0b3IgaW50KV9fYSk7Ci0jZW5kaWYKLX0KLSNlbmRpZgotCi0vKiB2ZWNfdW5wYWNrbCAqLwotCi1zdGF0aWMgdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfdW5wYWNrbCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hKSB7Ci0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3Z1cGtoc2IoKHZlY3RvciBjaGFyKV9fYSk7Ci0jZWxzZQotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnVwa2xzYigodmVjdG9yIGNoYXIpX19hKTsKLSNlbmRpZgotfQotCi1zdGF0aWMgdmVjdG9yIGJvb2wgc2hvcnQgX19BVFRSU19vX2FpIHZlY191bnBhY2tsKHZlY3RvciBib29sIGNoYXIgX19hKSB7Ci0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSAgcmV0dXJuICh2ZWN0b3IgYm9vbCBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY192dXBraHNiKCh2ZWN0b3IgY2hhcilfX2EpOwotI2Vsc2UKLSAgcmV0dXJuICh2ZWN0b3IgYm9vbCBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY192dXBrbHNiKCh2ZWN0b3IgY2hhcilfX2EpOwotI2VuZGlmCi19Ci0KLXN0YXRpYyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfdW5wYWNrbCh2ZWN0b3Igc2hvcnQgX19hKSB7Ci0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3Z1cGtoc2goX19hKTsKLSNlbHNlCi0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192dXBrbHNoKF9fYSk7Ci0jZW5kaWYKLX0KLQotc3RhdGljIHZlY3RvciBib29sIGludCBfX0FUVFJTX29fYWkgdmVjX3VucGFja2wodmVjdG9yIGJvb2wgc2hvcnQgX19hKSB7Ci0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSAgcmV0dXJuICh2ZWN0b3IgYm9vbCBpbnQpX19idWlsdGluX2FsdGl2ZWNfdnVwa2hzaCgodmVjdG9yIHNob3J0KV9fYSk7Ci0jZWxzZQotICByZXR1cm4gKHZlY3RvciBib29sIGludClfX2J1aWx0aW5fYWx0aXZlY192dXBrbHNoKCh2ZWN0b3Igc2hvcnQpX19hKTsKLSNlbmRpZgotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkgdmVjX3VucGFja2wodmVjdG9yIHBpeGVsIF9fYSkgewotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0gIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGludClfX2J1aWx0aW5fYWx0aXZlY192dXBraHB4KCh2ZWN0b3Igc2hvcnQpX19hKTsKLSNlbHNlCi0gIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGludClfX2J1aWx0aW5fYWx0aXZlY192dXBrbHB4KCh2ZWN0b3Igc2hvcnQpX19hKTsKLSNlbmRpZgotfQotCi0jaWZkZWYgX19QT1dFUjhfVkVDVE9SX18KLXN0YXRpYyB2ZWN0b3IgbG9uZyBsb25nIF9fQVRUUlNfb19haSB2ZWNfdW5wYWNrbCh2ZWN0b3IgaW50IF9fYSkgewotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192dXBraHN3KF9fYSk7Ci0jZWxzZQotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnVwa2xzdyhfX2EpOwotI2VuZGlmCi19Ci0KLXN0YXRpYyB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19BVFRSU19vX2FpIHZlY191bnBhY2tsKHZlY3RvciBib29sIGludCBfX2EpIHsKLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotICByZXR1cm4gKHZlY3RvciBib29sIGxvbmcgbG9uZylfX2J1aWx0aW5fYWx0aXZlY192dXBraHN3KCh2ZWN0b3IgaW50KV9fYSk7Ci0jZWxzZQotICByZXR1cm4gKHZlY3RvciBib29sIGxvbmcgbG9uZylfX2J1aWx0aW5fYWx0aXZlY192dXBrbHN3KCh2ZWN0b3IgaW50KV9fYSk7Ci0jZW5kaWYKLX0KLSNlbmRpZgotCi0vKiB2ZWNfdnVwa2xzYiAqLwotCi1zdGF0aWMgdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfdnVwa2xzYih2ZWN0b3Igc2lnbmVkIGNoYXIgX19hKSB7Ci0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3Z1cGtoc2IoKHZlY3RvciBjaGFyKV9fYSk7Ci0jZWxzZQotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnVwa2xzYigodmVjdG9yIGNoYXIpX19hKTsKLSNlbmRpZgotfQotCi1zdGF0aWMgdmVjdG9yIGJvb2wgc2hvcnQgX19BVFRSU19vX2FpIHZlY192dXBrbHNiKHZlY3RvciBib29sIGNoYXIgX19hKSB7Ci0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSAgcmV0dXJuICh2ZWN0b3IgYm9vbCBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY192dXBraHNiKCh2ZWN0b3IgY2hhcilfX2EpOwotI2Vsc2UKLSAgcmV0dXJuICh2ZWN0b3IgYm9vbCBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY192dXBrbHNiKCh2ZWN0b3IgY2hhcilfX2EpOwotI2VuZGlmCi19Ci0KLS8qIHZlY192dXBrbHNoICovCi0KLXN0YXRpYyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfdnVwa2xzaCh2ZWN0b3Igc2hvcnQgX19hKSB7Ci0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3Z1cGtoc2goX19hKTsKLSNlbHNlCi0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192dXBrbHNoKF9fYSk7Ci0jZW5kaWYKLX0KLQotc3RhdGljIHZlY3RvciBib29sIGludCBfX0FUVFJTX29fYWkgdmVjX3Z1cGtsc2godmVjdG9yIGJvb2wgc2hvcnQgX19hKSB7Ci0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSAgcmV0dXJuICh2ZWN0b3IgYm9vbCBpbnQpX19idWlsdGluX2FsdGl2ZWNfdnVwa2hzaCgodmVjdG9yIHNob3J0KV9fYSk7Ci0jZWxzZQotICByZXR1cm4gKHZlY3RvciBib29sIGludClfX2J1aWx0aW5fYWx0aXZlY192dXBrbHNoKCh2ZWN0b3Igc2hvcnQpX19hKTsKLSNlbmRpZgotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkgdmVjX3Z1cGtsc2godmVjdG9yIHBpeGVsIF9fYSkgewotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0gIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGludClfX2J1aWx0aW5fYWx0aXZlY192dXBraHB4KCh2ZWN0b3Igc2hvcnQpX19hKTsKLSNlbHNlCi0gIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGludClfX2J1aWx0aW5fYWx0aXZlY192dXBrbHB4KCh2ZWN0b3Igc2hvcnQpX19hKTsKLSNlbmRpZgotfQotCi0vKiB2ZWNfdnVwa2xzdyAqLwotCi0jaWZkZWYgX19QT1dFUjhfVkVDVE9SX18KLXN0YXRpYyB2ZWN0b3IgbG9uZyBsb25nIF9fQVRUUlNfb19haSB2ZWNfdnVwa2xzdyh2ZWN0b3IgaW50IF9fYSkgewotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192dXBraHN3KF9fYSk7Ci0jZWxzZQotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnVwa2xzdyhfX2EpOwotI2VuZGlmCi19Ci0KLXN0YXRpYyB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19BVFRSU19vX2FpIHZlY192dXBrbHN3KHZlY3RvciBib29sIGludCBfX2EpIHsKLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotICByZXR1cm4gKHZlY3RvciBib29sIGxvbmcgbG9uZylfX2J1aWx0aW5fYWx0aXZlY192dXBraHN3KCh2ZWN0b3IgaW50KV9fYSk7Ci0jZWxzZQotICByZXR1cm4gKHZlY3RvciBib29sIGxvbmcgbG9uZylfX2J1aWx0aW5fYWx0aXZlY192dXBrbHN3KCh2ZWN0b3IgaW50KV9fYSk7Ci0jZW5kaWYKLX0KLSNlbmRpZgotCi0vKiB2ZWNfdnN4X2xkICovCi0KLSNpZmRlZiBfX1ZTWF9fCi0KLXN0YXRpYyB2ZWN0b3Igc2lnbmVkIGludCBfX0FUVFJTX29fYWkgdmVjX3ZzeF9sZChpbnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZlY3RvciBzaWduZWQgaW50ICpfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGludClfX2J1aWx0aW5fdnN4X2x4dnc0eChfX2EsIF9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haQotdmVjX3ZzeF9sZChpbnQgX19hLCBjb25zdCB2ZWN0b3IgdW5zaWduZWQgaW50ICpfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYnVpbHRpbl92c3hfbHh2dzR4KF9fYSwgX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciBmbG9hdCBfX0FUVFJTX29fYWkgdmVjX3ZzeF9sZChpbnQgX19hLCBjb25zdCB2ZWN0b3IgZmxvYXQgKl9fYikgewotICByZXR1cm4gKHZlY3RvciBmbG9hdClfX2J1aWx0aW5fdnN4X2x4dnc0eChfX2EsIF9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKLXZlY192c3hfbGQoaW50IF9fYSwgY29uc3QgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgKl9fYikgewotICByZXR1cm4gKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYnVpbHRpbl92c3hfbHh2ZDJ4KF9fYSwgX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCi12ZWNfdnN4X2xkKGludCBfX2EsIGNvbnN0IHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgKl9fYikgewotICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19idWlsdGluX3ZzeF9seHZkMngoX19hLCBfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIGRvdWJsZSBfX0FUVFJTX29fYWkgdmVjX3ZzeF9sZChpbnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmVjdG9yIGRvdWJsZSAqX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIGRvdWJsZSlfX2J1aWx0aW5fdnN4X2x4dmQyeChfX2EsIF9fYik7Ci19Ci0KLSNlbmRpZgotCi0vKiB2ZWNfdnN4X3N0ICovCi0KLSNpZmRlZiBfX1ZTWF9fCi0KLXN0YXRpYyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfdnN4X3N0KHZlY3RvciBzaWduZWQgaW50IF9fYSwgaW50IF9fYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgaW50ICpfX2MpIHsKLSAgX19idWlsdGluX3ZzeF9zdHh2dzR4KCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOwotfQotCi1zdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3ZzeF9zdCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgaW50IF9fYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgKl9fYykgewotICBfX2J1aWx0aW5fdnN4X3N0eHZ3NHgoKHZlY3RvciBpbnQpX19hLCBfX2IsIF9fYyk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfdnN4X3N0KHZlY3RvciBmbG9hdCBfX2EsIGludCBfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgZmxvYXQgKl9fYykgewotICBfX2J1aWx0aW5fdnN4X3N0eHZ3NHgoKHZlY3RvciBpbnQpX19hLCBfX2IsIF9fYyk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfdnN4X3N0KHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgaW50IF9fYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgbG9uZyBsb25nICpfX2MpIHsKLSAgX19idWlsdGluX3ZzeF9zdHh2ZDJ4KCh2ZWN0b3IgZG91YmxlKV9fYSwgX19iLCBfX2MpOwotfQotCi1zdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3ZzeF9zdCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgaW50IF9fYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgKl9fYykgewotICBfX2J1aWx0aW5fdnN4X3N0eHZkMngoKHZlY3RvciBkb3VibGUpX19hLCBfX2IsIF9fYyk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfdnN4X3N0KHZlY3RvciBkb3VibGUgX19hLCBpbnQgX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGRvdWJsZSAqX19jKSB7Ci0gIF9fYnVpbHRpbl92c3hfc3R4dmQyeCgodmVjdG9yIGRvdWJsZSlfX2EsIF9fYiwgX19jKTsKLX0KLQotI2VuZGlmCi0KLS8qIHZlY194b3IgKi8KLQotI2RlZmluZSBfX2J1aWx0aW5fYWx0aXZlY192eG9yIHZlY194b3IKLQotc3RhdGljIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX3hvcih2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7Ci0gIHJldHVybiBfX2EgXiBfX2I7Ci19Ci0KLXN0YXRpYyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY194b3IodmVjdG9yIGJvb2wgY2hhciBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19hIF4gX19iOwotfQotCi1zdGF0aWMgdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfeG9yKHZlY3RvciBzaWduZWQgY2hhciBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGNoYXIgX19iKSB7Ci0gIHJldHVybiBfX2EgXiAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYjsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfeG9yKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKLSAgcmV0dXJuIF9fYSBeIF9fYjsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfeG9yKHZlY3RvciBib29sIGNoYXIgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSBeIF9fYjsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfeG9yKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgewotICByZXR1cm4gX19hIF4gKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYjsKLX0KLQotc3RhdGljIHZlY3RvciBib29sIGNoYXIgX19BVFRSU19vX2FpIHZlY194b3IodmVjdG9yIGJvb2wgY2hhciBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgewotICByZXR1cm4gX19hIF4gX19iOwotfQotCi1zdGF0aWMgdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfeG9yKHZlY3RvciBzaG9ydCBfX2EsIHZlY3RvciBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuIF9fYSBeIF9fYjsKLX0KLQotc3RhdGljIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3hvcih2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3Igc2hvcnQpX19hIF4gX19iOwotfQotCi1zdGF0aWMgdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfeG9yKHZlY3RvciBzaG9ydCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIHNob3J0IF9fYikgewotICByZXR1cm4gX19hIF4gKHZlY3RvciBzaG9ydClfX2I7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpIHZlY194b3IodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgewotICByZXR1cm4gX19hIF4gX19iOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfeG9yKHZlY3RvciBib29sIHNob3J0IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgewotICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EgXiBfX2I7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpIHZlY194b3IodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7Ci0gIHJldHVybiBfX2EgXiAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYjsKLX0KLQotc3RhdGljIHZlY3RvciBib29sIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfeG9yKHZlY3RvciBib29sIHNob3J0IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuIF9fYSBeIF9fYjsKLX0KLQotc3RhdGljIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY194b3IodmVjdG9yIGludCBfX2EsIHZlY3RvciBpbnQgX19iKSB7Ci0gIHJldHVybiBfX2EgXiBfX2I7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfeG9yKHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciBpbnQgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIGludClfX2EgXiBfX2I7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfeG9yKHZlY3RvciBpbnQgX19hLCB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7Ci0gIHJldHVybiBfX2EgXiAodmVjdG9yIGludClfX2I7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haSB2ZWNfeG9yKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKLSAgcmV0dXJuIF9fYSBeIF9fYjsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpIHZlY194b3IodmVjdG9yIGJvb2wgaW50IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGludClfX2EgXiBfX2I7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haSB2ZWNfeG9yKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgaW50IF9fYikgewotICByZXR1cm4gX19hIF4gKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iOwotfQotCi1zdGF0aWMgdmVjdG9yIGJvb2wgaW50IF9fQVRUUlNfb19haSB2ZWNfeG9yKHZlY3RvciBib29sIGludCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGludCBfX2IpIHsKLSAgcmV0dXJuIF9fYSBeIF9fYjsKLX0KLQotc3RhdGljIHZlY3RvciBmbG9hdCBfX0FUVFJTX29fYWkgdmVjX3hvcih2ZWN0b3IgZmxvYXQgX19hLCB2ZWN0b3IgZmxvYXQgX19iKSB7Ci0gIHZlY3RvciB1bnNpZ25lZCBpbnQgX19yZXMgPQotICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hIF4gKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iOwotICByZXR1cm4gKHZlY3RvciBmbG9hdClfX3JlczsKLX0KLQotc3RhdGljIHZlY3RvciBmbG9hdCBfX0FUVFJTX29fYWkgdmVjX3hvcih2ZWN0b3IgYm9vbCBpbnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgZmxvYXQgX19iKSB7Ci0gIHZlY3RvciB1bnNpZ25lZCBpbnQgX19yZXMgPQotICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hIF4gKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iOwotICByZXR1cm4gKHZlY3RvciBmbG9hdClfX3JlczsKLX0KLQotc3RhdGljIHZlY3RvciBmbG9hdCBfX0FUVFJTX29fYWkgdmVjX3hvcih2ZWN0b3IgZmxvYXQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7Ci0gIHZlY3RvciB1bnNpZ25lZCBpbnQgX19yZXMgPQotICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hIF4gKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iOwotICByZXR1cm4gKHZlY3RvciBmbG9hdClfX3JlczsKLX0KLQotI2lmZGVmIF9fVlNYX18KLXN0YXRpYyB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKLXZlY194b3IodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKLSAgcmV0dXJuIF9fYSBeIF9fYjsKLX0KLQotc3RhdGljIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQotdmVjX3hvcih2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2EgXiBfX2I7Ci19Ci0KLXN0YXRpYyB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkgdmVjX3hvcih2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgewotICByZXR1cm4gX19hIF4gKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYjsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCi12ZWNfeG9yKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgewotICByZXR1cm4gX19hIF4gX19iOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKLXZlY194b3IodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYSBeIF9fYjsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCi12ZWNfeG9yKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7Ci0gIHJldHVybiBfX2EgXiAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2I7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19BVFRSU19vX2FpIHZlY194b3IodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgewotICByZXR1cm4gX19hIF4gX19iOwotfQotCi1zdGF0aWMgdmVjdG9yIGRvdWJsZSBfX0FUVFJTX29fYWkKLXZlY194b3IodmVjdG9yIGRvdWJsZSBfX2EsIHZlY3RvciBkb3VibGUgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIGRvdWJsZSkoKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19hIF4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciBkb3VibGUgX19BVFRSU19vX2FpCi12ZWNfeG9yKHZlY3RvciBkb3VibGUgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIGRvdWJsZSkoKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19hIF4KLSAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZykgX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciBkb3VibGUgX19BVFRSU19vX2FpCi12ZWNfeG9yKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBkb3VibGUgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIGRvdWJsZSkoKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19hIF4KLSAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2IpOwotfQotI2VuZGlmCi0KLS8qIHZlY192eG9yICovCi0KLXN0YXRpYyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY192eG9yKHZlY3RvciBzaWduZWQgY2hhciBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7Ci0gIHJldHVybiBfX2EgXiBfX2I7Ci19Ci0KLXN0YXRpYyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY192eG9yKHZlY3RvciBib29sIGNoYXIgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gKHZlY3RvciBzaWduZWQgY2hhcilfX2EgXiBfX2I7Ci19Ci0KLXN0YXRpYyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY192eG9yKHZlY3RvciBzaWduZWQgY2hhciBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgewotICByZXR1cm4gX19hIF4gKHZlY3RvciBzaWduZWQgY2hhcilfX2I7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX3Z4b3IodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKLSAgcmV0dXJuIF9fYSBeIF9fYjsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfdnhvcih2ZWN0b3IgYm9vbCBjaGFyIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hIF4gX19iOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY192eG9yKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKLSAgcmV0dXJuIF9fYSBeICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2I7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgYm9vbCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfdnhvcih2ZWN0b3IgYm9vbCBjaGFyIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgewotICByZXR1cm4gX19hIF4gX19iOwotfQotCi1zdGF0aWMgdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfdnhvcih2ZWN0b3Igc2hvcnQgX19hLCB2ZWN0b3Igc2hvcnQgX19iKSB7Ci0gIHJldHVybiBfX2EgXiBfX2I7Ci19Ci0KLXN0YXRpYyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY192eG9yKHZlY3RvciBib29sIHNob3J0IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3Igc2hvcnQpX19hIF4gX19iOwotfQotCi1zdGF0aWMgdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfdnhvcih2ZWN0b3Igc2hvcnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7Ci0gIHJldHVybiBfX2EgXiAodmVjdG9yIHNob3J0KV9fYjsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3Z4b3IodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuIF9fYSBeIF9fYjsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3Z4b3IodmVjdG9yIGJvb2wgc2hvcnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgewotICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EgXiBfX2I7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpIHZlY192eG9yKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuIF9fYSBeICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19iOwotfQotCi1zdGF0aWMgdmVjdG9yIGJvb2wgc2hvcnQgX19BVFRSU19vX2FpIHZlY192eG9yKHZlY3RvciBib29sIHNob3J0IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7Ci0gIHJldHVybiBfX2EgXiBfX2I7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfdnhvcih2ZWN0b3IgaW50IF9fYSwgdmVjdG9yIGludCBfX2IpIHsKLSAgcmV0dXJuIF9fYSBeIF9fYjsKLX0KLQotc3RhdGljIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY192eG9yKHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciBpbnQgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIGludClfX2EgXiBfX2I7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfdnhvcih2ZWN0b3IgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYikgewotICByZXR1cm4gX19hIF4gKHZlY3RvciBpbnQpX19iOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkgdmVjX3Z4b3IodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKLSAgcmV0dXJuIF9fYSBeIF9fYjsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpIHZlY192eG9yKHZlY3RvciBib29sIGludCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSBeIF9fYjsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpIHZlY192eG9yKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGludCBfX2IpIHsKLSAgcmV0dXJuIF9fYSBeICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYjsKLX0KLQotc3RhdGljIHZlY3RvciBib29sIGludCBfX0FUVFJTX29fYWkgdmVjX3Z4b3IodmVjdG9yIGJvb2wgaW50IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGludCBfX2IpIHsKLSAgcmV0dXJuIF9fYSBeIF9fYjsKLX0KLQotc3RhdGljIHZlY3RvciBmbG9hdCBfX0FUVFJTX29fYWkgdmVjX3Z4b3IodmVjdG9yIGZsb2F0IF9fYSwgdmVjdG9yIGZsb2F0IF9fYikgewotICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fcmVzID0KLSAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSBeICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYjsKLSAgcmV0dXJuICh2ZWN0b3IgZmxvYXQpX19yZXM7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgZmxvYXQgX19BVFRSU19vX2FpIHZlY192eG9yKHZlY3RvciBib29sIGludCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgZmxvYXQgX19iKSB7Ci0gIHZlY3RvciB1bnNpZ25lZCBpbnQgX19yZXMgPQotICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hIF4gKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iOwotICByZXR1cm4gKHZlY3RvciBmbG9hdClfX3JlczsKLX0KLQotc3RhdGljIHZlY3RvciBmbG9hdCBfX0FUVFJTX29fYWkgdmVjX3Z4b3IodmVjdG9yIGZsb2F0IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGludCBfX2IpIHsKLSAgdmVjdG9yIHVuc2lnbmVkIGludCBfX3JlcyA9Ci0gICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2EgXiAodmVjdG9yIHVuc2lnbmVkIGludClfX2I7Ci0gIHJldHVybiAodmVjdG9yIGZsb2F0KV9fcmVzOwotfQotCi0jaWZkZWYgX19WU1hfXwotc3RhdGljIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQotdmVjX3Z4b3IodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKLSAgcmV0dXJuIF9fYSBeIF9fYjsKLX0KLQotc3RhdGljIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQotdmVjX3Z4b3IodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19hIF4gX19iOwotfQotCi1zdGF0aWMgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCi12ZWNfdnhvcih2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKLSAgcmV0dXJuIF9fYSBeICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2I7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQotdmVjX3Z4b3IodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7Ci0gIHJldHVybiBfX2EgXiBfX2I7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQotdmVjX3Z4b3IodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYSBeIF9fYjsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCi12ZWNfdnhvcih2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgewotICByZXR1cm4gX19hIF4gKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19iOwotfQotCi1zdGF0aWMgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fQVRUUlNfb19haSB2ZWNfdnhvcih2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgewotICByZXR1cm4gX19hIF4gX19iOwotfQotI2VuZGlmCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBleHRlbnNpb25zIGZvciBDQkVBIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLS8qIHZlY19leHRyYWN0ICovCi0KLXN0YXRpYyBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX2V4dHJhY3QodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgaW50IF9fYikgewotICByZXR1cm4gX19hW19fYl07Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfZXh0cmFjdCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYikgewotICByZXR1cm4gX19hW19fYl07Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfZXh0cmFjdCh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iKSB7Ci0gIHJldHVybiBfX2FbX19iXTsKLX0KLQotc3RhdGljIHNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX2V4dHJhY3QodmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIGludCBfX2IpIHsKLSAgcmV0dXJuIF9fYVtfX2JdOwotfQotCi1zdGF0aWMgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpIHZlY19leHRyYWN0KHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2IpIHsKLSAgcmV0dXJuIF9fYVtfX2JdOwotfQotCi1zdGF0aWMgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpIHZlY19leHRyYWN0KHZlY3RvciBib29sIHNob3J0IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYikgewotICByZXR1cm4gX19hW19fYl07Ci19Ci0KLXN0YXRpYyBzaWduZWQgaW50IF9fQVRUUlNfb19haSB2ZWNfZXh0cmFjdCh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIGludCBfX2IpIHsKLSAgcmV0dXJuIF9fYVtfX2JdOwotfQotCi1zdGF0aWMgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haSB2ZWNfZXh0cmFjdCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgaW50IF9fYikgewotICByZXR1cm4gX19hW19fYl07Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpIHZlY19leHRyYWN0KHZlY3RvciBib29sIGludCBfX2EsIGludCBfX2IpIHsKLSAgcmV0dXJuIF9fYVtfX2JdOwotfQotCi0jaWZkZWYgX19WU1hfXwotc3RhdGljIHNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpIHZlY19leHRyYWN0KHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iKSB7Ci0gIHJldHVybiBfX2FbX19iXTsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKLXZlY19leHRyYWN0KHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCBpbnQgX19iKSB7Ci0gIHJldHVybiBfX2FbX19iXTsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkgdmVjX2V4dHJhY3QodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2IpIHsKLSAgcmV0dXJuIF9fYVtfX2JdOwotfQotCi1zdGF0aWMgZG91YmxlIF9fQVRUUlNfb19haSB2ZWNfZXh0cmFjdCh2ZWN0b3IgZG91YmxlIF9fYSwgaW50IF9fYikgewotICByZXR1cm4gX19hW19fYl07Ci19Ci0jZW5kaWYKLQotc3RhdGljIGZsb2F0IF9fQVRUUlNfb19haSB2ZWNfZXh0cmFjdCh2ZWN0b3IgZmxvYXQgX19hLCBpbnQgX19iKSB7Ci0gIHJldHVybiBfX2FbX19iXTsKLX0KLQotLyogdmVjX2luc2VydCAqLwotCi1zdGF0aWMgdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfaW5zZXJ0KHNpZ25lZCBjaGFyIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYykgewotICBfX2JbX19jXSA9IF9fYTsKLSAgcmV0dXJuIF9fYjsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfaW5zZXJ0KHVuc2lnbmVkIGNoYXIgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19jKSB7Ci0gIF9fYltfX2NdID0gX19hOwotICByZXR1cm4gX19iOwotfQotCi1zdGF0aWMgdmVjdG9yIGJvb2wgY2hhciBfX0FUVFJTX29fYWkgdmVjX2luc2VydCh1bnNpZ25lZCBjaGFyIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGNoYXIgX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYykgewotICBfX2JbX19jXSA9IF9fYTsKLSAgcmV0dXJuIF9fYjsKLX0KLQotc3RhdGljIHZlY3RvciBzaWduZWQgc2hvcnQgX19BVFRSU19vX2FpIHZlY19pbnNlcnQoc2lnbmVkIHNob3J0IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgc2hvcnQgX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYykgewotICBfX2JbX19jXSA9IF9fYTsKLSAgcmV0dXJuIF9fYjsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX2luc2VydCh1bnNpZ25lZCBzaG9ydCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2MpIHsKLSAgX19iW19fY10gPSBfX2E7Ci0gIHJldHVybiBfX2I7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgYm9vbCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX2luc2VydCh1bnNpZ25lZCBzaG9ydCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgc2hvcnQgX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2MpIHsKLSAgX19iW19fY10gPSBfX2E7Ci0gIHJldHVybiBfX2I7Ci19Ci0KLXN0YXRpYyB2ZWN0b3Igc2lnbmVkIGludCBfX0FUVFJTX29fYWkgdmVjX2luc2VydChzaWduZWQgaW50IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGludCBfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYykgewotICBfX2JbX19jXSA9IF9fYTsKLSAgcmV0dXJuIF9fYjsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpIHZlY19pbnNlcnQodW5zaWduZWQgaW50IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYykgewotICBfX2JbX19jXSA9IF9fYTsKLSAgcmV0dXJuIF9fYjsKLX0KLQotc3RhdGljIHZlY3RvciBib29sIGludCBfX0FUVFJTX29fYWkgdmVjX2luc2VydCh1bnNpZ25lZCBpbnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBpbnQgX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19jKSB7Ci0gIF9fYltfX2NdID0gX19hOwotICByZXR1cm4gX19iOwotfQotCi0jaWZkZWYgX19WU1hfXwotc3RhdGljIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQotdmVjX2luc2VydChzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iLCBpbnQgX19jKSB7Ci0gIF9fYltfX2NdID0gX19hOwotICByZXR1cm4gX19iOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKLXZlY19pbnNlcnQodW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IsIGludCBfX2MpIHsKLSAgX19iW19fY10gPSBfX2E7Ci0gIHJldHVybiBfX2I7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19BVFRSU19vX2FpCi12ZWNfaW5zZXJ0KHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IsIGludCBfX2MpIHsKLSAgX19iW19fY10gPSBfX2E7Ci0gIHJldHVybiBfX2I7Ci19Ci1zdGF0aWMgdmVjdG9yIGRvdWJsZSBfX0FUVFJTX29fYWkgdmVjX2luc2VydChkb3VibGUgX19hLCB2ZWN0b3IgZG91YmxlIF9fYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2MpIHsKLSAgX19iW19fY10gPSBfX2E7Ci0gIHJldHVybiBfX2I7Ci19Ci0jZW5kaWYKLQotc3RhdGljIHZlY3RvciBmbG9hdCBfX0FUVFJTX29fYWkgdmVjX2luc2VydChmbG9hdCBfX2EsIHZlY3RvciBmbG9hdCBfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2MpIHsKLSAgX19iW19fY10gPSBfX2E7Ci0gIHJldHVybiBfX2I7Ci19Ci0KLS8qIHZlY19sdmx4ICovCi0KLXN0YXRpYyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY19sdmx4KGludCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzaWduZWQgY2hhciAqX19iKSB7Ci0gIHJldHVybiB2ZWNfcGVybSh2ZWNfbGQoX19hLCBfX2IpLCAodmVjdG9yIHNpZ25lZCBjaGFyKSgwKSwKLSAgICAgICAgICAgICAgICAgIHZlY19sdnNsKF9fYSwgX19iKSk7Ci19Ci0KLXN0YXRpYyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY19sdmx4KGludCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2ZWN0b3Igc2lnbmVkIGNoYXIgKl9fYikgewotICByZXR1cm4gdmVjX3Blcm0odmVjX2xkKF9fYSwgX19iKSwgKHZlY3RvciBzaWduZWQgY2hhcikoMCksCi0gICAgICAgICAgICAgICAgICB2ZWNfbHZzbChfX2EsICh1bnNpZ25lZCBjaGFyICopX19iKSk7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX2x2bHgoaW50IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqX19iKSB7Ci0gIHJldHVybiB2ZWNfcGVybSh2ZWNfbGQoX19hLCBfX2IpLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDApLAotICAgICAgICAgICAgICAgICAgdmVjX2x2c2woX19hLCBfX2IpKTsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQotdmVjX2x2bHgoaW50IF9fYSwgY29uc3QgdmVjdG9yIHVuc2lnbmVkIGNoYXIgKl9fYikgewotICByZXR1cm4gdmVjX3Blcm0odmVjX2xkKF9fYSwgX19iKSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgwKSwKLSAgICAgICAgICAgICAgICAgIHZlY19sdnNsKF9fYSwgKHVuc2lnbmVkIGNoYXIgKilfX2IpKTsKLX0KLQotc3RhdGljIHZlY3RvciBib29sIGNoYXIgX19BVFRSU19vX2FpIHZlY19sdmx4KGludCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmVjdG9yIGJvb2wgY2hhciAqX19iKSB7Ci0gIHJldHVybiB2ZWNfcGVybSh2ZWNfbGQoX19hLCBfX2IpLCAodmVjdG9yIGJvb2wgY2hhcikoMCksCi0gICAgICAgICAgICAgICAgICB2ZWNfbHZzbChfX2EsICh1bnNpZ25lZCBjaGFyICopX19iKSk7Ci19Ci0KLXN0YXRpYyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY19sdmx4KGludCBfX2EsIGNvbnN0IHNob3J0ICpfX2IpIHsKLSAgcmV0dXJuIHZlY19wZXJtKHZlY19sZChfX2EsIF9fYiksICh2ZWN0b3Igc2hvcnQpKDApLCB2ZWNfbHZzbChfX2EsIF9fYikpOwotfQotCi1zdGF0aWMgdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfbHZseChpbnQgX19hLCBjb25zdCB2ZWN0b3Igc2hvcnQgKl9fYikgewotICByZXR1cm4gdmVjX3Blcm0odmVjX2xkKF9fYSwgX19iKSwgKHZlY3RvciBzaG9ydCkoMCksCi0gICAgICAgICAgICAgICAgICB2ZWNfbHZzbChfX2EsICh1bnNpZ25lZCBjaGFyICopX19iKSk7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpIHZlY19sdmx4KGludCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCAqX19iKSB7Ci0gIHJldHVybiB2ZWNfcGVybSh2ZWNfbGQoX19hLCBfX2IpLCAodmVjdG9yIHVuc2lnbmVkIHNob3J0KSgwKSwKLSAgICAgICAgICAgICAgICAgIHZlY19sdnNsKF9fYSwgX19iKSk7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCi12ZWNfbHZseChpbnQgX19hLCBjb25zdCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgKl9fYikgewotICByZXR1cm4gdmVjX3Blcm0odmVjX2xkKF9fYSwgX19iKSwgKHZlY3RvciB1bnNpZ25lZCBzaG9ydCkoMCksCi0gICAgICAgICAgICAgICAgICB2ZWNfbHZzbChfX2EsICh1bnNpZ25lZCBjaGFyICopX19iKSk7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgYm9vbCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX2x2bHgoaW50IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmVjdG9yIGJvb2wgc2hvcnQgKl9fYikgewotICByZXR1cm4gdmVjX3Blcm0odmVjX2xkKF9fYSwgX19iKSwgKHZlY3RvciBib29sIHNob3J0KSgwKSwKLSAgICAgICAgICAgICAgICAgIHZlY19sdnNsKF9fYSwgKHVuc2lnbmVkIGNoYXIgKilfX2IpKTsKLX0KLQotc3RhdGljIHZlY3RvciBwaXhlbCBfX0FUVFJTX29fYWkgdmVjX2x2bHgoaW50IF9fYSwgY29uc3QgdmVjdG9yIHBpeGVsICpfX2IpIHsKLSAgcmV0dXJuIHZlY19wZXJtKHZlY19sZChfX2EsIF9fYiksICh2ZWN0b3IgcGl4ZWwpKDApLAotICAgICAgICAgICAgICAgICAgdmVjX2x2c2woX19hLCAodW5zaWduZWQgY2hhciAqKV9fYikpOwotfQotCi1zdGF0aWMgdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX2x2bHgoaW50IF9fYSwgY29uc3QgaW50ICpfX2IpIHsKLSAgcmV0dXJuIHZlY19wZXJtKHZlY19sZChfX2EsIF9fYiksICh2ZWN0b3IgaW50KSgwKSwgdmVjX2x2c2woX19hLCBfX2IpKTsKLX0KLQotc3RhdGljIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY19sdmx4KGludCBfX2EsIGNvbnN0IHZlY3RvciBpbnQgKl9fYikgewotICByZXR1cm4gdmVjX3Blcm0odmVjX2xkKF9fYSwgX19iKSwgKHZlY3RvciBpbnQpKDApLAotICAgICAgICAgICAgICAgICAgdmVjX2x2c2woX19hLCAodW5zaWduZWQgY2hhciAqKV9fYikpOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkgdmVjX2x2bHgoaW50IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgKl9fYikgewotICByZXR1cm4gdmVjX3Blcm0odmVjX2xkKF9fYSwgX19iKSwgKHZlY3RvciB1bnNpZ25lZCBpbnQpKDApLAotICAgICAgICAgICAgICAgICAgdmVjX2x2c2woX19hLCBfX2IpKTsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpCi12ZWNfbHZseChpbnQgX19hLCBjb25zdCB2ZWN0b3IgdW5zaWduZWQgaW50ICpfX2IpIHsKLSAgcmV0dXJuIHZlY19wZXJtKHZlY19sZChfX2EsIF9fYiksICh2ZWN0b3IgdW5zaWduZWQgaW50KSgwKSwKLSAgICAgICAgICAgICAgICAgIHZlY19sdnNsKF9fYSwgKHVuc2lnbmVkIGNoYXIgKilfX2IpKTsKLX0KLQotc3RhdGljIHZlY3RvciBib29sIGludCBfX0FUVFJTX29fYWkgdmVjX2x2bHgoaW50IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZlY3RvciBib29sIGludCAqX19iKSB7Ci0gIHJldHVybiB2ZWNfcGVybSh2ZWNfbGQoX19hLCBfX2IpLCAodmVjdG9yIGJvb2wgaW50KSgwKSwKLSAgICAgICAgICAgICAgICAgIHZlY19sdnNsKF9fYSwgKHVuc2lnbmVkIGNoYXIgKilfX2IpKTsKLX0KLQotc3RhdGljIHZlY3RvciBmbG9hdCBfX0FUVFJTX29fYWkgdmVjX2x2bHgoaW50IF9fYSwgY29uc3QgZmxvYXQgKl9fYikgewotICByZXR1cm4gdmVjX3Blcm0odmVjX2xkKF9fYSwgX19iKSwgKHZlY3RvciBmbG9hdCkoMCksIHZlY19sdnNsKF9fYSwgX19iKSk7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgZmxvYXQgX19BVFRSU19vX2FpIHZlY19sdmx4KGludCBfX2EsIGNvbnN0IHZlY3RvciBmbG9hdCAqX19iKSB7Ci0gIHJldHVybiB2ZWNfcGVybSh2ZWNfbGQoX19hLCBfX2IpLCAodmVjdG9yIGZsb2F0KSgwKSwKLSAgICAgICAgICAgICAgICAgIHZlY19sdnNsKF9fYSwgKHVuc2lnbmVkIGNoYXIgKilfX2IpKTsKLX0KLQotLyogdmVjX2x2bHhsICovCi0KLXN0YXRpYyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY19sdmx4bChpbnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpZ25lZCBjaGFyICpfX2IpIHsKLSAgcmV0dXJuIHZlY19wZXJtKHZlY19sZGwoX19hLCBfX2IpLCAodmVjdG9yIHNpZ25lZCBjaGFyKSgwKSwKLSAgICAgICAgICAgICAgICAgIHZlY19sdnNsKF9fYSwgX19iKSk7Ci19Ci0KLXN0YXRpYyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCi12ZWNfbHZseGwoaW50IF9fYSwgY29uc3QgdmVjdG9yIHNpZ25lZCBjaGFyICpfX2IpIHsKLSAgcmV0dXJuIHZlY19wZXJtKHZlY19sZGwoX19hLCBfX2IpLCAodmVjdG9yIHNpZ25lZCBjaGFyKSgwKSwKLSAgICAgICAgICAgICAgICAgIHZlY19sdnNsKF9fYSwgKHVuc2lnbmVkIGNoYXIgKilfX2IpKTsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfbHZseGwoaW50IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKl9fYikgewotICByZXR1cm4gdmVjX3Blcm0odmVjX2xkbChfX2EsIF9fYiksICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMCksCi0gICAgICAgICAgICAgICAgICB2ZWNfbHZzbChfX2EsIF9fYikpOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCi12ZWNfbHZseGwoaW50IF9fYSwgY29uc3QgdmVjdG9yIHVuc2lnbmVkIGNoYXIgKl9fYikgewotICByZXR1cm4gdmVjX3Blcm0odmVjX2xkbChfX2EsIF9fYiksICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMCksCi0gICAgICAgICAgICAgICAgICB2ZWNfbHZzbChfX2EsICh1bnNpZ25lZCBjaGFyICopX19iKSk7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgYm9vbCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfbHZseGwoaW50IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmVjdG9yIGJvb2wgY2hhciAqX19iKSB7Ci0gIHJldHVybiB2ZWNfcGVybSh2ZWNfbGRsKF9fYSwgX19iKSwgKHZlY3RvciBib29sIGNoYXIpKDApLAotICAgICAgICAgICAgICAgICAgdmVjX2x2c2woX19hLCAodW5zaWduZWQgY2hhciAqKV9fYikpOwotfQotCi1zdGF0aWMgdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfbHZseGwoaW50IF9fYSwgY29uc3Qgc2hvcnQgKl9fYikgewotICByZXR1cm4gdmVjX3Blcm0odmVjX2xkbChfX2EsIF9fYiksICh2ZWN0b3Igc2hvcnQpKDApLCB2ZWNfbHZzbChfX2EsIF9fYikpOwotfQotCi1zdGF0aWMgdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfbHZseGwoaW50IF9fYSwgY29uc3QgdmVjdG9yIHNob3J0ICpfX2IpIHsKLSAgcmV0dXJuIHZlY19wZXJtKHZlY19sZGwoX19hLCBfX2IpLCAodmVjdG9yIHNob3J0KSgwKSwKLSAgICAgICAgICAgICAgICAgIHZlY19sdnNsKF9fYSwgKHVuc2lnbmVkIGNoYXIgKilfX2IpKTsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX2x2bHhsKGludCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgKl9fYikgewotICByZXR1cm4gdmVjX3Blcm0odmVjX2xkbChfX2EsIF9fYiksICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpKDApLAotICAgICAgICAgICAgICAgICAgdmVjX2x2c2woX19hLCBfX2IpKTsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKLXZlY19sdmx4bChpbnQgX19hLCBjb25zdCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgKl9fYikgewotICByZXR1cm4gdmVjX3Blcm0odmVjX2xkbChfX2EsIF9fYiksICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpKDApLAotICAgICAgICAgICAgICAgICAgdmVjX2x2c2woX19hLCAodW5zaWduZWQgY2hhciAqKV9fYikpOwotfQotCi1zdGF0aWMgdmVjdG9yIGJvb2wgc2hvcnQgX19BVFRSU19vX2FpIHZlY19sdmx4bChpbnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmVjdG9yIGJvb2wgc2hvcnQgKl9fYikgewotICByZXR1cm4gdmVjX3Blcm0odmVjX2xkbChfX2EsIF9fYiksICh2ZWN0b3IgYm9vbCBzaG9ydCkoMCksCi0gICAgICAgICAgICAgICAgICB2ZWNfbHZzbChfX2EsICh1bnNpZ25lZCBjaGFyICopX19iKSk7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgcGl4ZWwgX19BVFRSU19vX2FpIHZlY19sdmx4bChpbnQgX19hLCBjb25zdCB2ZWN0b3IgcGl4ZWwgKl9fYikgewotICByZXR1cm4gdmVjX3Blcm0odmVjX2xkbChfX2EsIF9fYiksICh2ZWN0b3IgcGl4ZWwpKDApLAotICAgICAgICAgICAgICAgICAgdmVjX2x2c2woX19hLCAodW5zaWduZWQgY2hhciAqKV9fYikpOwotfQotCi1zdGF0aWMgdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX2x2bHhsKGludCBfX2EsIGNvbnN0IGludCAqX19iKSB7Ci0gIHJldHVybiB2ZWNfcGVybSh2ZWNfbGRsKF9fYSwgX19iKSwgKHZlY3RvciBpbnQpKDApLCB2ZWNfbHZzbChfX2EsIF9fYikpOwotfQotCi1zdGF0aWMgdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX2x2bHhsKGludCBfX2EsIGNvbnN0IHZlY3RvciBpbnQgKl9fYikgewotICByZXR1cm4gdmVjX3Blcm0odmVjX2xkbChfX2EsIF9fYiksICh2ZWN0b3IgaW50KSgwKSwKLSAgICAgICAgICAgICAgICAgIHZlY19sdnNsKF9fYSwgKHVuc2lnbmVkIGNoYXIgKilfX2IpKTsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpIHZlY19sdmx4bChpbnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgKl9fYikgewotICByZXR1cm4gdmVjX3Blcm0odmVjX2xkbChfX2EsIF9fYiksICh2ZWN0b3IgdW5zaWduZWQgaW50KSgwKSwKLSAgICAgICAgICAgICAgICAgIHZlY19sdnNsKF9fYSwgX19iKSk7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haQotdmVjX2x2bHhsKGludCBfX2EsIGNvbnN0IHZlY3RvciB1bnNpZ25lZCBpbnQgKl9fYikgewotICByZXR1cm4gdmVjX3Blcm0odmVjX2xkbChfX2EsIF9fYiksICh2ZWN0b3IgdW5zaWduZWQgaW50KSgwKSwKLSAgICAgICAgICAgICAgICAgIHZlY19sdnNsKF9fYSwgKHVuc2lnbmVkIGNoYXIgKilfX2IpKTsKLX0KLQotc3RhdGljIHZlY3RvciBib29sIGludCBfX0FUVFJTX29fYWkgdmVjX2x2bHhsKGludCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmVjdG9yIGJvb2wgaW50ICpfX2IpIHsKLSAgcmV0dXJuIHZlY19wZXJtKHZlY19sZGwoX19hLCBfX2IpLCAodmVjdG9yIGJvb2wgaW50KSgwKSwKLSAgICAgICAgICAgICAgICAgIHZlY19sdnNsKF9fYSwgKHVuc2lnbmVkIGNoYXIgKilfX2IpKTsKLX0KLQotc3RhdGljIHZlY3RvciBmbG9hdCBfX0FUVFJTX29fYWkgdmVjX2x2bHhsKGludCBfX2EsIGNvbnN0IGZsb2F0ICpfX2IpIHsKLSAgcmV0dXJuIHZlY19wZXJtKHZlY19sZGwoX19hLCBfX2IpLCAodmVjdG9yIGZsb2F0KSgwKSwgdmVjX2x2c2woX19hLCBfX2IpKTsKLX0KLQotc3RhdGljIHZlY3RvciBmbG9hdCBfX0FUVFJTX29fYWkgdmVjX2x2bHhsKGludCBfX2EsIHZlY3RvciBmbG9hdCAqX19iKSB7Ci0gIHJldHVybiB2ZWNfcGVybSh2ZWNfbGRsKF9fYSwgX19iKSwgKHZlY3RvciBmbG9hdCkoMCksCi0gICAgICAgICAgICAgICAgICB2ZWNfbHZzbChfX2EsICh1bnNpZ25lZCBjaGFyICopX19iKSk7Ci19Ci0KLS8qIHZlY19sdnJ4ICovCi0KLXN0YXRpYyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY19sdnJ4KGludCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzaWduZWQgY2hhciAqX19iKSB7Ci0gIHJldHVybiB2ZWNfcGVybSgodmVjdG9yIHNpZ25lZCBjaGFyKSgwKSwgdmVjX2xkKF9fYSwgX19iKSwKLSAgICAgICAgICAgICAgICAgIHZlY19sdnNsKF9fYSwgX19iKSk7Ci19Ci0KLXN0YXRpYyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY19sdnJ4KGludCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2ZWN0b3Igc2lnbmVkIGNoYXIgKl9fYikgewotICByZXR1cm4gdmVjX3Blcm0oKHZlY3RvciBzaWduZWQgY2hhcikoMCksIHZlY19sZChfX2EsIF9fYiksCi0gICAgICAgICAgICAgICAgICB2ZWNfbHZzbChfX2EsICh1bnNpZ25lZCBjaGFyICopX19iKSk7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX2x2cngoaW50IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqX19iKSB7Ci0gIHJldHVybiB2ZWNfcGVybSgodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDApLCB2ZWNfbGQoX19hLCBfX2IpLAotICAgICAgICAgICAgICAgICAgdmVjX2x2c2woX19hLCBfX2IpKTsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQotdmVjX2x2cngoaW50IF9fYSwgY29uc3QgdmVjdG9yIHVuc2lnbmVkIGNoYXIgKl9fYikgewotICByZXR1cm4gdmVjX3Blcm0oKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgwKSwgdmVjX2xkKF9fYSwgX19iKSwKLSAgICAgICAgICAgICAgICAgIHZlY19sdnNsKF9fYSwgKHVuc2lnbmVkIGNoYXIgKilfX2IpKTsKLX0KLQotc3RhdGljIHZlY3RvciBib29sIGNoYXIgX19BVFRSU19vX2FpIHZlY19sdnJ4KGludCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmVjdG9yIGJvb2wgY2hhciAqX19iKSB7Ci0gIHJldHVybiB2ZWNfcGVybSgodmVjdG9yIGJvb2wgY2hhcikoMCksIHZlY19sZChfX2EsIF9fYiksCi0gICAgICAgICAgICAgICAgICB2ZWNfbHZzbChfX2EsICh1bnNpZ25lZCBjaGFyICopX19iKSk7Ci19Ci0KLXN0YXRpYyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY19sdnJ4KGludCBfX2EsIGNvbnN0IHNob3J0ICpfX2IpIHsKLSAgcmV0dXJuIHZlY19wZXJtKCh2ZWN0b3Igc2hvcnQpKDApLCB2ZWNfbGQoX19hLCBfX2IpLCB2ZWNfbHZzbChfX2EsIF9fYikpOwotfQotCi1zdGF0aWMgdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfbHZyeChpbnQgX19hLCBjb25zdCB2ZWN0b3Igc2hvcnQgKl9fYikgewotICByZXR1cm4gdmVjX3Blcm0oKHZlY3RvciBzaG9ydCkoMCksIHZlY19sZChfX2EsIF9fYiksCi0gICAgICAgICAgICAgICAgICB2ZWNfbHZzbChfX2EsICh1bnNpZ25lZCBjaGFyICopX19iKSk7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpIHZlY19sdnJ4KGludCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCAqX19iKSB7Ci0gIHJldHVybiB2ZWNfcGVybSgodmVjdG9yIHVuc2lnbmVkIHNob3J0KSgwKSwgdmVjX2xkKF9fYSwgX19iKSwKLSAgICAgICAgICAgICAgICAgIHZlY19sdnNsKF9fYSwgX19iKSk7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCi12ZWNfbHZyeChpbnQgX19hLCBjb25zdCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgKl9fYikgewotICByZXR1cm4gdmVjX3Blcm0oKHZlY3RvciB1bnNpZ25lZCBzaG9ydCkoMCksIHZlY19sZChfX2EsIF9fYiksCi0gICAgICAgICAgICAgICAgICB2ZWNfbHZzbChfX2EsICh1bnNpZ25lZCBjaGFyICopX19iKSk7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgYm9vbCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX2x2cngoaW50IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmVjdG9yIGJvb2wgc2hvcnQgKl9fYikgewotICByZXR1cm4gdmVjX3Blcm0oKHZlY3RvciBib29sIHNob3J0KSgwKSwgdmVjX2xkKF9fYSwgX19iKSwKLSAgICAgICAgICAgICAgICAgIHZlY19sdnNsKF9fYSwgKHVuc2lnbmVkIGNoYXIgKilfX2IpKTsKLX0KLQotc3RhdGljIHZlY3RvciBwaXhlbCBfX0FUVFJTX29fYWkgdmVjX2x2cngoaW50IF9fYSwgY29uc3QgdmVjdG9yIHBpeGVsICpfX2IpIHsKLSAgcmV0dXJuIHZlY19wZXJtKCh2ZWN0b3IgcGl4ZWwpKDApLCB2ZWNfbGQoX19hLCBfX2IpLAotICAgICAgICAgICAgICAgICAgdmVjX2x2c2woX19hLCAodW5zaWduZWQgY2hhciAqKV9fYikpOwotfQotCi1zdGF0aWMgdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX2x2cngoaW50IF9fYSwgY29uc3QgaW50ICpfX2IpIHsKLSAgcmV0dXJuIHZlY19wZXJtKCh2ZWN0b3IgaW50KSgwKSwgdmVjX2xkKF9fYSwgX19iKSwgdmVjX2x2c2woX19hLCBfX2IpKTsKLX0KLQotc3RhdGljIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY19sdnJ4KGludCBfX2EsIGNvbnN0IHZlY3RvciBpbnQgKl9fYikgewotICByZXR1cm4gdmVjX3Blcm0oKHZlY3RvciBpbnQpKDApLCB2ZWNfbGQoX19hLCBfX2IpLAotICAgICAgICAgICAgICAgICAgdmVjX2x2c2woX19hLCAodW5zaWduZWQgY2hhciAqKV9fYikpOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkgdmVjX2x2cngoaW50IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgKl9fYikgewotICByZXR1cm4gdmVjX3Blcm0oKHZlY3RvciB1bnNpZ25lZCBpbnQpKDApLCB2ZWNfbGQoX19hLCBfX2IpLAotICAgICAgICAgICAgICAgICAgdmVjX2x2c2woX19hLCBfX2IpKTsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpCi12ZWNfbHZyeChpbnQgX19hLCBjb25zdCB2ZWN0b3IgdW5zaWduZWQgaW50ICpfX2IpIHsKLSAgcmV0dXJuIHZlY19wZXJtKCh2ZWN0b3IgdW5zaWduZWQgaW50KSgwKSwgdmVjX2xkKF9fYSwgX19iKSwKLSAgICAgICAgICAgICAgICAgIHZlY19sdnNsKF9fYSwgKHVuc2lnbmVkIGNoYXIgKilfX2IpKTsKLX0KLQotc3RhdGljIHZlY3RvciBib29sIGludCBfX0FUVFJTX29fYWkgdmVjX2x2cngoaW50IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZlY3RvciBib29sIGludCAqX19iKSB7Ci0gIHJldHVybiB2ZWNfcGVybSgodmVjdG9yIGJvb2wgaW50KSgwKSwgdmVjX2xkKF9fYSwgX19iKSwKLSAgICAgICAgICAgICAgICAgIHZlY19sdnNsKF9fYSwgKHVuc2lnbmVkIGNoYXIgKilfX2IpKTsKLX0KLQotc3RhdGljIHZlY3RvciBmbG9hdCBfX0FUVFJTX29fYWkgdmVjX2x2cngoaW50IF9fYSwgY29uc3QgZmxvYXQgKl9fYikgewotICByZXR1cm4gdmVjX3Blcm0oKHZlY3RvciBmbG9hdCkoMCksIHZlY19sZChfX2EsIF9fYiksIHZlY19sdnNsKF9fYSwgX19iKSk7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgZmxvYXQgX19BVFRSU19vX2FpIHZlY19sdnJ4KGludCBfX2EsIGNvbnN0IHZlY3RvciBmbG9hdCAqX19iKSB7Ci0gIHJldHVybiB2ZWNfcGVybSgodmVjdG9yIGZsb2F0KSgwKSwgdmVjX2xkKF9fYSwgX19iKSwKLSAgICAgICAgICAgICAgICAgIHZlY19sdnNsKF9fYSwgKHVuc2lnbmVkIGNoYXIgKilfX2IpKTsKLX0KLQotLyogdmVjX2x2cnhsICovCi0KLXN0YXRpYyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY19sdnJ4bChpbnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpZ25lZCBjaGFyICpfX2IpIHsKLSAgcmV0dXJuIHZlY19wZXJtKCh2ZWN0b3Igc2lnbmVkIGNoYXIpKDApLCB2ZWNfbGRsKF9fYSwgX19iKSwKLSAgICAgICAgICAgICAgICAgIHZlY19sdnNsKF9fYSwgX19iKSk7Ci19Ci0KLXN0YXRpYyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCi12ZWNfbHZyeGwoaW50IF9fYSwgY29uc3QgdmVjdG9yIHNpZ25lZCBjaGFyICpfX2IpIHsKLSAgcmV0dXJuIHZlY19wZXJtKCh2ZWN0b3Igc2lnbmVkIGNoYXIpKDApLCB2ZWNfbGRsKF9fYSwgX19iKSwKLSAgICAgICAgICAgICAgICAgIHZlY19sdnNsKF9fYSwgKHVuc2lnbmVkIGNoYXIgKilfX2IpKTsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfbHZyeGwoaW50IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKl9fYikgewotICByZXR1cm4gdmVjX3Blcm0oKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgwKSwgdmVjX2xkbChfX2EsIF9fYiksCi0gICAgICAgICAgICAgICAgICB2ZWNfbHZzbChfX2EsIF9fYikpOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCi12ZWNfbHZyeGwoaW50IF9fYSwgY29uc3QgdmVjdG9yIHVuc2lnbmVkIGNoYXIgKl9fYikgewotICByZXR1cm4gdmVjX3Blcm0oKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgwKSwgdmVjX2xkbChfX2EsIF9fYiksCi0gICAgICAgICAgICAgICAgICB2ZWNfbHZzbChfX2EsICh1bnNpZ25lZCBjaGFyICopX19iKSk7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgYm9vbCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfbHZyeGwoaW50IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmVjdG9yIGJvb2wgY2hhciAqX19iKSB7Ci0gIHJldHVybiB2ZWNfcGVybSgodmVjdG9yIGJvb2wgY2hhcikoMCksIHZlY19sZGwoX19hLCBfX2IpLAotICAgICAgICAgICAgICAgICAgdmVjX2x2c2woX19hLCAodW5zaWduZWQgY2hhciAqKV9fYikpOwotfQotCi1zdGF0aWMgdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfbHZyeGwoaW50IF9fYSwgY29uc3Qgc2hvcnQgKl9fYikgewotICByZXR1cm4gdmVjX3Blcm0oKHZlY3RvciBzaG9ydCkoMCksIHZlY19sZGwoX19hLCBfX2IpLCB2ZWNfbHZzbChfX2EsIF9fYikpOwotfQotCi1zdGF0aWMgdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfbHZyeGwoaW50IF9fYSwgY29uc3QgdmVjdG9yIHNob3J0ICpfX2IpIHsKLSAgcmV0dXJuIHZlY19wZXJtKCh2ZWN0b3Igc2hvcnQpKDApLCB2ZWNfbGRsKF9fYSwgX19iKSwKLSAgICAgICAgICAgICAgICAgIHZlY19sdnNsKF9fYSwgKHVuc2lnbmVkIGNoYXIgKilfX2IpKTsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX2x2cnhsKGludCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgKl9fYikgewotICByZXR1cm4gdmVjX3Blcm0oKHZlY3RvciB1bnNpZ25lZCBzaG9ydCkoMCksIHZlY19sZGwoX19hLCBfX2IpLAotICAgICAgICAgICAgICAgICAgdmVjX2x2c2woX19hLCBfX2IpKTsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKLXZlY19sdnJ4bChpbnQgX19hLCBjb25zdCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgKl9fYikgewotICByZXR1cm4gdmVjX3Blcm0oKHZlY3RvciB1bnNpZ25lZCBzaG9ydCkoMCksIHZlY19sZGwoX19hLCBfX2IpLAotICAgICAgICAgICAgICAgICAgdmVjX2x2c2woX19hLCAodW5zaWduZWQgY2hhciAqKV9fYikpOwotfQotCi1zdGF0aWMgdmVjdG9yIGJvb2wgc2hvcnQgX19BVFRSU19vX2FpIHZlY19sdnJ4bChpbnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmVjdG9yIGJvb2wgc2hvcnQgKl9fYikgewotICByZXR1cm4gdmVjX3Blcm0oKHZlY3RvciBib29sIHNob3J0KSgwKSwgdmVjX2xkbChfX2EsIF9fYiksCi0gICAgICAgICAgICAgICAgICB2ZWNfbHZzbChfX2EsICh1bnNpZ25lZCBjaGFyICopX19iKSk7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgcGl4ZWwgX19BVFRSU19vX2FpIHZlY19sdnJ4bChpbnQgX19hLCBjb25zdCB2ZWN0b3IgcGl4ZWwgKl9fYikgewotICByZXR1cm4gdmVjX3Blcm0oKHZlY3RvciBwaXhlbCkoMCksIHZlY19sZGwoX19hLCBfX2IpLAotICAgICAgICAgICAgICAgICAgdmVjX2x2c2woX19hLCAodW5zaWduZWQgY2hhciAqKV9fYikpOwotfQotCi1zdGF0aWMgdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX2x2cnhsKGludCBfX2EsIGNvbnN0IGludCAqX19iKSB7Ci0gIHJldHVybiB2ZWNfcGVybSgodmVjdG9yIGludCkoMCksIHZlY19sZGwoX19hLCBfX2IpLCB2ZWNfbHZzbChfX2EsIF9fYikpOwotfQotCi1zdGF0aWMgdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX2x2cnhsKGludCBfX2EsIGNvbnN0IHZlY3RvciBpbnQgKl9fYikgewotICByZXR1cm4gdmVjX3Blcm0oKHZlY3RvciBpbnQpKDApLCB2ZWNfbGRsKF9fYSwgX19iKSwKLSAgICAgICAgICAgICAgICAgIHZlY19sdnNsKF9fYSwgKHVuc2lnbmVkIGNoYXIgKilfX2IpKTsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpIHZlY19sdnJ4bChpbnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgKl9fYikgewotICByZXR1cm4gdmVjX3Blcm0oKHZlY3RvciB1bnNpZ25lZCBpbnQpKDApLCB2ZWNfbGRsKF9fYSwgX19iKSwKLSAgICAgICAgICAgICAgICAgIHZlY19sdnNsKF9fYSwgX19iKSk7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haQotdmVjX2x2cnhsKGludCBfX2EsIGNvbnN0IHZlY3RvciB1bnNpZ25lZCBpbnQgKl9fYikgewotICByZXR1cm4gdmVjX3Blcm0oKHZlY3RvciB1bnNpZ25lZCBpbnQpKDApLCB2ZWNfbGRsKF9fYSwgX19iKSwKLSAgICAgICAgICAgICAgICAgIHZlY19sdnNsKF9fYSwgKHVuc2lnbmVkIGNoYXIgKilfX2IpKTsKLX0KLQotc3RhdGljIHZlY3RvciBib29sIGludCBfX0FUVFJTX29fYWkgdmVjX2x2cnhsKGludCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmVjdG9yIGJvb2wgaW50ICpfX2IpIHsKLSAgcmV0dXJuIHZlY19wZXJtKCh2ZWN0b3IgYm9vbCBpbnQpKDApLCB2ZWNfbGRsKF9fYSwgX19iKSwKLSAgICAgICAgICAgICAgICAgIHZlY19sdnNsKF9fYSwgKHVuc2lnbmVkIGNoYXIgKilfX2IpKTsKLX0KLQotc3RhdGljIHZlY3RvciBmbG9hdCBfX0FUVFJTX29fYWkgdmVjX2x2cnhsKGludCBfX2EsIGNvbnN0IGZsb2F0ICpfX2IpIHsKLSAgcmV0dXJuIHZlY19wZXJtKCh2ZWN0b3IgZmxvYXQpKDApLCB2ZWNfbGRsKF9fYSwgX19iKSwgdmVjX2x2c2woX19hLCBfX2IpKTsKLX0KLQotc3RhdGljIHZlY3RvciBmbG9hdCBfX0FUVFJTX29fYWkgdmVjX2x2cnhsKGludCBfX2EsIGNvbnN0IHZlY3RvciBmbG9hdCAqX19iKSB7Ci0gIHJldHVybiB2ZWNfcGVybSgodmVjdG9yIGZsb2F0KSgwKSwgdmVjX2xkbChfX2EsIF9fYiksCi0gICAgICAgICAgICAgICAgICB2ZWNfbHZzbChfX2EsICh1bnNpZ25lZCBjaGFyICopX19iKSk7Ci19Ci0KLS8qIHZlY19zdHZseCAqLwotCi1zdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dmx4KHZlY3RvciBzaWduZWQgY2hhciBfX2EsIGludCBfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25lZCBjaGFyICpfX2MpIHsKLSAgcmV0dXJuIHZlY19zdCh2ZWNfcGVybSh2ZWNfbHZyeChfX2IsIF9fYyksIF9fYSwgdmVjX2x2c3IoX19iLCBfX2MpKSwgX19iLAotICAgICAgICAgICAgICAgIF9fYyk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2bHgodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgaW50IF9fYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBjaGFyICpfX2MpIHsKLSAgcmV0dXJuIHZlY19zdCgKLSAgICAgIHZlY19wZXJtKHZlY19sdnJ4KF9fYiwgX19jKSwgX19hLCB2ZWNfbHZzcihfX2IsICh1bnNpZ25lZCBjaGFyICopX19jKSksCi0gICAgICBfX2IsIF9fYyk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2bHgodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCBpbnQgX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpfX2MpIHsKLSAgcmV0dXJuIHZlY19zdCh2ZWNfcGVybSh2ZWNfbHZyeChfX2IsIF9fYyksIF9fYSwgdmVjX2x2c3IoX19iLCBfX2MpKSwgX19iLAotICAgICAgICAgICAgICAgIF9fYyk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2bHgodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCBpbnQgX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciAqX19jKSB7Ci0gIHJldHVybiB2ZWNfc3QoCi0gICAgICB2ZWNfcGVybSh2ZWNfbHZyeChfX2IsIF9fYyksIF9fYSwgdmVjX2x2c3IoX19iLCAodW5zaWduZWQgY2hhciAqKV9fYykpLAotICAgICAgX19iLCBfX2MpOwotfQotCi1zdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dmx4KHZlY3RvciBib29sIGNoYXIgX19hLCBpbnQgX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBjaGFyICpfX2MpIHsKLSAgcmV0dXJuIHZlY19zdCgKLSAgICAgIHZlY19wZXJtKHZlY19sdnJ4KF9fYiwgX19jKSwgX19hLCB2ZWNfbHZzcihfX2IsICh1bnNpZ25lZCBjaGFyICopX19jKSksCi0gICAgICBfX2IsIF9fYyk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2bHgodmVjdG9yIHNob3J0IF9fYSwgaW50IF9fYiwgc2hvcnQgKl9fYykgewotICByZXR1cm4gdmVjX3N0KHZlY19wZXJtKHZlY19sdnJ4KF9fYiwgX19jKSwgX19hLCB2ZWNfbHZzcihfX2IsIF9fYykpLCBfX2IsCi0gICAgICAgICAgICAgICAgX19jKTsKLX0KLQotc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZseCh2ZWN0b3Igc2hvcnQgX19hLCBpbnQgX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2hvcnQgKl9fYykgewotICByZXR1cm4gdmVjX3N0KAotICAgICAgdmVjX3Blcm0odmVjX2x2cngoX19iLCBfX2MpLCBfX2EsIHZlY19sdnNyKF9fYiwgKHVuc2lnbmVkIGNoYXIgKilfX2MpKSwKLSAgICAgIF9fYiwgX19jKTsKLX0KLQotc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZseCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCBpbnQgX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCAqX19jKSB7Ci0gIHJldHVybiB2ZWNfc3QodmVjX3Blcm0odmVjX2x2cngoX19iLCBfX2MpLCBfX2EsIHZlY19sdnNyKF9fYiwgX19jKSksIF9fYiwKLSAgICAgICAgICAgICAgICBfX2MpOwotfQotCi1zdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dmx4KHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIGludCBfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCAqX19jKSB7Ci0gIHJldHVybiB2ZWNfc3QoCi0gICAgICB2ZWNfcGVybSh2ZWNfbHZyeChfX2IsIF9fYyksIF9fYSwgdmVjX2x2c3IoX19iLCAodW5zaWduZWQgY2hhciAqKV9fYykpLAotICAgICAgX19iLCBfX2MpOwotfQotCi1zdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dmx4KHZlY3RvciBib29sIHNob3J0IF9fYSwgaW50IF9fYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgc2hvcnQgKl9fYykgewotICByZXR1cm4gdmVjX3N0KAotICAgICAgdmVjX3Blcm0odmVjX2x2cngoX19iLCBfX2MpLCBfX2EsIHZlY19sdnNyKF9fYiwgKHVuc2lnbmVkIGNoYXIgKilfX2MpKSwKLSAgICAgIF9fYiwgX19jKTsKLX0KLQotc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZseCh2ZWN0b3IgcGl4ZWwgX19hLCBpbnQgX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgcGl4ZWwgKl9fYykgewotICByZXR1cm4gdmVjX3N0KAotICAgICAgdmVjX3Blcm0odmVjX2x2cngoX19iLCBfX2MpLCBfX2EsIHZlY19sdnNyKF9fYiwgKHVuc2lnbmVkIGNoYXIgKilfX2MpKSwKLSAgICAgIF9fYiwgX19jKTsKLX0KLQotc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZseCh2ZWN0b3IgaW50IF9fYSwgaW50IF9fYiwgaW50ICpfX2MpIHsKLSAgcmV0dXJuIHZlY19zdCh2ZWNfcGVybSh2ZWNfbHZyeChfX2IsIF9fYyksIF9fYSwgdmVjX2x2c3IoX19iLCBfX2MpKSwgX19iLAotICAgICAgICAgICAgICAgIF9fYyk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2bHgodmVjdG9yIGludCBfX2EsIGludCBfX2IsIHZlY3RvciBpbnQgKl9fYykgewotICByZXR1cm4gdmVjX3N0KAotICAgICAgdmVjX3Blcm0odmVjX2x2cngoX19iLCBfX2MpLCBfX2EsIHZlY19sdnNyKF9fYiwgKHVuc2lnbmVkIGNoYXIgKilfX2MpKSwKLSAgICAgIF9fYiwgX19jKTsKLX0KLQotc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZseCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgaW50IF9fYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpfX2MpIHsKLSAgcmV0dXJuIHZlY19zdCh2ZWNfcGVybSh2ZWNfbHZyeChfX2IsIF9fYyksIF9fYSwgdmVjX2x2c3IoX19iLCBfX2MpKSwgX19iLAotICAgICAgICAgICAgICAgIF9fYyk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2bHgodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIGludCBfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgKl9fYykgewotICByZXR1cm4gdmVjX3N0KAotICAgICAgdmVjX3Blcm0odmVjX2x2cngoX19iLCBfX2MpLCBfX2EsIHZlY19sdnNyKF9fYiwgKHVuc2lnbmVkIGNoYXIgKilfX2MpKSwKLSAgICAgIF9fYiwgX19jKTsKLX0KLQotc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZseCh2ZWN0b3IgYm9vbCBpbnQgX19hLCBpbnQgX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBpbnQgKl9fYykgewotICByZXR1cm4gdmVjX3N0KAotICAgICAgdmVjX3Blcm0odmVjX2x2cngoX19iLCBfX2MpLCBfX2EsIHZlY19sdnNyKF9fYiwgKHVuc2lnbmVkIGNoYXIgKilfX2MpKSwKLSAgICAgIF9fYiwgX19jKTsKLX0KLQotc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZseCh2ZWN0b3IgZmxvYXQgX19hLCBpbnQgX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgZmxvYXQgKl9fYykgewotICByZXR1cm4gdmVjX3N0KAotICAgICAgdmVjX3Blcm0odmVjX2x2cngoX19iLCBfX2MpLCBfX2EsIHZlY19sdnNyKF9fYiwgKHVuc2lnbmVkIGNoYXIgKilfX2MpKSwKLSAgICAgIF9fYiwgX19jKTsKLX0KLQotLyogdmVjX3N0dmx4bCAqLwotCi1zdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dmx4bCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCBpbnQgX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmVkIGNoYXIgKl9fYykgewotICByZXR1cm4gdmVjX3N0bCh2ZWNfcGVybSh2ZWNfbHZyeChfX2IsIF9fYyksIF9fYSwgdmVjX2x2c3IoX19iLCBfX2MpKSwgX19iLAotICAgICAgICAgICAgICAgICBfX2MpOwotfQotCi1zdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dmx4bCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCBpbnQgX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBjaGFyICpfX2MpIHsKLSAgcmV0dXJuIHZlY19zdGwoCi0gICAgICB2ZWNfcGVybSh2ZWNfbHZyeChfX2IsIF9fYyksIF9fYSwgdmVjX2x2c3IoX19iLCAodW5zaWduZWQgY2hhciAqKV9fYykpLAotICAgICAgX19iLCBfX2MpOwotfQotCi1zdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dmx4bCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIGludCBfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpfX2MpIHsKLSAgcmV0dXJuIHZlY19zdGwodmVjX3Blcm0odmVjX2x2cngoX19iLCBfX2MpLCBfX2EsIHZlY19sdnNyKF9fYiwgX19jKSksIF9fYiwKLSAgICAgICAgICAgICAgICAgX19jKTsKLX0KLQotc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZseGwodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCBpbnQgX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgKl9fYykgewotICByZXR1cm4gdmVjX3N0bCgKLSAgICAgIHZlY19wZXJtKHZlY19sdnJ4KF9fYiwgX19jKSwgX19hLCB2ZWNfbHZzcihfX2IsICh1bnNpZ25lZCBjaGFyICopX19jKSksCi0gICAgICBfX2IsIF9fYyk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2bHhsKHZlY3RvciBib29sIGNoYXIgX19hLCBpbnQgX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgY2hhciAqX19jKSB7Ci0gIHJldHVybiB2ZWNfc3RsKAotICAgICAgdmVjX3Blcm0odmVjX2x2cngoX19iLCBfX2MpLCBfX2EsIHZlY19sdnNyKF9fYiwgKHVuc2lnbmVkIGNoYXIgKilfX2MpKSwKLSAgICAgIF9fYiwgX19jKTsKLX0KLQotc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZseGwodmVjdG9yIHNob3J0IF9fYSwgaW50IF9fYiwgc2hvcnQgKl9fYykgewotICByZXR1cm4gdmVjX3N0bCh2ZWNfcGVybSh2ZWNfbHZyeChfX2IsIF9fYyksIF9fYSwgdmVjX2x2c3IoX19iLCBfX2MpKSwgX19iLAotICAgICAgICAgICAgICAgICBfX2MpOwotfQotCi1zdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dmx4bCh2ZWN0b3Igc2hvcnQgX19hLCBpbnQgX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNob3J0ICpfX2MpIHsKLSAgcmV0dXJuIHZlY19zdGwoCi0gICAgICB2ZWNfcGVybSh2ZWNfbHZyeChfX2IsIF9fYyksIF9fYSwgdmVjX2x2c3IoX19iLCAodW5zaWduZWQgY2hhciAqKV9fYykpLAotICAgICAgX19iLCBfX2MpOwotfQotCi1zdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dmx4bCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCBpbnQgX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgKl9fYykgewotICByZXR1cm4gdmVjX3N0bCh2ZWNfcGVybSh2ZWNfbHZyeChfX2IsIF9fYyksIF9fYSwgdmVjX2x2c3IoX19iLCBfX2MpKSwgX19iLAotICAgICAgICAgICAgICAgICBfX2MpOwotfQotCi1zdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dmx4bCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCBpbnQgX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0ICpfX2MpIHsKLSAgcmV0dXJuIHZlY19zdGwoCi0gICAgICB2ZWNfcGVybSh2ZWNfbHZyeChfX2IsIF9fYyksIF9fYSwgdmVjX2x2c3IoX19iLCAodW5zaWduZWQgY2hhciAqKV9fYykpLAotICAgICAgX19iLCBfX2MpOwotfQotCi1zdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dmx4bCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIGludCBfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBzaG9ydCAqX19jKSB7Ci0gIHJldHVybiB2ZWNfc3RsKAotICAgICAgdmVjX3Blcm0odmVjX2x2cngoX19iLCBfX2MpLCBfX2EsIHZlY19sdnNyKF9fYiwgKHVuc2lnbmVkIGNoYXIgKilfX2MpKSwKLSAgICAgIF9fYiwgX19jKTsKLX0KLQotc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZseGwodmVjdG9yIHBpeGVsIF9fYSwgaW50IF9fYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBwaXhlbCAqX19jKSB7Ci0gIHJldHVybiB2ZWNfc3RsKAotICAgICAgdmVjX3Blcm0odmVjX2x2cngoX19iLCBfX2MpLCBfX2EsIHZlY19sdnNyKF9fYiwgKHVuc2lnbmVkIGNoYXIgKilfX2MpKSwKLSAgICAgIF9fYiwgX19jKTsKLX0KLQotc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZseGwodmVjdG9yIGludCBfX2EsIGludCBfX2IsIGludCAqX19jKSB7Ci0gIHJldHVybiB2ZWNfc3RsKHZlY19wZXJtKHZlY19sdnJ4KF9fYiwgX19jKSwgX19hLCB2ZWNfbHZzcihfX2IsIF9fYykpLCBfX2IsCi0gICAgICAgICAgICAgICAgIF9fYyk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2bHhsKHZlY3RvciBpbnQgX19hLCBpbnQgX19iLCB2ZWN0b3IgaW50ICpfX2MpIHsKLSAgcmV0dXJuIHZlY19zdGwoCi0gICAgICB2ZWNfcGVybSh2ZWNfbHZyeChfX2IsIF9fYyksIF9fYSwgdmVjX2x2c3IoX19iLCAodW5zaWduZWQgY2hhciAqKV9fYykpLAotICAgICAgX19iLCBfX2MpOwotfQotCi1zdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dmx4bCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgaW50IF9fYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqX19jKSB7Ci0gIHJldHVybiB2ZWNfc3RsKHZlY19wZXJtKHZlY19sdnJ4KF9fYiwgX19jKSwgX19hLCB2ZWNfbHZzcihfX2IsIF9fYykpLCBfX2IsCi0gICAgICAgICAgICAgICAgIF9fYyk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2bHhsKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCBpbnQgX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCAqX19jKSB7Ci0gIHJldHVybiB2ZWNfc3RsKAotICAgICAgdmVjX3Blcm0odmVjX2x2cngoX19iLCBfX2MpLCBfX2EsIHZlY19sdnNyKF9fYiwgKHVuc2lnbmVkIGNoYXIgKilfX2MpKSwKLSAgICAgIF9fYiwgX19jKTsKLX0KLQotc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZseGwodmVjdG9yIGJvb2wgaW50IF9fYSwgaW50IF9fYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGludCAqX19jKSB7Ci0gIHJldHVybiB2ZWNfc3RsKAotICAgICAgdmVjX3Blcm0odmVjX2x2cngoX19iLCBfX2MpLCBfX2EsIHZlY19sdnNyKF9fYiwgKHVuc2lnbmVkIGNoYXIgKilfX2MpKSwKLSAgICAgIF9fYiwgX19jKTsKLX0KLQotc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZseGwodmVjdG9yIGZsb2F0IF9fYSwgaW50IF9fYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBmbG9hdCAqX19jKSB7Ci0gIHJldHVybiB2ZWNfc3RsKAotICAgICAgdmVjX3Blcm0odmVjX2x2cngoX19iLCBfX2MpLCBfX2EsIHZlY19sdnNyKF9fYiwgKHVuc2lnbmVkIGNoYXIgKilfX2MpKSwKLSAgICAgIF9fYiwgX19jKTsKLX0KLQotLyogdmVjX3N0dnJ4ICovCi0KLXN0YXRpYyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2cngodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgaW50IF9fYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmVkIGNoYXIgKl9fYykgewotICByZXR1cm4gdmVjX3N0KHZlY19wZXJtKF9fYSwgdmVjX2x2bHgoX19iLCBfX2MpLCB2ZWNfbHZzcihfX2IsIF9fYykpLCBfX2IsCi0gICAgICAgICAgICAgICAgX19jKTsKLX0KLQotc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZyeCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCBpbnQgX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgKl9fYykgewotICByZXR1cm4gdmVjX3N0KAotICAgICAgdmVjX3Blcm0oX19hLCB2ZWNfbHZseChfX2IsIF9fYyksIHZlY19sdnNyKF9fYiwgKHVuc2lnbmVkIGNoYXIgKilfX2MpKSwKLSAgICAgIF9fYiwgX19jKTsKLX0KLQotc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZyeCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIGludCBfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKl9fYykgewotICByZXR1cm4gdmVjX3N0KHZlY19wZXJtKF9fYSwgdmVjX2x2bHgoX19iLCBfX2MpLCB2ZWNfbHZzcihfX2IsIF9fYykpLCBfX2IsCi0gICAgICAgICAgICAgICAgX19jKTsKLX0KLQotc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZyeCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIGludCBfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyICpfX2MpIHsKLSAgcmV0dXJuIHZlY19zdCgKLSAgICAgIHZlY19wZXJtKF9fYSwgdmVjX2x2bHgoX19iLCBfX2MpLCB2ZWNfbHZzcihfX2IsICh1bnNpZ25lZCBjaGFyICopX19jKSksCi0gICAgICBfX2IsIF9fYyk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2cngodmVjdG9yIGJvb2wgY2hhciBfX2EsIGludCBfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGNoYXIgKl9fYykgewotICByZXR1cm4gdmVjX3N0KAotICAgICAgdmVjX3Blcm0oX19hLCB2ZWNfbHZseChfX2IsIF9fYyksIHZlY19sdnNyKF9fYiwgKHVuc2lnbmVkIGNoYXIgKilfX2MpKSwKLSAgICAgIF9fYiwgX19jKTsKLX0KLQotc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZyeCh2ZWN0b3Igc2hvcnQgX19hLCBpbnQgX19iLCBzaG9ydCAqX19jKSB7Ci0gIHJldHVybiB2ZWNfc3QodmVjX3Blcm0oX19hLCB2ZWNfbHZseChfX2IsIF9fYyksIHZlY19sdnNyKF9fYiwgX19jKSksIF9fYiwKLSAgICAgICAgICAgICAgICBfX2MpOwotfQotCi1zdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dnJ4KHZlY3RvciBzaG9ydCBfX2EsIGludCBfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaG9ydCAqX19jKSB7Ci0gIHJldHVybiB2ZWNfc3QoCi0gICAgICB2ZWNfcGVybShfX2EsIHZlY19sdmx4KF9fYiwgX19jKSwgdmVjX2x2c3IoX19iLCAodW5zaWduZWQgY2hhciAqKV9fYykpLAotICAgICAgX19iLCBfX2MpOwotfQotCi1zdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dnJ4KHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIGludCBfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0ICpfX2MpIHsKLSAgcmV0dXJuIHZlY19zdCh2ZWNfcGVybShfX2EsIHZlY19sdmx4KF9fYiwgX19jKSwgdmVjX2x2c3IoX19iLCBfX2MpKSwgX19iLAotICAgICAgICAgICAgICAgIF9fYyk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2cngodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgaW50IF9fYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0ICpfX2MpIHsKLSAgcmV0dXJuIHZlY19zdCgKLSAgICAgIHZlY19wZXJtKF9fYSwgdmVjX2x2bHgoX19iLCBfX2MpLCB2ZWNfbHZzcihfX2IsICh1bnNpZ25lZCBjaGFyICopX19jKSksCi0gICAgICBfX2IsIF9fYyk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2cngodmVjdG9yIGJvb2wgc2hvcnQgX19hLCBpbnQgX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBzaG9ydCAqX19jKSB7Ci0gIHJldHVybiB2ZWNfc3QoCi0gICAgICB2ZWNfcGVybShfX2EsIHZlY19sdmx4KF9fYiwgX19jKSwgdmVjX2x2c3IoX19iLCAodW5zaWduZWQgY2hhciAqKV9fYykpLAotICAgICAgX19iLCBfX2MpOwotfQotCi1zdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dnJ4KHZlY3RvciBwaXhlbCBfX2EsIGludCBfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBwaXhlbCAqX19jKSB7Ci0gIHJldHVybiB2ZWNfc3QoCi0gICAgICB2ZWNfcGVybShfX2EsIHZlY19sdmx4KF9fYiwgX19jKSwgdmVjX2x2c3IoX19iLCAodW5zaWduZWQgY2hhciAqKV9fYykpLAotICAgICAgX19iLCBfX2MpOwotfQotCi1zdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dnJ4KHZlY3RvciBpbnQgX19hLCBpbnQgX19iLCBpbnQgKl9fYykgewotICByZXR1cm4gdmVjX3N0KHZlY19wZXJtKF9fYSwgdmVjX2x2bHgoX19iLCBfX2MpLCB2ZWNfbHZzcihfX2IsIF9fYykpLCBfX2IsCi0gICAgICAgICAgICAgICAgX19jKTsKLX0KLQotc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZyeCh2ZWN0b3IgaW50IF9fYSwgaW50IF9fYiwgdmVjdG9yIGludCAqX19jKSB7Ci0gIHJldHVybiB2ZWNfc3QoCi0gICAgICB2ZWNfcGVybShfX2EsIHZlY19sdmx4KF9fYiwgX19jKSwgdmVjX2x2c3IoX19iLCAodW5zaWduZWQgY2hhciAqKV9fYykpLAotICAgICAgX19iLCBfX2MpOwotfQotCi1zdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dnJ4KHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCBpbnQgX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKl9fYykgewotICByZXR1cm4gdmVjX3N0KHZlY19wZXJtKF9fYSwgdmVjX2x2bHgoX19iLCBfX2MpLCB2ZWNfbHZzcihfX2IsIF9fYykpLCBfX2IsCi0gICAgICAgICAgICAgICAgX19jKTsKLX0KLQotc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZyeCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgaW50IF9fYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCAqX19jKSB7Ci0gIHJldHVybiB2ZWNfc3QoCi0gICAgICB2ZWNfcGVybShfX2EsIHZlY19sdmx4KF9fYiwgX19jKSwgdmVjX2x2c3IoX19iLCAodW5zaWduZWQgY2hhciAqKV9fYykpLAotICAgICAgX19iLCBfX2MpOwotfQotCi1zdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dnJ4KHZlY3RvciBib29sIGludCBfX2EsIGludCBfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGludCAqX19jKSB7Ci0gIHJldHVybiB2ZWNfc3QoCi0gICAgICB2ZWNfcGVybShfX2EsIHZlY19sdmx4KF9fYiwgX19jKSwgdmVjX2x2c3IoX19iLCAodW5zaWduZWQgY2hhciAqKV9fYykpLAotICAgICAgX19iLCBfX2MpOwotfQotCi1zdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dnJ4KHZlY3RvciBmbG9hdCBfX2EsIGludCBfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBmbG9hdCAqX19jKSB7Ci0gIHJldHVybiB2ZWNfc3QoCi0gICAgICB2ZWNfcGVybShfX2EsIHZlY19sdmx4KF9fYiwgX19jKSwgdmVjX2x2c3IoX19iLCAodW5zaWduZWQgY2hhciAqKV9fYykpLAotICAgICAgX19iLCBfX2MpOwotfQotCi0vKiB2ZWNfc3R2cnhsICovCi0KLXN0YXRpYyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2cnhsKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIGludCBfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduZWQgY2hhciAqX19jKSB7Ci0gIHJldHVybiB2ZWNfc3RsKHZlY19wZXJtKF9fYSwgdmVjX2x2bHgoX19iLCBfX2MpLCB2ZWNfbHZzcihfX2IsIF9fYykpLCBfX2IsCi0gICAgICAgICAgICAgICAgIF9fYyk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2cnhsKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIGludCBfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgKl9fYykgewotICByZXR1cm4gdmVjX3N0bCgKLSAgICAgIHZlY19wZXJtKF9fYSwgdmVjX2x2bHgoX19iLCBfX2MpLCB2ZWNfbHZzcihfX2IsICh1bnNpZ25lZCBjaGFyICopX19jKSksCi0gICAgICBfX2IsIF9fYyk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2cnhsKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgaW50IF9fYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKl9fYykgewotICByZXR1cm4gdmVjX3N0bCh2ZWNfcGVybShfX2EsIHZlY19sdmx4KF9fYiwgX19jKSwgdmVjX2x2c3IoX19iLCBfX2MpKSwgX19iLAotICAgICAgICAgICAgICAgICBfX2MpOwotfQotCi1zdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dnJ4bCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIGludCBfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciAqX19jKSB7Ci0gIHJldHVybiB2ZWNfc3RsKAotICAgICAgdmVjX3Blcm0oX19hLCB2ZWNfbHZseChfX2IsIF9fYyksIHZlY19sdnNyKF9fYiwgKHVuc2lnbmVkIGNoYXIgKilfX2MpKSwKLSAgICAgIF9fYiwgX19jKTsKLX0KLQotc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZyeGwodmVjdG9yIGJvb2wgY2hhciBfX2EsIGludCBfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBjaGFyICpfX2MpIHsKLSAgcmV0dXJuIHZlY19zdGwoCi0gICAgICB2ZWNfcGVybShfX2EsIHZlY19sdmx4KF9fYiwgX19jKSwgdmVjX2x2c3IoX19iLCAodW5zaWduZWQgY2hhciAqKV9fYykpLAotICAgICAgX19iLCBfX2MpOwotfQotCi1zdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dnJ4bCh2ZWN0b3Igc2hvcnQgX19hLCBpbnQgX19iLCBzaG9ydCAqX19jKSB7Ci0gIHJldHVybiB2ZWNfc3RsKHZlY19wZXJtKF9fYSwgdmVjX2x2bHgoX19iLCBfX2MpLCB2ZWNfbHZzcihfX2IsIF9fYykpLCBfX2IsCi0gICAgICAgICAgICAgICAgIF9fYyk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2cnhsKHZlY3RvciBzaG9ydCBfX2EsIGludCBfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2hvcnQgKl9fYykgewotICByZXR1cm4gdmVjX3N0bCgKLSAgICAgIHZlY19wZXJtKF9fYSwgdmVjX2x2bHgoX19iLCBfX2MpLCB2ZWNfbHZzcihfX2IsICh1bnNpZ25lZCBjaGFyICopX19jKSksCi0gICAgICBfX2IsIF9fYyk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2cnhsKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIGludCBfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCAqX19jKSB7Ci0gIHJldHVybiB2ZWNfc3RsKHZlY19wZXJtKF9fYSwgdmVjX2x2bHgoX19iLCBfX2MpLCB2ZWNfbHZzcihfX2IsIF9fYykpLCBfX2IsCi0gICAgICAgICAgICAgICAgIF9fYyk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2cnhsKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIGludCBfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgKl9fYykgewotICByZXR1cm4gdmVjX3N0bCgKLSAgICAgIHZlY19wZXJtKF9fYSwgdmVjX2x2bHgoX19iLCBfX2MpLCB2ZWNfbHZzcihfX2IsICh1bnNpZ25lZCBjaGFyICopX19jKSksCi0gICAgICBfX2IsIF9fYyk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2cnhsKHZlY3RvciBib29sIHNob3J0IF9fYSwgaW50IF9fYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIHNob3J0ICpfX2MpIHsKLSAgcmV0dXJuIHZlY19zdGwoCi0gICAgICB2ZWNfcGVybShfX2EsIHZlY19sdmx4KF9fYiwgX19jKSwgdmVjX2x2c3IoX19iLCAodW5zaWduZWQgY2hhciAqKV9fYykpLAotICAgICAgX19iLCBfX2MpOwotfQotCi1zdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dnJ4bCh2ZWN0b3IgcGl4ZWwgX19hLCBpbnQgX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHBpeGVsICpfX2MpIHsKLSAgcmV0dXJuIHZlY19zdGwoCi0gICAgICB2ZWNfcGVybShfX2EsIHZlY19sdmx4KF9fYiwgX19jKSwgdmVjX2x2c3IoX19iLCAodW5zaWduZWQgY2hhciAqKV9fYykpLAotICAgICAgX19iLCBfX2MpOwotfQotCi1zdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dnJ4bCh2ZWN0b3IgaW50IF9fYSwgaW50IF9fYiwgaW50ICpfX2MpIHsKLSAgcmV0dXJuIHZlY19zdGwodmVjX3Blcm0oX19hLCB2ZWNfbHZseChfX2IsIF9fYyksIHZlY19sdnNyKF9fYiwgX19jKSksIF9fYiwKLSAgICAgICAgICAgICAgICAgX19jKTsKLX0KLQotc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZyeGwodmVjdG9yIGludCBfX2EsIGludCBfX2IsIHZlY3RvciBpbnQgKl9fYykgewotICByZXR1cm4gdmVjX3N0bCgKLSAgICAgIHZlY19wZXJtKF9fYSwgdmVjX2x2bHgoX19iLCBfX2MpLCB2ZWNfbHZzcihfX2IsICh1bnNpZ25lZCBjaGFyICopX19jKSksCi0gICAgICBfX2IsIF9fYyk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2cnhsKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCBpbnQgX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpfX2MpIHsKLSAgcmV0dXJuIHZlY19zdGwodmVjX3Blcm0oX19hLCB2ZWNfbHZseChfX2IsIF9fYyksIHZlY19sdnNyKF9fYiwgX19jKSksIF9fYiwKLSAgICAgICAgICAgICAgICAgX19jKTsKLX0KLQotc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZyeGwodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIGludCBfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50ICpfX2MpIHsKLSAgcmV0dXJuIHZlY19zdGwoCi0gICAgICB2ZWNfcGVybShfX2EsIHZlY19sdmx4KF9fYiwgX19jKSwgdmVjX2x2c3IoX19iLCAodW5zaWduZWQgY2hhciAqKV9fYykpLAotICAgICAgX19iLCBfX2MpOwotfQotCi1zdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dnJ4bCh2ZWN0b3IgYm9vbCBpbnQgX19hLCBpbnQgX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgaW50ICpfX2MpIHsKLSAgcmV0dXJuIHZlY19zdGwoCi0gICAgICB2ZWNfcGVybShfX2EsIHZlY19sdmx4KF9fYiwgX19jKSwgdmVjX2x2c3IoX19iLCAodW5zaWduZWQgY2hhciAqKV9fYykpLAotICAgICAgX19iLCBfX2MpOwotfQotCi1zdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dnJ4bCh2ZWN0b3IgZmxvYXQgX19hLCBpbnQgX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGZsb2F0ICpfX2MpIHsKLSAgcmV0dXJuIHZlY19zdGwoCi0gICAgICB2ZWNfcGVybShfX2EsIHZlY19sdmx4KF9fYiwgX19jKSwgdmVjX2x2c3IoX19iLCAodW5zaWduZWQgY2hhciAqKV9fYykpLAotICAgICAgX19iLCBfX2MpOwotfQotCi0vKiB2ZWNfcHJvbW90ZSAqLwotCi1zdGF0aWMgdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfcHJvbW90ZShzaWduZWQgY2hhciBfX2EsIGludCBfX2IpIHsKLSAgdmVjdG9yIHNpZ25lZCBjaGFyIF9fcmVzID0gKHZlY3RvciBzaWduZWQgY2hhcikoMCk7Ci0gIF9fcmVzW19fYl0gPSBfX2E7Ci0gIHJldHVybiBfX3JlczsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfcHJvbW90ZSh1bnNpZ25lZCBjaGFyIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYikgewotICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX3JlcyA9ICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMCk7Ci0gIF9fcmVzW19fYl0gPSBfX2E7Ci0gIHJldHVybiBfX3JlczsKLX0KLQotc3RhdGljIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3Byb21vdGUoc2hvcnQgX19hLCBpbnQgX19iKSB7Ci0gIHZlY3RvciBzaG9ydCBfX3JlcyA9ICh2ZWN0b3Igc2hvcnQpKDApOwotICBfX3Jlc1tfX2JdID0gX19hOwotICByZXR1cm4gX19yZXM7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpIHZlY19wcm9tb3RlKHVuc2lnbmVkIHNob3J0IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2IpIHsKLSAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fcmVzID0gKHZlY3RvciB1bnNpZ25lZCBzaG9ydCkoMCk7Ci0gIF9fcmVzW19fYl0gPSBfX2E7Ci0gIHJldHVybiBfX3JlczsKLX0KLQotc3RhdGljIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY19wcm9tb3RlKGludCBfX2EsIGludCBfX2IpIHsKLSAgdmVjdG9yIGludCBfX3JlcyA9ICh2ZWN0b3IgaW50KSgwKTsKLSAgX19yZXNbX19iXSA9IF9fYTsKLSAgcmV0dXJuIF9fcmVzOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkgdmVjX3Byb21vdGUodW5zaWduZWQgaW50IF9fYSwgaW50IF9fYikgewotICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fcmVzID0gKHZlY3RvciB1bnNpZ25lZCBpbnQpKDApOwotICBfX3Jlc1tfX2JdID0gX19hOwotICByZXR1cm4gX19yZXM7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgZmxvYXQgX19BVFRSU19vX2FpIHZlY19wcm9tb3RlKGZsb2F0IF9fYSwgaW50IF9fYikgewotICB2ZWN0b3IgZmxvYXQgX19yZXMgPSAodmVjdG9yIGZsb2F0KSgwKTsKLSAgX19yZXNbX19iXSA9IF9fYTsKLSAgcmV0dXJuIF9fcmVzOwotfQotCi0vKiB2ZWNfc3BsYXRzICovCi0KLXN0YXRpYyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY19zcGxhdHMoc2lnbmVkIGNoYXIgX19hKSB7Ci0gIHJldHVybiAodmVjdG9yIHNpZ25lZCBjaGFyKShfX2EpOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY19zcGxhdHModW5zaWduZWQgY2hhciBfX2EpIHsKLSAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoX19hKTsKLX0KLQotc3RhdGljIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3NwbGF0cyhzaG9ydCBfX2EpIHsKLSAgcmV0dXJuICh2ZWN0b3Igc2hvcnQpKF9fYSk7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpIHZlY19zcGxhdHModW5zaWduZWQgc2hvcnQgX19hKSB7Ci0gIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIHNob3J0KShfX2EpOwotfQotCi1zdGF0aWMgdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX3NwbGF0cyhpbnQgX19hKSB7IHJldHVybiAodmVjdG9yIGludCkoX19hKTsgfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkgdmVjX3NwbGF0cyh1bnNpZ25lZCBpbnQgX19hKSB7Ci0gIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGludCkoX19hKTsKLX0KLQotI2lmZGVmIF9fVlNYX18KLXN0YXRpYyB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkgdmVjX3NwbGF0cyhzaWduZWQgbG9uZyBsb25nIF9fYSkgewotICByZXR1cm4gKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKShfX2EpOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKLXZlY19zcGxhdHModW5zaWduZWQgbG9uZyBsb25nIF9fYSkgewotICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpKF9fYSk7Ci19Ci0KLSNpZiBkZWZpbmVkKF9fUE9XRVI4X1ZFQ1RPUl9fKSAmJiBkZWZpbmVkKF9fcG93ZXJwYzY0X18pCi1zdGF0aWMgdmVjdG9yIHNpZ25lZCBfX2ludDEyOCBfX0FUVFJTX29fYWkgdmVjX3NwbGF0cyhzaWduZWQgX19pbnQxMjggX19hKSB7Ci0gIHJldHVybiAodmVjdG9yIHNpZ25lZCBfX2ludDEyOCkoX19hKTsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBfX2ludDEyOCBfX0FUVFJTX29fYWkKLXZlY19zcGxhdHModW5zaWduZWQgX19pbnQxMjggX19hKSB7Ci0gIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIF9faW50MTI4KShfX2EpOwotfQotCi0jZW5kaWYKLQotc3RhdGljIHZlY3RvciBkb3VibGUgX19BVFRSU19vX2FpIHZlY19zcGxhdHMoZG91YmxlIF9fYSkgewotICByZXR1cm4gKHZlY3RvciBkb3VibGUpKF9fYSk7Ci19Ci0jZW5kaWYKLQotc3RhdGljIHZlY3RvciBmbG9hdCBfX0FUVFJTX29fYWkgdmVjX3NwbGF0cyhmbG9hdCBfX2EpIHsKLSAgcmV0dXJuICh2ZWN0b3IgZmxvYXQpKF9fYSk7Ci19Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHByZWRpY2F0ZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLS8qIHZlY19hbGxfZXEgKi8KLQotc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9lcSh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1Yl9wKF9fQ1I2X0xULCAodmVjdG9yIGNoYXIpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGNoYXIpX19iKTsKLX0KLQotc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9lcSh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdWJfcChfX0NSNl9MVCwgKHZlY3RvciBjaGFyKV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBjaGFyKV9fYik7Ci19Ci0KLXN0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfZXEodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXViX3AoX19DUjZfTFQsICh2ZWN0b3IgY2hhcilfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgY2hhcilfX2IpOwotfQotCi1zdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2VxKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXViX3AoX19DUjZfTFQsICh2ZWN0b3IgY2hhcilfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgY2hhcilfX2IpOwotfQotCi1zdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2VxKHZlY3RvciBib29sIGNoYXIgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1Yl9wKF9fQ1I2X0xULCAodmVjdG9yIGNoYXIpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGNoYXIpX19iKTsKLX0KLQotc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9lcSh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1Yl9wKF9fQ1I2X0xULCAodmVjdG9yIGNoYXIpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGNoYXIpX19iKTsKLX0KLQotc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9lcSh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXViX3AoX19DUjZfTFQsICh2ZWN0b3IgY2hhcilfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgY2hhcilfX2IpOwotfQotCi1zdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2VxKHZlY3RvciBzaG9ydCBfX2EsIHZlY3RvciBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXVoX3AoX19DUjZfTFQsIF9fYSwgX19iKTsKLX0KLQotc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9lcSh2ZWN0b3Igc2hvcnQgX19hLCB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXVoX3AoX19DUjZfTFQsIF9fYSwgKHZlY3RvciBzaG9ydClfX2IpOwotfQotCi1zdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2VxKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXVoX3AoX19DUjZfTFQsICh2ZWN0b3Igc2hvcnQpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNob3J0KV9fYik7Ci19Ci0KLXN0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfZXEodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1aF9wKF9fQ1I2X0xULCAodmVjdG9yIHNob3J0KV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaG9ydClfX2IpOwotfQotCi1zdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2VxKHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIHNob3J0IF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdWhfcChfX0NSNl9MVCwgKHZlY3RvciBzaG9ydClfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3Igc2hvcnQpX19iKTsKLX0KLQotc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9lcSh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXVoX3AoX19DUjZfTFQsICh2ZWN0b3Igc2hvcnQpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNob3J0KV9fYik7Ci19Ci0KLXN0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfZXEodmVjdG9yIGJvb2wgc2hvcnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXVoX3AoX19DUjZfTFQsICh2ZWN0b3Igc2hvcnQpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNob3J0KV9fYik7Ci19Ci0KLXN0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfZXEodmVjdG9yIHBpeGVsIF9fYSwgdmVjdG9yIHBpeGVsIF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdWhfcChfX0NSNl9MVCwgKHZlY3RvciBzaG9ydClfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3Igc2hvcnQpX19iKTsKLX0KLQotc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9lcSh2ZWN0b3IgaW50IF9fYSwgdmVjdG9yIGludCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXV3X3AoX19DUjZfTFQsIF9fYSwgX19iKTsKLX0KLQotc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9lcSh2ZWN0b3IgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdXdfcChfX0NSNl9MVCwgX19hLCAodmVjdG9yIGludClfX2IpOwotfQotCi1zdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2VxKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdXdfcChfX0NSNl9MVCwgKHZlY3RvciBpbnQpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOwotfQotCi1zdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2VxKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1d19wKF9fQ1I2X0xULCAodmVjdG9yIGludClfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Ci19Ci0KLXN0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfZXEodmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIGludCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXV3X3AoX19DUjZfTFQsICh2ZWN0b3IgaW50KV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKLX0KLQotc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9lcSh2ZWN0b3IgYm9vbCBpbnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdXdfcChfX0NSNl9MVCwgKHZlY3RvciBpbnQpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOwotfQotCi1zdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2VxKHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXV3X3AoX19DUjZfTFQsICh2ZWN0b3IgaW50KV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKLX0KLQotI2lmZGVmIF9fUE9XRVI4X1ZFQ1RPUl9fCi1zdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2VxKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1ZF9wKF9fQ1I2X0xULCBfX2EsIF9fYik7Ci19Ci0KLXN0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfZXEodmVjdG9yIGxvbmcgbG9uZyBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXVkX3AoX19DUjZfTFQsIF9fYSwgKHZlY3RvciBsb25nIGxvbmcpX19iKTsKLX0KLQotc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9lcSh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXVkX3AoX19DUjZfTFQsICh2ZWN0b3IgbG9uZyBsb25nKV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBsb25nIGxvbmcpX19iKTsKLX0KLQotc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9lcSh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdWRfcChfX0NSNl9MVCwgKHZlY3RvciBsb25nIGxvbmcpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGxvbmcgbG9uZylfX2IpOwotfQotCi1zdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2VxKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBsb25nIGxvbmcgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1ZF9wKF9fQ1I2X0xULCAodmVjdG9yIGxvbmcgbG9uZylfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgbG9uZyBsb25nKV9fYik7Ci19Ci0KLXN0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfZXEodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXVkX3AoX19DUjZfTFQsICh2ZWN0b3IgbG9uZyBsb25nKV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBsb25nIGxvbmcpX19iKTsKLX0KLQotc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9lcSh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1ZF9wKF9fQ1I2X0xULCAodmVjdG9yIGxvbmcgbG9uZylfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgbG9uZyBsb25nKV9fYik7Ci19Ci0jZW5kaWYKLQotc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9lcSh2ZWN0b3IgZmxvYXQgX19hLCB2ZWN0b3IgZmxvYXQgX19iKSB7Ci0jaWZkZWYgX19WU1hfXwotICByZXR1cm4gX19idWlsdGluX3ZzeF94dmNtcGVxc3BfcChfX0NSNl9MVCwgX19hLCBfX2IpOwotI2Vsc2UKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcWZwX3AoX19DUjZfTFQsIF9fYSwgX19iKTsKLSNlbmRpZgotfQotCi0jaWZkZWYgX19WU1hfXwotc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9lcSh2ZWN0b3IgZG91YmxlIF9fYSwgdmVjdG9yIGRvdWJsZSBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl92c3hfeHZjbXBlcWRwX3AoX19DUjZfTFQsIF9fYSwgX19iKTsKLX0KLSNlbmRpZgotCi0vKiB2ZWNfYWxsX2dlICovCi0KLXN0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfZ2UodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0c2JfcChfX0NSNl9FUSwgX19iLCBfX2EpOwotfQotCi1zdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2dlKHZlY3RvciBzaWduZWQgY2hhciBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGNoYXIgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3RzYl9wKF9fQ1I2X0VRLCAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYiwgX19hKTsKLX0KLQotc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9nZSh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWJfcChfX0NSNl9FUSwgX19iLCBfX2EpOwotfQotCi1zdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2dlKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHViX3AoX19DUjZfRVEsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IsIF9fYSk7Ci19Ci0KLXN0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfZ2UodmVjdG9yIGJvb2wgY2hhciBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHViX3AoX19DUjZfRVEsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EpOwotfQotCi1zdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2dlKHZlY3RvciBib29sIGNoYXIgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHViX3AoX19DUjZfRVEsIF9fYiwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSk7Ci19Ci0KLXN0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfZ2UodmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciBib29sIGNoYXIgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1Yl9wKF9fQ1I2X0VRLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hKTsKLX0KLQotc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9nZSh2ZWN0b3Igc2hvcnQgX19hLCB2ZWN0b3Igc2hvcnQgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3RzaF9wKF9fQ1I2X0VRLCBfX2IsIF9fYSk7Ci19Ci0KLXN0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfZ2UodmVjdG9yIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3RzaF9wKF9fQ1I2X0VRLCAodmVjdG9yIHNob3J0KV9fYiwgX19hKTsKLX0KLQotc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9nZSh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1aF9wKF9fQ1I2X0VRLCBfX2IsIF9fYSk7Ci19Ci0KLXN0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfZ2UodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1aF9wKF9fQ1I2X0VRLCAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hKTsKLX0KLQotc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9nZSh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHVoX3AoX19DUjZfRVEsICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSk7Ci19Ci0KLXN0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfZ2UodmVjdG9yIGJvb2wgc2hvcnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1aF9wKF9fQ1I2X0VRLCBfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hKTsKLX0KLQotc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9nZSh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIHNob3J0IF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWhfcChfX0NSNl9FUSwgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hKTsKLX0KLQotc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9nZSh2ZWN0b3IgaW50IF9fYSwgdmVjdG9yIGludCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHN3X3AoX19DUjZfRVEsIF9fYiwgX19hKTsKLX0KLQotc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9nZSh2ZWN0b3IgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0c3dfcChfX0NSNl9FUSwgKHZlY3RvciBpbnQpX19iLCBfX2EpOwotfQotCi1zdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2dlKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dXdfcChfX0NSNl9FUSwgX19iLCBfX2EpOwotfQotCi1zdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2dlKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1d19wKF9fQ1I2X0VRLCAodmVjdG9yIHVuc2lnbmVkIGludClfX2IsIF9fYSk7Ci19Ci0KLXN0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfZ2UodmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIGludCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHV3X3AoX19DUjZfRVEsICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hKTsKLX0KLQotc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9nZSh2ZWN0b3IgYm9vbCBpbnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dXdfcChfX0NSNl9FUSwgX19iLCAodmVjdG9yIHVuc2lnbmVkIGludClfX2EpOwotfQotCi1zdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2dlKHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHV3X3AoX19DUjZfRVEsICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hKTsKLX0KLQotI2lmZGVmIF9fUE9XRVI4X1ZFQ1RPUl9fCi1zdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2dlKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3RzZF9wKF9fQ1I2X0VRLCBfX2IsIF9fYSk7Ci19Ci1zdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2dlKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0c2RfcChfX0NSNl9FUSwgKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hKTsKLX0KLQotc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9nZSh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHVkX3AoX19DUjZfRVEsIF9fYiwgX19hKTsKLX0KLQotc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9nZSh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWRfcChfX0NSNl9FUSwgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2EpOwotfQotCi1zdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2dlKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWRfcChfX0NSNl9FUSwgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2EpOwotfQotCi1zdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2dlKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1ZF9wKF9fQ1I2X0VRLCBfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYSk7Ci19Ci0KLXN0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfZ2UodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWRfcChfX0NSNl9FUSwgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2EpOwotfQotI2VuZGlmCi0KLXN0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfZ2UodmVjdG9yIGZsb2F0IF9fYSwgdmVjdG9yIGZsb2F0IF9fYikgewotI2lmZGVmIF9fVlNYX18KLSAgcmV0dXJuIF9fYnVpbHRpbl92c3hfeHZjbXBnZXNwX3AoX19DUjZfTFQsIF9fYSwgX19iKTsKLSNlbHNlCi0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ2VmcF9wKF9fQ1I2X0xULCBfX2EsIF9fYik7Ci0jZW5kaWYKLX0KLQotI2lmZGVmIF9fVlNYX18KLXN0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfZ2UodmVjdG9yIGRvdWJsZSBfX2EsIHZlY3RvciBkb3VibGUgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fdnN4X3h2Y21wZ2VkcF9wKF9fQ1I2X0xULCBfX2EsIF9fYik7Ci19Ci0jZW5kaWYKLQotLyogdmVjX2FsbF9ndCAqLwotCi1zdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2d0KHZlY3RvciBzaWduZWQgY2hhciBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHNiX3AoX19DUjZfTFQsIF9fYSwgX19iKTsKLX0KLQotc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9ndCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0c2JfcChfX0NSNl9MVCwgX19hLCAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYik7Ci19Ci0KLXN0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfZ3QodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHViX3AoX19DUjZfTFQsIF9fYSwgX19iKTsKLX0KLQotc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9ndCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGNoYXIgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1Yl9wKF9fQ1I2X0xULCBfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOwotfQotCi1zdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2d0KHZlY3RvciBib29sIGNoYXIgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1Yl9wKF9fQ1I2X0xULCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKLX0KLQotc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9ndCh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1Yl9wKF9fQ1I2X0xULCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCBfX2IpOwotfQotCi1zdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2d0KHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWJfcChfX0NSNl9MVCwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Ci19Ci0KLXN0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfZ3QodmVjdG9yIHNob3J0IF9fYSwgdmVjdG9yIHNob3J0IF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0c2hfcChfX0NSNl9MVCwgX19hLCBfX2IpOwotfQotCi1zdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2d0KHZlY3RvciBzaG9ydCBfX2EsIHZlY3RvciBib29sIHNob3J0IF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0c2hfcChfX0NSNl9MVCwgX19hLCAodmVjdG9yIHNob3J0KV9fYik7Ci19Ci0KLXN0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfZ3QodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWhfcChfX0NSNl9MVCwgX19hLCBfX2IpOwotfQotCi1zdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2d0KHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIHNob3J0IF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWhfcChfX0NSNl9MVCwgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYik7Ci19Ci0KLXN0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfZ3QodmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3Igc2hvcnQgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1aF9wKF9fQ1I2X0xULCAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2IpOwotfQotCi1zdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2d0KHZlY3RvciBib29sIHNob3J0IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWhfcChfX0NSNl9MVCwgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYik7Ci19Ci0KLXN0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfZ3QodmVjdG9yIGJvb2wgc2hvcnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHVoX3AoX19DUjZfTFQsICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYik7Ci19Ci0KLXN0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfZ3QodmVjdG9yIGludCBfX2EsIHZlY3RvciBpbnQgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3Rzd19wKF9fQ1I2X0xULCBfX2EsIF9fYik7Ci19Ci0KLXN0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfZ3QodmVjdG9yIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHN3X3AoX19DUjZfTFQsIF9fYSwgKHZlY3RvciBpbnQpX19iKTsKLX0KLQotc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9ndCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHV3X3AoX19DUjZfTFQsIF9fYSwgX19iKTsKLX0KLQotc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9ndCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgaW50IF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dXdfcChfX0NSNl9MVCwgX19hLCAodmVjdG9yIHVuc2lnbmVkIGludClfX2IpOwotfQotCi1zdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2d0KHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciBpbnQgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1d19wKF9fQ1I2X0xULCAodmVjdG9yIHVuc2lnbmVkIGludClfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYik7Ci19Ci0KLXN0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfZ3QodmVjdG9yIGJvb2wgaW50IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHV3X3AoX19DUjZfTFQsICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSwgX19iKTsKLX0KLQotc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9ndCh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1d19wKF9fQ1I2X0xULCAodmVjdG9yIHVuc2lnbmVkIGludClfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYik7Ci19Ci0KLSNpZmRlZiBfX1BPV0VSOF9WRUNUT1JfXwotc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9ndCh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0c2RfcChfX0NSNl9MVCwgX19hLCBfX2IpOwotfQotc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9ndCh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHNkX3AoX19DUjZfTFQsIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYik7Ci19Ci0KLXN0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfZ3QodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1ZF9wKF9fQ1I2X0xULCBfX2EsIF9fYik7Ci19Ci0KLXN0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfZ3QodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHVkX3AoX19DUjZfTFQsIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19iKTsKLX0KLQotc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9ndCh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHVkX3AoX19DUjZfTFQsICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19iKTsKLX0KLQotc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9ndCh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWRfcChfX0NSNl9MVCwgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2IpOwotfQotCi1zdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2d0KHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHVkX3AoX19DUjZfTFQsICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19iKTsKLX0KLSNlbmRpZgotCi1zdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2d0KHZlY3RvciBmbG9hdCBfX2EsIHZlY3RvciBmbG9hdCBfX2IpIHsKLSNpZmRlZiBfX1ZTWF9fCi0gIHJldHVybiBfX2J1aWx0aW5fdnN4X3h2Y21wZ3RzcF9wKF9fQ1I2X0xULCBfX2EsIF9fYik7Ci0jZWxzZQotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0ZnBfcChfX0NSNl9MVCwgX19hLCBfX2IpOwotI2VuZGlmCi19Ci0KLSNpZmRlZiBfX1ZTWF9fCi1zdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2d0KHZlY3RvciBkb3VibGUgX19hLCB2ZWN0b3IgZG91YmxlIF9fYikgewotICByZXR1cm4gX19idWlsdGluX3ZzeF94dmNtcGd0ZHBfcChfX0NSNl9MVCwgX19hLCBfX2IpOwotfQotI2VuZGlmCi0KLS8qIHZlY19hbGxfaW4gKi8KLQotc3RhdGljIGludCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCi12ZWNfYWxsX2luKHZlY3RvciBmbG9hdCBfX2EsIHZlY3RvciBmbG9hdCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBiZnBfcChfX0NSNl9FUSwgX19hLCBfX2IpOwotfQotCi0vKiB2ZWNfYWxsX2xlICovCi0KLXN0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfbGUodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0c2JfcChfX0NSNl9FUSwgX19hLCBfX2IpOwotfQotCi1zdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2xlKHZlY3RvciBzaWduZWQgY2hhciBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGNoYXIgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3RzYl9wKF9fQ1I2X0VRLCBfX2EsICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19iKTsKLX0KLQotc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9sZSh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWJfcChfX0NSNl9FUSwgX19hLCBfX2IpOwotfQotCi1zdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2xlKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHViX3AoX19DUjZfRVEsIF9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Ci19Ci0KLXN0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfbGUodmVjdG9yIGJvb2wgY2hhciBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHViX3AoX19DUjZfRVEsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOwotfQotCi1zdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2xlKHZlY3RvciBib29sIGNoYXIgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHViX3AoX19DUjZfRVEsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsIF9fYik7Ci19Ci0KLXN0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfbGUodmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciBib29sIGNoYXIgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1Yl9wKF9fQ1I2X0VRLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKLX0KLQotc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9sZSh2ZWN0b3Igc2hvcnQgX19hLCB2ZWN0b3Igc2hvcnQgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3RzaF9wKF9fQ1I2X0VRLCBfX2EsIF9fYik7Ci19Ci0KLXN0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfbGUodmVjdG9yIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3RzaF9wKF9fQ1I2X0VRLCBfX2EsICh2ZWN0b3Igc2hvcnQpX19iKTsKLX0KLQotc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9sZSh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1aF9wKF9fQ1I2X0VRLCBfX2EsIF9fYik7Ci19Ci0KLXN0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfbGUodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1aF9wKF9fQ1I2X0VRLCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19iKTsKLX0KLQotc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9sZSh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHVoX3AoX19DUjZfRVEsICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYik7Ci19Ci0KLXN0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfbGUodmVjdG9yIGJvb2wgc2hvcnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1aF9wKF9fQ1I2X0VRLCAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19iKTsKLX0KLQotc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9sZSh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIHNob3J0IF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWhfcChfX0NSNl9FUSwgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19iKTsKLX0KLQotc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9sZSh2ZWN0b3IgaW50IF9fYSwgdmVjdG9yIGludCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHN3X3AoX19DUjZfRVEsIF9fYSwgX19iKTsKLX0KLQotc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9sZSh2ZWN0b3IgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0c3dfcChfX0NSNl9FUSwgX19hLCAodmVjdG9yIGludClfX2IpOwotfQotCi1zdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2xlKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dXdfcChfX0NSNl9FUSwgX19hLCBfX2IpOwotfQotCi1zdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2xlKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1d19wKF9fQ1I2X0VRLCBfX2EsICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYik7Ci19Ci0KLXN0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfbGUodmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIGludCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHV3X3AoX19DUjZfRVEsICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iKTsKLX0KLQotc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9sZSh2ZWN0b3IgYm9vbCBpbnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dXdfcChfX0NSNl9FUSwgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hLCBfX2IpOwotfQotCi1zdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2xlKHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHV3X3AoX19DUjZfRVEsICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iKTsKLX0KLQotI2lmZGVmIF9fUE9XRVI4X1ZFQ1RPUl9fCi1zdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2xlKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3RzZF9wKF9fQ1I2X0VRLCBfX2EsIF9fYik7Ci19Ci0KLXN0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfbGUodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1ZF9wKF9fQ1I2X0VRLCBfX2EsIF9fYik7Ci19Ci0KLXN0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfbGUodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3RzZF9wKF9fQ1I2X0VRLCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2IpOwotfQotCi1zdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2xlKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1ZF9wKF9fQ1I2X0VRLCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYik7Ci19Ci0KLXN0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfbGUodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1ZF9wKF9fQ1I2X0VRLCAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYik7Ci19Ci0KLXN0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfbGUodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHVkX3AoX19DUjZfRVEsICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19iKTsKLX0KLQotc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9sZSh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1ZF9wKF9fQ1I2X0VRLCAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYik7Ci19Ci0jZW5kaWYKLQotc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9sZSh2ZWN0b3IgZmxvYXQgX19hLCB2ZWN0b3IgZmxvYXQgX19iKSB7Ci0jaWZkZWYgX19WU1hfXwotICByZXR1cm4gX19idWlsdGluX3ZzeF94dmNtcGdlc3BfcChfX0NSNl9MVCwgX19iLCBfX2EpOwotI2Vsc2UKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBnZWZwX3AoX19DUjZfTFQsIF9fYiwgX19hKTsKLSNlbmRpZgotfQotCi0jaWZkZWYgX19WU1hfXwotc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9sZSh2ZWN0b3IgZG91YmxlIF9fYSwgdmVjdG9yIGRvdWJsZSBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl92c3hfeHZjbXBnZWRwX3AoX19DUjZfTFQsIF9fYiwgX19hKTsKLX0KLSNlbmRpZgotCi0vKiB2ZWNfYWxsX2x0ICovCi0KLXN0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfbHQodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0c2JfcChfX0NSNl9MVCwgX19iLCBfX2EpOwotfQotCi1zdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2x0KHZlY3RvciBzaWduZWQgY2hhciBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGNoYXIgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3RzYl9wKF9fQ1I2X0xULCAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYiwgX19hKTsKLX0KLQotc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9sdCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWJfcChfX0NSNl9MVCwgX19iLCBfX2EpOwotfQotCi1zdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2x0KHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHViX3AoX19DUjZfTFQsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IsIF9fYSk7Ci19Ci0KLXN0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfbHQodmVjdG9yIGJvb2wgY2hhciBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHViX3AoX19DUjZfTFQsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EpOwotfQotCi1zdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2x0KHZlY3RvciBib29sIGNoYXIgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHViX3AoX19DUjZfTFQsIF9fYiwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSk7Ci19Ci0KLXN0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfbHQodmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciBib29sIGNoYXIgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1Yl9wKF9fQ1I2X0xULCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hKTsKLX0KLQotc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9sdCh2ZWN0b3Igc2hvcnQgX19hLCB2ZWN0b3Igc2hvcnQgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3RzaF9wKF9fQ1I2X0xULCBfX2IsIF9fYSk7Ci19Ci0KLXN0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfbHQodmVjdG9yIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3RzaF9wKF9fQ1I2X0xULCAodmVjdG9yIHNob3J0KV9fYiwgX19hKTsKLX0KLQotc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9sdCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1aF9wKF9fQ1I2X0xULCBfX2IsIF9fYSk7Ci19Ci0KLXN0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfbHQodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1aF9wKF9fQ1I2X0xULCAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hKTsKLX0KLQotc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9sdCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHVoX3AoX19DUjZfTFQsICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSk7Ci19Ci0KLXN0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfbHQodmVjdG9yIGJvb2wgc2hvcnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1aF9wKF9fQ1I2X0xULCBfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hKTsKLX0KLQotc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9sdCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIHNob3J0IF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWhfcChfX0NSNl9MVCwgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hKTsKLX0KLQotc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9sdCh2ZWN0b3IgaW50IF9fYSwgdmVjdG9yIGludCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHN3X3AoX19DUjZfTFQsIF9fYiwgX19hKTsKLX0KLQotc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9sdCh2ZWN0b3IgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0c3dfcChfX0NSNl9MVCwgKHZlY3RvciBpbnQpX19iLCBfX2EpOwotfQotCi1zdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2x0KHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dXdfcChfX0NSNl9MVCwgX19iLCBfX2EpOwotfQotCi1zdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2x0KHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1d19wKF9fQ1I2X0xULCAodmVjdG9yIHVuc2lnbmVkIGludClfX2IsIF9fYSk7Ci19Ci0KLXN0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfbHQodmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIGludCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHV3X3AoX19DUjZfTFQsICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hKTsKLX0KLQotc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9sdCh2ZWN0b3IgYm9vbCBpbnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dXdfcChfX0NSNl9MVCwgX19iLCAodmVjdG9yIHVuc2lnbmVkIGludClfX2EpOwotfQotCi1zdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2x0KHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHV3X3AoX19DUjZfTFQsICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hKTsKLX0KLQotI2lmZGVmIF9fUE9XRVI4X1ZFQ1RPUl9fCi1zdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2x0KHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3RzZF9wKF9fQ1I2X0xULCBfX2IsIF9fYSk7Ci19Ci0KLXN0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfbHQodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1ZF9wKF9fQ1I2X0xULCBfX2IsIF9fYSk7Ci19Ci0KLXN0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfbHQodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3RzZF9wKF9fQ1I2X0xULCAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2EpOwotfQotCi1zdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2x0KHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1ZF9wKF9fQ1I2X0xULCAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYSk7Ci19Ci0KLXN0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfbHQodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1ZF9wKF9fQ1I2X0xULCAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYSk7Ci19Ci0KLXN0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfbHQodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHVkX3AoX19DUjZfTFQsIF9fYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19hKTsKLX0KLQotc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9sdCh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1ZF9wKF9fQ1I2X0xULCAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYSk7Ci19Ci0jZW5kaWYKLQotc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9sdCh2ZWN0b3IgZmxvYXQgX19hLCB2ZWN0b3IgZmxvYXQgX19iKSB7Ci0jaWZkZWYgX19WU1hfXwotICByZXR1cm4gX19idWlsdGluX3ZzeF94dmNtcGd0c3BfcChfX0NSNl9MVCwgX19iLCBfX2EpOwotI2Vsc2UKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndGZwX3AoX19DUjZfTFQsIF9fYiwgX19hKTsKLSNlbmRpZgotfQotCi0jaWZkZWYgX19WU1hfXwotc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9sdCh2ZWN0b3IgZG91YmxlIF9fYSwgdmVjdG9yIGRvdWJsZSBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl92c3hfeHZjbXBndGRwX3AoX19DUjZfTFQsIF9fYiwgX19hKTsKLX0KLSNlbmRpZgotCi0vKiB2ZWNfYWxsX25hbiAqLwotCi1zdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX25hbih2ZWN0b3IgZmxvYXQgX19hKSB7Ci0jaWZkZWYgX19WU1hfXwotICByZXR1cm4gX19idWlsdGluX3ZzeF94dmNtcGVxc3BfcChfX0NSNl9FUSwgX19hLCBfX2EpOwotI2Vsc2UKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcWZwX3AoX19DUjZfRVEsIF9fYSwgX19hKTsKLSNlbmRpZgotfQotCi0jaWZkZWYgX19WU1hfXwotc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9uYW4odmVjdG9yIGRvdWJsZSBfX2EpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl92c3hfeHZjbXBlcWRwX3AoX19DUjZfRVEsIF9fYSwgX19hKTsKLX0KLSNlbmRpZgotCi0vKiB2ZWNfYWxsX25lICovCi0KLXN0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfbmUodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdWJfcChfX0NSNl9FUSwgKHZlY3RvciBjaGFyKV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBjaGFyKV9fYik7Ci19Ci0KLXN0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfbmUodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXViX3AoX19DUjZfRVEsICh2ZWN0b3IgY2hhcilfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgY2hhcilfX2IpOwotfQotCi1zdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX25lKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1Yl9wKF9fQ1I2X0VRLCAodmVjdG9yIGNoYXIpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGNoYXIpX19iKTsKLX0KLQotc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9uZSh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGNoYXIgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1Yl9wKF9fQ1I2X0VRLCAodmVjdG9yIGNoYXIpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGNoYXIpX19iKTsKLX0KLQotc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9uZSh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdWJfcChfX0NSNl9FUSwgKHZlY3RvciBjaGFyKV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBjaGFyKV9fYik7Ci19Ci0KLXN0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfbmUodmVjdG9yIGJvb2wgY2hhciBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdWJfcChfX0NSNl9FUSwgKHZlY3RvciBjaGFyKV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBjaGFyKV9fYik7Ci19Ci0KLXN0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfbmUodmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciBib29sIGNoYXIgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1Yl9wKF9fQ1I2X0VRLCAodmVjdG9yIGNoYXIpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGNoYXIpX19iKTsKLX0KLQotc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9uZSh2ZWN0b3Igc2hvcnQgX19hLCB2ZWN0b3Igc2hvcnQgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1aF9wKF9fQ1I2X0VRLCBfX2EsIF9fYik7Ci19Ci0KLXN0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfbmUodmVjdG9yIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1aF9wKF9fQ1I2X0VRLCBfX2EsICh2ZWN0b3Igc2hvcnQpX19iKTsKLX0KLQotc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9uZSh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1aF9wKF9fQ1I2X0VRLCAodmVjdG9yIHNob3J0KV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaG9ydClfX2IpOwotfQotCi1zdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX25lKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIHNob3J0IF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdWhfcChfX0NSNl9FUSwgKHZlY3RvciBzaG9ydClfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3Igc2hvcnQpX19iKTsKLX0KLQotc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9uZSh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXVoX3AoX19DUjZfRVEsICh2ZWN0b3Igc2hvcnQpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNob3J0KV9fYik7Ci19Ci0KLXN0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfbmUodmVjdG9yIGJvb2wgc2hvcnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1aF9wKF9fQ1I2X0VRLCAodmVjdG9yIHNob3J0KV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaG9ydClfX2IpOwotfQotCi1zdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX25lKHZlY3RvciBib29sIHNob3J0IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1aF9wKF9fQ1I2X0VRLCAodmVjdG9yIHNob3J0KV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaG9ydClfX2IpOwotfQotCi1zdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX25lKHZlY3RvciBwaXhlbCBfX2EsIHZlY3RvciBwaXhlbCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXVoX3AoX19DUjZfRVEsICh2ZWN0b3Igc2hvcnQpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNob3J0KV9fYik7Ci19Ci0KLXN0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfbmUodmVjdG9yIGludCBfX2EsIHZlY3RvciBpbnQgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1d19wKF9fQ1I2X0VRLCBfX2EsIF9fYik7Ci19Ci0KLXN0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfbmUodmVjdG9yIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXV3X3AoX19DUjZfRVEsIF9fYSwgKHZlY3RvciBpbnQpX19iKTsKLX0KLQotc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9uZSh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXV3X3AoX19DUjZfRVEsICh2ZWN0b3IgaW50KV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKLX0KLQotc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9uZSh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgaW50IF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdXdfcChfX0NSNl9FUSwgKHZlY3RvciBpbnQpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOwotfQotCi1zdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX25lKHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciBpbnQgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1d19wKF9fQ1I2X0VRLCAodmVjdG9yIGludClfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Ci19Ci0KLXN0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfbmUodmVjdG9yIGJvb2wgaW50IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXV3X3AoX19DUjZfRVEsICh2ZWN0b3IgaW50KV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKLX0KLQotc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9uZSh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1d19wKF9fQ1I2X0VRLCAodmVjdG9yIGludClfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Ci19Ci0KLSNpZmRlZiBfX1BPV0VSOF9WRUNUT1JfXwotc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9uZSh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdWRfcChfX0NSNl9FUSwgX19hLCBfX2IpOwotfQotCi1zdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX25lKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdWRfcChfX0NSNl9FUSwgKHZlY3RvciBsb25nIGxvbmcpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGxvbmcgbG9uZylfX2IpOwotfQotCi1zdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX25lKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdWRfcChfX0NSNl9FUSwgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19iKTsKLX0KLQotc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9uZSh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdWRfcChfX0NSNl9FUSwgKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYik7Ci19Ci0KLXN0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfbmUodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1ZF9wKF9fQ1I2X0VRLCAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19iKTsKLX0KLQotc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9uZSh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdWRfcChfX0NSNl9FUSwgKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYik7Ci19Ci0KLXN0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfbmUodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdWRfcChfX0NSNl9FUSwgKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYik7Ci19Ci0jZW5kaWYKLQotc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9uZSh2ZWN0b3IgZmxvYXQgX19hLCB2ZWN0b3IgZmxvYXQgX19iKSB7Ci0jaWZkZWYgX19WU1hfXwotICByZXR1cm4gX19idWlsdGluX3ZzeF94dmNtcGVxZHBfcChfX0NSNl9FUSwgX19hLCBfX2IpOwotI2Vsc2UKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcWZwX3AoX19DUjZfRVEsIF9fYSwgX19iKTsKLSNlbmRpZgotfQotCi0jaWZkZWYgX19WU1hfXwotc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9uZSh2ZWN0b3IgZG91YmxlIF9fYSwgdmVjdG9yIGRvdWJsZSBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl92c3hfeHZjbXBlcWRwX3AoX19DUjZfRVEsIF9fYSwgX19iKTsKLX0KLSNlbmRpZgotCi0vKiB2ZWNfYWxsX25nZSAqLwotCi1zdGF0aWMgaW50IF9fQVRUUlNfb19haQotdmVjX2FsbF9uZ2UodmVjdG9yIGZsb2F0IF9fYSwgdmVjdG9yIGZsb2F0IF9fYikgewotI2lmZGVmIF9fVlNYX18KLSAgcmV0dXJuIF9fYnVpbHRpbl92c3hfeHZjbXBnZXNwX3AoX19DUjZfRVEsIF9fYSwgX19iKTsKLSNlbHNlCi0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ2VmcF9wKF9fQ1I2X0VRLCBfX2EsIF9fYik7Ci0jZW5kaWYKLX0KLQotI2lmZGVmIF9fVlNYX18KLXN0YXRpYyBpbnQgX19BVFRSU19vX2FpCi12ZWNfYWxsX25nZSh2ZWN0b3IgZG91YmxlIF9fYSwgdmVjdG9yIGRvdWJsZSBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl92c3hfeHZjbXBnZWRwX3AoX19DUjZfRVEsIF9fYSwgX19iKTsKLX0KLSNlbmRpZgotCi0vKiB2ZWNfYWxsX25ndCAqLwotCi1zdGF0aWMgaW50IF9fQVRUUlNfb19haQotdmVjX2FsbF9uZ3QodmVjdG9yIGZsb2F0IF9fYSwgdmVjdG9yIGZsb2F0IF9fYikgewotI2lmZGVmIF9fVlNYX18KLSAgcmV0dXJuIF9fYnVpbHRpbl92c3hfeHZjbXBndHNwX3AoX19DUjZfRVEsIF9fYSwgX19iKTsKLSNlbHNlCi0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3RmcF9wKF9fQ1I2X0VRLCBfX2EsIF9fYik7Ci0jZW5kaWYKLX0KLQotI2lmZGVmIF9fVlNYX18KLXN0YXRpYyBpbnQgX19BVFRSU19vX2FpCi12ZWNfYWxsX25ndCh2ZWN0b3IgZG91YmxlIF9fYSwgdmVjdG9yIGRvdWJsZSBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl92c3hfeHZjbXBndGRwX3AoX19DUjZfRVEsIF9fYSwgX19iKTsKLX0KLSNlbmRpZgotCi0vKiB2ZWNfYWxsX25sZSAqLwotCi1zdGF0aWMgaW50IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKLXZlY19hbGxfbmxlKHZlY3RvciBmbG9hdCBfX2EsIHZlY3RvciBmbG9hdCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBnZWZwX3AoX19DUjZfRVEsIF9fYiwgX19hKTsKLX0KLQotLyogdmVjX2FsbF9ubHQgKi8KLQotc3RhdGljIGludCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCi12ZWNfYWxsX25sdCh2ZWN0b3IgZmxvYXQgX19hLCB2ZWN0b3IgZmxvYXQgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3RmcF9wKF9fQ1I2X0VRLCBfX2IsIF9fYSk7Ci19Ci0KLS8qIHZlY19hbGxfbnVtZXJpYyAqLwotCi1zdGF0aWMgaW50IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKLXZlY19hbGxfbnVtZXJpYyh2ZWN0b3IgZmxvYXQgX19hKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXFmcF9wKF9fQ1I2X0xULCBfX2EsIF9fYSk7Ci19Ci0KLS8qIHZlY19hbnlfZXEgKi8KLQotc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9lcSh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1Yl9wKF9fQ1I2X0VRX1JFViwgKHZlY3RvciBjaGFyKV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBjaGFyKV9fYik7Ci19Ci0KLXN0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfZXEodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXViX3AoX19DUjZfRVFfUkVWLCAodmVjdG9yIGNoYXIpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGNoYXIpX19iKTsKLX0KLQotc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9lcSh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdWJfcChfX0NSNl9FUV9SRVYsICh2ZWN0b3IgY2hhcilfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgY2hhcilfX2IpOwotfQotCi1zdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2VxKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXViX3AoX19DUjZfRVFfUkVWLCAodmVjdG9yIGNoYXIpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGNoYXIpX19iKTsKLX0KLQotc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9lcSh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdWJfcChfX0NSNl9FUV9SRVYsICh2ZWN0b3IgY2hhcilfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgY2hhcilfX2IpOwotfQotCi1zdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2VxKHZlY3RvciBib29sIGNoYXIgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXViX3AoX19DUjZfRVFfUkVWLCAodmVjdG9yIGNoYXIpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGNoYXIpX19iKTsKLX0KLQotc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9lcSh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXViX3AoX19DUjZfRVFfUkVWLCAodmVjdG9yIGNoYXIpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGNoYXIpX19iKTsKLX0KLQotc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9lcSh2ZWN0b3Igc2hvcnQgX19hLCB2ZWN0b3Igc2hvcnQgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1aF9wKF9fQ1I2X0VRX1JFViwgX19hLCBfX2IpOwotfQotCi1zdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2VxKHZlY3RvciBzaG9ydCBfX2EsIHZlY3RvciBib29sIHNob3J0IF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdWhfcChfX0NSNl9FUV9SRVYsIF9fYSwgKHZlY3RvciBzaG9ydClfX2IpOwotfQotCi1zdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2VxKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXVoX3AoX19DUjZfRVFfUkVWLCAodmVjdG9yIHNob3J0KV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaG9ydClfX2IpOwotfQotCi1zdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2VxKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIHNob3J0IF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdWhfcChfX0NSNl9FUV9SRVYsICh2ZWN0b3Igc2hvcnQpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNob3J0KV9fYik7Ci19Ci0KLXN0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfZXEodmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3Igc2hvcnQgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1aF9wKF9fQ1I2X0VRX1JFViwgKHZlY3RvciBzaG9ydClfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3Igc2hvcnQpX19iKTsKLX0KLQotc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9lcSh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXVoX3AoX19DUjZfRVFfUkVWLCAodmVjdG9yIHNob3J0KV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaG9ydClfX2IpOwotfQotCi1zdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2VxKHZlY3RvciBib29sIHNob3J0IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1aF9wKF9fQ1I2X0VRX1JFViwgKHZlY3RvciBzaG9ydClfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3Igc2hvcnQpX19iKTsKLX0KLQotc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9lcSh2ZWN0b3IgcGl4ZWwgX19hLCB2ZWN0b3IgcGl4ZWwgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1aF9wKF9fQ1I2X0VRX1JFViwgKHZlY3RvciBzaG9ydClfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3Igc2hvcnQpX19iKTsKLX0KLQotc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9lcSh2ZWN0b3IgaW50IF9fYSwgdmVjdG9yIGludCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXV3X3AoX19DUjZfRVFfUkVWLCBfX2EsIF9fYik7Ci19Ci0KLXN0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfZXEodmVjdG9yIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXV3X3AoX19DUjZfRVFfUkVWLCBfX2EsICh2ZWN0b3IgaW50KV9fYik7Ci19Ci0KLXN0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfZXEodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1d19wKF9fQ1I2X0VRX1JFViwgKHZlY3RvciBpbnQpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOwotfQotCi1zdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2VxKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1d19wKF9fQ1I2X0VRX1JFViwgKHZlY3RvciBpbnQpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOwotfQotCi1zdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2VxKHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciBpbnQgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1d19wKF9fQ1I2X0VRX1JFViwgKHZlY3RvciBpbnQpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOwotfQotCi1zdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2VxKHZlY3RvciBib29sIGludCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1d19wKF9fQ1I2X0VRX1JFViwgKHZlY3RvciBpbnQpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOwotfQotCi1zdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2VxKHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXV3X3AoX19DUjZfRVFfUkVWLCAodmVjdG9yIGludClfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Ci19Ci0KLSNpZmRlZiBfX1BPV0VSOF9WRUNUT1JfXwotc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9lcSh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdWRfcChfX0NSNl9FUV9SRVYsIF9fYSwgX19iKTsKLX0KLQotc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9lcSh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXVkX3AoX19DUjZfRVFfUkVWLCAodmVjdG9yIGxvbmcgbG9uZylfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgbG9uZyBsb25nKV9fYik7Ci19Ci0KLXN0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfZXEodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1ZF9wKF9fQ1I2X0VRX1JFViwgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19iKTsKLX0KLQotc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9lcSh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdWRfcCgKLSAgICAgIF9fQ1I2X0VRX1JFViwgKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYSwgKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYik7Ci19Ci0KLXN0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfZXEodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1ZF9wKAotICAgICAgX19DUjZfRVFfUkVWLCAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19hLCAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19iKTsKLX0KLQotc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9lcSh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdWRfcCgKLSAgICAgIF9fQ1I2X0VRX1JFViwgKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYSwgKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYik7Ci19Ci0KLXN0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfZXEodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdWRfcCgKLSAgICAgIF9fQ1I2X0VRX1JFViwgKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYSwgKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYik7Ci19Ci0jZW5kaWYKLQotc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9lcSh2ZWN0b3IgZmxvYXQgX19hLCB2ZWN0b3IgZmxvYXQgX19iKSB7Ci0jaWZkZWYgX19WU1hfXwotICByZXR1cm4gX19idWlsdGluX3ZzeF94dmNtcGVxc3BfcChfX0NSNl9FUV9SRVYsIF9fYSwgX19iKTsKLSNlbHNlCi0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXFmcF9wKF9fQ1I2X0VRX1JFViwgX19hLCBfX2IpOwotI2VuZGlmCi19Ci0KLSNpZmRlZiBfX1ZTWF9fCi1zdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2VxKHZlY3RvciBkb3VibGUgX19hLCB2ZWN0b3IgZG91YmxlIF9fYikgewotICByZXR1cm4gX19idWlsdGluX3ZzeF94dmNtcGVxZHBfcChfX0NSNl9FUV9SRVYsIF9fYSwgX19iKTsKLX0KLSNlbmRpZgotCi0vKiB2ZWNfYW55X2dlICovCi0KLXN0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfZ2UodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0c2JfcChfX0NSNl9MVF9SRVYsIF9fYiwgX19hKTsKLX0KLQotc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9nZSh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0c2JfcChfX0NSNl9MVF9SRVYsICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2EpOwotfQotCi1zdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2dlKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1Yl9wKF9fQ1I2X0xUX1JFViwgX19iLCBfX2EpOwotfQotCi1zdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2dlKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHViX3AoX19DUjZfTFRfUkVWLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2EpOwotfQotCi1zdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2dlKHZlY3RvciBib29sIGNoYXIgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1Yl9wKF9fQ1I2X0xUX1JFViwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSk7Ci19Ci0KLXN0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfZ2UodmVjdG9yIGJvb2wgY2hhciBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWJfcChfX0NSNl9MVF9SRVYsIF9fYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSk7Ci19Ci0KLXN0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfZ2UodmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciBib29sIGNoYXIgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1Yl9wKF9fQ1I2X0xUX1JFViwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSk7Ci19Ci0KLXN0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfZ2UodmVjdG9yIHNob3J0IF9fYSwgdmVjdG9yIHNob3J0IF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0c2hfcChfX0NSNl9MVF9SRVYsIF9fYiwgX19hKTsKLX0KLQotc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9nZSh2ZWN0b3Igc2hvcnQgX19hLCB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHNoX3AoX19DUjZfTFRfUkVWLCAodmVjdG9yIHNob3J0KV9fYiwgX19hKTsKLX0KLQotc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9nZSh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1aF9wKF9fQ1I2X0xUX1JFViwgX19iLCBfX2EpOwotfQotCi1zdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2dlKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIHNob3J0IF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWhfcChfX0NSNl9MVF9SRVYsICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2EpOwotfQotCi1zdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2dlKHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIHNob3J0IF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWhfcChfX0NSNl9MVF9SRVYsICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSk7Ci19Ci0KLXN0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfZ2UodmVjdG9yIGJvb2wgc2hvcnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1aF9wKF9fQ1I2X0xUX1JFViwgX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSk7Ci19Ci0KLXN0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfZ2UodmVjdG9yIGJvb2wgc2hvcnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHVoX3AoX19DUjZfTFRfUkVWLCAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EpOwotfQotCi1zdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2dlKHZlY3RvciBpbnQgX19hLCB2ZWN0b3IgaW50IF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0c3dfcChfX0NSNl9MVF9SRVYsIF9fYiwgX19hKTsKLX0KLQotc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9nZSh2ZWN0b3IgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0c3dfcChfX0NSNl9MVF9SRVYsICh2ZWN0b3IgaW50KV9fYiwgX19hKTsKLX0KLQotc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9nZSh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHV3X3AoX19DUjZfTFRfUkVWLCBfX2IsIF9fYSk7Ci19Ci0KLXN0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfZ2UodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGludCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHV3X3AoX19DUjZfTFRfUkVWLCAodmVjdG9yIHVuc2lnbmVkIGludClfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYSk7Ci19Ci0KLXN0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfZ2UodmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIGludCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHV3X3AoX19DUjZfTFRfUkVWLCAodmVjdG9yIHVuc2lnbmVkIGludClfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSk7Ci19Ci0KLXN0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfZ2UodmVjdG9yIGJvb2wgaW50IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHV3X3AoX19DUjZfTFRfUkVWLCBfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSk7Ci19Ci0KLXN0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfZ2UodmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dXdfcChfX0NSNl9MVF9SRVYsICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hKTsKLX0KLQotI2lmZGVmIF9fUE9XRVI4X1ZFQ1RPUl9fCi1zdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2dlKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3RzZF9wKF9fQ1I2X0xUX1JFViwgX19iLCBfX2EpOwotfQotCi1zdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2dlKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWRfcChfX0NSNl9MVF9SRVYsIF9fYiwgX19hKTsKLX0KLQotc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9nZSh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHNkX3AoX19DUjZfTFRfUkVWLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19iLCBfX2EpOwotfQotCi1zdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2dlKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1ZF9wKF9fQ1I2X0xUX1JFViwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19iLCBfX2EpOwotfQotCi1zdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2dlKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWRfcChfX0NSNl9MVF9SRVYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19hKTsKLX0KLQotc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9nZSh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWRfcChfX0NSNl9MVF9SRVYsIF9fYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19hKTsKLX0KLQotc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9nZSh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1ZF9wKF9fQ1I2X0xUX1JFViwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2EpOwotfQotI2VuZGlmCi0KLXN0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfZ2UodmVjdG9yIGZsb2F0IF9fYSwgdmVjdG9yIGZsb2F0IF9fYikgewotI2lmZGVmIF9fVlNYX18KLSAgcmV0dXJuIF9fYnVpbHRpbl92c3hfeHZjbXBnZXNwX3AoX19DUjZfRVFfUkVWLCBfX2EsIF9fYik7Ci0jZWxzZQotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGdlZnBfcChfX0NSNl9FUV9SRVYsIF9fYSwgX19iKTsKLSNlbmRpZgotfQotCi0jaWZkZWYgX19WU1hfXwotc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9nZSh2ZWN0b3IgZG91YmxlIF9fYSwgdmVjdG9yIGRvdWJsZSBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl92c3hfeHZjbXBnZWRwX3AoX19DUjZfRVFfUkVWLCBfX2EsIF9fYik7Ci19Ci0jZW5kaWYKLQotLyogdmVjX2FueV9ndCAqLwotCi1zdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2d0KHZlY3RvciBzaWduZWQgY2hhciBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHNiX3AoX19DUjZfRVFfUkVWLCBfX2EsIF9fYik7Ci19Ci0KLXN0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfZ3QodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHNiX3AoX19DUjZfRVFfUkVWLCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19iKTsKLX0KLQotc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9ndCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWJfcChfX0NSNl9FUV9SRVYsIF9fYSwgX19iKTsKLX0KLQotc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9ndCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGNoYXIgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1Yl9wKF9fQ1I2X0VRX1JFViwgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKLX0KLQotc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9ndCh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWJfcChfX0NSNl9FUV9SRVYsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOwotfQotCi1zdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2d0KHZlY3RvciBib29sIGNoYXIgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHViX3AoX19DUjZfRVFfUkVWLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2IpOwotfQotCi1zdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2d0KHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWJfcChfX0NSNl9FUV9SRVYsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOwotfQotCi1zdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2d0KHZlY3RvciBzaG9ydCBfX2EsIHZlY3RvciBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHNoX3AoX19DUjZfRVFfUkVWLCBfX2EsIF9fYik7Ci19Ci0KLXN0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfZ3QodmVjdG9yIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3RzaF9wKF9fQ1I2X0VRX1JFViwgX19hLCAodmVjdG9yIHNob3J0KV9fYik7Ci19Ci0KLXN0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfZ3QodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWhfcChfX0NSNl9FUV9SRVYsIF9fYSwgX19iKTsKLX0KLQotc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9ndCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHVoX3AoX19DUjZfRVFfUkVWLCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19iKTsKLX0KLQotc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9ndCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHVoX3AoX19DUjZfRVFfUkVWLCAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2IpOwotfQotCi1zdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2d0KHZlY3RvciBib29sIHNob3J0IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWhfcChfX0NSNl9FUV9SRVYsICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2IpOwotfQotCi1zdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2d0KHZlY3RvciBib29sIHNob3J0IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1aF9wKF9fQ1I2X0VRX1JFViwgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19iKTsKLX0KLQotc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9ndCh2ZWN0b3IgaW50IF9fYSwgdmVjdG9yIGludCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHN3X3AoX19DUjZfRVFfUkVWLCBfX2EsIF9fYik7Ci19Ci0KLXN0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfZ3QodmVjdG9yIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHN3X3AoX19DUjZfRVFfUkVWLCBfX2EsICh2ZWN0b3IgaW50KV9fYik7Ci19Ci0KLXN0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfZ3QodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1d19wKF9fQ1I2X0VRX1JFViwgX19hLCBfX2IpOwotfQotCi1zdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2d0KHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1d19wKF9fQ1I2X0VRX1JFViwgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2IpOwotfQotCi1zdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2d0KHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciBpbnQgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1d19wKF9fQ1I2X0VRX1JFViwgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2IpOwotfQotCi1zdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2d0KHZlY3RvciBib29sIGludCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1d19wKF9fQ1I2X0VRX1JFViwgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2IpOwotfQotCi1zdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2d0KHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHV3X3AoX19DUjZfRVFfUkVWLCAodmVjdG9yIHVuc2lnbmVkIGludClfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYik7Ci19Ci0KLSNpZmRlZiBfX1BPV0VSOF9WRUNUT1JfXwotc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9ndCh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0c2RfcChfX0NSNl9FUV9SRVYsIF9fYSwgX19iKTsKLX0KLQotc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9ndCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHVkX3AoX19DUjZfRVFfUkVWLCBfX2EsIF9fYik7Ci19Ci0KLXN0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfZ3QodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3RzZF9wKF9fQ1I2X0VRX1JFViwgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19iKTsKLX0KLQotc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9ndCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWRfcChfX0NSNl9FUV9SRVYsIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19iKTsKLX0KLQotc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9ndCh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHVkX3AoX19DUjZfRVFfUkVWLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYik7Ci19Ci0KLXN0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfZ3QodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHVkX3AoX19DUjZfRVFfUkVWLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2EsIF9fYik7Ci19Ci0KLXN0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfZ3QodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWRfcChfX0NSNl9FUV9SRVYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19iKTsKLX0KLSNlbmRpZgotCi1zdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2d0KHZlY3RvciBmbG9hdCBfX2EsIHZlY3RvciBmbG9hdCBfX2IpIHsKLSNpZmRlZiBfX1ZTWF9fCi0gIHJldHVybiBfX2J1aWx0aW5fdnN4X3h2Y21wZ3RzcF9wKF9fQ1I2X0VRX1JFViwgX19hLCBfX2IpOwotI2Vsc2UKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndGZwX3AoX19DUjZfRVFfUkVWLCBfX2EsIF9fYik7Ci0jZW5kaWYKLX0KLQotI2lmZGVmIF9fVlNYX18KLXN0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfZ3QodmVjdG9yIGRvdWJsZSBfX2EsIHZlY3RvciBkb3VibGUgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fdnN4X3h2Y21wZ3RkcF9wKF9fQ1I2X0VRX1JFViwgX19hLCBfX2IpOwotfQotI2VuZGlmCi0KLS8qIHZlY19hbnlfbGUgKi8KLQotc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9sZSh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3RzYl9wKF9fQ1I2X0xUX1JFViwgX19hLCBfX2IpOwotfQotCi1zdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2xlKHZlY3RvciBzaWduZWQgY2hhciBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGNoYXIgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3RzYl9wKF9fQ1I2X0xUX1JFViwgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYik7Ci19Ci0KLXN0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfbGUodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHViX3AoX19DUjZfTFRfUkVWLCBfX2EsIF9fYik7Ci19Ci0KLXN0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfbGUodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWJfcChfX0NSNl9MVF9SRVYsIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Ci19Ci0KLXN0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfbGUodmVjdG9yIGJvb2wgY2hhciBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHViX3AoX19DUjZfTFRfUkVWLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKLX0KLQotc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9sZSh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1Yl9wKF9fQ1I2X0xUX1JFViwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19iKTsKLX0KLQotc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9sZSh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHViX3AoX19DUjZfTFRfUkVWLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKLX0KLQotc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9sZSh2ZWN0b3Igc2hvcnQgX19hLCB2ZWN0b3Igc2hvcnQgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3RzaF9wKF9fQ1I2X0xUX1JFViwgX19hLCBfX2IpOwotfQotCi1zdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2xlKHZlY3RvciBzaG9ydCBfX2EsIHZlY3RvciBib29sIHNob3J0IF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0c2hfcChfX0NSNl9MVF9SRVYsIF9fYSwgKHZlY3RvciBzaG9ydClfX2IpOwotfQotCi1zdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2xlKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHVoX3AoX19DUjZfTFRfUkVWLCBfX2EsIF9fYik7Ci19Ci0KLXN0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfbGUodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1aF9wKF9fQ1I2X0xUX1JFViwgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYik7Ci19Ci0KLXN0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfbGUodmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3Igc2hvcnQgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1aF9wKF9fQ1I2X0xUX1JFViwgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19iKTsKLX0KLQotc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9sZSh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHVoX3AoX19DUjZfTFRfUkVWLCAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19iKTsKLX0KLQotc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9sZSh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIHNob3J0IF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWhfcChfX0NSNl9MVF9SRVYsICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYik7Ci19Ci0KLXN0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfbGUodmVjdG9yIGludCBfX2EsIHZlY3RvciBpbnQgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3Rzd19wKF9fQ1I2X0xUX1JFViwgX19hLCBfX2IpOwotfQotCi1zdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2xlKHZlY3RvciBpbnQgX19hLCB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3Rzd19wKF9fQ1I2X0xUX1JFViwgX19hLCAodmVjdG9yIGludClfX2IpOwotfQotCi1zdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2xlKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dXdfcChfX0NSNl9MVF9SRVYsIF9fYSwgX19iKTsKLX0KLQotc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9sZSh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgaW50IF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dXdfcChfX0NSNl9MVF9SRVYsIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iKTsKLX0KLQotc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9sZSh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgaW50IF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dXdfcChfX0NSNl9MVF9SRVYsICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iKTsKLX0KLQotc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9sZSh2ZWN0b3IgYm9vbCBpbnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dXdfcChfX0NSNl9MVF9SRVYsICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19iKTsKLX0KLQotc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9sZSh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1d19wKF9fQ1I2X0xUX1JFViwgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2IpOwotfQotCi0jaWZkZWYgX19QT1dFUjhfVkVDVE9SX18KLXN0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfbGUodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHNkX3AoX19DUjZfTFRfUkVWLCBfX2EsIF9fYik7Ci19Ci0KLXN0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfbGUodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1ZF9wKF9fQ1I2X0xUX1JFViwgX19hLCBfX2IpOwotfQotCi1zdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2xlKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0c2RfcChfX0NSNl9MVF9SRVYsIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYik7Ci19Ci0KLXN0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfbGUodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHVkX3AoX19DUjZfTFRfUkVWLCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYik7Ci19Ci0KLXN0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfbGUodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1ZF9wKF9fQ1I2X0xUX1JFViwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2IpOwotfQotCi1zdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2xlKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1ZF9wKF9fQ1I2X0xUX1JFViwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19hLCBfX2IpOwotfQotCi1zdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2xlKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHVkX3AoX19DUjZfTFRfUkVWLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYik7Ci19Ci0jZW5kaWYKLQotc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9sZSh2ZWN0b3IgZmxvYXQgX19hLCB2ZWN0b3IgZmxvYXQgX19iKSB7Ci0jaWZkZWYgX19WU1hfXwotICByZXR1cm4gX19idWlsdGluX3ZzeF94dmNtcGdlc3BfcChfX0NSNl9FUV9SRVYsIF9fYiwgX19hKTsKLSNlbHNlCi0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ2VmcF9wKF9fQ1I2X0VRX1JFViwgX19iLCBfX2EpOwotI2VuZGlmCi19Ci0KLSNpZmRlZiBfX1ZTWF9fCi1zdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2xlKHZlY3RvciBkb3VibGUgX19hLCB2ZWN0b3IgZG91YmxlIF9fYikgewotICByZXR1cm4gX19idWlsdGluX3ZzeF94dmNtcGdlZHBfcChfX0NSNl9FUV9SRVYsIF9fYiwgX19hKTsKLX0KLSNlbmRpZgotCi0vKiB2ZWNfYW55X2x0ICovCi0KLXN0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfbHQodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0c2JfcChfX0NSNl9FUV9SRVYsIF9fYiwgX19hKTsKLX0KLQotc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9sdCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0c2JfcChfX0NSNl9FUV9SRVYsICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2EpOwotfQotCi1zdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2x0KHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1Yl9wKF9fQ1I2X0VRX1JFViwgX19iLCBfX2EpOwotfQotCi1zdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2x0KHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHViX3AoX19DUjZfRVFfUkVWLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2EpOwotfQotCi1zdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2x0KHZlY3RvciBib29sIGNoYXIgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1Yl9wKF9fQ1I2X0VRX1JFViwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSk7Ci19Ci0KLXN0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfbHQodmVjdG9yIGJvb2wgY2hhciBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWJfcChfX0NSNl9FUV9SRVYsIF9fYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSk7Ci19Ci0KLXN0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfbHQodmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciBib29sIGNoYXIgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1Yl9wKF9fQ1I2X0VRX1JFViwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSk7Ci19Ci0KLXN0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfbHQodmVjdG9yIHNob3J0IF9fYSwgdmVjdG9yIHNob3J0IF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0c2hfcChfX0NSNl9FUV9SRVYsIF9fYiwgX19hKTsKLX0KLQotc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9sdCh2ZWN0b3Igc2hvcnQgX19hLCB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHNoX3AoX19DUjZfRVFfUkVWLCAodmVjdG9yIHNob3J0KV9fYiwgX19hKTsKLX0KLQotc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9sdCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1aF9wKF9fQ1I2X0VRX1JFViwgX19iLCBfX2EpOwotfQotCi1zdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2x0KHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIHNob3J0IF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWhfcChfX0NSNl9FUV9SRVYsICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2EpOwotfQotCi1zdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2x0KHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIHNob3J0IF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWhfcChfX0NSNl9FUV9SRVYsICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSk7Ci19Ci0KLXN0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfbHQodmVjdG9yIGJvb2wgc2hvcnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1aF9wKF9fQ1I2X0VRX1JFViwgX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSk7Ci19Ci0KLXN0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfbHQodmVjdG9yIGJvb2wgc2hvcnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHVoX3AoX19DUjZfRVFfUkVWLCAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EpOwotfQotCi1zdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2x0KHZlY3RvciBpbnQgX19hLCB2ZWN0b3IgaW50IF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0c3dfcChfX0NSNl9FUV9SRVYsIF9fYiwgX19hKTsKLX0KLQotc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9sdCh2ZWN0b3IgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0c3dfcChfX0NSNl9FUV9SRVYsICh2ZWN0b3IgaW50KV9fYiwgX19hKTsKLX0KLQotc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9sdCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHV3X3AoX19DUjZfRVFfUkVWLCBfX2IsIF9fYSk7Ci19Ci0KLXN0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfbHQodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGludCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHV3X3AoX19DUjZfRVFfUkVWLCAodmVjdG9yIHVuc2lnbmVkIGludClfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYSk7Ci19Ci0KLXN0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfbHQodmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIGludCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHV3X3AoX19DUjZfRVFfUkVWLCAodmVjdG9yIHVuc2lnbmVkIGludClfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSk7Ci19Ci0KLXN0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfbHQodmVjdG9yIGJvb2wgaW50IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHV3X3AoX19DUjZfRVFfUkVWLCBfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSk7Ci19Ci0KLXN0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfbHQodmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dXdfcChfX0NSNl9FUV9SRVYsICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hKTsKLX0KLQotI2lmZGVmIF9fUE9XRVI4X1ZFQ1RPUl9fCi1zdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2x0KHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3RzZF9wKF9fQ1I2X0VRX1JFViwgX19iLCBfX2EpOwotfQotCi1zdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2x0KHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWRfcChfX0NSNl9FUV9SRVYsIF9fYiwgX19hKTsKLX0KLQotc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9sdCh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHNkX3AoX19DUjZfRVFfUkVWLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19iLCBfX2EpOwotfQotCi1zdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2x0KHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1ZF9wKF9fQ1I2X0VRX1JFViwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19iLCBfX2EpOwotfQotCi1zdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2x0KHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWRfcChfX0NSNl9FUV9SRVYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19hKTsKLX0KLQotc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9sdCh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWRfcChfX0NSNl9FUV9SRVYsIF9fYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19hKTsKLX0KLQotc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9sdCh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1ZF9wKF9fQ1I2X0VRX1JFViwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2EpOwotfQotI2VuZGlmCi0KLXN0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfbHQodmVjdG9yIGZsb2F0IF9fYSwgdmVjdG9yIGZsb2F0IF9fYikgewotI2lmZGVmIF9fVlNYX18KLSAgcmV0dXJuIF9fYnVpbHRpbl92c3hfeHZjbXBndHNwX3AoX19DUjZfRVFfUkVWLCBfX2IsIF9fYSk7Ci0jZWxzZQotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0ZnBfcChfX0NSNl9FUV9SRVYsIF9fYiwgX19hKTsKLSNlbmRpZgotfQotCi0jaWZkZWYgX19WU1hfXwotc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9sdCh2ZWN0b3IgZG91YmxlIF9fYSwgdmVjdG9yIGRvdWJsZSBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl92c3hfeHZjbXBndGRwX3AoX19DUjZfRVFfUkVWLCBfX2IsIF9fYSk7Ci19Ci0jZW5kaWYKLQotLyogdmVjX2FueV9uYW4gKi8KLQotc3RhdGljIGludCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpIHZlY19hbnlfbmFuKHZlY3RvciBmbG9hdCBfX2EpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcWZwX3AoX19DUjZfTFRfUkVWLCBfX2EsIF9fYSk7Ci19Ci0KLS8qIHZlY19hbnlfbmUgKi8KLQotc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9uZSh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1Yl9wKF9fQ1I2X0xUX1JFViwgKHZlY3RvciBjaGFyKV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBjaGFyKV9fYik7Ci19Ci0KLXN0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfbmUodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXViX3AoX19DUjZfTFRfUkVWLCAodmVjdG9yIGNoYXIpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGNoYXIpX19iKTsKLX0KLQotc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9uZSh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdWJfcChfX0NSNl9MVF9SRVYsICh2ZWN0b3IgY2hhcilfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgY2hhcilfX2IpOwotfQotCi1zdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X25lKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXViX3AoX19DUjZfTFRfUkVWLCAodmVjdG9yIGNoYXIpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGNoYXIpX19iKTsKLX0KLQotc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9uZSh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdWJfcChfX0NSNl9MVF9SRVYsICh2ZWN0b3IgY2hhcilfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgY2hhcilfX2IpOwotfQotCi1zdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X25lKHZlY3RvciBib29sIGNoYXIgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXViX3AoX19DUjZfTFRfUkVWLCAodmVjdG9yIGNoYXIpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGNoYXIpX19iKTsKLX0KLQotc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9uZSh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXViX3AoX19DUjZfTFRfUkVWLCAodmVjdG9yIGNoYXIpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGNoYXIpX19iKTsKLX0KLQotc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9uZSh2ZWN0b3Igc2hvcnQgX19hLCB2ZWN0b3Igc2hvcnQgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1aF9wKF9fQ1I2X0xUX1JFViwgX19hLCBfX2IpOwotfQotCi1zdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X25lKHZlY3RvciBzaG9ydCBfX2EsIHZlY3RvciBib29sIHNob3J0IF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdWhfcChfX0NSNl9MVF9SRVYsIF9fYSwgKHZlY3RvciBzaG9ydClfX2IpOwotfQotCi1zdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X25lKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXVoX3AoX19DUjZfTFRfUkVWLCAodmVjdG9yIHNob3J0KV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaG9ydClfX2IpOwotfQotCi1zdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X25lKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIHNob3J0IF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdWhfcChfX0NSNl9MVF9SRVYsICh2ZWN0b3Igc2hvcnQpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNob3J0KV9fYik7Ci19Ci0KLXN0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfbmUodmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3Igc2hvcnQgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1aF9wKF9fQ1I2X0xUX1JFViwgKHZlY3RvciBzaG9ydClfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3Igc2hvcnQpX19iKTsKLX0KLQotc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9uZSh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXVoX3AoX19DUjZfTFRfUkVWLCAodmVjdG9yIHNob3J0KV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaG9ydClfX2IpOwotfQotCi1zdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X25lKHZlY3RvciBib29sIHNob3J0IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1aF9wKF9fQ1I2X0xUX1JFViwgKHZlY3RvciBzaG9ydClfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3Igc2hvcnQpX19iKTsKLX0KLQotc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9uZSh2ZWN0b3IgcGl4ZWwgX19hLCB2ZWN0b3IgcGl4ZWwgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1aF9wKF9fQ1I2X0xUX1JFViwgKHZlY3RvciBzaG9ydClfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3Igc2hvcnQpX19iKTsKLX0KLQotc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9uZSh2ZWN0b3IgaW50IF9fYSwgdmVjdG9yIGludCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXV3X3AoX19DUjZfTFRfUkVWLCBfX2EsIF9fYik7Ci19Ci0KLXN0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfbmUodmVjdG9yIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXV3X3AoX19DUjZfTFRfUkVWLCBfX2EsICh2ZWN0b3IgaW50KV9fYik7Ci19Ci0KLXN0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfbmUodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1d19wKF9fQ1I2X0xUX1JFViwgKHZlY3RvciBpbnQpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOwotfQotCi1zdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X25lKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1d19wKF9fQ1I2X0xUX1JFViwgKHZlY3RvciBpbnQpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOwotfQotCi1zdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X25lKHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciBpbnQgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1d19wKF9fQ1I2X0xUX1JFViwgKHZlY3RvciBpbnQpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOwotfQotCi1zdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X25lKHZlY3RvciBib29sIGludCBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1d19wKF9fQ1I2X0xUX1JFViwgKHZlY3RvciBpbnQpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOwotfQotCi1zdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X25lKHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXV3X3AoX19DUjZfTFRfUkVWLCAodmVjdG9yIGludClfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Ci19Ci0KLSNpZmRlZiBfX1BPV0VSOF9WRUNUT1JfXwotc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9uZSh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdWRfcChfX0NSNl9MVF9SRVYsIF9fYSwgX19iKTsKLX0KLQotc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9uZSh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXVkX3AoX19DUjZfTFRfUkVWLCAodmVjdG9yIGxvbmcgbG9uZylfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgbG9uZyBsb25nKV9fYik7Ci19Ci0KLXN0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfbmUodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1ZF9wKF9fQ1I2X0xUX1JFViwgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19iKTsKLX0KLQotc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9uZSh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdWRfcCgKLSAgICAgIF9fQ1I2X0xUX1JFViwgKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYSwgKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYik7Ci19Ci0KLXN0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfbmUodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1ZF9wKAotICAgICAgX19DUjZfTFRfUkVWLCAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19hLCAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19iKTsKLX0KLQotc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9uZSh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdWRfcCgKLSAgICAgIF9fQ1I2X0xUX1JFViwgKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYSwgKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYik7Ci19Ci0KLXN0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfbmUodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdWRfcCgKLSAgICAgIF9fQ1I2X0xUX1JFViwgKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYSwgKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYik7Ci19Ci0jZW5kaWYKLQotc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9uZSh2ZWN0b3IgZmxvYXQgX19hLCB2ZWN0b3IgZmxvYXQgX19iKSB7Ci0jaWZkZWYgX19WU1hfXwotICByZXR1cm4gX19idWlsdGluX3ZzeF94dmNtcGVxc3BfcChfX0NSNl9MVF9SRVYsIF9fYSwgX19iKTsKLSNlbHNlCi0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXFmcF9wKF9fQ1I2X0xUX1JFViwgX19hLCBfX2IpOwotI2VuZGlmCi19Ci0KLSNpZmRlZiBfX1ZTWF9fCi1zdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X25lKHZlY3RvciBkb3VibGUgX19hLCB2ZWN0b3IgZG91YmxlIF9fYikgewotICByZXR1cm4gX19idWlsdGluX3ZzeF94dmNtcGVxZHBfcChfX0NSNl9MVF9SRVYsIF9fYSwgX19iKTsKLX0KLSNlbmRpZgotCi0vKiB2ZWNfYW55X25nZSAqLwotCi1zdGF0aWMgaW50IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKLXZlY19hbnlfbmdlKHZlY3RvciBmbG9hdCBfX2EsIHZlY3RvciBmbG9hdCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBnZWZwX3AoX19DUjZfTFRfUkVWLCBfX2EsIF9fYik7Ci19Ci0KLS8qIHZlY19hbnlfbmd0ICovCi0KLXN0YXRpYyBpbnQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQotdmVjX2FueV9uZ3QodmVjdG9yIGZsb2F0IF9fYSwgdmVjdG9yIGZsb2F0IF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0ZnBfcChfX0NSNl9MVF9SRVYsIF9fYSwgX19iKTsKLX0KLQotLyogdmVjX2FueV9ubGUgKi8KLQotc3RhdGljIGludCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCi12ZWNfYW55X25sZSh2ZWN0b3IgZmxvYXQgX19hLCB2ZWN0b3IgZmxvYXQgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ2VmcF9wKF9fQ1I2X0xUX1JFViwgX19iLCBfX2EpOwotfQotCi0vKiB2ZWNfYW55X25sdCAqLwotCi1zdGF0aWMgaW50IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKLXZlY19hbnlfbmx0KHZlY3RvciBmbG9hdCBfX2EsIHZlY3RvciBmbG9hdCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndGZwX3AoX19DUjZfTFRfUkVWLCBfX2IsIF9fYSk7Ci19Ci0KLS8qIHZlY19hbnlfbnVtZXJpYyAqLwotCi1zdGF0aWMgaW50IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKLXZlY19hbnlfbnVtZXJpYyh2ZWN0b3IgZmxvYXQgX19hKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXFmcF9wKF9fQ1I2X0VRX1JFViwgX19hLCBfX2EpOwotfQotCi0vKiB2ZWNfYW55X291dCAqLwotCi1zdGF0aWMgaW50IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKLXZlY19hbnlfb3V0KHZlY3RvciBmbG9hdCBfX2EsIHZlY3RvciBmbG9hdCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBiZnBfcChfX0NSNl9FUV9SRVYsIF9fYSwgX19iKTsKLX0KLQotLyogUG93ZXIgOCBDcnlwdG8gZnVuY3Rpb25zCi1Ob3RlOiBXZSBkaXZlcmdlIGZyb20gdGhlIGN1cnJlbnQgR0NDIGltcGxlbWVudGF0aW9uIHdpdGggcmVnYXJkCi10byBjcnlwdG9ncmFwaHkgYW5kIHJlbGF0ZWQgZnVuY3Rpb25zIGFzIGZvbGxvd3M6Ci0tIE9ubHkgdGhlIFNIQSBhbmQgQUVTIGluc3RydWN0aW9ucyBhbmQgYnVpbHRpbnMgYXJlIGRpc2FibGVkIGJ5IC1tbm8tY3J5cHRvCi0tIFRoZSByZW1haW5pbmcgb25lcyBhcmUgb25seSBhdmFpbGFibGUgb24gUG93ZXI4IGFuZCB1cCBzbwotICByZXF1aXJlIC1tcG93ZXI4LXZlY3RvcgotVGhlIGp1c3RpZmljYXRpb24gZm9yIHRoaXMgaXMgdGhhdCBleHBvcnQgcmVxdWlyZW1lbnRzIHJlcXVpcmUgdGhhdAotQ2F0ZWdvcnk6VmVjdG9yLkNyeXB0byBpcyBvcHRpb25hbCAoaS5lLiBjb21wbGlhbnQgaGFyZHdhcmUgbWF5IG5vdCBwcm92aWRlCi1zdXBwb3J0KS4gQXMgYSByZXN1bHQsIHdlIG5lZWQgdG8gYmUgYWJsZSB0byB0dXJuIG9mZiBzdXBwb3J0IGZvciB0aG9zZS4KLVRoZSByZW1haW5pbmcgb25lcyAoY3VycmVudGx5IGNvbnRyb2xsZWQgYnkgLW1jcnlwdG8gZm9yIEdDQykgc3RpbGwKLW5lZWQgdG8gYmUgcHJvdmlkZWQgb24gY29tcGxpYW50IGhhcmR3YXJlIGV2ZW4gaWYgVmVjdG9yLkNyeXB0byBpcyBub3QKLXByb3ZpZGVkLgotKi8KLSNpZmRlZiBfX0NSWVBUT19fCi0jZGVmaW5lIHZlY19zYm94X2JlIF9fYnVpbHRpbl9hbHRpdmVjX2NyeXB0b192c2JveAotI2RlZmluZSB2ZWNfY2lwaGVyX2JlIF9fYnVpbHRpbl9hbHRpdmVjX2NyeXB0b192Y2lwaGVyCi0jZGVmaW5lIHZlY19jaXBoZXJsYXN0X2JlIF9fYnVpbHRpbl9hbHRpdmVjX2NyeXB0b192Y2lwaGVybGFzdAotI2RlZmluZSB2ZWNfbmNpcGhlcl9iZSBfX2J1aWx0aW5fYWx0aXZlY19jcnlwdG9fdm5jaXBoZXIKLSNkZWZpbmUgdmVjX25jaXBoZXJsYXN0X2JlIF9fYnVpbHRpbl9hbHRpdmVjX2NyeXB0b192bmNpcGhlcmxhc3QKLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQotX19idWlsdGluX2NyeXB0b192c2JveCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSkgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfY3J5cHRvX3ZzYm94KF9fYSk7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKLV9fYnVpbHRpbl9jcnlwdG9fdmNpcGhlcih2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfY3J5cHRvX3ZjaXBoZXIoX19hLCBfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCi1fX2J1aWx0aW5fY3J5cHRvX3ZjaXBoZXJsYXN0KHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfY3J5cHRvX3ZjaXBoZXJsYXN0KF9fYSwgX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQotX19idWlsdGluX2NyeXB0b192bmNpcGhlcih2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX2NyeXB0b192bmNpcGhlcihfX2EsIF9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKLV9fYnVpbHRpbl9jcnlwdG9fdm5jaXBoZXJsYXN0KHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX2NyeXB0b192bmNpcGhlcmxhc3QoX19hLCBfX2IpOwotfQotCi0jZGVmaW5lIF9fYnVpbHRpbl9jcnlwdG9fdnNoYXNpZ21hZCBfX2J1aWx0aW5fYWx0aXZlY19jcnlwdG9fdnNoYXNpZ21hZAotI2RlZmluZSBfX2J1aWx0aW5fY3J5cHRvX3ZzaGFzaWdtYXcgX19idWlsdGluX2FsdGl2ZWNfY3J5cHRvX3ZzaGFzaWdtYXcKLQotI2RlZmluZSB2ZWNfc2hhc2lnbWFfYmUoWCwgWSwgWikgXAotICBfR2VuZXJpYygoWCksIHZlY3RvciB1bnNpZ25lZCBpbnQ6IF9fYnVpbHRpbl9jcnlwdG9fdnNoYXNpZ21hdywgXAotICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmc6IF9fYnVpbHRpbl9jcnlwdG9fdnNoYXNpZ21hZCkgXAotKChYKSwgKFkpLCAoWikpCi0jZW5kaWYKLQotI2lmZGVmIF9fUE9XRVI4X1ZFQ1RPUl9fCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCi1fX2J1aWx0aW5fY3J5cHRvX3ZwZXJteG9yKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2MpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX2NyeXB0b192cGVybXhvcihfX2EsIF9fYiwgX19jKTsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKLV9fYnVpbHRpbl9jcnlwdG9fdnBlcm14b3IodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYykgewotICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY19jcnlwdG9fdnBlcm14b3IoCi0gICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iLAotICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYyk7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haSBfX2J1aWx0aW5fY3J5cHRvX3ZwZXJteG9yKAotICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYiwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2MpIHsKLSAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYnVpbHRpbl9hbHRpdmVjX2NyeXB0b192cGVybXhvcigKLSAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IsCi0gICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19jKTsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpIF9fYnVpbHRpbl9jcnlwdG9fdnBlcm14b3IoCi0gICAgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iLAotICAgIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19jKSB7Ci0gIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2J1aWx0aW5fYWx0aXZlY19jcnlwdG9fdnBlcm14b3IoCi0gICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iLAotICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYyk7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkKLV9fYnVpbHRpbl9jcnlwdG9fdnBtc3VtYih2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfY3J5cHRvX3ZwbXN1bWIoX19hLCBfX2IpOwotfQotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haQotX19idWlsdGluX2NyeXB0b192cG1zdW1iKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX2NyeXB0b192cG1zdW1oKF9fYSwgX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpCi1fX2J1aWx0aW5fY3J5cHRvX3ZwbXN1bWIodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY19jcnlwdG9fdnBtc3VtdyhfX2EsIF9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQotX19idWlsdGluX2NyeXB0b192cG1zdW1iKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY19jcnlwdG9fdnBtc3VtZChfX2EsIF9fYik7Ci19Ci0KLXN0YXRpYyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY192Z2JiZCAodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSkKLXsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZnYmJkKCh2ZWN0b3IgdW5zaWduZWQgY2hhcikgX19hKTsKLX0KLQotI2RlZmluZSB2ZWNfcG1zdW1fYmUgX19idWlsdGluX2NyeXB0b192cG1zdW1iCi0jZGVmaW5lIHZlY19nYiBfX2J1aWx0aW5fYWx0aXZlY192Z2JiZAotCi1zdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY192Z2JiZCAodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hKQotewotICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmdiYmQoX19hKTsKLX0KLQotc3RhdGljIHZlY3RvciBsb25nIGxvbmcgX19BVFRSU19vX2FpCi12ZWNfdmJwZXJtcSAodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikKLXsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZicGVybXEoKHZlY3RvciB1bnNpZ25lZCBjaGFyKSBfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikgX19iKTsKLX0KLQotc3RhdGljIHZlY3RvciBsb25nIGxvbmcgX19BVFRSU19vX2FpCi12ZWNfdmJwZXJtcSAodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpCi17Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192YnBlcm1xKF9fYSwgX19iKTsKLX0KLQotI2lmZGVmIF9fcG93ZXJwYzY0X18KLXN0YXRpYyB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKLXZlY19icGVybSAodmVjdG9yIHVuc2lnbmVkIF9faW50MTI4IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192YnBlcm1xKCh2ZWN0b3IgdW5zaWduZWQgY2hhcikgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpIF9fYik7Ci19Ci0jZW5kaWYKLSNlbmRpZgotCi0jdW5kZWYgX19BVFRSU19vX2FpCi0KLSNlbmRpZiAvKiBfX0FMVElWRUNfSCAqLwpkaWZmIC0tZ2l0IGEvY2xhbmctMjU3NzExMy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9hbW1pbnRyaW4uaCBiL2NsYW5nLTI1NzcxMTMvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvYW1taW50cmluLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ4ODBmZDcuLjAwMDAwMDAKLS0tIGEvY2xhbmctMjU3NzExMy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9hbW1pbnRyaW4uaAorKysgL2Rldi9udWxsCkBAIC0xLDIwOSArMCwwIEBACi0vKj09PS0tLS0gYW1taW50cmluLmggLSBTU0U0YSBpbnRyaW5zaWNzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09Ci0gKgotICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQotICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKLSAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKLSAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKLSAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcwotICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKLSAqCi0gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgotICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCi0gKgotICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKLSAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAotICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCi0gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAotICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgotICogVEhFIFNPRlRXQVJFLgotICoKLSAqPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KLSAqLwotCi0jaWZuZGVmIF9fQU1NSU5UUklOX0gKLSNkZWZpbmUgX19BTU1JTlRSSU5fSAotCi0jaW5jbHVkZSA8cG1taW50cmluLmg+Ci0KLS8qIERlZmluZSB0aGUgZGVmYXVsdCBhdHRyaWJ1dGVzIGZvciB0aGUgZnVuY3Rpb25zIGluIHRoaXMgZmlsZS4gKi8KLSNkZWZpbmUgX19ERUZBVUxUX0ZOX0FUVFJTIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXywgX190YXJnZXRfXygic3NlNGEiKSkpCi0KLS8vLyBcYnJpZWYgRXh0cmFjdHMgdGhlIHNwZWNpZmllZCBiaXRzIGZyb20gdGhlIGxvd2VyIDY0IGJpdHMgb2YgdGhlIDEyOC1iaXQKLS8vLyAgICBpbnRlZ2VyIHZlY3RvciBvcGVyYW5kIGF0IHRoZSBpbmRleCBpZHggYW5kIG9mIHRoZSBsZW5ndGggbGVuLgotLy8vCi0vLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgotLy8vCi0vLy8gXGNvZGUKLS8vLyBfX20xMjhpIF9tbV9leHRyYWN0aV9zaTY0KF9fbTEyOGkgeCwgY29uc3QgaW50IGxlbiwgY29uc3QgaW50IGlkeCk7Ci0vLy8gXGVuZGNvZGUKLS8vLwotLy8vIFxjb2RlCi0vLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIEVYVFJRIGluc3RydWN0aW9uLgotLy8vIFxlbmRjb2RlCi0vLy8KLS8vLyBccGFyYW0geAotLy8vICAgIFRoZSB2YWx1ZSBmcm9tIHdoaWNoIGJpdHMgYXJlIGV4dHJhY3RlZC4KLS8vLyBccGFyYW0gbGVuCi0vLy8gICAgQml0cyBbNTowXSBzcGVjaWZ5IHRoZSBsZW5ndGg7IHRoZSBvdGhlciBiaXRzIGFyZSBpZ25vcmVkLiBJZiBiaXRzIFs1OjBdCi0vLy8gICAgYXJlIHplcm8sIHRoZSBsZW5ndGggaXMgaW50ZXJwcmV0ZWQgYXMgNjQuCi0vLy8gXHBhcmFtIGlkeAotLy8vICAgIEJpdHMgWzU6MF0gc3BlY2lmeSB0aGUgaW5kZXggb2YgdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdDsgdGhlIG90aGVyCi0vLy8gICAgYml0cyBhcmUgaWdub3JlZC4gSWYgdGhlIHN1bSBvZiB0aGUgaW5kZXggYW5kIGxlbmd0aCBpcyBncmVhdGVyIHRoYW4KLS8vLyAgICA2NCwgdGhlIHJlc3VsdCBpcyB1bmRlZmluZWQuIElmIHRoZSBsZW5ndGggYW5kIGluZGV4IGFyZSBib3RoIHplcm8sCi0vLy8gICAgYml0cyBbNjM6MF0gb2YgcGFyYW1ldGVyIHggYXJlIGV4dHJhY3RlZC4gSWYgdGhlIGxlbmd0aCBpcyB6ZXJvCi0vLy8gICAgYnV0IHRoZSBpbmRleCBpcyBub24temVybywgdGhlIHJlc3VsdCBpcyB1bmRlZmluZWQuCi0vLy8gXHJldHVybnMgQSAxMjgtYml0IGludGVnZXIgdmVjdG9yIHdob3NlIGxvd2VyIDY0IGJpdHMgY29udGFpbiB0aGUgYml0cwotLy8vICAgIGV4dHJhY3RlZCBmcm9tIHRoZSBzb3VyY2Ugb3BlcmFuZC4KLSNkZWZpbmUgX21tX2V4dHJhY3RpX3NpNjQoeCwgbGVuLCBpZHgpIFwKLSAgKChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX2V4dHJxaSgoX192MmRpKShfX20xMjhpKSh4KSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyKShsZW4pLCAoY2hhcikoaWR4KSkpCi0KLS8vLyBcYnJpZWYgRXh0cmFjdHMgdGhlIHNwZWNpZmllZCBiaXRzIGZyb20gdGhlIGxvd2VyIDY0IGJpdHMgb2YgdGhlIDEyOC1iaXQKLS8vLyAgICBpbnRlZ2VyIHZlY3RvciBvcGVyYW5kIGF0IHRoZSBpbmRleCBhbmQgb2YgdGhlIGxlbmd0aCBzcGVjaWZpZWQgYnkgX195LgotLy8vCi0vLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgotLy8vCi0vLy8gXGNvZGUKLS8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgRVhUUlEgaW5zdHJ1Y3Rpb24uCi0vLy8gXGVuZGNvZGUKLS8vLwotLy8vIFxwYXJhbSBfX3gKLS8vLyAgICBUaGUgdmFsdWUgZnJvbSB3aGljaCBiaXRzIGFyZSBleHRyYWN0ZWQuCi0vLy8gXHBhcmFtIF9feQotLy8vICAgIFNwZWNpZmllcyB0aGUgaW5kZXggb2YgdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdCBhdCBbMTM6OF0KLS8vLyAgICBhbmQgdGhlIGxlbmd0aCBhdCBbNTowXTsgYWxsIG90aGVyIGJpdHMgYXJlIGlnbm9yZWQuCi0vLy8gICAgSWYgYml0cyBbNTowXSBhcmUgemVybywgdGhlIGxlbmd0aCBpcyBpbnRlcnByZXRlZCBhcyA2NC4KLS8vLyAgICBJZiB0aGUgc3VtIG9mIHRoZSBpbmRleCBhbmQgbGVuZ3RoIGlzIGdyZWF0ZXIgdGhhbiA2NCwgdGhlIHJlc3VsdCBpcwotLy8vICAgIHVuZGVmaW5lZC4gSWYgdGhlIGxlbmd0aCBhbmQgaW5kZXggYXJlIGJvdGggemVybywgYml0cyBbNjM6MF0gb2YKLS8vLyAgICBwYXJhbWV0ZXIgX194IGFyZSBleHRyYWN0ZWQuIElmIHRoZSBsZW5ndGggaXMgemVybyBidXQgdGhlIGluZGV4IGlzCi0vLy8gICAgbm9uLXplcm8sIHRoZSByZXN1bHQgaXMgdW5kZWZpbmVkLgotLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCB2ZWN0b3Igd2hvc2UgbG93ZXIgNjQgYml0cyBjb250YWluIHRoZSBiaXRzIGV4dHJhY3RlZAotLy8vICAgIGZyb20gdGhlIHNvdXJjZSBvcGVyYW5kLgotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9leHRyYWN0X3NpNjQoX19tMTI4aSBfX3gsIF9fbTEyOGkgX195KQotewotICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfZXh0cnEoKF9fdjJkaSlfX3gsIChfX3YxNnFpKV9feSk7Ci19Ci0KLS8vLyBcYnJpZWYgSW5zZXJ0cyBiaXRzIG9mIGEgc3BlY2lmaWVkIGxlbmd0aCBmcm9tIHRoZSBzb3VyY2UgaW50ZWdlciB2ZWN0b3IKLS8vLyAgICB5IGludG8gdGhlIGxvd2VyIDY0IGJpdHMgb2YgdGhlIGRlc3RpbmF0aW9uIGludGVnZXIgdmVjdG9yIHggYXQgdGhlCi0vLy8gICAgaW5kZXggaWR4IGFuZCBvZiB0aGUgbGVuZ3RoIGxlbi4KLS8vLwotLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KLS8vLwotLy8vIFxjb2RlCi0vLy8gX19tMTI4aSBfbW1faW5zZXJ0aV9zaTY0KF9fbTEyOGkgeCwgX19tMTI4aSB5LCBjb25zdCBpbnQgbGVuLAotLy8vIGNvbnN0IGludCBpZHgpOwotLy8vIFxlbmRjb2RlCi0vLy8KLS8vLyBcY29kZQotLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBJTlNFUlRRIGluc3RydWN0aW9uLgotLy8vIFxlbmRjb2RlCi0vLy8KLS8vLyBccGFyYW0geAotLy8vICAgIFRoZSBkZXN0aW5hdGlvbiBvcGVyYW5kIHdoZXJlIGJpdHMgd2lsbCBiZSBpbnNlcnRlZC4gVGhlIGluc2VydGVkIGJpdHMKLS8vLyAgICBhcmUgZGVmaW5lZCBieSB0aGUgbGVuZ3RoIGxlbiBhbmQgYnkgdGhlIGluZGV4IGlkeCBzcGVjaWZ5aW5nIHRoZSBsZWFzdAotLy8vICAgIHNpZ25pZmljYW50IGJpdC4KLS8vLyBccGFyYW0geQotLy8vICAgIFRoZSBzb3VyY2Ugb3BlcmFuZCBjb250YWluaW5nIHRoZSBiaXRzIHRvIGJlIGV4dHJhY3RlZC4gVGhlIGV4dHJhY3RlZAotLy8vICAgIGJpdHMgYXJlIHRoZSBsZWFzdCBzaWduaWZpY2FudCBiaXRzIG9mIG9wZXJhbmQgeSBvZiBsZW5ndGggbGVuLgotLy8vIFxwYXJhbSBsZW4KLS8vLyAgICBCaXRzIFs1OjBdIHNwZWNpZnkgdGhlIGxlbmd0aDsgdGhlIG90aGVyIGJpdHMgYXJlIGlnbm9yZWQuIElmIGJpdHMgWzU6MF0KLS8vLyAgICBhcmUgemVybywgdGhlIGxlbmd0aCBpcyBpbnRlcnByZXRlZCBhcyA2NC4KLS8vLyBccGFyYW0gaWR4Ci0vLy8gICAgQml0cyBbNTowXSBzcGVjaWZ5IHRoZSBpbmRleCBvZiB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgYml0OyB0aGUgb3RoZXIKLS8vLyAgICBiaXRzIGFyZSBpZ25vcmVkLiBJZiB0aGUgc3VtIG9mIHRoZSBpbmRleCBhbmQgbGVuZ3RoIGlzIGdyZWF0ZXIgdGhhbgotLy8vICAgIDY0LCB0aGUgcmVzdWx0IGlzIHVuZGVmaW5lZC4gSWYgdGhlIGxlbmd0aCBhbmQgaW5kZXggYXJlIGJvdGggemVybywKLS8vLyAgICBiaXRzIFs2MzowXSBvZiBwYXJhbWV0ZXIgeSBhcmUgaW5zZXJ0ZWQgaW50byBwYXJhbWV0ZXIgeC4gSWYgdGhlCi0vLy8gICAgbGVuZ3RoIGlzIHplcm8gYnV0IHRoZSBpbmRleCBpcyBub24temVybywgdGhlIHJlc3VsdCBpcyB1bmRlZmluZWQuCi0vLy8gXHJldHVybnMgQSAxMjgtYml0IGludGVnZXIgdmVjdG9yIGNvbnRhaW5pbmcgdGhlIG9yaWdpbmFsIGxvd2VyIDY0LWJpdHMKLS8vLyAgICBvZiBkZXN0aW5hdGlvbiBvcGVyYW5kIHggd2l0aCB0aGUgc3BlY2lmaWVkIGJpdGZpZWxkcyByZXBsYWNlZCBieSB0aGUKLS8vLyAgICBsb3dlciBiaXRzIG9mIHNvdXJjZSBvcGVyYW5kIHkuIFRoZSB1cHBlciA2NCBiaXRzIG9mIHRoZSByZXR1cm4gdmFsdWUKLS8vLyAgICBhcmUgdW5kZWZpbmVkLgotCi0jZGVmaW5lIF9tbV9pbnNlcnRpX3NpNjQoeCwgeSwgbGVuLCBpZHgpIFwKLSAgKChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX2luc2VydHFpKChfX3YyZGkpKF9fbTEyOGkpKHgpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRpKShfX20xMjhpKSh5KSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIpKGxlbiksIChjaGFyKShpZHgpKSkKLQotLy8vIFxicmllZiBJbnNlcnRzIGJpdHMgb2YgYSBzcGVjaWZpZWQgbGVuZ3RoIGZyb20gdGhlIHNvdXJjZSBpbnRlZ2VyIHZlY3RvcgotLy8vICAgIF9feSBpbnRvIHRoZSBsb3dlciA2NCBiaXRzIG9mIHRoZSBkZXN0aW5hdGlvbiBpbnRlZ2VyIHZlY3RvciBfX3ggYXQKLS8vLyAgICB0aGUgaW5kZXggYW5kIG9mIHRoZSBsZW5ndGggc3BlY2lmaWVkIGJ5IF9feS4KLS8vLwotLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KLS8vLwotLy8vIFxjb2RlCi0vLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIElOU0VSVFEgaW5zdHJ1Y3Rpb24uCi0vLy8gXGVuZGNvZGUKLS8vLwotLy8vIFxwYXJhbSBfX3gKLS8vLyAgICBUaGUgZGVzdGluYXRpb24gb3BlcmFuZCB3aGVyZSBiaXRzIHdpbGwgYmUgaW5zZXJ0ZWQuIFRoZSBpbnNlcnRlZCBiaXRzCi0vLy8gICAgYXJlIGRlZmluZWQgYnkgdGhlIGxlbmd0aCBhbmQgYnkgdGhlIGluZGV4IG9mIHRoZSBsZWFzdCBzaWduaWZpY2FudCBiaXQKLS8vLyAgICBzcGVjaWZpZWQgYnkgb3BlcmFuZCBfX3kuCi0vLy8gXHBhcmFtIF9feQotLy8vICAgIFRoZSBzb3VyY2Ugb3BlcmFuZCBjb250YWluaW5nIHRoZSBiaXRzIHRvIGJlIGV4dHJhY3RlZC4gVGhlIGV4dHJhY3RlZAotLy8vICAgIGJpdHMgYXJlIHRoZSBsZWFzdCBzaWduaWZpY2FudCBiaXRzIG9mIG9wZXJhbmQgX195IHdpdGggbGVuZ3RoIHNwZWNpZmllZAotLy8vICAgIGJ5IGJpdHMgWzY5OjY0XS4gVGhlc2UgYXJlIGluc2VydGVkIGludG8gdGhlIGRlc3RpbmF0aW9uIGF0IHRoZSBpbmRleAotLy8vICAgIHNwZWNpZmllZCBieSBiaXRzIFs3Nzo3Ml07IGFsbCBvdGhlciBiaXRzIGFyZSBpZ25vcmVkLgotLy8vICAgIElmIGJpdHMgWzY5OjY0XSBhcmUgemVybywgdGhlIGxlbmd0aCBpcyBpbnRlcnByZXRlZCBhcyA2NC4KLS8vLyAgICBJZiB0aGUgc3VtIG9mIHRoZSBpbmRleCBhbmQgbGVuZ3RoIGlzIGdyZWF0ZXIgdGhhbiA2NCwgdGhlIHJlc3VsdCBpcwotLy8vICAgIHVuZGVmaW5lZC4gSWYgdGhlIGxlbmd0aCBhbmQgaW5kZXggYXJlIGJvdGggemVybywgYml0cyBbNjM6MF0gb2YKLS8vLyAgICBwYXJhbWV0ZXIgX195IGFyZSBpbnNlcnRlZCBpbnRvIHBhcmFtZXRlciBfX3guIElmIHRoZSBsZW5ndGgKLS8vLyAgICBpcyB6ZXJvIGJ1dCB0aGUgaW5kZXggaXMgbm9uLXplcm8sIHRoZSByZXN1bHQgaXMgdW5kZWZpbmVkLgotLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCBpbnRlZ2VyIHZlY3RvciBjb250YWluaW5nIHRoZSBvcmlnaW5hbCBsb3dlciA2NC1iaXRzCi0vLy8gICAgb2YgZGVzdGluYXRpb24gb3BlcmFuZCBfX3ggd2l0aCB0aGUgc3BlY2lmaWVkIGJpdGZpZWxkcyByZXBsYWNlZCBieSB0aGUKLS8vLyAgICBsb3dlciBiaXRzIG9mIHNvdXJjZSBvcGVyYW5kIF9feS4gVGhlIHVwcGVyIDY0IGJpdHMgb2YgdGhlIHJldHVybiB2YWx1ZQotLy8vICAgIGFyZSB1bmRlZmluZWQuCi0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1faW5zZXJ0X3NpNjQoX19tMTI4aSBfX3gsIF9fbTEyOGkgX195KQotewotICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfaW5zZXJ0cSgoX192MmRpKV9feCwgKF9fdjJkaSlfX3kpOwotfQotCi0vLy8gXGJyaWVmIFN0b3JlcyBhIDY0LWJpdCBkb3VibGUtcHJlY2lzaW9uIHZhbHVlIGluIGEgNjQtYml0IG1lbW9yeSBsb2NhdGlvbi4KLS8vLyAgICBUbyBtaW5pbWl6ZSBjYWNoaW5nLCB0aGUgZGF0YSBpcyBmbGFnZ2VkIGFzIG5vbi10ZW1wb3JhbCAodW5saWtlbHkgdG8gYmUKLS8vLyAgICB1c2VkIGFnYWluIHNvb24pLgotLy8vCi0vLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgotLy8vCi0vLy8gXGNvZGUKLS8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgTU9WTlRTRCBpbnN0cnVjdGlvbi4KLS8vLyBcZW5kY29kZQotLy8vCi0vLy8gXHBhcmFtIF9fcAotLy8vICAgIFRoZSA2NC1iaXQgbWVtb3J5IGxvY2F0aW9uIHVzZWQgdG8gc3RvcmUgdGhlIHJlZ2lzdGVyIHZhbHVlLgotLy8vIFxwYXJhbSBfX2EKLS8vLyAgICBUaGUgNjQtYml0IGRvdWJsZS1wcmVjaXNpb24gZmxvYXRpbmctcG9pbnQgcmVnaXN0ZXIgdmFsdWUgdG8KLS8vLyAgICBiZSBzdG9yZWQuCi1zdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX3N0cmVhbV9zZChkb3VibGUgKl9fcCwgX19tMTI4ZCBfX2EpCi17Ci0gIF9fYnVpbHRpbl9pYTMyX21vdm50c2QoX19wLCAoX192MmRmKV9fYSk7Ci19Ci0KLS8vLyBcYnJpZWYgU3RvcmVzIGEgMzItYml0IHNpbmdsZS1wcmVjaXNpb24gZmxvYXRpbmctcG9pbnQgdmFsdWUgaW4gYSAzMi1iaXQKLS8vLyAgICBtZW1vcnkgbG9jYXRpb24uIFRvIG1pbmltaXplIGNhY2hpbmcsIHRoZSBkYXRhIGlzIGZsYWdnZWQgYXMKLS8vLyAgICBub24tdGVtcG9yYWwgKHVubGlrZWx5IHRvIGJlIHVzZWQgYWdhaW4gc29vbikuCi0vLy8KLS8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+Ci0vLy8KLS8vLyBcY29kZQotLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBNT1ZOVFNTIGluc3RydWN0aW9uLgotLy8vIFxlbmRjb2RlCi0vLy8KLS8vLyBccGFyYW0gX19wCi0vLy8gICAgVGhlIDMyLWJpdCBtZW1vcnkgbG9jYXRpb24gdXNlZCB0byBzdG9yZSB0aGUgcmVnaXN0ZXIgdmFsdWUuCi0vLy8gXHBhcmFtIF9fYQotLy8vICAgIFRoZSAzMi1iaXQgc2luZ2xlLXByZWNpc2lvbiBmbG9hdGluZy1wb2ludCByZWdpc3RlciB2YWx1ZSB0bwotLy8vICAgIGJlIHN0b3JlZC4KLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fc3RyZWFtX3NzKGZsb2F0ICpfX3AsIF9fbTEyOCBfX2EpCi17Ci0gIF9fYnVpbHRpbl9pYTMyX21vdm50c3MoX19wLCAoX192NHNmKV9fYSk7Ci19Ci0KLSN1bmRlZiBfX0RFRkFVTFRfRk5fQVRUUlMKLQotI2VuZGlmIC8qIF9fQU1NSU5UUklOX0ggKi8KZGlmZiAtLWdpdCBhL2NsYW5nLTI1NzcxMTMvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvYXJtX2FjbGUuaCBiL2NsYW5nLTI1NzcxMTMvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvYXJtX2FjbGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGJlMWQwOS4uMDAwMDAwMAotLS0gYS9jbGFuZy0yNTc3MTEzL2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL2FybV9hY2xlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMDggKzAsMCBAQAotLyo9PT0tLS0tIGFybV9hY2xlLmggLSBBUk0gTm9uLU5lb24gaW50cmluc2ljcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQotICoKLSAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKLSAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCi0gKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCi0gKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCi0gKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKLSAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Ci0gKgotICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KLSAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgotICoKLSAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCi0gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKLSAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgotICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKLSAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KLSAqIFRIRSBTT0ZUV0FSRS4KLSAqCi0gKj09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09Ci0gKi8KLQotI2lmbmRlZiBfX0FSTV9BQ0xFX0gKLSNkZWZpbmUgX19BUk1fQUNMRV9ICi0KLSNpZm5kZWYgX19BUk1fQUNMRQotI2Vycm9yICJBQ0xFIGludHJpbnNpY3Mgc3VwcG9ydCBub3QgZW5hYmxlZC4iCi0jZW5kaWYKLQotI2luY2x1ZGUgPHN0ZGludC5oPgotCi0jaWYgZGVmaW5lZChfX2NwbHVzcGx1cykKLWV4dGVybiAiQyIgewotI2VuZGlmCi0KLS8qIDggU1lOQ0hST05JWkFUSU9OLCBCQVJSSUVSIEFORCBISU5UIElOVFJJTlNJQ1MgKi8KLS8qIDguMyBNZW1vcnkgYmFycmllcnMgKi8KLSNpZiAhZGVmaW5lZChfTVNDX1ZFUikKLSNkZWZpbmUgX19kbWIoaSkgX19idWlsdGluX2FybV9kbWIoaSkKLSNkZWZpbmUgX19kc2IoaSkgX19idWlsdGluX2FybV9kc2IoaSkKLSNkZWZpbmUgX19pc2IoaSkgX19idWlsdGluX2FybV9pc2IoaSkKLSNlbmRpZgotCi0vKiA4LjQgSGludHMgKi8KLQotI2lmICFkZWZpbmVkKF9NU0NfVkVSKQotc3RhdGljIF9faW5saW5lX18gdm9pZCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18pKSBfX3dmaSh2b2lkKSB7Ci0gIF9fYnVpbHRpbl9hcm1fd2ZpKCk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fKSkgX193ZmUodm9pZCkgewotICBfX2J1aWx0aW5fYXJtX3dmZSgpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXykpIF9fc2V2KHZvaWQpIHsKLSAgX19idWlsdGluX2FybV9zZXYoKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gdm9pZCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18pKSBfX3Nldmwodm9pZCkgewotICBfX2J1aWx0aW5fYXJtX3NldmwoKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gdm9pZCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18pKSBfX3lpZWxkKHZvaWQpIHsKLSAgX19idWlsdGluX2FybV95aWVsZCgpOwotfQotI2VuZGlmCi0KLSNpZiBfX0FSTV8zMkJJVF9TVEFURQotI2RlZmluZSBfX2RiZyh0KSBfX2J1aWx0aW5fYXJtX2RiZyh0KQotI2VuZGlmCi0KLS8qIDguNSBTd2FwICovCi1zdGF0aWMgX19pbmxpbmVfXyB1aW50MzJfdCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18pKQotICBfX3N3cCh1aW50MzJfdCB4LCB2b2xhdGlsZSB1aW50MzJfdCAqcCkgewotICB1aW50MzJfdCB2OwotICBkbyB2ID0gX19idWlsdGluX2FybV9sZHJleChwKTsgd2hpbGUgKF9fYnVpbHRpbl9hcm1fc3RyZXgoeCwgcCkpOwotICByZXR1cm4gdjsKLX0KLQotLyogOC42IE1lbW9yeSBwcmVmZXRjaCBpbnRyaW5zaWNzICovCi0vKiA4LjYuMSBEYXRhIHByZWZldGNoICovCi0jZGVmaW5lIF9fcGxkKGFkZHIpIF9fcGxkeCgwLCAwLCAwLCBhZGRyKQotCi0jaWYgX19BUk1fMzJCSVRfU1RBVEUKLSNkZWZpbmUgX19wbGR4KGFjY2Vzc19raW5kLCBjYWNoZV9sZXZlbCwgcmV0ZW50aW9uX3BvbGljeSwgYWRkcikgXAotICBfX2J1aWx0aW5fYXJtX3ByZWZldGNoKGFkZHIsIGFjY2Vzc19raW5kLCAxKQotI2Vsc2UKLSNkZWZpbmUgX19wbGR4KGFjY2Vzc19raW5kLCBjYWNoZV9sZXZlbCwgcmV0ZW50aW9uX3BvbGljeSwgYWRkcikgXAotICBfX2J1aWx0aW5fYXJtX3ByZWZldGNoKGFkZHIsIGFjY2Vzc19raW5kLCBjYWNoZV9sZXZlbCwgcmV0ZW50aW9uX3BvbGljeSwgMSkKLSNlbmRpZgotCi0vKiA4LjYuMiBJbnN0cnVjdGlvbiBwcmVmZXRjaCAqLwotI2RlZmluZSBfX3BsaShhZGRyKSBfX3BsaXgoMCwgMCwgYWRkcikKLQotI2lmIF9fQVJNXzMyQklUX1NUQVRFCi0jZGVmaW5lIF9fcGxpeChjYWNoZV9sZXZlbCwgcmV0ZW50aW9uX3BvbGljeSwgYWRkcikgXAotICBfX2J1aWx0aW5fYXJtX3ByZWZldGNoKGFkZHIsIDAsIDApCi0jZWxzZQotI2RlZmluZSBfX3BsaXgoY2FjaGVfbGV2ZWwsIHJldGVudGlvbl9wb2xpY3ksIGFkZHIpIFwKLSAgX19idWlsdGluX2FybV9wcmVmZXRjaChhZGRyLCAwLCBjYWNoZV9sZXZlbCwgcmV0ZW50aW9uX3BvbGljeSwgMCkKLSNlbmRpZgotCi0vKiA4LjcgTk9QICovCi1zdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXykpIF9fbm9wKHZvaWQpIHsKLSAgX19idWlsdGluX2FybV9ub3AoKTsKLX0KLQotLyogOSBEQVRBLVBST0NFU1NJTkcgSU5UUklOU0lDUyAqLwotLyogOS4yIE1pc2NlbGxhbmVvdXMgZGF0YS1wcm9jZXNzaW5nIGludHJpbnNpY3MgKi8KLS8qIFJPUiAqLwotc3RhdGljIF9faW5saW5lX18gdWludDMyX3QgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fKSkKLSAgX19yb3IodWludDMyX3QgeCwgdWludDMyX3QgeSkgewotICB5ICU9IDMyOwotICBpZiAoeSA9PSAwKSAgcmV0dXJuIHg7Ci0gIHJldHVybiAoeCA+PiB5KSB8ICh4IDw8ICgzMiAtIHkpKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gdWludDY0X3QgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fKSkKLSAgX19yb3JsbCh1aW50NjRfdCB4LCB1aW50MzJfdCB5KSB7Ci0gIHkgJT0gNjQ7Ci0gIGlmICh5ID09IDApICByZXR1cm4geDsKLSAgcmV0dXJuICh4ID4+IHkpIHwgKHggPDwgKDY0IC0geSkpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXykpCi0gIF9fcm9ybCh1bnNpZ25lZCBsb25nIHgsIHVpbnQzMl90IHkpIHsKLSNpZiBfX1NJWkVPRl9MT05HX18gPT0gNAotICByZXR1cm4gX19yb3IoeCwgeSk7Ci0jZWxzZQotICByZXR1cm4gX19yb3JsbCh4LCB5KTsKLSNlbmRpZgotfQotCi0KLS8qIENMWiAqLwotc3RhdGljIF9faW5saW5lX18gdWludDMyX3QgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fKSkKLSAgX19jbHoodWludDMyX3QgdCkgewotICByZXR1cm4gX19idWlsdGluX2Nseih0KTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgbG9uZyBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18pKQotICBfX2NsemwodW5zaWduZWQgbG9uZyB0KSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fY2x6bCh0KTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gdWludDY0X3QgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fKSkKLSAgX19jbHpsbCh1aW50NjRfdCB0KSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fY2x6bGwodCk7Ci19Ci0KLS8qIFJFViAqLwotc3RhdGljIF9faW5saW5lX18gdWludDMyX3QgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fKSkKLSAgX19yZXYodWludDMyX3QgdCkgewotICByZXR1cm4gX19idWlsdGluX2Jzd2FwMzIodCk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fKSkKLSAgX19yZXZsKHVuc2lnbmVkIGxvbmcgdCkgewotI2lmIF9fU0laRU9GX0xPTkdfXyA9PSA0Ci0gIHJldHVybiBfX2J1aWx0aW5fYnN3YXAzMih0KTsKLSNlbHNlCi0gIHJldHVybiBfX2J1aWx0aW5fYnN3YXA2NCh0KTsKLSNlbmRpZgotfQotCi1zdGF0aWMgX19pbmxpbmVfXyB1aW50NjRfdCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18pKQotICBfX3JldmxsKHVpbnQ2NF90IHQpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9ic3dhcDY0KHQpOwotfQotCi0vKiBSRVYxNiAqLwotc3RhdGljIF9faW5saW5lX18gdWludDMyX3QgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fKSkKLSAgX19yZXYxNih1aW50MzJfdCB0KSB7Ci0gIHJldHVybiBfX3JvcihfX3Jldih0KSwgMTYpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyB1aW50NjRfdCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18pKQotICBfX3JldjE2bGwodWludDY0X3QgdCkgewotICByZXR1cm4gKCgodWludDY0X3QpX19yZXYxNih0ID4+IDMyKSkgPDwgMzIpIHwgX19yZXYxNih0KTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgbG9uZyBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18pKQotICBfX3JldjE2bCh1bnNpZ25lZCBsb25nIHQpIHsKLSNpZiBfX1NJWkVPRl9MT05HX18gPT0gNAotICAgIHJldHVybiBfX3JldjE2KHQpOwotI2Vsc2UKLSAgICByZXR1cm4gX19yZXYxNmxsKHQpOwotI2VuZGlmCi19Ci0KLS8qIFJFVlNIICovCi1zdGF0aWMgX19pbmxpbmVfXyBpbnQxNl90IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXykpCi0gIF9fcmV2c2goaW50MTZfdCB0KSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYnN3YXAxNih0KTsKLX0KLQotLyogUkJJVCAqLwotc3RhdGljIF9faW5saW5lX18gdWludDMyX3QgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fKSkKLSAgX19yYml0KHVpbnQzMl90IHQpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hcm1fcmJpdCh0KTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gdWludDY0X3QgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fKSkKLSAgX19yYml0bGwodWludDY0X3QgdCkgewotI2lmIF9fQVJNXzMyQklUX1NUQVRFCi0gIHJldHVybiAoKCh1aW50NjRfdCkgX19idWlsdGluX2FybV9yYml0KHQpKSA8PCAzMikgfAotICAgIF9fYnVpbHRpbl9hcm1fcmJpdCh0ID4+IDMyKTsKLSNlbHNlCi0gIHJldHVybiBfX2J1aWx0aW5fYXJtX3JiaXQ2NCh0KTsKLSNlbmRpZgotfQotCi1zdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXykpCi0gIF9fcmJpdGwodW5zaWduZWQgbG9uZyB0KSB7Ci0jaWYgX19TSVpFT0ZfTE9OR19fID09IDQKLSAgcmV0dXJuIF9fcmJpdCh0KTsKLSNlbHNlCi0gIHJldHVybiBfX3JiaXRsbCh0KTsKLSNlbmRpZgotfQotCi0vKgotICogOS40IFNhdHVyYXRpbmcgaW50cmluc2ljcwotICoKLSAqIEZJWE1FOiBDaGFuZ2UgZ3VhcmQgdG8gdGhlaXIgY29ycm9zcG9uZGluZyBfX0FSTV9GRUFUVVJFIGZsYWcgd2hlbiBRIGZsYWcKLSAqIGludHJpbnNpY3MgYXJlIGltcGxlbWVudGVkIGFuZCB0aGUgZmxhZyBpcyBlbmFibGVkLgotICovCi0vKiA5LjQuMSBXaWR0aC1zcGVjaWZpZWQgc2F0dXJhdGlvbiBpbnRyaW5zaWNzICovCi0jaWYgX19BUk1fMzJCSVRfU1RBVEUKLSNkZWZpbmUgX19zc2F0KHgsIHkpIF9fYnVpbHRpbl9hcm1fc3NhdCh4LCB5KQotI2RlZmluZSBfX3VzYXQoeCwgeSkgX19idWlsdGluX2FybV91c2F0KHgsIHkpCi0jZW5kaWYKLQotLyogOS40LjIgU2F0dXJhdGluZyBhZGRpdGlvbiBhbmQgc3VidHJhY3Rpb24gaW50cmluc2ljcyAqLwotI2lmIF9fQVJNXzMyQklUX1NUQVRFCi1zdGF0aWMgX19pbmxpbmVfXyBpbnQzMl90IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXykpCi0gIF9fcWFkZChpbnQzMl90IHQsIGludDMyX3QgdikgewotICByZXR1cm4gX19idWlsdGluX2FybV9xYWRkKHQsIHYpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBpbnQzMl90IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXykpCi0gIF9fcXN1YihpbnQzMl90IHQsIGludDMyX3QgdikgewotICByZXR1cm4gX19idWlsdGluX2FybV9xc3ViKHQsIHYpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBpbnQzMl90IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXykpCi1fX3FkYmwoaW50MzJfdCB0KSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYXJtX3FhZGQodCwgdCk7Ci19Ci0jZW5kaWYKLQotLyogOS43IENSQzMyIGludHJpbnNpY3MgKi8KLSNpZiBfX0FSTV9GRUFUVVJFX0NSQzMyCi1zdGF0aWMgX19pbmxpbmVfXyB1aW50MzJfdCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18pKQotICBfX2NyYzMyYih1aW50MzJfdCBhLCB1aW50OF90IGIpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hcm1fY3JjMzJiKGEsIGIpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyB1aW50MzJfdCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18pKQotICBfX2NyYzMyaCh1aW50MzJfdCBhLCB1aW50MTZfdCBiKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYXJtX2NyYzMyaChhLCBiKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gdWludDMyX3QgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fKSkKLSAgX19jcmMzMncodWludDMyX3QgYSwgdWludDMyX3QgYikgewotICByZXR1cm4gX19idWlsdGluX2FybV9jcmMzMncoYSwgYik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIHVpbnQzMl90IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXykpCi0gIF9fY3JjMzJkKHVpbnQzMl90IGEsIHVpbnQ2NF90IGIpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hcm1fY3JjMzJkKGEsIGIpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyB1aW50MzJfdCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18pKQotICBfX2NyYzMyY2IodWludDMyX3QgYSwgdWludDhfdCBiKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYXJtX2NyYzMyY2IoYSwgYik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIHVpbnQzMl90IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXykpCi0gIF9fY3JjMzJjaCh1aW50MzJfdCBhLCB1aW50MTZfdCBiKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYXJtX2NyYzMyY2goYSwgYik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIHVpbnQzMl90IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXykpCi0gIF9fY3JjMzJjdyh1aW50MzJfdCBhLCB1aW50MzJfdCBiKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYXJtX2NyYzMyY3coYSwgYik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIHVpbnQzMl90IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXykpCi0gIF9fY3JjMzJjZCh1aW50MzJfdCBhLCB1aW50NjRfdCBiKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYXJtX2NyYzMyY2QoYSwgYik7Ci19Ci0jZW5kaWYKLQotLyogMTAuMSBTcGVjaWFsIHJlZ2lzdGVyIGludHJpbnNpY3MgKi8KLSNkZWZpbmUgX19hcm1fcnNyKHN5c3JlZykgX19idWlsdGluX2FybV9yc3Ioc3lzcmVnKQotI2RlZmluZSBfX2FybV9yc3I2NChzeXNyZWcpIF9fYnVpbHRpbl9hcm1fcnNyNjQoc3lzcmVnKQotI2RlZmluZSBfX2FybV9yc3JwKHN5c3JlZykgX19idWlsdGluX2FybV9yc3JwKHN5c3JlZykKLSNkZWZpbmUgX19hcm1fd3NyKHN5c3JlZywgdikgX19idWlsdGluX2FybV93c3Ioc3lzcmVnLCB2KQotI2RlZmluZSBfX2FybV93c3I2NChzeXNyZWcsIHYpIF9fYnVpbHRpbl9hcm1fd3NyNjQoc3lzcmVnLCB2KQotI2RlZmluZSBfX2FybV93c3JwKHN5c3JlZywgdikgX19idWlsdGluX2FybV93c3JwKHN5c3JlZywgdikKLQotI2lmIGRlZmluZWQoX19jcGx1c3BsdXMpCi19Ci0jZW5kaWYKLQotI2VuZGlmIC8qIF9fQVJNX0FDTEVfSCAqLwpkaWZmIC0tZ2l0IGEvY2xhbmctMjU3NzExMy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9hcm1fbmVvbi5oIGIvY2xhbmctMjU3NzExMy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9hcm1fbmVvbi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZjk0Y2QwLi4wMDAwMDAwCi0tLSBhL2NsYW5nLTI1NzcxMTMvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvYXJtX25lb24uaAorKysgL2Rldi9udWxsCkBAIC0xLDY5MjM3ICswLDAgQEAKLS8qPT09LS0tLSBhcm1fbmVvbi5oIC0gQVJNIE5lb24gaW50cmluc2ljcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KLSAqCi0gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5Ci0gKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAotICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cwotICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAotICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCi0gKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgotICoKLSAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCi0gKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KLSAqCi0gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgotICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCi0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKLSAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCi0gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCi0gKiBUSEUgU09GVFdBUkUuCi0gKgotICo9PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQotICovCi0KLSNpZm5kZWYgX19BUk1fTkVPTl9ICi0jZGVmaW5lIF9fQVJNX05FT05fSAotCi0jaWYgIWRlZmluZWQoX19BUk1fTkVPTikKLSNlcnJvciAiTkVPTiBzdXBwb3J0IG5vdCBlbmFibGVkIgotI2VuZGlmCi0KLSNpbmNsdWRlIDxzdGRpbnQuaD4KLQotdHlwZWRlZiBmbG9hdCBmbG9hdDMyX3Q7Ci10eXBlZGVmIF9fZnAxNiBmbG9hdDE2X3Q7Ci0jaWZkZWYgX19hYXJjaDY0X18KLXR5cGVkZWYgZG91YmxlIGZsb2F0NjRfdDsKLSNlbmRpZgotCi0jaWZkZWYgX19hYXJjaDY0X18KLXR5cGVkZWYgdWludDhfdCBwb2x5OF90OwotdHlwZWRlZiB1aW50MTZfdCBwb2x5MTZfdDsKLXR5cGVkZWYgdWludDY0X3QgcG9seTY0X3Q7Ci10eXBlZGVmIF9fdWludDEyOF90IHBvbHkxMjhfdDsKLSNlbHNlCi10eXBlZGVmIGludDhfdCBwb2x5OF90OwotdHlwZWRlZiBpbnQxNl90IHBvbHkxNl90OwotI2VuZGlmCi10eXBlZGVmIF9fYXR0cmlidXRlX18oKG5lb25fdmVjdG9yX3R5cGUoOCkpKSBpbnQ4X3QgaW50OHg4X3Q7Ci10eXBlZGVmIF9fYXR0cmlidXRlX18oKG5lb25fdmVjdG9yX3R5cGUoMTYpKSkgaW50OF90IGludDh4MTZfdDsKLXR5cGVkZWYgX19hdHRyaWJ1dGVfXygobmVvbl92ZWN0b3JfdHlwZSg0KSkpIGludDE2X3QgaW50MTZ4NF90OwotdHlwZWRlZiBfX2F0dHJpYnV0ZV9fKChuZW9uX3ZlY3Rvcl90eXBlKDgpKSkgaW50MTZfdCBpbnQxNng4X3Q7Ci10eXBlZGVmIF9fYXR0cmlidXRlX18oKG5lb25fdmVjdG9yX3R5cGUoMikpKSBpbnQzMl90IGludDMyeDJfdDsKLXR5cGVkZWYgX19hdHRyaWJ1dGVfXygobmVvbl92ZWN0b3JfdHlwZSg0KSkpIGludDMyX3QgaW50MzJ4NF90OwotdHlwZWRlZiBfX2F0dHJpYnV0ZV9fKChuZW9uX3ZlY3Rvcl90eXBlKDEpKSkgaW50NjRfdCBpbnQ2NHgxX3Q7Ci10eXBlZGVmIF9fYXR0cmlidXRlX18oKG5lb25fdmVjdG9yX3R5cGUoMikpKSBpbnQ2NF90IGludDY0eDJfdDsKLXR5cGVkZWYgX19hdHRyaWJ1dGVfXygobmVvbl92ZWN0b3JfdHlwZSg4KSkpIHVpbnQ4X3QgdWludDh4OF90OwotdHlwZWRlZiBfX2F0dHJpYnV0ZV9fKChuZW9uX3ZlY3Rvcl90eXBlKDE2KSkpIHVpbnQ4X3QgdWludDh4MTZfdDsKLXR5cGVkZWYgX19hdHRyaWJ1dGVfXygobmVvbl92ZWN0b3JfdHlwZSg0KSkpIHVpbnQxNl90IHVpbnQxNng0X3Q7Ci10eXBlZGVmIF9fYXR0cmlidXRlX18oKG5lb25fdmVjdG9yX3R5cGUoOCkpKSB1aW50MTZfdCB1aW50MTZ4OF90OwotdHlwZWRlZiBfX2F0dHJpYnV0ZV9fKChuZW9uX3ZlY3Rvcl90eXBlKDIpKSkgdWludDMyX3QgdWludDMyeDJfdDsKLXR5cGVkZWYgX19hdHRyaWJ1dGVfXygobmVvbl92ZWN0b3JfdHlwZSg0KSkpIHVpbnQzMl90IHVpbnQzMng0X3Q7Ci10eXBlZGVmIF9fYXR0cmlidXRlX18oKG5lb25fdmVjdG9yX3R5cGUoMSkpKSB1aW50NjRfdCB1aW50NjR4MV90OwotdHlwZWRlZiBfX2F0dHJpYnV0ZV9fKChuZW9uX3ZlY3Rvcl90eXBlKDIpKSkgdWludDY0X3QgdWludDY0eDJfdDsKLXR5cGVkZWYgX19hdHRyaWJ1dGVfXygobmVvbl92ZWN0b3JfdHlwZSg0KSkpIGZsb2F0MTZfdCBmbG9hdDE2eDRfdDsKLXR5cGVkZWYgX19hdHRyaWJ1dGVfXygobmVvbl92ZWN0b3JfdHlwZSg4KSkpIGZsb2F0MTZfdCBmbG9hdDE2eDhfdDsKLXR5cGVkZWYgX19hdHRyaWJ1dGVfXygobmVvbl92ZWN0b3JfdHlwZSgyKSkpIGZsb2F0MzJfdCBmbG9hdDMyeDJfdDsKLXR5cGVkZWYgX19hdHRyaWJ1dGVfXygobmVvbl92ZWN0b3JfdHlwZSg0KSkpIGZsb2F0MzJfdCBmbG9hdDMyeDRfdDsKLSNpZmRlZiBfX2FhcmNoNjRfXwotdHlwZWRlZiBfX2F0dHJpYnV0ZV9fKChuZW9uX3ZlY3Rvcl90eXBlKDEpKSkgZmxvYXQ2NF90IGZsb2F0NjR4MV90OwotdHlwZWRlZiBfX2F0dHJpYnV0ZV9fKChuZW9uX3ZlY3Rvcl90eXBlKDIpKSkgZmxvYXQ2NF90IGZsb2F0NjR4Ml90OwotI2VuZGlmCi10eXBlZGVmIF9fYXR0cmlidXRlX18oKG5lb25fcG9seXZlY3Rvcl90eXBlKDgpKSkgcG9seThfdCBwb2x5OHg4X3Q7Ci10eXBlZGVmIF9fYXR0cmlidXRlX18oKG5lb25fcG9seXZlY3Rvcl90eXBlKDE2KSkpIHBvbHk4X3QgcG9seTh4MTZfdDsKLXR5cGVkZWYgX19hdHRyaWJ1dGVfXygobmVvbl9wb2x5dmVjdG9yX3R5cGUoNCkpKSBwb2x5MTZfdCBwb2x5MTZ4NF90OwotdHlwZWRlZiBfX2F0dHJpYnV0ZV9fKChuZW9uX3BvbHl2ZWN0b3JfdHlwZSg4KSkpIHBvbHkxNl90IHBvbHkxNng4X3Q7Ci0jaWZkZWYgX19hYXJjaDY0X18KLXR5cGVkZWYgX19hdHRyaWJ1dGVfXygobmVvbl9wb2x5dmVjdG9yX3R5cGUoMSkpKSBwb2x5NjRfdCBwb2x5NjR4MV90OwotdHlwZWRlZiBfX2F0dHJpYnV0ZV9fKChuZW9uX3BvbHl2ZWN0b3JfdHlwZSgyKSkpIHBvbHk2NF90IHBvbHk2NHgyX3Q7Ci0jZW5kaWYKLQotdHlwZWRlZiBzdHJ1Y3QgaW50OHg4eDJfdCB7Ci0gIGludDh4OF90IHZhbFsyXTsKLX0gaW50OHg4eDJfdDsKLQotdHlwZWRlZiBzdHJ1Y3QgaW50OHgxNngyX3QgewotICBpbnQ4eDE2X3QgdmFsWzJdOwotfSBpbnQ4eDE2eDJfdDsKLQotdHlwZWRlZiBzdHJ1Y3QgaW50MTZ4NHgyX3QgewotICBpbnQxNng0X3QgdmFsWzJdOwotfSBpbnQxNng0eDJfdDsKLQotdHlwZWRlZiBzdHJ1Y3QgaW50MTZ4OHgyX3QgewotICBpbnQxNng4X3QgdmFsWzJdOwotfSBpbnQxNng4eDJfdDsKLQotdHlwZWRlZiBzdHJ1Y3QgaW50MzJ4MngyX3QgewotICBpbnQzMngyX3QgdmFsWzJdOwotfSBpbnQzMngyeDJfdDsKLQotdHlwZWRlZiBzdHJ1Y3QgaW50MzJ4NHgyX3QgewotICBpbnQzMng0X3QgdmFsWzJdOwotfSBpbnQzMng0eDJfdDsKLQotdHlwZWRlZiBzdHJ1Y3QgaW50NjR4MXgyX3QgewotICBpbnQ2NHgxX3QgdmFsWzJdOwotfSBpbnQ2NHgxeDJfdDsKLQotdHlwZWRlZiBzdHJ1Y3QgaW50NjR4MngyX3QgewotICBpbnQ2NHgyX3QgdmFsWzJdOwotfSBpbnQ2NHgyeDJfdDsKLQotdHlwZWRlZiBzdHJ1Y3QgdWludDh4OHgyX3QgewotICB1aW50OHg4X3QgdmFsWzJdOwotfSB1aW50OHg4eDJfdDsKLQotdHlwZWRlZiBzdHJ1Y3QgdWludDh4MTZ4Ml90IHsKLSAgdWludDh4MTZfdCB2YWxbMl07Ci19IHVpbnQ4eDE2eDJfdDsKLQotdHlwZWRlZiBzdHJ1Y3QgdWludDE2eDR4Ml90IHsKLSAgdWludDE2eDRfdCB2YWxbMl07Ci19IHVpbnQxNng0eDJfdDsKLQotdHlwZWRlZiBzdHJ1Y3QgdWludDE2eDh4Ml90IHsKLSAgdWludDE2eDhfdCB2YWxbMl07Ci19IHVpbnQxNng4eDJfdDsKLQotdHlwZWRlZiBzdHJ1Y3QgdWludDMyeDJ4Ml90IHsKLSAgdWludDMyeDJfdCB2YWxbMl07Ci19IHVpbnQzMngyeDJfdDsKLQotdHlwZWRlZiBzdHJ1Y3QgdWludDMyeDR4Ml90IHsKLSAgdWludDMyeDRfdCB2YWxbMl07Ci19IHVpbnQzMng0eDJfdDsKLQotdHlwZWRlZiBzdHJ1Y3QgdWludDY0eDF4Ml90IHsKLSAgdWludDY0eDFfdCB2YWxbMl07Ci19IHVpbnQ2NHgxeDJfdDsKLQotdHlwZWRlZiBzdHJ1Y3QgdWludDY0eDJ4Ml90IHsKLSAgdWludDY0eDJfdCB2YWxbMl07Ci19IHVpbnQ2NHgyeDJfdDsKLQotdHlwZWRlZiBzdHJ1Y3QgZmxvYXQxNng0eDJfdCB7Ci0gIGZsb2F0MTZ4NF90IHZhbFsyXTsKLX0gZmxvYXQxNng0eDJfdDsKLQotdHlwZWRlZiBzdHJ1Y3QgZmxvYXQxNng4eDJfdCB7Ci0gIGZsb2F0MTZ4OF90IHZhbFsyXTsKLX0gZmxvYXQxNng4eDJfdDsKLQotdHlwZWRlZiBzdHJ1Y3QgZmxvYXQzMngyeDJfdCB7Ci0gIGZsb2F0MzJ4Ml90IHZhbFsyXTsKLX0gZmxvYXQzMngyeDJfdDsKLQotdHlwZWRlZiBzdHJ1Y3QgZmxvYXQzMng0eDJfdCB7Ci0gIGZsb2F0MzJ4NF90IHZhbFsyXTsKLX0gZmxvYXQzMng0eDJfdDsKLQotI2lmZGVmIF9fYWFyY2g2NF9fCi10eXBlZGVmIHN0cnVjdCBmbG9hdDY0eDF4Ml90IHsKLSAgZmxvYXQ2NHgxX3QgdmFsWzJdOwotfSBmbG9hdDY0eDF4Ml90OwotCi10eXBlZGVmIHN0cnVjdCBmbG9hdDY0eDJ4Ml90IHsKLSAgZmxvYXQ2NHgyX3QgdmFsWzJdOwotfSBmbG9hdDY0eDJ4Ml90OwotCi0jZW5kaWYKLXR5cGVkZWYgc3RydWN0IHBvbHk4eDh4Ml90IHsKLSAgcG9seTh4OF90IHZhbFsyXTsKLX0gcG9seTh4OHgyX3Q7Ci0KLXR5cGVkZWYgc3RydWN0IHBvbHk4eDE2eDJfdCB7Ci0gIHBvbHk4eDE2X3QgdmFsWzJdOwotfSBwb2x5OHgxNngyX3Q7Ci0KLXR5cGVkZWYgc3RydWN0IHBvbHkxNng0eDJfdCB7Ci0gIHBvbHkxNng0X3QgdmFsWzJdOwotfSBwb2x5MTZ4NHgyX3Q7Ci0KLXR5cGVkZWYgc3RydWN0IHBvbHkxNng4eDJfdCB7Ci0gIHBvbHkxNng4X3QgdmFsWzJdOwotfSBwb2x5MTZ4OHgyX3Q7Ci0KLSNpZmRlZiBfX2FhcmNoNjRfXwotdHlwZWRlZiBzdHJ1Y3QgcG9seTY0eDF4Ml90IHsKLSAgcG9seTY0eDFfdCB2YWxbMl07Ci19IHBvbHk2NHgxeDJfdDsKLQotdHlwZWRlZiBzdHJ1Y3QgcG9seTY0eDJ4Ml90IHsKLSAgcG9seTY0eDJfdCB2YWxbMl07Ci19IHBvbHk2NHgyeDJfdDsKLQotI2VuZGlmCi10eXBlZGVmIHN0cnVjdCBpbnQ4eDh4M190IHsKLSAgaW50OHg4X3QgdmFsWzNdOwotfSBpbnQ4eDh4M190OwotCi10eXBlZGVmIHN0cnVjdCBpbnQ4eDE2eDNfdCB7Ci0gIGludDh4MTZfdCB2YWxbM107Ci19IGludDh4MTZ4M190OwotCi10eXBlZGVmIHN0cnVjdCBpbnQxNng0eDNfdCB7Ci0gIGludDE2eDRfdCB2YWxbM107Ci19IGludDE2eDR4M190OwotCi10eXBlZGVmIHN0cnVjdCBpbnQxNng4eDNfdCB7Ci0gIGludDE2eDhfdCB2YWxbM107Ci19IGludDE2eDh4M190OwotCi10eXBlZGVmIHN0cnVjdCBpbnQzMngyeDNfdCB7Ci0gIGludDMyeDJfdCB2YWxbM107Ci19IGludDMyeDJ4M190OwotCi10eXBlZGVmIHN0cnVjdCBpbnQzMng0eDNfdCB7Ci0gIGludDMyeDRfdCB2YWxbM107Ci19IGludDMyeDR4M190OwotCi10eXBlZGVmIHN0cnVjdCBpbnQ2NHgxeDNfdCB7Ci0gIGludDY0eDFfdCB2YWxbM107Ci19IGludDY0eDF4M190OwotCi10eXBlZGVmIHN0cnVjdCBpbnQ2NHgyeDNfdCB7Ci0gIGludDY0eDJfdCB2YWxbM107Ci19IGludDY0eDJ4M190OwotCi10eXBlZGVmIHN0cnVjdCB1aW50OHg4eDNfdCB7Ci0gIHVpbnQ4eDhfdCB2YWxbM107Ci19IHVpbnQ4eDh4M190OwotCi10eXBlZGVmIHN0cnVjdCB1aW50OHgxNngzX3QgewotICB1aW50OHgxNl90IHZhbFszXTsKLX0gdWludDh4MTZ4M190OwotCi10eXBlZGVmIHN0cnVjdCB1aW50MTZ4NHgzX3QgewotICB1aW50MTZ4NF90IHZhbFszXTsKLX0gdWludDE2eDR4M190OwotCi10eXBlZGVmIHN0cnVjdCB1aW50MTZ4OHgzX3QgewotICB1aW50MTZ4OF90IHZhbFszXTsKLX0gdWludDE2eDh4M190OwotCi10eXBlZGVmIHN0cnVjdCB1aW50MzJ4MngzX3QgewotICB1aW50MzJ4Ml90IHZhbFszXTsKLX0gdWludDMyeDJ4M190OwotCi10eXBlZGVmIHN0cnVjdCB1aW50MzJ4NHgzX3QgewotICB1aW50MzJ4NF90IHZhbFszXTsKLX0gdWludDMyeDR4M190OwotCi10eXBlZGVmIHN0cnVjdCB1aW50NjR4MXgzX3QgewotICB1aW50NjR4MV90IHZhbFszXTsKLX0gdWludDY0eDF4M190OwotCi10eXBlZGVmIHN0cnVjdCB1aW50NjR4MngzX3QgewotICB1aW50NjR4Ml90IHZhbFszXTsKLX0gdWludDY0eDJ4M190OwotCi10eXBlZGVmIHN0cnVjdCBmbG9hdDE2eDR4M190IHsKLSAgZmxvYXQxNng0X3QgdmFsWzNdOwotfSBmbG9hdDE2eDR4M190OwotCi10eXBlZGVmIHN0cnVjdCBmbG9hdDE2eDh4M190IHsKLSAgZmxvYXQxNng4X3QgdmFsWzNdOwotfSBmbG9hdDE2eDh4M190OwotCi10eXBlZGVmIHN0cnVjdCBmbG9hdDMyeDJ4M190IHsKLSAgZmxvYXQzMngyX3QgdmFsWzNdOwotfSBmbG9hdDMyeDJ4M190OwotCi10eXBlZGVmIHN0cnVjdCBmbG9hdDMyeDR4M190IHsKLSAgZmxvYXQzMng0X3QgdmFsWzNdOwotfSBmbG9hdDMyeDR4M190OwotCi0jaWZkZWYgX19hYXJjaDY0X18KLXR5cGVkZWYgc3RydWN0IGZsb2F0NjR4MXgzX3QgewotICBmbG9hdDY0eDFfdCB2YWxbM107Ci19IGZsb2F0NjR4MXgzX3Q7Ci0KLXR5cGVkZWYgc3RydWN0IGZsb2F0NjR4MngzX3QgewotICBmbG9hdDY0eDJfdCB2YWxbM107Ci19IGZsb2F0NjR4MngzX3Q7Ci0KLSNlbmRpZgotdHlwZWRlZiBzdHJ1Y3QgcG9seTh4OHgzX3QgewotICBwb2x5OHg4X3QgdmFsWzNdOwotfSBwb2x5OHg4eDNfdDsKLQotdHlwZWRlZiBzdHJ1Y3QgcG9seTh4MTZ4M190IHsKLSAgcG9seTh4MTZfdCB2YWxbM107Ci19IHBvbHk4eDE2eDNfdDsKLQotdHlwZWRlZiBzdHJ1Y3QgcG9seTE2eDR4M190IHsKLSAgcG9seTE2eDRfdCB2YWxbM107Ci19IHBvbHkxNng0eDNfdDsKLQotdHlwZWRlZiBzdHJ1Y3QgcG9seTE2eDh4M190IHsKLSAgcG9seTE2eDhfdCB2YWxbM107Ci19IHBvbHkxNng4eDNfdDsKLQotI2lmZGVmIF9fYWFyY2g2NF9fCi10eXBlZGVmIHN0cnVjdCBwb2x5NjR4MXgzX3QgewotICBwb2x5NjR4MV90IHZhbFszXTsKLX0gcG9seTY0eDF4M190OwotCi10eXBlZGVmIHN0cnVjdCBwb2x5NjR4MngzX3QgewotICBwb2x5NjR4Ml90IHZhbFszXTsKLX0gcG9seTY0eDJ4M190OwotCi0jZW5kaWYKLXR5cGVkZWYgc3RydWN0IGludDh4OHg0X3QgewotICBpbnQ4eDhfdCB2YWxbNF07Ci19IGludDh4OHg0X3Q7Ci0KLXR5cGVkZWYgc3RydWN0IGludDh4MTZ4NF90IHsKLSAgaW50OHgxNl90IHZhbFs0XTsKLX0gaW50OHgxNng0X3Q7Ci0KLXR5cGVkZWYgc3RydWN0IGludDE2eDR4NF90IHsKLSAgaW50MTZ4NF90IHZhbFs0XTsKLX0gaW50MTZ4NHg0X3Q7Ci0KLXR5cGVkZWYgc3RydWN0IGludDE2eDh4NF90IHsKLSAgaW50MTZ4OF90IHZhbFs0XTsKLX0gaW50MTZ4OHg0X3Q7Ci0KLXR5cGVkZWYgc3RydWN0IGludDMyeDJ4NF90IHsKLSAgaW50MzJ4Ml90IHZhbFs0XTsKLX0gaW50MzJ4Mng0X3Q7Ci0KLXR5cGVkZWYgc3RydWN0IGludDMyeDR4NF90IHsKLSAgaW50MzJ4NF90IHZhbFs0XTsKLX0gaW50MzJ4NHg0X3Q7Ci0KLXR5cGVkZWYgc3RydWN0IGludDY0eDF4NF90IHsKLSAgaW50NjR4MV90IHZhbFs0XTsKLX0gaW50NjR4MXg0X3Q7Ci0KLXR5cGVkZWYgc3RydWN0IGludDY0eDJ4NF90IHsKLSAgaW50NjR4Ml90IHZhbFs0XTsKLX0gaW50NjR4Mng0X3Q7Ci0KLXR5cGVkZWYgc3RydWN0IHVpbnQ4eDh4NF90IHsKLSAgdWludDh4OF90IHZhbFs0XTsKLX0gdWludDh4OHg0X3Q7Ci0KLXR5cGVkZWYgc3RydWN0IHVpbnQ4eDE2eDRfdCB7Ci0gIHVpbnQ4eDE2X3QgdmFsWzRdOwotfSB1aW50OHgxNng0X3Q7Ci0KLXR5cGVkZWYgc3RydWN0IHVpbnQxNng0eDRfdCB7Ci0gIHVpbnQxNng0X3QgdmFsWzRdOwotfSB1aW50MTZ4NHg0X3Q7Ci0KLXR5cGVkZWYgc3RydWN0IHVpbnQxNng4eDRfdCB7Ci0gIHVpbnQxNng4X3QgdmFsWzRdOwotfSB1aW50MTZ4OHg0X3Q7Ci0KLXR5cGVkZWYgc3RydWN0IHVpbnQzMngyeDRfdCB7Ci0gIHVpbnQzMngyX3QgdmFsWzRdOwotfSB1aW50MzJ4Mng0X3Q7Ci0KLXR5cGVkZWYgc3RydWN0IHVpbnQzMng0eDRfdCB7Ci0gIHVpbnQzMng0X3QgdmFsWzRdOwotfSB1aW50MzJ4NHg0X3Q7Ci0KLXR5cGVkZWYgc3RydWN0IHVpbnQ2NHgxeDRfdCB7Ci0gIHVpbnQ2NHgxX3QgdmFsWzRdOwotfSB1aW50NjR4MXg0X3Q7Ci0KLXR5cGVkZWYgc3RydWN0IHVpbnQ2NHgyeDRfdCB7Ci0gIHVpbnQ2NHgyX3QgdmFsWzRdOwotfSB1aW50NjR4Mng0X3Q7Ci0KLXR5cGVkZWYgc3RydWN0IGZsb2F0MTZ4NHg0X3QgewotICBmbG9hdDE2eDRfdCB2YWxbNF07Ci19IGZsb2F0MTZ4NHg0X3Q7Ci0KLXR5cGVkZWYgc3RydWN0IGZsb2F0MTZ4OHg0X3QgewotICBmbG9hdDE2eDhfdCB2YWxbNF07Ci19IGZsb2F0MTZ4OHg0X3Q7Ci0KLXR5cGVkZWYgc3RydWN0IGZsb2F0MzJ4Mng0X3QgewotICBmbG9hdDMyeDJfdCB2YWxbNF07Ci19IGZsb2F0MzJ4Mng0X3Q7Ci0KLXR5cGVkZWYgc3RydWN0IGZsb2F0MzJ4NHg0X3QgewotICBmbG9hdDMyeDRfdCB2YWxbNF07Ci19IGZsb2F0MzJ4NHg0X3Q7Ci0KLSNpZmRlZiBfX2FhcmNoNjRfXwotdHlwZWRlZiBzdHJ1Y3QgZmxvYXQ2NHgxeDRfdCB7Ci0gIGZsb2F0NjR4MV90IHZhbFs0XTsKLX0gZmxvYXQ2NHgxeDRfdDsKLQotdHlwZWRlZiBzdHJ1Y3QgZmxvYXQ2NHgyeDRfdCB7Ci0gIGZsb2F0NjR4Ml90IHZhbFs0XTsKLX0gZmxvYXQ2NHgyeDRfdDsKLQotI2VuZGlmCi10eXBlZGVmIHN0cnVjdCBwb2x5OHg4eDRfdCB7Ci0gIHBvbHk4eDhfdCB2YWxbNF07Ci19IHBvbHk4eDh4NF90OwotCi10eXBlZGVmIHN0cnVjdCBwb2x5OHgxNng0X3QgewotICBwb2x5OHgxNl90IHZhbFs0XTsKLX0gcG9seTh4MTZ4NF90OwotCi10eXBlZGVmIHN0cnVjdCBwb2x5MTZ4NHg0X3QgewotICBwb2x5MTZ4NF90IHZhbFs0XTsKLX0gcG9seTE2eDR4NF90OwotCi10eXBlZGVmIHN0cnVjdCBwb2x5MTZ4OHg0X3QgewotICBwb2x5MTZ4OF90IHZhbFs0XTsKLX0gcG9seTE2eDh4NF90OwotCi0jaWZkZWYgX19hYXJjaDY0X18KLXR5cGVkZWYgc3RydWN0IHBvbHk2NHgxeDRfdCB7Ci0gIHBvbHk2NHgxX3QgdmFsWzRdOwotfSBwb2x5NjR4MXg0X3Q7Ci0KLXR5cGVkZWYgc3RydWN0IHBvbHk2NHgyeDRfdCB7Ci0gIHBvbHk2NHgyX3QgdmFsWzRdOwotfSBwb2x5NjR4Mng0X3Q7Ci0KLSNlbmRpZgotCi0jZGVmaW5lIF9fYWkgc3RhdGljIGlubGluZSBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18pKQotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDh4MTZfdCB2YWJkcV91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgewotICB1aW50OHgxNl90IF9fcmV0OwotICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92YWJkcV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA0OCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ4eDE2X3QgdmFiZHFfdTgodWludDh4MTZfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEpIHsKLSAgdWludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdmFiZHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDQ4KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci1fX2FpIHVpbnQ4eDE2X3QgX19ub3N3YXBfdmFiZHFfdTgodWludDh4MTZfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEpIHsKLSAgdWludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdmFiZHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNDgpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQzMng0X3QgdmFiZHFfdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7Ci0gIHVpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZhYmRxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDUwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDMyeDRfdCB2YWJkcV91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEpIHsKLSAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgdWludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKLSAgdWludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdmFiZHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDUwKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci1fX2FpIHVpbnQzMng0X3QgX19ub3N3YXBfdmFiZHFfdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7Ci0gIHVpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZhYmRxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDUwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MTZ4OF90IHZhYmRxX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSkgewotICB1aW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92YWJkcV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA0OSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQxNng4X3QgdmFiZHFfdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxKSB7Ci0gIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZhYmRxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA0OSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotX19haSB1aW50MTZ4OF90IF9fbm9zd2FwX3ZhYmRxX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSkgewotICB1aW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92YWJkcV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA0OSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50OHgxNl90IHZhYmRxX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgewotICBpbnQ4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDh4MTZfdCkgX19idWlsdGluX25lb25fdmFiZHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMzIpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQ4eDE2X3QgdmFiZHFfczgoaW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7Ci0gIGludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQ4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDh4MTZfdCkgX19idWlsdGluX25lb25fdmFiZHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDMyKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci1fX2FpIGludDh4MTZfdCBfX25vc3dhcF92YWJkcV9zOChpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEpIHsKLSAgaW50OHgxNl90IF9fcmV0OwotICBfX3JldCA9IChpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZhYmRxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDMyKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBmbG9hdDMyeDRfdCB2YWJkcV9mMzIoZmxvYXQzMng0X3QgX19wMCwgZmxvYXQzMng0X3QgX19wMSkgewotICBmbG9hdDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZhYmRxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDQxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgZmxvYXQzMng0X3QgdmFiZHFfZjMyKGZsb2F0MzJ4NF90IF9fcDAsIGZsb2F0MzJ4NF90IF9fcDEpIHsKLSAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIGZsb2F0MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOwotICBmbG9hdDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZhYmRxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA0MSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQzMng0X3QgdmFiZHFfczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgewotICBpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdmFiZHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMzQpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQzMng0X3QgdmFiZHFfczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgewotICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKLSAgaW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZhYmRxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAzNCk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotX19haSBpbnQzMng0X3QgX19ub3N3YXBfdmFiZHFfczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgewotICBpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdmFiZHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMzQpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDE2eDhfdCB2YWJkcV9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7Ci0gIGludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92YWJkcV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAzMyk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDE2eDhfdCB2YWJkcV9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7Ci0gIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDE2eDhfdCkgX19idWlsdGluX25lb25fdmFiZHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDMzKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci1fX2FpIGludDE2eDhfdCBfX25vc3dhcF92YWJkcV9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7Ci0gIGludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92YWJkcV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAzMyk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDh4OF90IHZhYmRfdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7Ci0gIHVpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92YWJkX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxNik7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ4eDhfdCB2YWJkX3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgewotICB1aW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDh4OF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZhYmRfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAxNik7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotX19haSB1aW50OHg4X3QgX19ub3N3YXBfdmFiZF91OCh1aW50OHg4X3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKLSAgdWludDh4OF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZhYmRfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDE2KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MzJ4Ml90IHZhYmRfdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxKSB7Ci0gIHVpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZhYmRfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDE4KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDMyeDJfdCB2YWJkX3UzMih1aW50MzJ4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSkgewotICB1aW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICB1aW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOwotICB1aW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92YWJkX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMTgpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLV9fYWkgdWludDMyeDJfdCBfX25vc3dhcF92YWJkX3UzMih1aW50MzJ4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSkgewotICB1aW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92YWJkX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxOCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDE2eDRfdCB2YWJkX3UxNih1aW50MTZ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSkgewotICB1aW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92YWJkX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxNyk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQxNng0X3QgdmFiZF91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEpIHsKLSAgdWludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgdWludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKLSAgdWludDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdmFiZF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDE3KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci1fX2FpIHVpbnQxNng0X3QgX19ub3N3YXBfdmFiZF91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEpIHsKLSAgdWludDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdmFiZF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTcpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDh4OF90IHZhYmRfczgoaW50OHg4X3QgX19wMCwgaW50OHg4X3QgX19wMSkgewotICBpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZhYmRfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQ4eDhfdCB2YWJkX3M4KGludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKLSAgaW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZhYmRfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAwKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci1fX2FpIGludDh4OF90IF9fbm9zd2FwX3ZhYmRfczgoaW50OHg4X3QgX19wMCwgaW50OHg4X3QgX19wMSkgewotICBpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZhYmRfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGZsb2F0MzJ4Ml90IHZhYmRfZjMyKGZsb2F0MzJ4Ml90IF9fcDAsIGZsb2F0MzJ4Ml90IF9fcDEpIHsKLSAgZmxvYXQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92YWJkX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCA5KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgZmxvYXQzMngyX3QgdmFiZF9mMzIoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSkgewotICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgZmxvYXQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7Ci0gIGZsb2F0MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDMyeDJfdCkgX19idWlsdGluX25lb25fdmFiZF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDkpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MzJ4Ml90IHZhYmRfczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgewotICBpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdmFiZF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMik7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDMyeDJfdCB2YWJkX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKLSAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7Ci0gIGludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92YWJkX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMik7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotX19haSBpbnQzMngyX3QgX19ub3N3YXBfdmFiZF9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7Ci0gIGludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92YWJkX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAyKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQxNng0X3QgdmFiZF9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7Ci0gIGludDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92YWJkX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MTZ4NF90IHZhYmRfczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgewotICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKLSAgaW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZhYmRfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAxKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci1fX2FpIGludDE2eDRfdCBfX25vc3dhcF92YWJkX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKLSAgaW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZhYmRfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDh4MTZfdCB2YWJzcV9zOChpbnQ4eDE2X3QgX19wMCkgewotICBpbnQ4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDh4MTZfdCkgX19idWlsdGluX25lb25fdmFic3FfdigoaW50OHgxNl90KV9fcDAsIDMyKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50OHgxNl90IHZhYnNxX3M4KGludDh4MTZfdCBfX3AwKSB7Ci0gIGludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50OHgxNl90IF9fcmV0OwotICBfX3JldCA9IChpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZhYnNxX3YoKGludDh4MTZfdClfX3JldjAsIDMyKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGZsb2F0MzJ4NF90IHZhYnNxX2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7Ci0gIGZsb2F0MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDMyeDRfdCkgX19idWlsdGluX25lb25fdmFic3FfdigoaW50OHgxNl90KV9fcDAsIDQxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgZmxvYXQzMng0X3QgdmFic3FfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKLSAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIGZsb2F0MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDMyeDRfdCkgX19idWlsdGluX25lb25fdmFic3FfdigoaW50OHgxNl90KV9fcmV2MCwgNDEpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MzJ4NF90IHZhYnNxX3MzMihpbnQzMng0X3QgX19wMCkgewotICBpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdmFic3FfdigoaW50OHgxNl90KV9fcDAsIDM0KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MzJ4NF90IHZhYnNxX3MzMihpbnQzMng0X3QgX19wMCkgewotICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIGludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92YWJzcV92KChpbnQ4eDE2X3QpX19yZXYwLCAzNCk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQxNng4X3QgdmFic3FfczE2KGludDE2eDhfdCBfX3AwKSB7Ci0gIGludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92YWJzcV92KChpbnQ4eDE2X3QpX19wMCwgMzMpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQxNng4X3QgdmFic3FfczE2KGludDE2eDhfdCBfX3AwKSB7Ci0gIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZhYnNxX3YoKGludDh4MTZfdClfX3JldjAsIDMzKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDh4OF90IHZhYnNfczgoaW50OHg4X3QgX19wMCkgewotICBpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZhYnNfdigoaW50OHg4X3QpX19wMCwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDh4OF90IHZhYnNfczgoaW50OHg4X3QgX19wMCkgewotICBpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92YWJzX3YoKGludDh4OF90KV9fcmV2MCwgMCk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBmbG9hdDMyeDJfdCB2YWJzX2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7Ci0gIGZsb2F0MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDMyeDJfdCkgX19idWlsdGluX25lb25fdmFic192KChpbnQ4eDhfdClfX3AwLCA5KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgZmxvYXQzMngyX3QgdmFic19mMzIoZmxvYXQzMngyX3QgX19wMCkgewotICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgZmxvYXQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92YWJzX3YoKGludDh4OF90KV9fcmV2MCwgOSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQzMngyX3QgdmFic19zMzIoaW50MzJ4Ml90IF9fcDApIHsKLSAgaW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZhYnNfdigoaW50OHg4X3QpX19wMCwgMik7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDMyeDJfdCB2YWJzX3MzMihpbnQzMngyX3QgX19wMCkgewotICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIGludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92YWJzX3YoKGludDh4OF90KV9fcmV2MCwgMik7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQxNng0X3QgdmFic19zMTYoaW50MTZ4NF90IF9fcDApIHsKLSAgaW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZhYnNfdigoaW50OHg4X3QpX19wMCwgMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDE2eDRfdCB2YWJzX3MxNihpbnQxNng0X3QgX19wMCkgewotICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIGludDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92YWJzX3YoKGludDh4OF90KV9fcmV2MCwgMSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50OHgxNl90IHZhZGRxX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7Ci0gIHVpbnQ4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19wMCArIF9fcDE7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ4eDE2X3QgdmFkZHFfdTgodWludDh4MTZfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEpIHsKLSAgdWludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSBfX3JldjAgKyBfX3JldjE7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MzJ4NF90IHZhZGRxX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgewotICB1aW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IF9fcDAgKyBfX3AxOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MzJ4NF90IHZhZGRxX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgewotICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICB1aW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOwotICB1aW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IF9fcmV2MCArIF9fcmV2MTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ2NHgyX3QgdmFkZHFfdTY0KHVpbnQ2NHgyX3QgX19wMCwgdWludDY0eDJfdCBfX3AxKSB7Ci0gIHVpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19wMCArIF9fcDE7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ2NHgyX3QgdmFkZHFfdTY0KHVpbnQ2NHgyX3QgX19wMCwgdWludDY0eDJfdCBfX3AxKSB7Ci0gIHVpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIHVpbnQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7Ci0gIHVpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19yZXYwICsgX19yZXYxOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDE2eDhfdCB2YWRkcV91MTYodWludDE2eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEpIHsKLSAgdWludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSBfX3AwICsgX19wMTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDE2eDhfdCB2YWRkcV91MTYodWludDE2eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEpIHsKLSAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSBfX3JldjAgKyBfX3JldjE7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ4eDE2X3QgdmFkZHFfczgoaW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7Ci0gIGludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSBfX3AwICsgX19wMTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50OHgxNl90IHZhZGRxX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgewotICBpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50OHgxNl90IF9fcmV0OwotICBfX3JldCA9IF9fcmV2MCArIF9fcmV2MTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGZsb2F0MzJ4NF90IHZhZGRxX2YzMihmbG9hdDMyeDRfdCBfX3AwLCBmbG9hdDMyeDRfdCBfX3AxKSB7Ci0gIGZsb2F0MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IF9fcDAgKyBfX3AxOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBmbG9hdDMyeDRfdCB2YWRkcV9mMzIoZmxvYXQzMng0X3QgX19wMCwgZmxvYXQzMng0X3QgX19wMSkgewotICBmbG9hdDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgZmxvYXQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7Ci0gIGZsb2F0MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IF9fcmV2MCArIF9fcmV2MTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDMyeDRfdCB2YWRkcV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7Ci0gIGludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSBfX3AwICsgX19wMTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MzJ4NF90IHZhZGRxX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKLSAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7Ci0gIGludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSBfX3JldjAgKyBfX3JldjE7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ2NHgyX3QgdmFkZHFfczY0KGludDY0eDJfdCBfX3AwLCBpbnQ2NHgyX3QgX19wMSkgewotICBpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19wMCArIF9fcDE7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDY0eDJfdCB2YWRkcV9zNjQoaW50NjR4Ml90IF9fcDAsIGludDY0eDJfdCBfX3AxKSB7Ci0gIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgaW50NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOwotICBpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19yZXYwICsgX19yZXYxOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MTZ4OF90IHZhZGRxX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKLSAgaW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IF9fcDAgKyBfX3AxOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQxNng4X3QgdmFkZHFfczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgewotICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IF9fcmV2MCArIF9fcmV2MTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ4eDhfdCB2YWRkX3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgewotICB1aW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19wMCArIF9fcDE7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ4eDhfdCB2YWRkX3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgewotICB1aW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDh4OF90IF9fcmV0OwotICBfX3JldCA9IF9fcmV2MCArIF9fcmV2MTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQzMngyX3QgdmFkZF91MzIodWludDMyeDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEpIHsKLSAgdWludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSBfX3AwICsgX19wMTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDMyeDJfdCB2YWRkX3UzMih1aW50MzJ4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSkgewotICB1aW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICB1aW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOwotICB1aW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IF9fcmV2MCArIF9fcmV2MTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ2NHgxX3QgdmFkZF91NjQodWludDY0eDFfdCBfX3AwLCB1aW50NjR4MV90IF9fcDEpIHsKLSAgdWludDY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSBfX3AwICsgX19wMTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDY0eDFfdCB2YWRkX3U2NCh1aW50NjR4MV90IF9fcDAsIHVpbnQ2NHgxX3QgX19wMSkgewotICB1aW50NjR4MV90IF9fcmV0OwotICBfX3JldCA9IF9fcDAgKyBfX3AxOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQxNng0X3QgdmFkZF91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEpIHsKLSAgdWludDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSBfX3AwICsgX19wMTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDE2eDRfdCB2YWRkX3UxNih1aW50MTZ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSkgewotICB1aW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICB1aW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOwotICB1aW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9IF9fcmV2MCArIF9fcmV2MTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDh4OF90IHZhZGRfczgoaW50OHg4X3QgX19wMCwgaW50OHg4X3QgX19wMSkgewotICBpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSBfX3AwICsgX19wMTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50OHg4X3QgdmFkZF9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7Ci0gIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19yZXYwICsgX19yZXYxOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgZmxvYXQzMngyX3QgdmFkZF9mMzIoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSkgewotICBmbG9hdDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSBfX3AwICsgX19wMTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgZmxvYXQzMngyX3QgdmFkZF9mMzIoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSkgewotICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgZmxvYXQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7Ci0gIGZsb2F0MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IF9fcmV2MCArIF9fcmV2MTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDMyeDJfdCB2YWRkX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKLSAgaW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IF9fcDAgKyBfX3AxOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQzMngyX3QgdmFkZF9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7Ci0gIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOwotICBpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19yZXYwICsgX19yZXYxOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50NjR4MV90IHZhZGRfczY0KGludDY0eDFfdCBfX3AwLCBpbnQ2NHgxX3QgX19wMSkgewotICBpbnQ2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19wMCArIF9fcDE7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDY0eDFfdCB2YWRkX3M2NChpbnQ2NHgxX3QgX19wMCwgaW50NjR4MV90IF9fcDEpIHsKLSAgaW50NjR4MV90IF9fcmV0OwotICBfX3JldCA9IF9fcDAgKyBfX3AxOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDE2eDRfdCB2YWRkX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKLSAgaW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9IF9fcDAgKyBfX3AxOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQxNng0X3QgdmFkZF9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7Ci0gIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOwotICBpbnQxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19yZXYwICsgX19yZXYxOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDE2eDRfdCB2YWRkaG5fdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7Ci0gIHVpbnQxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZhZGRobl92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAxNyk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQxNng0X3QgdmFkZGhuX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgewotICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICB1aW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOwotICB1aW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92YWRkaG5fdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDE3KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci1fX2FpIHVpbnQxNng0X3QgX19ub3N3YXBfdmFkZGhuX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgewotICB1aW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92YWRkaG5fdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMTcpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQzMngyX3QgdmFkZGhuX3U2NCh1aW50NjR4Ml90IF9fcDAsIHVpbnQ2NHgyX3QgX19wMSkgewotICB1aW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92YWRkaG5fdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMTgpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MzJ4Ml90IHZhZGRobl91NjQodWludDY0eDJfdCBfX3AwLCB1aW50NjR4Ml90IF9fcDEpIHsKLSAgdWludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgdWludDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKLSAgdWludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdmFkZGhuX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAxOCk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotX19haSB1aW50MzJ4Ml90IF9fbm9zd2FwX3ZhZGRobl91NjQodWludDY0eDJfdCBfX3AwLCB1aW50NjR4Ml90IF9fcDEpIHsKLSAgdWludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdmFkZGhuX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDE4KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50OHg4X3QgdmFkZGhuX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSkgewotICB1aW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdmFkZGhuX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDE2KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDh4OF90IHZhZGRobl91MTYodWludDE2eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEpIHsKLSAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDh4OF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZhZGRobl92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMTYpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLV9fYWkgdWludDh4OF90IF9fbm9zd2FwX3ZhZGRobl91MTYodWludDE2eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEpIHsKLSAgdWludDh4OF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZhZGRobl92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAxNik7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MTZ4NF90IHZhZGRobl9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7Ci0gIGludDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92YWRkaG5fdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDE2eDRfdCB2YWRkaG5fczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgewotICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKLSAgaW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZhZGRobl92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotX19haSBpbnQxNng0X3QgX19ub3N3YXBfdmFkZGhuX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKLSAgaW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZhZGRobl92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQzMngyX3QgdmFkZGhuX3M2NChpbnQ2NHgyX3QgX19wMCwgaW50NjR4Ml90IF9fcDEpIHsKLSAgaW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZhZGRobl92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAyKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MzJ4Ml90IHZhZGRobl9zNjQoaW50NjR4Ml90IF9fcDAsIGludDY0eDJfdCBfX3AxKSB7Ci0gIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgaW50NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOwotICBpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdmFkZGhuX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAyKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci1fX2FpIGludDMyeDJfdCBfX25vc3dhcF92YWRkaG5fczY0KGludDY0eDJfdCBfX3AwLCBpbnQ2NHgyX3QgX19wMSkgewotICBpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdmFkZGhuX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDIpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDh4OF90IHZhZGRobl9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7Ci0gIGludDh4OF90IF9fcmV0OwotICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdmFkZGhuX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQ4eDhfdCB2YWRkaG5fczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgewotICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92YWRkaG5fdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDApOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLV9fYWkgaW50OHg4X3QgX19ub3N3YXBfdmFkZGhuX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKLSAgaW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92YWRkaG5fdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDh4MTZfdCB2YW5kcV91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgewotICB1aW50OHgxNl90IF9fcmV0OwotICBfX3JldCA9IF9fcDAgJiBfX3AxOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50OHgxNl90IHZhbmRxX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7Ci0gIHVpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQ4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19yZXYwICYgX19yZXYxOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDMyeDRfdCB2YW5kcV91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEpIHsKLSAgdWludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSBfX3AwICYgX19wMTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDMyeDRfdCB2YW5kcV91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEpIHsKLSAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgdWludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKLSAgdWludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSBfX3JldjAgJiBfX3JldjE7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50NjR4Ml90IHZhbmRxX3U2NCh1aW50NjR4Ml90IF9fcDAsIHVpbnQ2NHgyX3QgX19wMSkgewotICB1aW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IF9fcDAgJiBfX3AxOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50NjR4Ml90IHZhbmRxX3U2NCh1aW50NjR4Ml90IF9fcDAsIHVpbnQ2NHgyX3QgX19wMSkgewotICB1aW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICB1aW50NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOwotICB1aW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IF9fcmV2MCAmIF9fcmV2MTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQxNng4X3QgdmFuZHFfdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxKSB7Ci0gIHVpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19wMCAmIF9fcDE7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQxNng4X3QgdmFuZHFfdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxKSB7Ci0gIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19yZXYwICYgX19yZXYxOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50OHgxNl90IHZhbmRxX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgewotICBpbnQ4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19wMCAmIF9fcDE7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDh4MTZfdCB2YW5kcV9zOChpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEpIHsKLSAgaW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSBfX3JldjAgJiBfX3JldjE7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQzMng0X3QgdmFuZHFfczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgewotICBpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19wMCAmIF9fcDE7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDMyeDRfdCB2YW5kcV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7Ci0gIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOwotICBpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19yZXYwICYgX19yZXYxOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50NjR4Ml90IHZhbmRxX3M2NChpbnQ2NHgyX3QgX19wMCwgaW50NjR4Ml90IF9fcDEpIHsKLSAgaW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IF9fcDAgJiBfX3AxOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQ2NHgyX3QgdmFuZHFfczY0KGludDY0eDJfdCBfX3AwLCBpbnQ2NHgyX3QgX19wMSkgewotICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIGludDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKLSAgaW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IF9fcmV2MCAmIF9fcmV2MTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDE2eDhfdCB2YW5kcV9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7Ci0gIGludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSBfX3AwICYgX19wMTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MTZ4OF90IHZhbmRxX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKLSAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSBfX3JldjAgJiBfX3JldjE7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50OHg4X3QgdmFuZF91OCh1aW50OHg4X3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKLSAgdWludDh4OF90IF9fcmV0OwotICBfX3JldCA9IF9fcDAgJiBfX3AxOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50OHg4X3QgdmFuZF91OCh1aW50OHg4X3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKLSAgdWludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSBfX3JldjAgJiBfX3JldjE7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MzJ4Ml90IHZhbmRfdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxKSB7Ci0gIHVpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19wMCAmIF9fcDE7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQzMngyX3QgdmFuZF91MzIodWludDMyeDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEpIHsKLSAgdWludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgdWludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKLSAgdWludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSBfX3JldjAgJiBfX3JldjE7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50NjR4MV90IHZhbmRfdTY0KHVpbnQ2NHgxX3QgX19wMCwgdWludDY0eDFfdCBfX3AxKSB7Ci0gIHVpbnQ2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19wMCAmIF9fcDE7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ2NHgxX3QgdmFuZF91NjQodWludDY0eDFfdCBfX3AwLCB1aW50NjR4MV90IF9fcDEpIHsKLSAgdWludDY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSBfX3AwICYgX19wMTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MTZ4NF90IHZhbmRfdTE2KHVpbnQxNng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxKSB7Ci0gIHVpbnQxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19wMCAmIF9fcDE7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQxNng0X3QgdmFuZF91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEpIHsKLSAgdWludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgdWludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKLSAgdWludDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSBfX3JldjAgJiBfX3JldjE7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ4eDhfdCB2YW5kX3M4KGludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKLSAgaW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19wMCAmIF9fcDE7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDh4OF90IHZhbmRfczgoaW50OHg4X3QgX19wMCwgaW50OHg4X3QgX19wMSkgewotICBpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDh4OF90IF9fcmV0OwotICBfX3JldCA9IF9fcmV2MCAmIF9fcmV2MTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDMyeDJfdCB2YW5kX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKLSAgaW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IF9fcDAgJiBfX3AxOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQzMngyX3QgdmFuZF9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7Ci0gIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOwotICBpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19yZXYwICYgX19yZXYxOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50NjR4MV90IHZhbmRfczY0KGludDY0eDFfdCBfX3AwLCBpbnQ2NHgxX3QgX19wMSkgewotICBpbnQ2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19wMCAmIF9fcDE7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDY0eDFfdCB2YW5kX3M2NChpbnQ2NHgxX3QgX19wMCwgaW50NjR4MV90IF9fcDEpIHsKLSAgaW50NjR4MV90IF9fcmV0OwotICBfX3JldCA9IF9fcDAgJiBfX3AxOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDE2eDRfdCB2YW5kX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKLSAgaW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9IF9fcDAgJiBfX3AxOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQxNng0X3QgdmFuZF9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7Ci0gIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOwotICBpbnQxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19yZXYwICYgX19yZXYxOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDh4MTZfdCB2YmljcV91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgewotICB1aW50OHgxNl90IF9fcmV0OwotICBfX3JldCA9IF9fcDAgJiB+X19wMTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDh4MTZfdCB2YmljcV91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgewotICB1aW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50OHgxNl90IF9fcmV0OwotICBfX3JldCA9IF9fcmV2MCAmIH5fX3JldjE7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MzJ4NF90IHZiaWNxX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgewotICB1aW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IF9fcDAgJiB+X19wMTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDMyeDRfdCB2YmljcV91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEpIHsKLSAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgdWludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKLSAgdWludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSBfX3JldjAgJiB+X19yZXYxOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDY0eDJfdCB2YmljcV91NjQodWludDY0eDJfdCBfX3AwLCB1aW50NjR4Ml90IF9fcDEpIHsKLSAgdWludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSBfX3AwICYgfl9fcDE7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ2NHgyX3QgdmJpY3FfdTY0KHVpbnQ2NHgyX3QgX19wMCwgdWludDY0eDJfdCBfX3AxKSB7Ci0gIHVpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIHVpbnQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7Ci0gIHVpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19yZXYwICYgfl9fcmV2MTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQxNng4X3QgdmJpY3FfdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxKSB7Ci0gIHVpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19wMCAmIH5fX3AxOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MTZ4OF90IHZiaWNxX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSkgewotICB1aW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IF9fcmV2MCAmIH5fX3JldjE7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ4eDE2X3QgdmJpY3FfczgoaW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7Ci0gIGludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSBfX3AwICYgfl9fcDE7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDh4MTZfdCB2YmljcV9zOChpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEpIHsKLSAgaW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSBfX3JldjAgJiB+X19yZXYxOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MzJ4NF90IHZiaWNxX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKLSAgaW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IF9fcDAgJiB+X19wMTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MzJ4NF90IHZiaWNxX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKLSAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7Ci0gIGludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSBfX3JldjAgJiB+X19yZXYxOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50NjR4Ml90IHZiaWNxX3M2NChpbnQ2NHgyX3QgX19wMCwgaW50NjR4Ml90IF9fcDEpIHsKLSAgaW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IF9fcDAgJiB+X19wMTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50NjR4Ml90IHZiaWNxX3M2NChpbnQ2NHgyX3QgX19wMCwgaW50NjR4Ml90IF9fcDEpIHsKLSAgaW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICBpbnQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7Ci0gIGludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSBfX3JldjAgJiB+X19yZXYxOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MTZ4OF90IHZiaWNxX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKLSAgaW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IF9fcDAgJiB+X19wMTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MTZ4OF90IHZiaWNxX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKLSAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSBfX3JldjAgJiB+X19yZXYxOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDh4OF90IHZiaWNfdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7Ci0gIHVpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSBfX3AwICYgfl9fcDE7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ4eDhfdCB2YmljX3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgewotICB1aW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDh4OF90IF9fcmV0OwotICBfX3JldCA9IF9fcmV2MCAmIH5fX3JldjE7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MzJ4Ml90IHZiaWNfdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxKSB7Ci0gIHVpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19wMCAmIH5fX3AxOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MzJ4Ml90IHZiaWNfdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxKSB7Ci0gIHVpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIHVpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7Ci0gIHVpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19yZXYwICYgfl9fcmV2MTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ2NHgxX3QgdmJpY191NjQodWludDY0eDFfdCBfX3AwLCB1aW50NjR4MV90IF9fcDEpIHsKLSAgdWludDY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSBfX3AwICYgfl9fcDE7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ2NHgxX3QgdmJpY191NjQodWludDY0eDFfdCBfX3AwLCB1aW50NjR4MV90IF9fcDEpIHsKLSAgdWludDY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSBfX3AwICYgfl9fcDE7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDE2eDRfdCB2YmljX3UxNih1aW50MTZ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSkgewotICB1aW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9IF9fcDAgJiB+X19wMTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDE2eDRfdCB2YmljX3UxNih1aW50MTZ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSkgewotICB1aW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICB1aW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOwotICB1aW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9IF9fcmV2MCAmIH5fX3JldjE7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ4eDhfdCB2YmljX3M4KGludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKLSAgaW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19wMCAmIH5fX3AxOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQ4eDhfdCB2YmljX3M4KGludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKLSAgaW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSBfX3JldjAgJiB+X19yZXYxOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MzJ4Ml90IHZiaWNfczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgewotICBpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19wMCAmIH5fX3AxOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQzMngyX3QgdmJpY19zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7Ci0gIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOwotICBpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19yZXYwICYgfl9fcmV2MTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDY0eDFfdCB2YmljX3M2NChpbnQ2NHgxX3QgX19wMCwgaW50NjR4MV90IF9fcDEpIHsKLSAgaW50NjR4MV90IF9fcmV0OwotICBfX3JldCA9IF9fcDAgJiB+X19wMTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50NjR4MV90IHZiaWNfczY0KGludDY0eDFfdCBfX3AwLCBpbnQ2NHgxX3QgX19wMSkgewotICBpbnQ2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19wMCAmIH5fX3AxOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDE2eDRfdCB2YmljX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKLSAgaW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9IF9fcDAgJiB+X19wMTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MTZ4NF90IHZiaWNfczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgewotICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKLSAgaW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9IF9fcmV2MCAmIH5fX3JldjE7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBwb2x5OHg4X3QgdmJzbF9wOCh1aW50OHg4X3QgX19wMCwgcG9seTh4OF90IF9fcDEsIHBvbHk4eDhfdCBfX3AyKSB7Ci0gIHBvbHk4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAocG9seTh4OF90KSBfX2J1aWx0aW5fbmVvbl92YnNsX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAoaW50OHg4X3QpX19wMiwgNCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHBvbHk4eDhfdCB2YnNsX3A4KHVpbnQ4eDhfdCBfX3AwLCBwb2x5OHg4X3QgX19wMSwgcG9seTh4OF90IF9fcDIpIHsKLSAgdWludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBwb2x5OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHBvbHk4eDhfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcG9seTh4OF90IF9fcmV0OwotICBfX3JldCA9IChwb2x5OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Zic2xfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAoaW50OHg4X3QpX19yZXYyLCA0KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHBvbHkxNng0X3QgdmJzbF9wMTYodWludDE2eDRfdCBfX3AwLCBwb2x5MTZ4NF90IF9fcDEsIHBvbHkxNng0X3QgX19wMikgewotICBwb2x5MTZ4NF90IF9fcmV0OwotICBfX3JldCA9IChwb2x5MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92YnNsX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAoaW50OHg4X3QpX19wMiwgNSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHBvbHkxNng0X3QgdmJzbF9wMTYodWludDE2eDRfdCBfX3AwLCBwb2x5MTZ4NF90IF9fcDEsIHBvbHkxNng0X3QgX19wMikgewotICB1aW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICBwb2x5MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOwotICBwb2x5MTZ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDMsIDIsIDEsIDApOwotICBwb2x5MTZ4NF90IF9fcmV0OwotICBfX3JldCA9IChwb2x5MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92YnNsX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgKGludDh4OF90KV9fcmV2MiwgNSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBwb2x5OHgxNl90IHZic2xxX3A4KHVpbnQ4eDE2X3QgX19wMCwgcG9seTh4MTZfdCBfX3AxLCBwb2x5OHgxNl90IF9fcDIpIHsKLSAgcG9seTh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSAocG9seTh4MTZfdCkgX19idWlsdGluX25lb25fdmJzbHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgKGludDh4MTZfdClfX3AyLCAzNik7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHBvbHk4eDE2X3QgdmJzbHFfcDgodWludDh4MTZfdCBfX3AwLCBwb2x5OHgxNl90IF9fcDEsIHBvbHk4eDE2X3QgX19wMikgewotICB1aW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBwb2x5OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBwb2x5OHgxNl90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBwb2x5OHgxNl90IF9fcmV0OwotICBfX3JldCA9IChwb2x5OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92YnNscV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgKGludDh4MTZfdClfX3JldjIsIDM2KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHBvbHkxNng4X3QgdmJzbHFfcDE2KHVpbnQxNng4X3QgX19wMCwgcG9seTE2eDhfdCBfX3AxLCBwb2x5MTZ4OF90IF9fcDIpIHsKLSAgcG9seTE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSAocG9seTE2eDhfdCkgX19idWlsdGluX25lb25fdmJzbHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgKGludDh4MTZfdClfX3AyLCAzNyk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHBvbHkxNng4X3QgdmJzbHFfcDE2KHVpbnQxNng4X3QgX19wMCwgcG9seTE2eDhfdCBfX3AxLCBwb2x5MTZ4OF90IF9fcDIpIHsKLSAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcG9seTE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcG9seTE2eDhfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcG9seTE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSAocG9seTE2eDhfdCkgX19idWlsdGluX25lb25fdmJzbHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIChpbnQ4eDE2X3QpX19yZXYyLCAzNyk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50OHgxNl90IHZic2xxX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZfdCBfX3AxLCB1aW50OHgxNl90IF9fcDIpIHsKLSAgdWludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdmJzbHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgKGludDh4MTZfdClfX3AyLCA0OCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ4eDE2X3QgdmJzbHFfdTgodWludDh4MTZfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEsIHVpbnQ4eDE2X3QgX19wMikgewotICB1aW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50OHgxNl90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50OHgxNl90IF9fcmV0OwotICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92YnNscV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgKGludDh4MTZfdClfX3JldjIsIDQ4KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQzMng0X3QgdmJzbHFfdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxLCB1aW50MzJ4NF90IF9fcDIpIHsKLSAgdWludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdmJzbHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgKGludDh4MTZfdClfX3AyLCA1MCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQzMng0X3QgdmJzbHFfdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxLCB1aW50MzJ4NF90IF9fcDIpIHsKLSAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgdWludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKLSAgdWludDMyeDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAzLCAyLCAxLCAwKTsKLSAgdWludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdmJzbHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIChpbnQ4eDE2X3QpX19yZXYyLCA1MCk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50NjR4Ml90IHZic2xxX3U2NCh1aW50NjR4Ml90IF9fcDAsIHVpbnQ2NHgyX3QgX19wMSwgdWludDY0eDJfdCBfX3AyKSB7Ci0gIHVpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3Zic2xxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIChpbnQ4eDE2X3QpX19wMiwgNTEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50NjR4Ml90IHZic2xxX3U2NCh1aW50NjR4Ml90IF9fcDAsIHVpbnQ2NHgyX3QgX19wMSwgdWludDY0eDJfdCBfX3AyKSB7Ci0gIHVpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIHVpbnQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7Ci0gIHVpbnQ2NHgyX3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMSwgMCk7Ci0gIHVpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3Zic2xxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAoaW50OHgxNl90KV9fcmV2MiwgNTEpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDE2eDhfdCB2YnNscV91MTYodWludDE2eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEsIHVpbnQxNng4X3QgX19wMikgewotICB1aW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92YnNscV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAoaW50OHgxNl90KV9fcDIsIDQ5KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDE2eDhfdCB2YnNscV91MTYodWludDE2eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEsIHVpbnQxNng4X3QgX19wMikgewotICB1aW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50MTZ4OF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92YnNscV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgKGludDh4MTZfdClfX3JldjIsIDQ5KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDh4MTZfdCB2YnNscV9zOCh1aW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxLCBpbnQ4eDE2X3QgX19wMikgewotICBpbnQ4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDh4MTZfdCkgX19idWlsdGluX25lb25fdmJzbHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgKGludDh4MTZfdClfX3AyLCAzMik7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDh4MTZfdCB2YnNscV9zOCh1aW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxLCBpbnQ4eDE2X3QgX19wMikgewotICB1aW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDh4MTZfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50OHgxNl90IF9fcmV0OwotICBfX3JldCA9IChpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3Zic2xxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAoaW50OHgxNl90KV9fcmV2MiwgMzIpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgZmxvYXQzMng0X3QgdmJzbHFfZjMyKHVpbnQzMng0X3QgX19wMCwgZmxvYXQzMng0X3QgX19wMSwgZmxvYXQzMng0X3QgX19wMikgewotICBmbG9hdDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3Zic2xxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIChpbnQ4eDE2X3QpX19wMiwgNDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBmbG9hdDMyeDRfdCB2YnNscV9mMzIodWludDMyeDRfdCBfX3AwLCBmbG9hdDMyeDRfdCBfX3AxLCBmbG9hdDMyeDRfdCBfX3AyKSB7Ci0gIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIGZsb2F0MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOwotICBmbG9hdDMyeDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAzLCAyLCAxLCAwKTsKLSAgZmxvYXQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92YnNscV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgKGludDh4MTZfdClfX3JldjIsIDQxKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDMyeDRfdCB2YnNscV9zMzIodWludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSwgaW50MzJ4NF90IF9fcDIpIHsKLSAgaW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3Zic2xxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIChpbnQ4eDE2X3QpX19wMiwgMzQpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQzMng0X3QgdmJzbHFfczMyKHVpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEsIGludDMyeDRfdCBfX3AyKSB7Ci0gIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKLSAgaW50MzJ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDMsIDIsIDEsIDApOwotICBpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdmJzbHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIChpbnQ4eDE2X3QpX19yZXYyLCAzNCk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ2NHgyX3QgdmJzbHFfczY0KHVpbnQ2NHgyX3QgX19wMCwgaW50NjR4Ml90IF9fcDEsIGludDY0eDJfdCBfX3AyKSB7Ci0gIGludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92YnNscV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAoaW50OHgxNl90KV9fcDIsIDM1KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50NjR4Ml90IHZic2xxX3M2NCh1aW50NjR4Ml90IF9fcDAsIGludDY0eDJfdCBfX3AxLCBpbnQ2NHgyX3QgX19wMikgewotICB1aW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICBpbnQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7Ci0gIGludDY0eDJfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAxLCAwKTsKLSAgaW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3Zic2xxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAoaW50OHgxNl90KV9fcmV2MiwgMzUpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MTZ4OF90IHZic2xxX3MxNih1aW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxLCBpbnQxNng4X3QgX19wMikgewotICBpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDE2eDhfdCkgX19idWlsdGluX25lb25fdmJzbHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgKGludDh4MTZfdClfX3AyLCAzMyk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDE2eDhfdCB2YnNscV9zMTYodWludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSwgaW50MTZ4OF90IF9fcDIpIHsKLSAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQxNng4X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92YnNscV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgKGludDh4MTZfdClfX3JldjIsIDMzKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ4eDhfdCB2YnNsX3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSwgdWludDh4OF90IF9fcDIpIHsKLSAgdWludDh4OF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Zic2xfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIChpbnQ4eDhfdClfX3AyLCAxNik7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ4eDhfdCB2YnNsX3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSwgdWludDh4OF90IF9fcDIpIHsKLSAgdWludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQ4eDhfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDh4OF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Zic2xfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAoaW50OHg4X3QpX19yZXYyLCAxNik7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MzJ4Ml90IHZic2xfdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxLCB1aW50MzJ4Ml90IF9fcDIpIHsKLSAgdWludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdmJzbF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgKGludDh4OF90KV9fcDIsIDE4KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDMyeDJfdCB2YnNsX3UzMih1aW50MzJ4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSwgdWludDMyeDJfdCBfX3AyKSB7Ci0gIHVpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIHVpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7Ci0gIHVpbnQzMngyX3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMSwgMCk7Ci0gIHVpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3Zic2xfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAoaW50OHg4X3QpX19yZXYyLCAxOCk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50NjR4MV90IHZic2xfdTY0KHVpbnQ2NHgxX3QgX19wMCwgdWludDY0eDFfdCBfX3AxLCB1aW50NjR4MV90IF9fcDIpIHsKLSAgdWludDY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDY0eDFfdCkgX19idWlsdGluX25lb25fdmJzbF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgKGludDh4OF90KV9fcDIsIDE5KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDY0eDFfdCB2YnNsX3U2NCh1aW50NjR4MV90IF9fcDAsIHVpbnQ2NHgxX3QgX19wMSwgdWludDY0eDFfdCBfX3AyKSB7Ci0gIHVpbnQ2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3Zic2xfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIChpbnQ4eDhfdClfX3AyLCAxOSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDE2eDRfdCB2YnNsX3UxNih1aW50MTZ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSwgdWludDE2eDRfdCBfX3AyKSB7Ci0gIHVpbnQxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3Zic2xfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIChpbnQ4eDhfdClfX3AyLCAxNyk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQxNng0X3QgdmJzbF91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEsIHVpbnQxNng0X3QgX19wMikgewotICB1aW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICB1aW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOwotICB1aW50MTZ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDMsIDIsIDEsIDApOwotICB1aW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92YnNsX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgKGludDh4OF90KV9fcmV2MiwgMTcpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50OHg4X3QgdmJzbF9zOCh1aW50OHg4X3QgX19wMCwgaW50OHg4X3QgX19wMSwgaW50OHg4X3QgX19wMikgewotICBpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Zic2xfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIChpbnQ4eDhfdClfX3AyLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50OHg4X3QgdmJzbF9zOCh1aW50OHg4X3QgX19wMCwgaW50OHg4X3QgX19wMSwgaW50OHg4X3QgX19wMikgewotICB1aW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQ4eDhfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92YnNsX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgKGludDh4OF90KV9fcmV2MiwgMCk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBmbG9hdDMyeDJfdCB2YnNsX2YzMih1aW50MzJ4Ml90IF9fcDAsIGZsb2F0MzJ4Ml90IF9fcDEsIGZsb2F0MzJ4Ml90IF9fcDIpIHsKLSAgZmxvYXQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92YnNsX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAoaW50OHg4X3QpX19wMiwgOSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGZsb2F0MzJ4Ml90IHZic2xfZjMyKHVpbnQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSwgZmxvYXQzMngyX3QgX19wMikgewotICB1aW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICBmbG9hdDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKLSAgZmxvYXQzMngyX3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMSwgMCk7Ci0gIGZsb2F0MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDMyeDJfdCkgX19idWlsdGluX25lb25fdmJzbF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIChpbnQ4eDhfdClfX3JldjIsIDkpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MzJ4Ml90IHZic2xfczMyKHVpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEsIGludDMyeDJfdCBfX3AyKSB7Ci0gIGludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92YnNsX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAoaW50OHg4X3QpX19wMiwgMik7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDMyeDJfdCB2YnNsX3MzMih1aW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxLCBpbnQzMngyX3QgX19wMikgewotICB1aW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7Ci0gIGludDMyeDJfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAxLCAwKTsKLSAgaW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3Zic2xfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAoaW50OHg4X3QpX19yZXYyLCAyKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDY0eDFfdCB2YnNsX3M2NCh1aW50NjR4MV90IF9fcDAsIGludDY0eDFfdCBfX3AxLCBpbnQ2NHgxX3QgX19wMikgewotICBpbnQ2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDY0eDFfdCkgX19idWlsdGluX25lb25fdmJzbF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgKGludDh4OF90KV9fcDIsIDMpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQ2NHgxX3QgdmJzbF9zNjQodWludDY0eDFfdCBfX3AwLCBpbnQ2NHgxX3QgX19wMSwgaW50NjR4MV90IF9fcDIpIHsKLSAgaW50NjR4MV90IF9fcmV0OwotICBfX3JldCA9IChpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3Zic2xfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIChpbnQ4eDhfdClfX3AyLCAzKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQxNng0X3QgdmJzbF9zMTYodWludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSwgaW50MTZ4NF90IF9fcDIpIHsKLSAgaW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3Zic2xfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIChpbnQ4eDhfdClfX3AyLCAxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MTZ4NF90IHZic2xfczE2KHVpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEsIGludDE2eDRfdCBfX3AyKSB7Ci0gIHVpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKLSAgaW50MTZ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDMsIDIsIDEsIDApOwotICBpbnQxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdmJzbF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIChpbnQ4eDhfdClfX3JldjIsIDEpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDMyeDRfdCB2Y2FnZXFfZjMyKGZsb2F0MzJ4NF90IF9fcDAsIGZsb2F0MzJ4NF90IF9fcDEpIHsKLSAgdWludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdmNhZ2VxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDUwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDMyeDRfdCB2Y2FnZXFfZjMyKGZsb2F0MzJ4NF90IF9fcDAsIGZsb2F0MzJ4NF90IF9fcDEpIHsKLSAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIGZsb2F0MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOwotICB1aW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92Y2FnZXFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDUwKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQzMngyX3QgdmNhZ2VfZjMyKGZsb2F0MzJ4Ml90IF9fcDAsIGZsb2F0MzJ4Ml90IF9fcDEpIHsKLSAgdWludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdmNhZ2VfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDE4KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDMyeDJfdCB2Y2FnZV9mMzIoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSkgewotICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgZmxvYXQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7Ci0gIHVpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjYWdlX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMTgpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDMyeDRfdCB2Y2FndHFfZjMyKGZsb2F0MzJ4NF90IF9fcDAsIGZsb2F0MzJ4NF90IF9fcDEpIHsKLSAgdWludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdmNhZ3RxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDUwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDMyeDRfdCB2Y2FndHFfZjMyKGZsb2F0MzJ4NF90IF9fcDAsIGZsb2F0MzJ4NF90IF9fcDEpIHsKLSAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIGZsb2F0MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOwotICB1aW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92Y2FndHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDUwKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQzMngyX3QgdmNhZ3RfZjMyKGZsb2F0MzJ4Ml90IF9fcDAsIGZsb2F0MzJ4Ml90IF9fcDEpIHsKLSAgdWludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdmNhZ3RfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDE4KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDMyeDJfdCB2Y2FndF9mMzIoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSkgewotICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgZmxvYXQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7Ci0gIHVpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjYWd0X3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMTgpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDMyeDRfdCB2Y2FsZXFfZjMyKGZsb2F0MzJ4NF90IF9fcDAsIGZsb2F0MzJ4NF90IF9fcDEpIHsKLSAgdWludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdmNhbGVxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDUwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDMyeDRfdCB2Y2FsZXFfZjMyKGZsb2F0MzJ4NF90IF9fcDAsIGZsb2F0MzJ4NF90IF9fcDEpIHsKLSAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIGZsb2F0MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOwotICB1aW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92Y2FsZXFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDUwKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQzMngyX3QgdmNhbGVfZjMyKGZsb2F0MzJ4Ml90IF9fcDAsIGZsb2F0MzJ4Ml90IF9fcDEpIHsKLSAgdWludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdmNhbGVfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDE4KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDMyeDJfdCB2Y2FsZV9mMzIoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSkgewotICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgZmxvYXQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7Ci0gIHVpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjYWxlX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMTgpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDMyeDRfdCB2Y2FsdHFfZjMyKGZsb2F0MzJ4NF90IF9fcDAsIGZsb2F0MzJ4NF90IF9fcDEpIHsKLSAgdWludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdmNhbHRxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDUwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDMyeDRfdCB2Y2FsdHFfZjMyKGZsb2F0MzJ4NF90IF9fcDAsIGZsb2F0MzJ4NF90IF9fcDEpIHsKLSAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIGZsb2F0MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOwotICB1aW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92Y2FsdHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDUwKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQzMngyX3QgdmNhbHRfZjMyKGZsb2F0MzJ4Ml90IF9fcDAsIGZsb2F0MzJ4Ml90IF9fcDEpIHsKLSAgdWludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdmNhbHRfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDE4KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDMyeDJfdCB2Y2FsdF9mMzIoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSkgewotICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgZmxvYXQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7Ci0gIHVpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjYWx0X3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMTgpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDh4OF90IHZjZXFfcDgocG9seTh4OF90IF9fcDAsIHBvbHk4eDhfdCBfX3AxKSB7Ci0gIHVpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDh4OF90KShfX3AwID09IF9fcDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50OHg4X3QgdmNlcV9wOChwb2x5OHg4X3QgX19wMCwgcG9seTh4OF90IF9fcDEpIHsKLSAgcG9seTh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBwb2x5OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDh4OF90KShfX3JldjAgPT0gX19yZXYxKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ4eDE2X3QgdmNlcXFfcDgocG9seTh4MTZfdCBfX3AwLCBwb2x5OHgxNl90IF9fcDEpIHsKLSAgdWludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDh4MTZfdCkoX19wMCA9PSBfX3AxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDh4MTZfdCB2Y2VxcV9wOChwb2x5OHgxNl90IF9fcDAsIHBvbHk4eDE2X3QgX19wMSkgewotICBwb2x5OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBwb2x5OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50OHgxNl90IF9fcmV0OwotICBfX3JldCA9ICh1aW50OHgxNl90KShfX3JldjAgPT0gX19yZXYxKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ4eDE2X3QgdmNlcXFfdTgodWludDh4MTZfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEpIHsKLSAgdWludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDh4MTZfdCkoX19wMCA9PSBfX3AxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDh4MTZfdCB2Y2VxcV91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgewotICB1aW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50OHgxNl90IF9fcmV0OwotICBfX3JldCA9ICh1aW50OHgxNl90KShfX3JldjAgPT0gX19yZXYxKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQzMng0X3QgdmNlcXFfdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7Ci0gIHVpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMng0X3QpKF9fcDAgPT0gX19wMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQzMng0X3QgdmNlcXFfdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7Ci0gIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7Ci0gIHVpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMng0X3QpKF9fcmV2MCA9PSBfX3JldjEpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDE2eDhfdCB2Y2VxcV91MTYodWludDE2eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEpIHsKLSAgdWludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDE2eDhfdCkoX19wMCA9PSBfX3AxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDE2eDhfdCB2Y2VxcV91MTYodWludDE2eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEpIHsKLSAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDE2eDhfdCkoX19yZXYwID09IF9fcmV2MSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50OHgxNl90IHZjZXFxX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgewotICB1aW50OHgxNl90IF9fcmV0OwotICBfX3JldCA9ICh1aW50OHgxNl90KShfX3AwID09IF9fcDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50OHgxNl90IHZjZXFxX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgewotICBpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDh4MTZfdCkoX19yZXYwID09IF9fcmV2MSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MzJ4NF90IHZjZXFxX2YzMihmbG9hdDMyeDRfdCBfX3AwLCBmbG9hdDMyeDRfdCBfX3AxKSB7Ci0gIHVpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMng0X3QpKF9fcDAgPT0gX19wMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQzMng0X3QgdmNlcXFfZjMyKGZsb2F0MzJ4NF90IF9fcDAsIGZsb2F0MzJ4NF90IF9fcDEpIHsKLSAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIGZsb2F0MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOwotICB1aW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJ4NF90KShfX3JldjAgPT0gX19yZXYxKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQzMng0X3QgdmNlcXFfczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgewotICB1aW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJ4NF90KShfX3AwID09IF9fcDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MzJ4NF90IHZjZXFxX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKLSAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7Ci0gIHVpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMng0X3QpKF9fcmV2MCA9PSBfX3JldjEpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDE2eDhfdCB2Y2VxcV9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7Ci0gIHVpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQxNng4X3QpKF9fcDAgPT0gX19wMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQxNng4X3QgdmNlcXFfczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgewotICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDE2eDhfdCkoX19yZXYwID09IF9fcmV2MSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50OHg4X3QgdmNlcV91OCh1aW50OHg4X3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKLSAgdWludDh4OF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50OHg4X3QpKF9fcDAgPT0gX19wMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ4eDhfdCB2Y2VxX3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgewotICB1aW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDh4OF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50OHg4X3QpKF9fcmV2MCA9PSBfX3JldjEpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDMyeDJfdCB2Y2VxX3UzMih1aW50MzJ4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSkgewotICB1aW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJ4Ml90KShfX3AwID09IF9fcDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MzJ4Ml90IHZjZXFfdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxKSB7Ci0gIHVpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIHVpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7Ci0gIHVpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMngyX3QpKF9fcmV2MCA9PSBfX3JldjEpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDE2eDRfdCB2Y2VxX3UxNih1aW50MTZ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSkgewotICB1aW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MTZ4NF90KShfX3AwID09IF9fcDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MTZ4NF90IHZjZXFfdTE2KHVpbnQxNng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxKSB7Ci0gIHVpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7Ci0gIHVpbnQxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQxNng0X3QpKF9fcmV2MCA9PSBfX3JldjEpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDh4OF90IHZjZXFfczgoaW50OHg4X3QgX19wMCwgaW50OHg4X3QgX19wMSkgewotICB1aW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ4eDhfdCkoX19wMCA9PSBfX3AxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDh4OF90IHZjZXFfczgoaW50OHg4X3QgX19wMCwgaW50OHg4X3QgX19wMSkgewotICBpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDh4OF90KShfX3JldjAgPT0gX19yZXYxKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQzMngyX3QgdmNlcV9mMzIoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSkgewotICB1aW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJ4Ml90KShfX3AwID09IF9fcDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MzJ4Ml90IHZjZXFfZjMyKGZsb2F0MzJ4Ml90IF9fcDAsIGZsb2F0MzJ4Ml90IF9fcDEpIHsKLSAgZmxvYXQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIGZsb2F0MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOwotICB1aW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJ4Ml90KShfX3JldjAgPT0gX19yZXYxKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQzMngyX3QgdmNlcV9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7Ci0gIHVpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMngyX3QpKF9fcDAgPT0gX19wMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQzMngyX3QgdmNlcV9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7Ci0gIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOwotICB1aW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJ4Ml90KShfX3JldjAgPT0gX19yZXYxKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQxNng0X3QgdmNlcV9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7Ci0gIHVpbnQxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQxNng0X3QpKF9fcDAgPT0gX19wMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQxNng0X3QgdmNlcV9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7Ci0gIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOwotICB1aW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MTZ4NF90KShfX3JldjAgPT0gX19yZXYxKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ4eDE2X3QgdmNnZXFfdTgodWludDh4MTZfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEpIHsKLSAgdWludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDh4MTZfdCkoX19wMCA+PSBfX3AxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDh4MTZfdCB2Y2dlcV91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgewotICB1aW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50OHgxNl90IF9fcmV0OwotICBfX3JldCA9ICh1aW50OHgxNl90KShfX3JldjAgPj0gX19yZXYxKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQzMng0X3QgdmNnZXFfdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7Ci0gIHVpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMng0X3QpKF9fcDAgPj0gX19wMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQzMng0X3QgdmNnZXFfdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7Ci0gIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7Ci0gIHVpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMng0X3QpKF9fcmV2MCA+PSBfX3JldjEpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDE2eDhfdCB2Y2dlcV91MTYodWludDE2eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEpIHsKLSAgdWludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDE2eDhfdCkoX19wMCA+PSBfX3AxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDE2eDhfdCB2Y2dlcV91MTYodWludDE2eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEpIHsKLSAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDE2eDhfdCkoX19yZXYwID49IF9fcmV2MSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50OHgxNl90IHZjZ2VxX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgewotICB1aW50OHgxNl90IF9fcmV0OwotICBfX3JldCA9ICh1aW50OHgxNl90KShfX3AwID49IF9fcDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50OHgxNl90IHZjZ2VxX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgewotICBpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDh4MTZfdCkoX19yZXYwID49IF9fcmV2MSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MzJ4NF90IHZjZ2VxX2YzMihmbG9hdDMyeDRfdCBfX3AwLCBmbG9hdDMyeDRfdCBfX3AxKSB7Ci0gIHVpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMng0X3QpKF9fcDAgPj0gX19wMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQzMng0X3QgdmNnZXFfZjMyKGZsb2F0MzJ4NF90IF9fcDAsIGZsb2F0MzJ4NF90IF9fcDEpIHsKLSAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIGZsb2F0MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOwotICB1aW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJ4NF90KShfX3JldjAgPj0gX19yZXYxKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQzMng0X3QgdmNnZXFfczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgewotICB1aW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJ4NF90KShfX3AwID49IF9fcDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MzJ4NF90IHZjZ2VxX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKLSAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7Ci0gIHVpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMng0X3QpKF9fcmV2MCA+PSBfX3JldjEpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDE2eDhfdCB2Y2dlcV9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7Ci0gIHVpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQxNng4X3QpKF9fcDAgPj0gX19wMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQxNng4X3QgdmNnZXFfczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgewotICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDE2eDhfdCkoX19yZXYwID49IF9fcmV2MSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50OHg4X3QgdmNnZV91OCh1aW50OHg4X3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKLSAgdWludDh4OF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50OHg4X3QpKF9fcDAgPj0gX19wMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ4eDhfdCB2Y2dlX3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgewotICB1aW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDh4OF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50OHg4X3QpKF9fcmV2MCA+PSBfX3JldjEpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDMyeDJfdCB2Y2dlX3UzMih1aW50MzJ4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSkgewotICB1aW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJ4Ml90KShfX3AwID49IF9fcDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MzJ4Ml90IHZjZ2VfdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxKSB7Ci0gIHVpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIHVpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7Ci0gIHVpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMngyX3QpKF9fcmV2MCA+PSBfX3JldjEpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDE2eDRfdCB2Y2dlX3UxNih1aW50MTZ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSkgewotICB1aW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MTZ4NF90KShfX3AwID49IF9fcDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MTZ4NF90IHZjZ2VfdTE2KHVpbnQxNng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxKSB7Ci0gIHVpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7Ci0gIHVpbnQxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQxNng0X3QpKF9fcmV2MCA+PSBfX3JldjEpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDh4OF90IHZjZ2VfczgoaW50OHg4X3QgX19wMCwgaW50OHg4X3QgX19wMSkgewotICB1aW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ4eDhfdCkoX19wMCA+PSBfX3AxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDh4OF90IHZjZ2VfczgoaW50OHg4X3QgX19wMCwgaW50OHg4X3QgX19wMSkgewotICBpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDh4OF90KShfX3JldjAgPj0gX19yZXYxKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQzMngyX3QgdmNnZV9mMzIoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSkgewotICB1aW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJ4Ml90KShfX3AwID49IF9fcDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MzJ4Ml90IHZjZ2VfZjMyKGZsb2F0MzJ4Ml90IF9fcDAsIGZsb2F0MzJ4Ml90IF9fcDEpIHsKLSAgZmxvYXQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIGZsb2F0MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOwotICB1aW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJ4Ml90KShfX3JldjAgPj0gX19yZXYxKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQzMngyX3QgdmNnZV9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7Ci0gIHVpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMngyX3QpKF9fcDAgPj0gX19wMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQzMngyX3QgdmNnZV9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7Ci0gIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOwotICB1aW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJ4Ml90KShfX3JldjAgPj0gX19yZXYxKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQxNng0X3QgdmNnZV9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7Ci0gIHVpbnQxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQxNng0X3QpKF9fcDAgPj0gX19wMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQxNng0X3QgdmNnZV9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7Ci0gIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOwotICB1aW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MTZ4NF90KShfX3JldjAgPj0gX19yZXYxKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ4eDE2X3QgdmNndHFfdTgodWludDh4MTZfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEpIHsKLSAgdWludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDh4MTZfdCkoX19wMCA+IF9fcDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50OHgxNl90IHZjZ3RxX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7Ci0gIHVpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQ4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ4eDE2X3QpKF9fcmV2MCA+IF9fcmV2MSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MzJ4NF90IHZjZ3RxX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgewotICB1aW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJ4NF90KShfX3AwID4gX19wMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQzMng0X3QgdmNndHFfdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7Ci0gIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7Ci0gIHVpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMng0X3QpKF9fcmV2MCA+IF9fcmV2MSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MTZ4OF90IHZjZ3RxX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSkgewotICB1aW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MTZ4OF90KShfX3AwID4gX19wMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQxNng4X3QgdmNndHFfdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxKSB7Ci0gIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQxNng4X3QpKF9fcmV2MCA+IF9fcmV2MSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50OHgxNl90IHZjZ3RxX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgewotICB1aW50OHgxNl90IF9fcmV0OwotICBfX3JldCA9ICh1aW50OHgxNl90KShfX3AwID4gX19wMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ4eDE2X3QgdmNndHFfczgoaW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7Ci0gIGludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50OHgxNl90IF9fcmV0OwotICBfX3JldCA9ICh1aW50OHgxNl90KShfX3JldjAgPiBfX3JldjEpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDMyeDRfdCB2Y2d0cV9mMzIoZmxvYXQzMng0X3QgX19wMCwgZmxvYXQzMng0X3QgX19wMSkgewotICB1aW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJ4NF90KShfX3AwID4gX19wMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQzMng0X3QgdmNndHFfZjMyKGZsb2F0MzJ4NF90IF9fcDAsIGZsb2F0MzJ4NF90IF9fcDEpIHsKLSAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIGZsb2F0MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOwotICB1aW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJ4NF90KShfX3JldjAgPiBfX3JldjEpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDMyeDRfdCB2Y2d0cV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7Ci0gIHVpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMng0X3QpKF9fcDAgPiBfX3AxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDMyeDRfdCB2Y2d0cV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7Ci0gIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOwotICB1aW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJ4NF90KShfX3JldjAgPiBfX3JldjEpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDE2eDhfdCB2Y2d0cV9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7Ci0gIHVpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQxNng4X3QpKF9fcDAgPiBfX3AxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDE2eDhfdCB2Y2d0cV9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7Ci0gIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MTZ4OF90KShfX3JldjAgPiBfX3JldjEpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDh4OF90IHZjZ3RfdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7Ci0gIHVpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDh4OF90KShfX3AwID4gX19wMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ4eDhfdCB2Y2d0X3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgewotICB1aW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDh4OF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50OHg4X3QpKF9fcmV2MCA+IF9fcmV2MSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MzJ4Ml90IHZjZ3RfdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxKSB7Ci0gIHVpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMngyX3QpKF9fcDAgPiBfX3AxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDMyeDJfdCB2Y2d0X3UzMih1aW50MzJ4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSkgewotICB1aW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICB1aW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOwotICB1aW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJ4Ml90KShfX3JldjAgPiBfX3JldjEpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDE2eDRfdCB2Y2d0X3UxNih1aW50MTZ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSkgewotICB1aW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MTZ4NF90KShfX3AwID4gX19wMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQxNng0X3QgdmNndF91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEpIHsKLSAgdWludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgdWludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKLSAgdWludDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDE2eDRfdCkoX19yZXYwID4gX19yZXYxKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ4eDhfdCB2Y2d0X3M4KGludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKLSAgdWludDh4OF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50OHg4X3QpKF9fcDAgPiBfX3AxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDh4OF90IHZjZ3RfczgoaW50OHg4X3QgX19wMCwgaW50OHg4X3QgX19wMSkgewotICBpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDh4OF90KShfX3JldjAgPiBfX3JldjEpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDMyeDJfdCB2Y2d0X2YzMihmbG9hdDMyeDJfdCBfX3AwLCBmbG9hdDMyeDJfdCBfX3AxKSB7Ci0gIHVpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMngyX3QpKF9fcDAgPiBfX3AxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDMyeDJfdCB2Y2d0X2YzMihmbG9hdDMyeDJfdCBfX3AwLCBmbG9hdDMyeDJfdCBfX3AxKSB7Ci0gIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICBmbG9hdDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKLSAgdWludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDMyeDJfdCkoX19yZXYwID4gX19yZXYxKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQzMngyX3QgdmNndF9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7Ci0gIHVpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMngyX3QpKF9fcDAgPiBfX3AxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDMyeDJfdCB2Y2d0X3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKLSAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7Ci0gIHVpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMngyX3QpKF9fcmV2MCA+IF9fcmV2MSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MTZ4NF90IHZjZ3RfczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgewotICB1aW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MTZ4NF90KShfX3AwID4gX19wMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQxNng0X3QgdmNndF9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7Ci0gIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOwotICB1aW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MTZ4NF90KShfX3JldjAgPiBfX3JldjEpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDh4MTZfdCB2Y2xlcV91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgewotICB1aW50OHgxNl90IF9fcmV0OwotICBfX3JldCA9ICh1aW50OHgxNl90KShfX3AwIDw9IF9fcDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50OHgxNl90IHZjbGVxX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7Ci0gIHVpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQ4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ4eDE2X3QpKF9fcmV2MCA8PSBfX3JldjEpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDMyeDRfdCB2Y2xlcV91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEpIHsKLSAgdWludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDMyeDRfdCkoX19wMCA8PSBfX3AxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDMyeDRfdCB2Y2xlcV91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEpIHsKLSAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgdWludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKLSAgdWludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDMyeDRfdCkoX19yZXYwIDw9IF9fcmV2MSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MTZ4OF90IHZjbGVxX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSkgewotICB1aW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MTZ4OF90KShfX3AwIDw9IF9fcDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MTZ4OF90IHZjbGVxX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSkgewotICB1aW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MTZ4OF90KShfX3JldjAgPD0gX19yZXYxKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ4eDE2X3QgdmNsZXFfczgoaW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7Ci0gIHVpbnQ4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ4eDE2X3QpKF9fcDAgPD0gX19wMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ4eDE2X3QgdmNsZXFfczgoaW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7Ci0gIGludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50OHgxNl90IF9fcmV0OwotICBfX3JldCA9ICh1aW50OHgxNl90KShfX3JldjAgPD0gX19yZXYxKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQzMng0X3QgdmNsZXFfZjMyKGZsb2F0MzJ4NF90IF9fcDAsIGZsb2F0MzJ4NF90IF9fcDEpIHsKLSAgdWludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDMyeDRfdCkoX19wMCA8PSBfX3AxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDMyeDRfdCB2Y2xlcV9mMzIoZmxvYXQzMng0X3QgX19wMCwgZmxvYXQzMng0X3QgX19wMSkgewotICBmbG9hdDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgZmxvYXQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7Ci0gIHVpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMng0X3QpKF9fcmV2MCA8PSBfX3JldjEpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDMyeDRfdCB2Y2xlcV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7Ci0gIHVpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMng0X3QpKF9fcDAgPD0gX19wMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQzMng0X3QgdmNsZXFfczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgewotICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKLSAgdWludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDMyeDRfdCkoX19yZXYwIDw9IF9fcmV2MSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MTZ4OF90IHZjbGVxX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKLSAgdWludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDE2eDhfdCkoX19wMCA8PSBfX3AxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDE2eDhfdCB2Y2xlcV9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7Ci0gIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MTZ4OF90KShfX3JldjAgPD0gX19yZXYxKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ4eDhfdCB2Y2xlX3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgewotICB1aW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ4eDhfdCkoX19wMCA8PSBfX3AxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDh4OF90IHZjbGVfdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7Ci0gIHVpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ4eDhfdCkoX19yZXYwIDw9IF9fcmV2MSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MzJ4Ml90IHZjbGVfdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxKSB7Ci0gIHVpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMngyX3QpKF9fcDAgPD0gX19wMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQzMngyX3QgdmNsZV91MzIodWludDMyeDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEpIHsKLSAgdWludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgdWludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKLSAgdWludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDMyeDJfdCkoX19yZXYwIDw9IF9fcmV2MSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MTZ4NF90IHZjbGVfdTE2KHVpbnQxNng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxKSB7Ci0gIHVpbnQxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQxNng0X3QpKF9fcDAgPD0gX19wMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQxNng0X3QgdmNsZV91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEpIHsKLSAgdWludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgdWludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKLSAgdWludDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDE2eDRfdCkoX19yZXYwIDw9IF9fcmV2MSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50OHg4X3QgdmNsZV9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7Ci0gIHVpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDh4OF90KShfX3AwIDw9IF9fcDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50OHg4X3QgdmNsZV9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7Ci0gIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDh4OF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50OHg4X3QpKF9fcmV2MCA8PSBfX3JldjEpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDMyeDJfdCB2Y2xlX2YzMihmbG9hdDMyeDJfdCBfX3AwLCBmbG9hdDMyeDJfdCBfX3AxKSB7Ci0gIHVpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMngyX3QpKF9fcDAgPD0gX19wMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQzMngyX3QgdmNsZV9mMzIoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSkgewotICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgZmxvYXQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7Ci0gIHVpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMngyX3QpKF9fcmV2MCA8PSBfX3JldjEpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDMyeDJfdCB2Y2xlX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKLSAgdWludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDMyeDJfdCkoX19wMCA8PSBfX3AxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDMyeDJfdCB2Y2xlX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKLSAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7Ci0gIHVpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMngyX3QpKF9fcmV2MCA8PSBfX3JldjEpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDE2eDRfdCB2Y2xlX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKLSAgdWludDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDE2eDRfdCkoX19wMCA8PSBfX3AxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDE2eDRfdCB2Y2xlX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKLSAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICBpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7Ci0gIHVpbnQxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQxNng0X3QpKF9fcmV2MCA8PSBfX3JldjEpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50OHgxNl90IHZjbHNxX3M4KGludDh4MTZfdCBfX3AwKSB7Ci0gIGludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92Y2xzcV92KChpbnQ4eDE2X3QpX19wMCwgMzIpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQ4eDE2X3QgdmNsc3FfczgoaW50OHgxNl90IF9fcDApIHsKLSAgaW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQ4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDh4MTZfdCkgX19idWlsdGluX25lb25fdmNsc3FfdigoaW50OHgxNl90KV9fcmV2MCwgMzIpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MzJ4NF90IHZjbHNxX3MzMihpbnQzMng0X3QgX19wMCkgewotICBpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdmNsc3FfdigoaW50OHgxNl90KV9fcDAsIDM0KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MzJ4NF90IHZjbHNxX3MzMihpbnQzMng0X3QgX19wMCkgewotICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIGludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92Y2xzcV92KChpbnQ4eDE2X3QpX19yZXYwLCAzNCk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQxNng4X3QgdmNsc3FfczE2KGludDE2eDhfdCBfX3AwKSB7Ci0gIGludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92Y2xzcV92KChpbnQ4eDE2X3QpX19wMCwgMzMpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQxNng4X3QgdmNsc3FfczE2KGludDE2eDhfdCBfX3AwKSB7Ci0gIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZjbHNxX3YoKGludDh4MTZfdClfX3JldjAsIDMzKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDh4OF90IHZjbHNfczgoaW50OHg4X3QgX19wMCkgewotICBpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZjbHNfdigoaW50OHg4X3QpX19wMCwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDh4OF90IHZjbHNfczgoaW50OHg4X3QgX19wMCkgewotICBpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92Y2xzX3YoKGludDh4OF90KV9fcmV2MCwgMCk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQzMngyX3QgdmNsc19zMzIoaW50MzJ4Ml90IF9fcDApIHsKLSAgaW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjbHNfdigoaW50OHg4X3QpX19wMCwgMik7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDMyeDJfdCB2Y2xzX3MzMihpbnQzMngyX3QgX19wMCkgewotICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIGludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y2xzX3YoKGludDh4OF90KV9fcmV2MCwgMik7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQxNng0X3QgdmNsc19zMTYoaW50MTZ4NF90IF9fcDApIHsKLSAgaW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjbHNfdigoaW50OHg4X3QpX19wMCwgMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDE2eDRfdCB2Y2xzX3MxNihpbnQxNng0X3QgX19wMCkgewotICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIGludDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92Y2xzX3YoKGludDh4OF90KV9fcmV2MCwgMSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50OHgxNl90IHZjbHRxX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7Ci0gIHVpbnQ4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ4eDE2X3QpKF9fcDAgPCBfX3AxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDh4MTZfdCB2Y2x0cV91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgewotICB1aW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50OHgxNl90IF9fcmV0OwotICBfX3JldCA9ICh1aW50OHgxNl90KShfX3JldjAgPCBfX3JldjEpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDMyeDRfdCB2Y2x0cV91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEpIHsKLSAgdWludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDMyeDRfdCkoX19wMCA8IF9fcDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MzJ4NF90IHZjbHRxX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgewotICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICB1aW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOwotICB1aW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJ4NF90KShfX3JldjAgPCBfX3JldjEpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDE2eDhfdCB2Y2x0cV91MTYodWludDE2eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEpIHsKLSAgdWludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDE2eDhfdCkoX19wMCA8IF9fcDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MTZ4OF90IHZjbHRxX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSkgewotICB1aW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MTZ4OF90KShfX3JldjAgPCBfX3JldjEpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDh4MTZfdCB2Y2x0cV9zOChpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEpIHsKLSAgdWludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDh4MTZfdCkoX19wMCA8IF9fcDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50OHgxNl90IHZjbHRxX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgewotICBpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDh4MTZfdCkoX19yZXYwIDwgX19yZXYxKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQzMng0X3QgdmNsdHFfZjMyKGZsb2F0MzJ4NF90IF9fcDAsIGZsb2F0MzJ4NF90IF9fcDEpIHsKLSAgdWludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDMyeDRfdCkoX19wMCA8IF9fcDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MzJ4NF90IHZjbHRxX2YzMihmbG9hdDMyeDRfdCBfX3AwLCBmbG9hdDMyeDRfdCBfX3AxKSB7Ci0gIGZsb2F0MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICBmbG9hdDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKLSAgdWludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDMyeDRfdCkoX19yZXYwIDwgX19yZXYxKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQzMng0X3QgdmNsdHFfczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgewotICB1aW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJ4NF90KShfX3AwIDwgX19wMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQzMng0X3QgdmNsdHFfczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgewotICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKLSAgdWludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDMyeDRfdCkoX19yZXYwIDwgX19yZXYxKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQxNng4X3QgdmNsdHFfczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgewotICB1aW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MTZ4OF90KShfX3AwIDwgX19wMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQxNng4X3QgdmNsdHFfczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgewotICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDE2eDhfdCkoX19yZXYwIDwgX19yZXYxKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ4eDhfdCB2Y2x0X3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgewotICB1aW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ4eDhfdCkoX19wMCA8IF9fcDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50OHg4X3QgdmNsdF91OCh1aW50OHg4X3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKLSAgdWludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDh4OF90KShfX3JldjAgPCBfX3JldjEpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDMyeDJfdCB2Y2x0X3UzMih1aW50MzJ4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSkgewotICB1aW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJ4Ml90KShfX3AwIDwgX19wMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQzMngyX3QgdmNsdF91MzIodWludDMyeDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEpIHsKLSAgdWludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgdWludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKLSAgdWludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDMyeDJfdCkoX19yZXYwIDwgX19yZXYxKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQxNng0X3QgdmNsdF91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEpIHsKLSAgdWludDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDE2eDRfdCkoX19wMCA8IF9fcDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MTZ4NF90IHZjbHRfdTE2KHVpbnQxNng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxKSB7Ci0gIHVpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7Ci0gIHVpbnQxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQxNng0X3QpKF9fcmV2MCA8IF9fcmV2MSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50OHg4X3QgdmNsdF9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7Ci0gIHVpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDh4OF90KShfX3AwIDwgX19wMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ4eDhfdCB2Y2x0X3M4KGludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKLSAgaW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ4eDhfdCkoX19yZXYwIDwgX19yZXYxKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQzMngyX3QgdmNsdF9mMzIoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSkgewotICB1aW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJ4Ml90KShfX3AwIDwgX19wMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQzMngyX3QgdmNsdF9mMzIoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSkgewotICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgZmxvYXQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7Ci0gIHVpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMngyX3QpKF9fcmV2MCA8IF9fcmV2MSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MzJ4Ml90IHZjbHRfczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgewotICB1aW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJ4Ml90KShfX3AwIDwgX19wMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQzMngyX3QgdmNsdF9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7Ci0gIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOwotICB1aW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJ4Ml90KShfX3JldjAgPCBfX3JldjEpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDE2eDRfdCB2Y2x0X3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKLSAgdWludDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDE2eDRfdCkoX19wMCA8IF9fcDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MTZ4NF90IHZjbHRfczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgewotICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKLSAgdWludDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDE2eDRfdCkoX19yZXYwIDwgX19yZXYxKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ4eDE2X3QgdmNsenFfdTgodWludDh4MTZfdCBfX3AwKSB7Ci0gIHVpbnQ4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZjbHpxX3YoKGludDh4MTZfdClfX3AwLCA0OCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ4eDE2X3QgdmNsenFfdTgodWludDh4MTZfdCBfX3AwKSB7Ci0gIHVpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQ4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZjbHpxX3YoKGludDh4MTZfdClfX3JldjAsIDQ4KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQzMng0X3QgdmNsenFfdTMyKHVpbnQzMng0X3QgX19wMCkgewotICB1aW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92Y2x6cV92KChpbnQ4eDE2X3QpX19wMCwgNTApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MzJ4NF90IHZjbHpxX3UzMih1aW50MzJ4NF90IF9fcDApIHsKLSAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgdWludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdmNsenFfdigoaW50OHgxNl90KV9fcmV2MCwgNTApOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDE2eDhfdCB2Y2x6cV91MTYodWludDE2eDhfdCBfX3AwKSB7Ci0gIHVpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZjbHpxX3YoKGludDh4MTZfdClfX3AwLCA0OSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQxNng4X3QgdmNsenFfdTE2KHVpbnQxNng4X3QgX19wMCkgewotICB1aW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92Y2x6cV92KChpbnQ4eDE2X3QpX19yZXYwLCA0OSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ4eDE2X3QgdmNsenFfczgoaW50OHgxNl90IF9fcDApIHsKLSAgaW50OHgxNl90IF9fcmV0OwotICBfX3JldCA9IChpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZjbHpxX3YoKGludDh4MTZfdClfX3AwLCAzMik7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDh4MTZfdCB2Y2x6cV9zOChpbnQ4eDE2X3QgX19wMCkgewotICBpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92Y2x6cV92KChpbnQ4eDE2X3QpX19yZXYwLCAzMik7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQzMng0X3QgdmNsenFfczMyKGludDMyeDRfdCBfX3AwKSB7Ci0gIGludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92Y2x6cV92KChpbnQ4eDE2X3QpX19wMCwgMzQpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQzMng0X3QgdmNsenFfczMyKGludDMyeDRfdCBfX3AwKSB7Ci0gIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgaW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjbHpxX3YoKGludDh4MTZfdClfX3JldjAsIDM0KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDE2eDhfdCB2Y2x6cV9zMTYoaW50MTZ4OF90IF9fcDApIHsKLSAgaW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZjbHpxX3YoKGludDh4MTZfdClfX3AwLCAzMyk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDE2eDhfdCB2Y2x6cV9zMTYoaW50MTZ4OF90IF9fcDApIHsKLSAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDE2eDhfdCkgX19idWlsdGluX25lb25fdmNsenFfdigoaW50OHgxNl90KV9fcmV2MCwgMzMpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDh4OF90IHZjbHpfdTgodWludDh4OF90IF9fcDApIHsKLSAgdWludDh4OF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZjbHpfdigoaW50OHg4X3QpX19wMCwgMTYpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50OHg4X3QgdmNsel91OCh1aW50OHg4X3QgX19wMCkgewotICB1aW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92Y2x6X3YoKGludDh4OF90KV9fcmV2MCwgMTYpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDMyeDJfdCB2Y2x6X3UzMih1aW50MzJ4Ml90IF9fcDApIHsKLSAgdWludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdmNsel92KChpbnQ4eDhfdClfX3AwLCAxOCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQzMngyX3QgdmNsel91MzIodWludDMyeDJfdCBfX3AwKSB7Ci0gIHVpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIHVpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjbHpfdigoaW50OHg4X3QpX19yZXYwLCAxOCk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MTZ4NF90IHZjbHpfdTE2KHVpbnQxNng0X3QgX19wMCkgewotICB1aW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92Y2x6X3YoKGludDh4OF90KV9fcDAsIDE3KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDE2eDRfdCB2Y2x6X3UxNih1aW50MTZ4NF90IF9fcDApIHsKLSAgdWludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgdWludDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdmNsel92KChpbnQ4eDhfdClfX3JldjAsIDE3KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDh4OF90IHZjbHpfczgoaW50OHg4X3QgX19wMCkgewotICBpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZjbHpfdigoaW50OHg4X3QpX19wMCwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDh4OF90IHZjbHpfczgoaW50OHg4X3QgX19wMCkgewotICBpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92Y2x6X3YoKGludDh4OF90KV9fcmV2MCwgMCk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQzMngyX3QgdmNsel9zMzIoaW50MzJ4Ml90IF9fcDApIHsKLSAgaW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjbHpfdigoaW50OHg4X3QpX19wMCwgMik7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDMyeDJfdCB2Y2x6X3MzMihpbnQzMngyX3QgX19wMCkgewotICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIGludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y2x6X3YoKGludDh4OF90KV9fcmV2MCwgMik7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQxNng0X3QgdmNsel9zMTYoaW50MTZ4NF90IF9fcDApIHsKLSAgaW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjbHpfdigoaW50OHg4X3QpX19wMCwgMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDE2eDRfdCB2Y2x6X3MxNihpbnQxNng0X3QgX19wMCkgewotICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIGludDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92Y2x6X3YoKGludDh4OF90KV9fcmV2MCwgMSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBwb2x5OHg4X3QgdmNudF9wOChwb2x5OHg4X3QgX19wMCkgewotICBwb2x5OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHBvbHk4eDhfdCkgX19idWlsdGluX25lb25fdmNudF92KChpbnQ4eDhfdClfX3AwLCA0KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgcG9seTh4OF90IHZjbnRfcDgocG9seTh4OF90IF9fcDApIHsKLSAgcG9seTh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBwb2x5OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHBvbHk4eDhfdCkgX19idWlsdGluX25lb25fdmNudF92KChpbnQ4eDhfdClfX3JldjAsIDQpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgcG9seTh4MTZfdCB2Y250cV9wOChwb2x5OHgxNl90IF9fcDApIHsKLSAgcG9seTh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSAocG9seTh4MTZfdCkgX19idWlsdGluX25lb25fdmNudHFfdigoaW50OHgxNl90KV9fcDAsIDM2KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgcG9seTh4MTZfdCB2Y250cV9wOChwb2x5OHgxNl90IF9fcDApIHsKLSAgcG9seTh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcG9seTh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSAocG9seTh4MTZfdCkgX19idWlsdGluX25lb25fdmNudHFfdigoaW50OHgxNl90KV9fcmV2MCwgMzYpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDh4MTZfdCB2Y250cV91OCh1aW50OHgxNl90IF9fcDApIHsKLSAgdWludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdmNudHFfdigoaW50OHgxNl90KV9fcDAsIDQ4KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDh4MTZfdCB2Y250cV91OCh1aW50OHgxNl90IF9fcDApIHsKLSAgdWludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdmNudHFfdigoaW50OHgxNl90KV9fcmV2MCwgNDgpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50OHgxNl90IHZjbnRxX3M4KGludDh4MTZfdCBfX3AwKSB7Ci0gIGludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92Y250cV92KChpbnQ4eDE2X3QpX19wMCwgMzIpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQ4eDE2X3QgdmNudHFfczgoaW50OHgxNl90IF9fcDApIHsKLSAgaW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQ4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDh4MTZfdCkgX19idWlsdGluX25lb25fdmNudHFfdigoaW50OHgxNl90KV9fcmV2MCwgMzIpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDh4OF90IHZjbnRfdTgodWludDh4OF90IF9fcDApIHsKLSAgdWludDh4OF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZjbnRfdigoaW50OHg4X3QpX19wMCwgMTYpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50OHg4X3QgdmNudF91OCh1aW50OHg4X3QgX19wMCkgewotICB1aW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92Y250X3YoKGludDh4OF90KV9fcmV2MCwgMTYpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50OHg4X3QgdmNudF9zOChpbnQ4eDhfdCBfX3AwKSB7Ci0gIGludDh4OF90IF9fcmV0OwotICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdmNudF92KChpbnQ4eDhfdClfX3AwLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50OHg4X3QgdmNudF9zOChpbnQ4eDhfdCBfX3AwKSB7Ci0gIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZjbnRfdigoaW50OHg4X3QpX19yZXYwLCAwKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHBvbHk4eDE2X3QgdmNvbWJpbmVfcDgocG9seTh4OF90IF9fcDAsIHBvbHk4eDhfdCBfX3AxKSB7Ci0gIHBvbHk4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHBvbHk4eDE2X3QgdmNvbWJpbmVfcDgocG9seTh4OF90IF9fcDAsIHBvbHk4eDhfdCBfX3AxKSB7Ci0gIHBvbHk4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcG9seTh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBwb2x5OHgxNl90IF9fcmV0OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHBvbHkxNng4X3QgdmNvbWJpbmVfcDE2KHBvbHkxNng0X3QgX19wMCwgcG9seTE2eDRfdCBfX3AxKSB7Ci0gIHBvbHkxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMCwgMSwgMiwgMywgNCwgNSwgNiwgNyk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHBvbHkxNng4X3QgdmNvbWJpbmVfcDE2KHBvbHkxNng0X3QgX19wMCwgcG9seTE2eDRfdCBfX3AxKSB7Ci0gIHBvbHkxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIHBvbHkxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7Ci0gIHBvbHkxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDh4MTZfdCB2Y29tYmluZV91OCh1aW50OHg4X3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKLSAgdWludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDh4MTZfdCB2Y29tYmluZV91OCh1aW50OHg4X3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKLSAgdWludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQ4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLV9fYWkgdWludDh4MTZfdCBfX25vc3dhcF92Y29tYmluZV91OCh1aW50OHg4X3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKLSAgdWludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MzJ4NF90IHZjb21iaW5lX3UzMih1aW50MzJ4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSkgewotICB1aW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDAsIDEsIDIsIDMpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MzJ4NF90IHZjb21iaW5lX3UzMih1aW50MzJ4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSkgewotICB1aW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICB1aW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOwotICB1aW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAwLCAxLCAyLCAzKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci1fX2FpIHVpbnQzMng0X3QgX19ub3N3YXBfdmNvbWJpbmVfdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxKSB7Ci0gIHVpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMCwgMSwgMiwgMyk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDY0eDJfdCB2Y29tYmluZV91NjQodWludDY0eDFfdCBfX3AwLCB1aW50NjR4MV90IF9fcDEpIHsKLSAgdWludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAwLCAxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDY0eDJfdCB2Y29tYmluZV91NjQodWludDY0eDFfdCBfX3AwLCB1aW50NjR4MV90IF9fcDEpIHsKLSAgdWludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAwLCAxKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQxNng4X3QgdmNvbWJpbmVfdTE2KHVpbnQxNng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxKSB7Ci0gIHVpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMCwgMSwgMiwgMywgNCwgNSwgNiwgNyk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQxNng4X3QgdmNvbWJpbmVfdTE2KHVpbnQxNng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxKSB7Ci0gIHVpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7Ci0gIHVpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLV9fYWkgdWludDE2eDhfdCBfX25vc3dhcF92Y29tYmluZV91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEpIHsKLSAgdWludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ4eDE2X3QgdmNvbWJpbmVfczgoaW50OHg4X3QgX19wMCwgaW50OHg4X3QgX19wMSkgewotICBpbnQ4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDh4MTZfdCB2Y29tYmluZV9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7Ci0gIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50OHgxNl90IF9fcmV0OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci1fX2FpIGludDh4MTZfdCBfX25vc3dhcF92Y29tYmluZV9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7Ci0gIGludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBmbG9hdDMyeDRfdCB2Y29tYmluZV9mMzIoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSkgewotICBmbG9hdDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAwLCAxLCAyLCAzKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgZmxvYXQzMng0X3QgdmNvbWJpbmVfZjMyKGZsb2F0MzJ4Ml90IF9fcDAsIGZsb2F0MzJ4Ml90IF9fcDEpIHsKLSAgZmxvYXQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIGZsb2F0MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOwotICBmbG9hdDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMCwgMSwgMiwgMyk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotX19haSBmbG9hdDMyeDRfdCBfX25vc3dhcF92Y29tYmluZV9mMzIoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSkgewotICBmbG9hdDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAwLCAxLCAyLCAzKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBmbG9hdDE2eDhfdCB2Y29tYmluZV9mMTYoZmxvYXQxNng0X3QgX19wMCwgZmxvYXQxNng0X3QgX19wMSkgewotICBmbG9hdDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgZmxvYXQxNng4X3QgdmNvbWJpbmVfZjE2KGZsb2F0MTZ4NF90IF9fcDAsIGZsb2F0MTZ4NF90IF9fcDEpIHsKLSAgZmxvYXQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIGZsb2F0MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOwotICBmbG9hdDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMCwgMSwgMiwgMywgNCwgNSwgNiwgNyk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotX19haSBmbG9hdDE2eDhfdCBfX25vc3dhcF92Y29tYmluZV9mMTYoZmxvYXQxNng0X3QgX19wMCwgZmxvYXQxNng0X3QgX19wMSkgewotICBmbG9hdDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQzMng0X3QgdmNvbWJpbmVfczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgewotICBpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMCwgMSwgMiwgMyk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDMyeDRfdCB2Y29tYmluZV9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7Ci0gIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOwotICBpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDAsIDEsIDIsIDMpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLV9fYWkgaW50MzJ4NF90IF9fbm9zd2FwX3Zjb21iaW5lX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKLSAgaW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDAsIDEsIDIsIDMpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDY0eDJfdCB2Y29tYmluZV9zNjQoaW50NjR4MV90IF9fcDAsIGludDY0eDFfdCBfX3AxKSB7Ci0gIGludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAwLCAxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50NjR4Ml90IHZjb21iaW5lX3M2NChpbnQ2NHgxX3QgX19wMCwgaW50NjR4MV90IF9fcDEpIHsKLSAgaW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDAsIDEpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MTZ4OF90IHZjb21iaW5lX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKLSAgaW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQxNng4X3QgdmNvbWJpbmVfczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgewotICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKLSAgaW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci1fX2FpIGludDE2eDhfdCBfX25vc3dhcF92Y29tYmluZV9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7Ci0gIGludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBwb2x5OHg4X3QgdmNyZWF0ZV9wOCh1aW50NjRfdCBfX3AwKSB7Ci0gIHBvbHk4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAocG9seTh4OF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgcG9seTh4OF90IHZjcmVhdGVfcDgodWludDY0X3QgX19wMCkgewotICBwb2x5OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHBvbHk4eDhfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgcG9seTE2eDRfdCB2Y3JlYXRlX3AxNih1aW50NjRfdCBfX3AwKSB7Ci0gIHBvbHkxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHBvbHkxNng0X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBwb2x5MTZ4NF90IHZjcmVhdGVfcDE2KHVpbnQ2NF90IF9fcDApIHsKLSAgcG9seTE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSAocG9seTE2eDRfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDh4OF90IHZjcmVhdGVfdTgodWludDY0X3QgX19wMCkgewotICB1aW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ4eDhfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ4eDhfdCB2Y3JlYXRlX3U4KHVpbnQ2NF90IF9fcDApIHsKLSAgdWludDh4OF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50OHg4X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQzMngyX3QgdmNyZWF0ZV91MzIodWludDY0X3QgX19wMCkgewotICB1aW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJ4Ml90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDMyeDJfdCB2Y3JlYXRlX3UzMih1aW50NjRfdCBfX3AwKSB7Ci0gIHVpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMngyX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ2NHgxX3QgdmNyZWF0ZV91NjQodWludDY0X3QgX19wMCkgewotICB1aW50NjR4MV90IF9fcmV0OwotICBfX3JldCA9ICh1aW50NjR4MV90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDY0eDFfdCB2Y3JlYXRlX3U2NCh1aW50NjRfdCBfX3AwKSB7Ci0gIHVpbnQ2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NHgxX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQxNng0X3QgdmNyZWF0ZV91MTYodWludDY0X3QgX19wMCkgewotICB1aW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MTZ4NF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDE2eDRfdCB2Y3JlYXRlX3UxNih1aW50NjRfdCBfX3AwKSB7Ci0gIHVpbnQxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQxNng0X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDh4OF90IHZjcmVhdGVfczgodWludDY0X3QgX19wMCkgewotICBpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50OHg4X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQ4eDhfdCB2Y3JlYXRlX3M4KHVpbnQ2NF90IF9fcDApIHsKLSAgaW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDh4OF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBmbG9hdDMyeDJfdCB2Y3JlYXRlX2YzMih1aW50NjRfdCBfX3AwKSB7Ci0gIGZsb2F0MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDMyeDJfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGZsb2F0MzJ4Ml90IHZjcmVhdGVfZjMyKHVpbnQ2NF90IF9fcDApIHsKLSAgZmxvYXQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBmbG9hdDE2eDRfdCB2Y3JlYXRlX2YxNih1aW50NjRfdCBfX3AwKSB7Ci0gIGZsb2F0MTZ4NF90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDE2eDRfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGZsb2F0MTZ4NF90IHZjcmVhdGVfZjE2KHVpbnQ2NF90IF9fcDApIHsKLSAgZmxvYXQxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0MTZ4NF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQzMngyX3QgdmNyZWF0ZV9zMzIodWludDY0X3QgX19wMCkgewotICBpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDMyeDJfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDMyeDJfdCB2Y3JlYXRlX3MzMih1aW50NjRfdCBfX3AwKSB7Ci0gIGludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MzJ4Ml90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ2NHgxX3QgdmNyZWF0ZV9zNjQodWludDY0X3QgX19wMCkgewotICBpbnQ2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDY0eDFfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDY0eDFfdCB2Y3JlYXRlX3M2NCh1aW50NjRfdCBfX3AwKSB7Ci0gIGludDY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50NjR4MV90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQxNng0X3QgdmNyZWF0ZV9zMTYodWludDY0X3QgX19wMCkgewotICBpbnQxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDE2eDRfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDE2eDRfdCB2Y3JlYXRlX3MxNih1aW50NjRfdCBfX3AwKSB7Ci0gIGludDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MTZ4NF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBmbG9hdDE2eDRfdCB2Y3Z0X2YxNl9mMzIoZmxvYXQzMng0X3QgX19wMCkgewotICBmbG9hdDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRfZjE2X2YzMigoaW50OHgxNl90KV9fcDAsIDgpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBmbG9hdDE2eDRfdCB2Y3Z0X2YxNl9mMzIoZmxvYXQzMng0X3QgX19wMCkgewotICBmbG9hdDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgZmxvYXQxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0X2YxNl9mMzIoKGludDh4MTZfdClfX3JldjAsIDgpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLV9fYWkgZmxvYXQxNng0X3QgX19ub3N3YXBfdmN2dF9mMTZfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKLSAgZmxvYXQxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0X2YxNl9mMzIoKGludDh4MTZfdClfX3AwLCA4KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBmbG9hdDMyeDRfdCB2Y3Z0cV9mMzJfdTMyKHVpbnQzMng0X3QgX19wMCkgewotICBmbG9hdDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRxX2YzMl92KChpbnQ4eDE2X3QpX19wMCwgNTApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBmbG9hdDMyeDRfdCB2Y3Z0cV9mMzJfdTMyKHVpbnQzMng0X3QgX19wMCkgewotICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICBmbG9hdDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRxX2YzMl92KChpbnQ4eDE2X3QpX19yZXYwLCA1MCk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBmbG9hdDMyeDRfdCB2Y3Z0cV9mMzJfczMyKGludDMyeDRfdCBfX3AwKSB7Ci0gIGZsb2F0MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDMyeDRfdCkgX19idWlsdGluX25lb25fdmN2dHFfZjMyX3YoKGludDh4MTZfdClfX3AwLCAzNCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGZsb2F0MzJ4NF90IHZjdnRxX2YzMl9zMzIoaW50MzJ4NF90IF9fcDApIHsKLSAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICBmbG9hdDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRxX2YzMl92KChpbnQ4eDE2X3QpX19yZXYwLCAzNCk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBmbG9hdDMyeDJfdCB2Y3Z0X2YzMl91MzIodWludDMyeDJfdCBfX3AwKSB7Ci0gIGZsb2F0MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDMyeDJfdCkgX19idWlsdGluX25lb25fdmN2dF9mMzJfdigoaW50OHg4X3QpX19wMCwgMTgpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBmbG9hdDMyeDJfdCB2Y3Z0X2YzMl91MzIodWludDMyeDJfdCBfX3AwKSB7Ci0gIHVpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIGZsb2F0MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDMyeDJfdCkgX19idWlsdGluX25lb25fdmN2dF9mMzJfdigoaW50OHg4X3QpX19yZXYwLCAxOCk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBmbG9hdDMyeDJfdCB2Y3Z0X2YzMl9zMzIoaW50MzJ4Ml90IF9fcDApIHsKLSAgZmxvYXQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0X2YzMl92KChpbnQ4eDhfdClfX3AwLCAyKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgZmxvYXQzMngyX3QgdmN2dF9mMzJfczMyKGludDMyeDJfdCBfX3AwKSB7Ci0gIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgZmxvYXQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0X2YzMl92KChpbnQ4eDhfdClfX3JldjAsIDIpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgZmxvYXQzMng0X3QgdmN2dF9mMzJfZjE2KGZsb2F0MTZ4NF90IF9fcDApIHsKLSAgZmxvYXQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0X2YzMl9mMTYoKGludDh4OF90KV9fcDAsIDQxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgZmxvYXQzMng0X3QgdmN2dF9mMzJfZjE2KGZsb2F0MTZ4NF90IF9fcDApIHsKLSAgZmxvYXQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIGZsb2F0MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDMyeDRfdCkgX19idWlsdGluX25lb25fdmN2dF9mMzJfZjE2KChpbnQ4eDhfdClfX3JldjAsIDQxKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci1fX2FpIGZsb2F0MzJ4NF90IF9fbm9zd2FwX3ZjdnRfZjMyX2YxNihmbG9hdDE2eDRfdCBfX3AwKSB7Ci0gIGZsb2F0MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDMyeDRfdCkgX19idWlsdGluX25lb25fdmN2dF9mMzJfZjE2KChpbnQ4eDhfdClfX3AwLCA0MSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmN2dHFfbl9mMzJfdTMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCi0gIGZsb2F0MzJ4NF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGZsb2F0MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0cV9uX2YzMl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgNTApOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmN2dHFfbl9mMzJfdTMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKLSAgZmxvYXQzMng0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoZmxvYXQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRxX25fZjMyX3YoKGludDh4MTZfdClfX3JldjAsIF9fcDEsIDUwKTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZjdnRxX25fZjMyX3MzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCi0gIGZsb2F0MzJ4NF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGZsb2F0MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0cV9uX2YzMl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgMzQpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmN2dHFfbl9mMzJfczMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCi0gIGZsb2F0MzJ4NF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGZsb2F0MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0cV9uX2YzMl92KChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxLCAzNCk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2Y3Z0X25fZjMyX3UzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDMyeDJfdCBfX3MwID0gX19wMDsgXAotICBmbG9hdDMyeDJfdCBfX3JldDsgXAotICBfX3JldCA9IChmbG9hdDMyeDJfdCkgX19idWlsdGluX25lb25fdmN2dF9uX2YzMl92KChpbnQ4eDhfdClfX3MwLCBfX3AxLCAxOCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2Y3Z0X25fZjMyX3UzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDMyeDJfdCBfX3MwID0gX19wMDsgXAotICB1aW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCi0gIGZsb2F0MzJ4Ml90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0X25fZjMyX3YoKGludDh4OF90KV9fcmV2MCwgX19wMSwgMTgpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmN2dF9uX2YzMl9zMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDMyeDJfdCBfX3MwID0gX19wMDsgXAotICBmbG9hdDMyeDJfdCBfX3JldDsgXAotICBfX3JldCA9IChmbG9hdDMyeDJfdCkgX19idWlsdGluX25lb25fdmN2dF9uX2YzMl92KChpbnQ4eDhfdClfX3MwLCBfX3AxLCAyKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZjdnRfbl9mMzJfczMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCi0gIGZsb2F0MzJ4Ml90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0X25fZjMyX3YoKGludDh4OF90KV9fcmV2MCwgX19wMSwgMik7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2Y3Z0cV9uX3MzMl9mMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0MzJ4NF90IF9fczAgPSBfX3AwOyBcCi0gIGludDMyeDRfdCBfX3JldDsgXAotICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRxX25fczMyX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCAzNCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2Y3Z0cV9uX3MzMl9mMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0MzJ4NF90IF9fczAgPSBfX3AwOyBcCi0gIGZsb2F0MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCi0gIGludDMyeDRfdCBfX3JldDsgXAotICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRxX25fczMyX3YoKGludDh4MTZfdClfX3JldjAsIF9fcDEsIDM0KTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZjdnRfbl9zMzJfZjMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDMyeDJfdCBfX3MwID0gX19wMDsgXAotICBpbnQzMngyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0X25fczMyX3YoKGludDh4OF90KV9fczAsIF9fcDEsIDIpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmN2dF9uX3MzMl9mMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0MzJ4Ml90IF9fczAgPSBfX3AwOyBcCi0gIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCi0gIGludDMyeDJfdCBfX3JldDsgXAotICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRfbl9zMzJfdigoaW50OHg4X3QpX19yZXYwLCBfX3AxLCAyKTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZjdnRxX25fdTMyX2YzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQzMng0X3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDMyeDRfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0cV9uX3UzMl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgNTApOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmN2dHFfbl91MzJfZjMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDMyeDRfdCBfX3MwID0gX19wMDsgXAotICBmbG9hdDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAotICB1aW50MzJ4NF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRxX25fdTMyX3YoKGludDh4MTZfdClfX3JldjAsIF9fcDEsIDUwKTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZjdnRfbl91MzJfZjMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDMyeDJfdCBfX3MwID0gX19wMDsgXAotICB1aW50MzJ4Ml90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRfbl91MzJfdigoaW50OHg4X3QpX19zMCwgX19wMSwgMTgpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmN2dF9uX3UzMl9mMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0MzJ4Ml90IF9fczAgPSBfX3AwOyBcCi0gIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCi0gIHVpbnQzMngyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdmN2dF9uX3UzMl92KChpbnQ4eDhfdClfX3JldjAsIF9fcDEsIDE4KTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDMyeDRfdCB2Y3Z0cV9zMzJfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKLSAgaW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRxX3MzMl92KChpbnQ4eDE2X3QpX19wMCwgMzQpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQzMng0X3QgdmN2dHFfczMyX2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7Ci0gIGZsb2F0MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICBpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdmN2dHFfczMyX3YoKGludDh4MTZfdClfX3JldjAsIDM0KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDMyeDJfdCB2Y3Z0X3MzMl9mMzIoZmxvYXQzMngyX3QgX19wMCkgewotICBpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdmN2dF9zMzJfdigoaW50OHg4X3QpX19wMCwgMik7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDMyeDJfdCB2Y3Z0X3MzMl9mMzIoZmxvYXQzMngyX3QgX19wMCkgewotICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgaW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRfczMyX3YoKGludDh4OF90KV9fcmV2MCwgMik7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MzJ4NF90IHZjdnRxX3UzMl9mMzIoZmxvYXQzMng0X3QgX19wMCkgewotICB1aW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0cV91MzJfdigoaW50OHgxNl90KV9fcDAsIDUwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDMyeDRfdCB2Y3Z0cV91MzJfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKLSAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRxX3UzMl92KChpbnQ4eDE2X3QpX19yZXYwLCA1MCk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MzJ4Ml90IHZjdnRfdTMyX2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7Ci0gIHVpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRfdTMyX3YoKGludDh4OF90KV9fcDAsIDE4KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDMyeDJfdCB2Y3Z0X3UzMl9mMzIoZmxvYXQzMngyX3QgX19wMCkgewotICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgdWludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdmN2dF91MzJfdigoaW50OHg4X3QpX19yZXYwLCAxOCk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2ZHVwX2xhbmVfcDgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHk4eDhfdCBfX3MwID0gX19wMDsgXAotICBwb2x5OHg4X3QgX19yZXQ7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZkdXBfbGFuZV9wOChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTh4OF90IF9fczAgPSBfX3AwOyBcCi0gIHBvbHk4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBwb2x5OHg4X3QgX19yZXQ7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2ZHVwX2xhbmVfcDE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBwb2x5MTZ4NF90IF9fczAgPSBfX3AwOyBcCi0gIHBvbHkxNng0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZkdXBfbGFuZV9wMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHkxNng0X3QgX19zMCA9IF9fcDA7IFwKLSAgcG9seTE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAotICBwb2x5MTZ4NF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmR1cHFfbGFuZV9wOChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTh4OF90IF9fczAgPSBfX3AwOyBcCi0gIHBvbHk4eDE2X3QgX19yZXQ7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZkdXBxX2xhbmVfcDgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHk4eDhfdCBfX3MwID0gX19wMDsgXAotICBwb2x5OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgcG9seTh4MTZfdCBfX3JldDsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxKTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZkdXBxX2xhbmVfcDE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBwb2x5MTZ4NF90IF9fczAgPSBfX3AwOyBcCi0gIHBvbHkxNng4X3QgX19yZXQ7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZkdXBxX2xhbmVfcDE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBwb2x5MTZ4NF90IF9fczAgPSBfX3AwOyBcCi0gIHBvbHkxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKLSAgcG9seTE2eDhfdCBfX3JldDsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxKTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZkdXBxX2xhbmVfdTgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ4eDhfdCBfX3MwID0gX19wMDsgXAotICB1aW50OHgxNl90IF9fcmV0OyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2ZHVwcV9sYW5lX3U4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50OHg4X3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIHVpbnQ4eDE2X3QgX19yZXQ7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2ZHVwcV9sYW5lX3UzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDMyeDJfdCBfX3MwID0gX19wMDsgXAotICB1aW50MzJ4NF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgX19wMSwgX19wMSwgX19wMSwgX19wMSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2ZHVwcV9sYW5lX3UzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDMyeDJfdCBfX3MwID0gX19wMDsgXAotICB1aW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCi0gIHVpbnQzMng0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgX19wMSwgX19wMSwgX19wMSwgX19wMSk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2ZHVwcV9sYW5lX3U2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDY0eDFfdCBfX3MwID0gX19wMDsgXAotICB1aW50NjR4Ml90IF9fcmV0OyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgX19wMSwgX19wMSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2ZHVwcV9sYW5lX3U2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDY0eDFfdCBfX3MwID0gX19wMDsgXAotICB1aW50NjR4Ml90IF9fcmV0OyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgX19wMSwgX19wMSk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2ZHVwcV9sYW5lX3UxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDE2eDRfdCBfX3MwID0gX19wMDsgXAotICB1aW50MTZ4OF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2ZHVwcV9sYW5lX3UxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDE2eDRfdCBfX3MwID0gX19wMDsgXAotICB1aW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCi0gIHVpbnQxNng4X3QgX19yZXQ7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2ZHVwcV9sYW5lX3M4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ4eDhfdCBfX3MwID0gX19wMDsgXAotICBpbnQ4eDE2X3QgX19yZXQ7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZkdXBxX2xhbmVfczgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDh4OF90IF9fczAgPSBfX3AwOyBcCi0gIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIGludDh4MTZfdCBfX3JldDsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxKTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZkdXBxX2xhbmVfZjMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDMyeDJfdCBfX3MwID0gX19wMDsgXAotICBmbG9hdDMyeDRfdCBfX3JldDsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmR1cHFfbGFuZV9mMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0MzJ4Ml90IF9fczAgPSBfX3AwOyBcCi0gIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCi0gIGZsb2F0MzJ4NF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmR1cHFfbGFuZV9zMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDMyeDJfdCBfX3MwID0gX19wMDsgXAotICBpbnQzMng0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZkdXBxX2xhbmVfczMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCi0gIGludDMyeDRfdCBfX3JldDsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxKTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZkdXBxX2xhbmVfczY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ2NHgxX3QgX19zMCA9IF9fcDA7IFwKLSAgaW50NjR4Ml90IF9fcmV0OyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgX19wMSwgX19wMSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2ZHVwcV9sYW5lX3M2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50NjR4MV90IF9fczAgPSBfX3AwOyBcCi0gIGludDY0eDJfdCBfX3JldDsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIF9fcDEsIF9fcDEpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmR1cHFfbGFuZV9zMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDE2eDRfdCBfX3MwID0gX19wMDsgXAotICBpbnQxNng4X3QgX19yZXQ7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZkdXBxX2xhbmVfczE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCi0gIGludDE2eDhfdCBfX3JldDsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxKTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZkdXBfbGFuZV91OChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDh4OF90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQ4eDhfdCBfX3JldDsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmR1cF9sYW5lX3U4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50OHg4X3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIHVpbnQ4eDhfdCBfX3JldDsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxKTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZkdXBfbGFuZV91MzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDMyeDJfdCBfX3JldDsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIF9fcDEsIF9fcDEpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmR1cF9sYW5lX3UzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDMyeDJfdCBfX3MwID0gX19wMDsgXAotICB1aW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCi0gIHVpbnQzMngyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgX19wMSwgX19wMSk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2ZHVwX2xhbmVfdTY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50NjR4MV90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQ2NHgxX3QgX19yZXQ7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCBfX3AxKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZkdXBfbGFuZV91NjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ2NHgxX3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDY0eDFfdCBfX3JldDsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIF9fcDEpOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2ZHVwX2xhbmVfdTE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQxNng0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZkdXBfbGFuZV91MTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAotICB1aW50MTZ4NF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmR1cF9sYW5lX3M4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ4eDhfdCBfX3MwID0gX19wMDsgXAotICBpbnQ4eDhfdCBfX3JldDsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmR1cF9sYW5lX3M4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ4eDhfdCBfX3MwID0gX19wMDsgXAotICBpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBpbnQ4eDhfdCBfX3JldDsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxKTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZkdXBfbGFuZV9mMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0MzJ4Ml90IF9fczAgPSBfX3AwOyBcCi0gIGZsb2F0MzJ4Ml90IF9fcmV0OyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgX19wMSwgX19wMSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2ZHVwX2xhbmVfZjMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDMyeDJfdCBfX3MwID0gX19wMDsgXAotICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAotICBmbG9hdDMyeDJfdCBfX3JldDsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCBfX3AxLCBfX3AxKTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZkdXBfbGFuZV9zMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDMyeDJfdCBfX3MwID0gX19wMDsgXAotICBpbnQzMngyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCBfX3AxLCBfX3AxKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZkdXBfbGFuZV9zMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDMyeDJfdCBfX3MwID0gX19wMDsgXAotICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKLSAgaW50MzJ4Ml90IF9fcmV0OyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIF9fcDEsIF9fcDEpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmR1cF9sYW5lX3M2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50NjR4MV90IF9fczAgPSBfX3AwOyBcCi0gIGludDY0eDFfdCBfX3JldDsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIF9fcDEpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmR1cF9sYW5lX3M2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50NjR4MV90IF9fczAgPSBfX3AwOyBcCi0gIGludDY0eDFfdCBfX3JldDsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIF9fcDEpOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2ZHVwX2xhbmVfczE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MTZ4NF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgX19wMSwgX19wMSwgX19wMSwgX19wMSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2ZHVwX2xhbmVfczE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCi0gIGludDE2eDRfdCBfX3JldDsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxKTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHBvbHk4eDhfdCB2ZHVwX25fcDgocG9seThfdCBfX3AwKSB7Ci0gIHBvbHk4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAocG9seTh4OF90KSB7X19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMH07Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHBvbHk4eDhfdCB2ZHVwX25fcDgocG9seThfdCBfX3AwKSB7Ci0gIHBvbHk4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAocG9seTh4OF90KSB7X19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMH07Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBwb2x5MTZ4NF90IHZkdXBfbl9wMTYocG9seTE2X3QgX19wMCkgewotICBwb2x5MTZ4NF90IF9fcmV0OwotICBfX3JldCA9IChwb2x5MTZ4NF90KSB7X19wMCwgX19wMCwgX19wMCwgX19wMH07Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHBvbHkxNng0X3QgdmR1cF9uX3AxNihwb2x5MTZfdCBfX3AwKSB7Ci0gIHBvbHkxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHBvbHkxNng0X3QpIHtfX3AwLCBfX3AwLCBfX3AwLCBfX3AwfTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHBvbHk4eDE2X3QgdmR1cHFfbl9wOChwb2x5OF90IF9fcDApIHsKLSAgcG9seTh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSAocG9seTh4MTZfdCkge19fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDB9OwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBwb2x5OHgxNl90IHZkdXBxX25fcDgocG9seThfdCBfX3AwKSB7Ci0gIHBvbHk4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHBvbHk4eDE2X3QpIHtfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwfTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHBvbHkxNng4X3QgdmR1cHFfbl9wMTYocG9seTE2X3QgX19wMCkgewotICBwb2x5MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IChwb2x5MTZ4OF90KSB7X19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMH07Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHBvbHkxNng4X3QgdmR1cHFfbl9wMTYocG9seTE2X3QgX19wMCkgewotICBwb2x5MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IChwb2x5MTZ4OF90KSB7X19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMH07Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50OHgxNl90IHZkdXBxX25fdTgodWludDhfdCBfX3AwKSB7Ci0gIHVpbnQ4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIHtfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwfTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDh4MTZfdCB2ZHVwcV9uX3U4KHVpbnQ4X3QgX19wMCkgewotICB1aW50OHgxNl90IF9fcmV0OwotICBfX3JldCA9ICh1aW50OHgxNl90KSB7X19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMH07Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MzJ4NF90IHZkdXBxX25fdTMyKHVpbnQzMl90IF9fcDApIHsKLSAgdWludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDMyeDRfdCkge19fcDAsIF9fcDAsIF9fcDAsIF9fcDB9OwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MzJ4NF90IHZkdXBxX25fdTMyKHVpbnQzMl90IF9fcDApIHsKLSAgdWludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDMyeDRfdCkge19fcDAsIF9fcDAsIF9fcDAsIF9fcDB9OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDY0eDJfdCB2ZHVwcV9uX3U2NCh1aW50NjRfdCBfX3AwKSB7Ci0gIHVpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIHtfX3AwLCBfX3AwfTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDY0eDJfdCB2ZHVwcV9uX3U2NCh1aW50NjRfdCBfX3AwKSB7Ci0gIHVpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIHtfX3AwLCBfX3AwfTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQxNng4X3QgdmR1cHFfbl91MTYodWludDE2X3QgX19wMCkgewotICB1aW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MTZ4OF90KSB7X19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMH07Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQxNng4X3QgdmR1cHFfbl91MTYodWludDE2X3QgX19wMCkgewotICB1aW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MTZ4OF90KSB7X19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMH07Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ4eDE2X3QgdmR1cHFfbl9zOChpbnQ4X3QgX19wMCkgewotICBpbnQ4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDh4MTZfdCkge19fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDB9OwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQ4eDE2X3QgdmR1cHFfbl9zOChpbnQ4X3QgX19wMCkgewotICBpbnQ4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDh4MTZfdCkge19fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDB9OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgZmxvYXQzMng0X3QgdmR1cHFfbl9mMzIoZmxvYXQzMl90IF9fcDApIHsKLSAgZmxvYXQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0MzJ4NF90KSB7X19wMCwgX19wMCwgX19wMCwgX19wMH07Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGZsb2F0MzJ4NF90IHZkdXBxX25fZjMyKGZsb2F0MzJfdCBfX3AwKSB7Ci0gIGZsb2F0MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDMyeDRfdCkge19fcDAsIF9fcDAsIF9fcDAsIF9fcDB9OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmR1cHFfbl9mMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0MTZfdCBfX3MwID0gX19wMDsgXAotICBmbG9hdDE2eDhfdCBfX3JldDsgXAotICBfX3JldCA9IChmbG9hdDE2eDhfdCkge19fczAsIF9fczAsIF9fczAsIF9fczAsIF9fczAsIF9fczAsIF9fczAsIF9fczB9OyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmR1cHFfbl9mMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0MTZfdCBfX3MwID0gX19wMDsgXAotICBmbG9hdDE2eDhfdCBfX3JldDsgXAotICBfX3JldCA9IChmbG9hdDE2eDhfdCkge19fczAsIF9fczAsIF9fczAsIF9fczAsIF9fczAsIF9fczAsIF9fczAsIF9fczB9OyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MzJ4NF90IHZkdXBxX25fczMyKGludDMyX3QgX19wMCkgewotICBpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDMyeDRfdCkge19fcDAsIF9fcDAsIF9fcDAsIF9fcDB9OwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQzMng0X3QgdmR1cHFfbl9zMzIoaW50MzJfdCBfX3AwKSB7Ci0gIGludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MzJ4NF90KSB7X19wMCwgX19wMCwgX19wMCwgX19wMH07Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ2NHgyX3QgdmR1cHFfbl9zNjQoaW50NjRfdCBfX3AwKSB7Ci0gIGludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50NjR4Ml90KSB7X19wMCwgX19wMH07Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDY0eDJfdCB2ZHVwcV9uX3M2NChpbnQ2NF90IF9fcDApIHsKLSAgaW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IChpbnQ2NHgyX3QpIHtfX3AwLCBfX3AwfTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDE2eDhfdCB2ZHVwcV9uX3MxNihpbnQxNl90IF9fcDApIHsKLSAgaW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IChpbnQxNng4X3QpIHtfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwfTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MTZ4OF90IHZkdXBxX25fczE2KGludDE2X3QgX19wMCkgewotICBpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDE2eDhfdCkge19fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDB9OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDh4OF90IHZkdXBfbl91OCh1aW50OF90IF9fcDApIHsKLSAgdWludDh4OF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50OHg4X3QpIHtfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwfTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDh4OF90IHZkdXBfbl91OCh1aW50OF90IF9fcDApIHsKLSAgdWludDh4OF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50OHg4X3QpIHtfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwfTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQzMngyX3QgdmR1cF9uX3UzMih1aW50MzJfdCBfX3AwKSB7Ci0gIHVpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMngyX3QpIHtfX3AwLCBfX3AwfTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDMyeDJfdCB2ZHVwX25fdTMyKHVpbnQzMl90IF9fcDApIHsKLSAgdWludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDMyeDJfdCkge19fcDAsIF9fcDB9OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDY0eDFfdCB2ZHVwX25fdTY0KHVpbnQ2NF90IF9fcDApIHsKLSAgdWludDY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDY0eDFfdCkge19fcDB9OwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50NjR4MV90IHZkdXBfbl91NjQodWludDY0X3QgX19wMCkgewotICB1aW50NjR4MV90IF9fcmV0OwotICBfX3JldCA9ICh1aW50NjR4MV90KSB7X19wMH07Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDE2eDRfdCB2ZHVwX25fdTE2KHVpbnQxNl90IF9fcDApIHsKLSAgdWludDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDE2eDRfdCkge19fcDAsIF9fcDAsIF9fcDAsIF9fcDB9OwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MTZ4NF90IHZkdXBfbl91MTYodWludDE2X3QgX19wMCkgewotICB1aW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MTZ4NF90KSB7X19wMCwgX19wMCwgX19wMCwgX19wMH07Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ4eDhfdCB2ZHVwX25fczgoaW50OF90IF9fcDApIHsKLSAgaW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDh4OF90KSB7X19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMH07Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDh4OF90IHZkdXBfbl9zOChpbnQ4X3QgX19wMCkgewotICBpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50OHg4X3QpIHtfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwfTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGZsb2F0MzJ4Ml90IHZkdXBfbl9mMzIoZmxvYXQzMl90IF9fcDApIHsKLSAgZmxvYXQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KSB7X19wMCwgX19wMH07Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGZsb2F0MzJ4Ml90IHZkdXBfbl9mMzIoZmxvYXQzMl90IF9fcDApIHsKLSAgZmxvYXQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KSB7X19wMCwgX19wMH07Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2ZHVwX25fZjE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDE2X3QgX19zMCA9IF9fcDA7IFwKLSAgZmxvYXQxNng0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoZmxvYXQxNng0X3QpIHtfX3MwLCBfX3MwLCBfX3MwLCBfX3MwfTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZkdXBfbl9mMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0MTZfdCBfX3MwID0gX19wMDsgXAotICBmbG9hdDE2eDRfdCBfX3JldDsgXAotICBfX3JldCA9IChmbG9hdDE2eDRfdCkge19fczAsIF9fczAsIF9fczAsIF9fczB9OyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MzJ4Ml90IHZkdXBfbl9zMzIoaW50MzJfdCBfX3AwKSB7Ci0gIGludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MzJ4Ml90KSB7X19wMCwgX19wMH07Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDMyeDJfdCB2ZHVwX25fczMyKGludDMyX3QgX19wMCkgewotICBpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDMyeDJfdCkge19fcDAsIF9fcDB9OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50NjR4MV90IHZkdXBfbl9zNjQoaW50NjRfdCBfX3AwKSB7Ci0gIGludDY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50NjR4MV90KSB7X19wMH07Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDY0eDFfdCB2ZHVwX25fczY0KGludDY0X3QgX19wMCkgewotICBpbnQ2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDY0eDFfdCkge19fcDB9OwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDE2eDRfdCB2ZHVwX25fczE2KGludDE2X3QgX19wMCkgewotICBpbnQxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDE2eDRfdCkge19fcDAsIF9fcDAsIF9fcDAsIF9fcDB9OwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQxNng0X3QgdmR1cF9uX3MxNihpbnQxNl90IF9fcDApIHsKLSAgaW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9IChpbnQxNng0X3QpIHtfX3AwLCBfX3AwLCBfX3AwLCBfX3AwfTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ4eDE2X3QgdmVvcnFfdTgodWludDh4MTZfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEpIHsKLSAgdWludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSBfX3AwIF4gX19wMTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDh4MTZfdCB2ZW9ycV91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgewotICB1aW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50OHgxNl90IF9fcmV0OwotICBfX3JldCA9IF9fcmV2MCBeIF9fcmV2MTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQzMng0X3QgdmVvcnFfdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7Ci0gIHVpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19wMCBeIF9fcDE7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQzMng0X3QgdmVvcnFfdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7Ci0gIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7Ci0gIHVpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19yZXYwIF4gX19yZXYxOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDY0eDJfdCB2ZW9ycV91NjQodWludDY0eDJfdCBfX3AwLCB1aW50NjR4Ml90IF9fcDEpIHsKLSAgdWludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSBfX3AwIF4gX19wMTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDY0eDJfdCB2ZW9ycV91NjQodWludDY0eDJfdCBfX3AwLCB1aW50NjR4Ml90IF9fcDEpIHsKLSAgdWludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgdWludDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKLSAgdWludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSBfX3JldjAgXiBfX3JldjE7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MTZ4OF90IHZlb3JxX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSkgewotICB1aW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IF9fcDAgXiBfX3AxOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MTZ4OF90IHZlb3JxX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSkgewotICB1aW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IF9fcmV2MCBeIF9fcmV2MTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDh4MTZfdCB2ZW9ycV9zOChpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEpIHsKLSAgaW50OHgxNl90IF9fcmV0OwotICBfX3JldCA9IF9fcDAgXiBfX3AxOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQ4eDE2X3QgdmVvcnFfczgoaW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7Ci0gIGludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQ4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19yZXYwIF4gX19yZXYxOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MzJ4NF90IHZlb3JxX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKLSAgaW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IF9fcDAgXiBfX3AxOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQzMng0X3QgdmVvcnFfczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgewotICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKLSAgaW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IF9fcmV2MCBeIF9fcmV2MTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDY0eDJfdCB2ZW9ycV9zNjQoaW50NjR4Ml90IF9fcDAsIGludDY0eDJfdCBfX3AxKSB7Ci0gIGludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSBfX3AwIF4gX19wMTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50NjR4Ml90IHZlb3JxX3M2NChpbnQ2NHgyX3QgX19wMCwgaW50NjR4Ml90IF9fcDEpIHsKLSAgaW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICBpbnQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7Ci0gIGludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSBfX3JldjAgXiBfX3JldjE7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQxNng4X3QgdmVvcnFfczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgewotICBpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19wMCBeIF9fcDE7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDE2eDhfdCB2ZW9ycV9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7Ci0gIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19yZXYwIF4gX19yZXYxOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDh4OF90IHZlb3JfdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7Ci0gIHVpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSBfX3AwIF4gX19wMTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDh4OF90IHZlb3JfdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7Ci0gIHVpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19yZXYwIF4gX19yZXYxOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDMyeDJfdCB2ZW9yX3UzMih1aW50MzJ4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSkgewotICB1aW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IF9fcDAgXiBfX3AxOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MzJ4Ml90IHZlb3JfdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxKSB7Ci0gIHVpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIHVpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7Ci0gIHVpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19yZXYwIF4gX19yZXYxOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDY0eDFfdCB2ZW9yX3U2NCh1aW50NjR4MV90IF9fcDAsIHVpbnQ2NHgxX3QgX19wMSkgewotICB1aW50NjR4MV90IF9fcmV0OwotICBfX3JldCA9IF9fcDAgXiBfX3AxOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50NjR4MV90IHZlb3JfdTY0KHVpbnQ2NHgxX3QgX19wMCwgdWludDY0eDFfdCBfX3AxKSB7Ci0gIHVpbnQ2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19wMCBeIF9fcDE7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDE2eDRfdCB2ZW9yX3UxNih1aW50MTZ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSkgewotICB1aW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9IF9fcDAgXiBfX3AxOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MTZ4NF90IHZlb3JfdTE2KHVpbnQxNng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxKSB7Ci0gIHVpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7Ci0gIHVpbnQxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19yZXYwIF4gX19yZXYxOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50OHg4X3QgdmVvcl9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7Ci0gIGludDh4OF90IF9fcmV0OwotICBfX3JldCA9IF9fcDAgXiBfX3AxOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQ4eDhfdCB2ZW9yX3M4KGludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKLSAgaW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSBfX3JldjAgXiBfX3JldjE7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQzMngyX3QgdmVvcl9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7Ci0gIGludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSBfX3AwIF4gX19wMTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MzJ4Ml90IHZlb3JfczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgewotICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIGludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKLSAgaW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IF9fcmV2MCBeIF9fcmV2MTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDY0eDFfdCB2ZW9yX3M2NChpbnQ2NHgxX3QgX19wMCwgaW50NjR4MV90IF9fcDEpIHsKLSAgaW50NjR4MV90IF9fcmV0OwotICBfX3JldCA9IF9fcDAgXiBfX3AxOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQ2NHgxX3QgdmVvcl9zNjQoaW50NjR4MV90IF9fcDAsIGludDY0eDFfdCBfX3AxKSB7Ci0gIGludDY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSBfX3AwIF4gX19wMTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQxNng0X3QgdmVvcl9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7Ci0gIGludDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSBfX3AwIF4gX19wMTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MTZ4NF90IHZlb3JfczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgewotICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKLSAgaW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9IF9fcmV2MCBeIF9fcmV2MTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZleHRfcDgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHk4eDhfdCBfX3MwID0gX19wMDsgXAotICBwb2x5OHg4X3QgX19zMSA9IF9fcDE7IFwKLSAgcG9seTh4OF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHBvbHk4eDhfdCkgX19idWlsdGluX25lb25fdmV4dF92KChpbnQ4eDhfdClfX3MwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgNCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2ZXh0X3A4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBwb2x5OHg4X3QgX19zMCA9IF9fcDA7IFwKLSAgcG9seTh4OF90IF9fczEgPSBfX3AxOyBcCi0gIHBvbHk4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBwb2x5OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgcG9seTh4OF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHBvbHk4eDhfdCkgX19idWlsdGluX25lb25fdmV4dF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIF9fcDIsIDQpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmV4dF9wMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHkxNng0X3QgX19zMCA9IF9fcDA7IFwKLSAgcG9seTE2eDRfdCBfX3MxID0gX19wMTsgXAotICBwb2x5MTZ4NF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHBvbHkxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZleHRfdigoaW50OHg4X3QpX19zMCwgKGludDh4OF90KV9fczEsIF9fcDIsIDUpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmV4dF9wMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHkxNng0X3QgX19zMCA9IF9fcDA7IFwKLSAgcG9seTE2eDRfdCBfX3MxID0gX19wMTsgXAotICBwb2x5MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCi0gIHBvbHkxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKLSAgcG9seTE2eDRfdCBfX3JldDsgXAotICBfX3JldCA9IChwb2x5MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92ZXh0X3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgX19wMiwgNSk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2ZXh0cV9wOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTh4MTZfdCBfX3MwID0gX19wMDsgXAotICBwb2x5OHgxNl90IF9fczEgPSBfX3AxOyBcCi0gIHBvbHk4eDE2X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAocG9seTh4MTZfdCkgX19idWlsdGluX25lb25fdmV4dHFfdigoaW50OHgxNl90KV9fczAsIChpbnQ4eDE2X3QpX19zMSwgX19wMiwgMzYpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmV4dHFfcDgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHk4eDE2X3QgX19zMCA9IF9fcDA7IFwKLSAgcG9seTh4MTZfdCBfX3MxID0gX19wMTsgXAotICBwb2x5OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIHBvbHk4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgcG9seTh4MTZfdCBfX3JldDsgXAotICBfX3JldCA9IChwb2x5OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92ZXh0cV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgX19wMiwgMzYpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmV4dHFfcDE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBwb2x5MTZ4OF90IF9fczAgPSBfX3AwOyBcCi0gIHBvbHkxNng4X3QgX19zMSA9IF9fcDE7IFwKLSAgcG9seTE2eDhfdCBfX3JldDsgXAotICBfX3JldCA9IChwb2x5MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92ZXh0cV92KChpbnQ4eDE2X3QpX19zMCwgKGludDh4MTZfdClfX3MxLCBfX3AyLCAzNyk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2ZXh0cV9wMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHkxNng4X3QgX19zMCA9IF9fcDA7IFwKLSAgcG9seTE2eDhfdCBfX3MxID0gX19wMTsgXAotICBwb2x5MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIHBvbHkxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgcG9seTE2eDhfdCBfX3JldDsgXAotICBfX3JldCA9IChwb2x5MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92ZXh0cV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgX19wMiwgMzcpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmV4dHFfdTgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ4eDE2X3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDh4MTZfdCBfX3MxID0gX19wMTsgXAotICB1aW50OHgxNl90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZleHRxX3YoKGludDh4MTZfdClfX3MwLCAoaW50OHgxNl90KV9fczEsIF9fcDIsIDQ4KTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZleHRxX3U4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50OHgxNl90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQ4eDE2X3QgX19zMSA9IF9fcDE7IFwKLSAgdWludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICB1aW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIHVpbnQ4eDE2X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdmV4dHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIF9fcDIsIDQ4KTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZleHRxX3UzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDMyeDRfdCBfX3MwID0gX19wMDsgXAotICB1aW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCi0gIHVpbnQzMng0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdmV4dHFfdigoaW50OHgxNl90KV9fczAsIChpbnQ4eDE2X3QpX19zMSwgX19wMiwgNTApOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmV4dHFfdTMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKLSAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAotICB1aW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCi0gIHVpbnQzMng0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdmV4dHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIF9fcDIsIDUwKTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZleHRxX3U2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDY0eDJfdCBfX3MwID0gX19wMDsgXAotICB1aW50NjR4Ml90IF9fczEgPSBfX3AxOyBcCi0gIHVpbnQ2NHgyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdmV4dHFfdigoaW50OHgxNl90KV9fczAsIChpbnQ4eDE2X3QpX19zMSwgX19wMiwgNTEpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmV4dHFfdTY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQ2NHgyX3QgX19zMSA9IF9fcDE7IFwKLSAgdWludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAotICB1aW50NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCi0gIHVpbnQ2NHgyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdmV4dHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIF9fcDIsIDUxKTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZleHRxX3UxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDE2eDhfdCBfX3MwID0gX19wMDsgXAotICB1aW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCi0gIHVpbnQxNng4X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAodWludDE2eDhfdCkgX19idWlsdGluX25lb25fdmV4dHFfdigoaW50OHgxNl90KV9fczAsIChpbnQ4eDE2X3QpX19zMSwgX19wMiwgNDkpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmV4dHFfdTE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKLSAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICB1aW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIHVpbnQxNng4X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAodWludDE2eDhfdCkgX19idWlsdGluX25lb25fdmV4dHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIF9fcDIsIDQ5KTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZleHRxX3M4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ4eDE2X3QgX19zMCA9IF9fcDA7IFwKLSAgaW50OHgxNl90IF9fczEgPSBfX3AxOyBcCi0gIGludDh4MTZfdCBfX3JldDsgXAotICBfX3JldCA9IChpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZleHRxX3YoKGludDh4MTZfdClfX3MwLCAoaW50OHgxNl90KV9fczEsIF9fcDIsIDMyKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZleHRxX3M4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ4eDE2X3QgX19zMCA9IF9fcDA7IFwKLSAgaW50OHgxNl90IF9fczEgPSBfX3AxOyBcCi0gIGludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgaW50OHgxNl90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGludDh4MTZfdCkgX19idWlsdGluX25lb25fdmV4dHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIF9fcDIsIDMyKTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZleHRxX2YzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQzMng0X3QgX19zMCA9IF9fcDA7IFwKLSAgZmxvYXQzMng0X3QgX19zMSA9IF9fcDE7IFwKLSAgZmxvYXQzMng0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoZmxvYXQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZleHRxX3YoKGludDh4MTZfdClfX3MwLCAoaW50OHgxNl90KV9fczEsIF9fcDIsIDQxKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZleHRxX2YzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQzMng0X3QgX19zMCA9IF9fcDA7IFwKLSAgZmxvYXQzMng0X3QgX19zMSA9IF9fcDE7IFwKLSAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKLSAgZmxvYXQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKLSAgZmxvYXQzMng0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoZmxvYXQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZleHRxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCBfX3AyLCA0MSk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2ZXh0cV9zMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAotICBpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKLSAgaW50MzJ4NF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdmV4dHFfdigoaW50OHgxNl90KV9fczAsIChpbnQ4eDE2X3QpX19zMSwgX19wMiwgMzQpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmV4dHFfczMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCi0gIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAotICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKLSAgaW50MzJ4NF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdmV4dHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIF9fcDIsIDM0KTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZleHRxX3M2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCi0gIGludDY0eDJfdCBfX3MxID0gX19wMTsgXAotICBpbnQ2NHgyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoaW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92ZXh0cV92KChpbnQ4eDE2X3QpX19zMCwgKGludDh4MTZfdClfX3MxLCBfX3AyLCAzNSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2ZXh0cV9zNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDY0eDJfdCBfX3MwID0gX19wMDsgXAotICBpbnQ2NHgyX3QgX19zMSA9IF9fcDE7IFwKLSAgaW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCi0gIGludDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxLCAwKTsgXAotICBpbnQ2NHgyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoaW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92ZXh0cV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgX19wMiwgMzUpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmV4dHFfczE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCi0gIGludDE2eDhfdCBfX3JldDsgXAotICBfX3JldCA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZleHRxX3YoKGludDh4MTZfdClfX3MwLCAoaW50OHgxNl90KV9fczEsIF9fcDIsIDMzKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZleHRxX3MxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCi0gIGludDE2eDhfdCBfX3MxID0gX19wMTsgXAotICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIGludDE2eDhfdCBfX3JldDsgXAotICBfX3JldCA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZleHRxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCBfX3AyLCAzMyk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2ZXh0X3U4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50OHg4X3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDh4OF90IF9fczEgPSBfX3AxOyBcCi0gIHVpbnQ4eDhfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZleHRfdigoaW50OHg4X3QpX19zMCwgKGludDh4OF90KV9fczEsIF9fcDIsIDE2KTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZleHRfdTgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ4eDhfdCBfX3MwID0gX19wMDsgXAotICB1aW50OHg4X3QgX19zMSA9IF9fcDE7IFwKLSAgdWludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIHVpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICB1aW50OHg4X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92ZXh0X3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgX19wMiwgMTYpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmV4dF91MzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDMyeDJfdCBfX3MxID0gX19wMTsgXAotICB1aW50MzJ4Ml90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZleHRfdigoaW50OHg4X3QpX19zMCwgKGludDh4OF90KV9fczEsIF9fcDIsIDE4KTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZleHRfdTMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKLSAgdWludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAotICB1aW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCi0gIHVpbnQzMngyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdmV4dF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIF9fcDIsIDE4KTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZleHRfdTY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50NjR4MV90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQ2NHgxX3QgX19zMSA9IF9fcDE7IFwKLSAgdWludDY0eDFfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92ZXh0X3YoKGludDh4OF90KV9fczAsIChpbnQ4eDhfdClfX3MxLCBfX3AyLCAxOSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2ZXh0X3U2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDY0eDFfdCBfX3MwID0gX19wMDsgXAotICB1aW50NjR4MV90IF9fczEgPSBfX3AxOyBcCi0gIHVpbnQ2NHgxX3QgX19yZXQ7IFwKLSAgX19yZXQgPSAodWludDY0eDFfdCkgX19idWlsdGluX25lb25fdmV4dF92KChpbnQ4eDhfdClfX3MwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgMTkpOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2ZXh0X3UxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDE2eDRfdCBfX3MwID0gX19wMDsgXAotICB1aW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCi0gIHVpbnQxNng0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdmV4dF92KChpbnQ4eDhfdClfX3MwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgMTcpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmV4dF91MTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDE2eDRfdCBfX3MxID0gX19wMTsgXAotICB1aW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCi0gIHVpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKLSAgdWludDE2eDRfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92ZXh0X3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgX19wMiwgMTcpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmV4dF9zOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50OHg4X3QgX19zMCA9IF9fcDA7IFwKLSAgaW50OHg4X3QgX19zMSA9IF9fcDE7IFwKLSAgaW50OHg4X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZleHRfdigoaW50OHg4X3QpX19zMCwgKGludDh4OF90KV9fczEsIF9fcDIsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmV4dF9zOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50OHg4X3QgX19zMCA9IF9fcDA7IFwKLSAgaW50OHg4X3QgX19zMSA9IF9fcDE7IFwKLSAgaW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgaW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgaW50OHg4X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZleHRfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCBfX3AyLCAwKTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZleHRfZjMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDMyeDJfdCBfX3MwID0gX19wMDsgXAotICBmbG9hdDMyeDJfdCBfX3MxID0gX19wMTsgXAotICBmbG9hdDMyeDJfdCBfX3JldDsgXAotICBfX3JldCA9IChmbG9hdDMyeDJfdCkgX19idWlsdGluX25lb25fdmV4dF92KChpbnQ4eDhfdClfX3MwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgOSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2ZXh0X2YzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQzMngyX3QgX19zMCA9IF9fcDA7IFwKLSAgZmxvYXQzMngyX3QgX19zMSA9IF9fcDE7IFwKLSAgZmxvYXQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKLSAgZmxvYXQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMSwgMCk7IFwKLSAgZmxvYXQzMngyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoZmxvYXQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZleHRfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCBfX3AyLCA5KTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZleHRfczMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCi0gIGludDMyeDJfdCBfX3JldDsgXAotICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZleHRfdigoaW50OHg4X3QpX19zMCwgKGludDh4OF90KV9fczEsIF9fcDIsIDIpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmV4dF9zMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDMyeDJfdCBfX3MwID0gX19wMDsgXAotICBpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKLSAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCi0gIGludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxLCAwKTsgXAotICBpbnQzMngyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92ZXh0X3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgX19wMiwgMik7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2ZXh0X3M2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50NjR4MV90IF9fczAgPSBfX3AwOyBcCi0gIGludDY0eDFfdCBfX3MxID0gX19wMTsgXAotICBpbnQ2NHgxX3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoaW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92ZXh0X3YoKGludDh4OF90KV9fczAsIChpbnQ4eDhfdClfX3MxLCBfX3AyLCAzKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZleHRfczY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ2NHgxX3QgX19zMCA9IF9fcDA7IFwKLSAgaW50NjR4MV90IF9fczEgPSBfX3AxOyBcCi0gIGludDY0eDFfdCBfX3JldDsgXAotICBfX3JldCA9IChpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZleHRfdigoaW50OHg4X3QpX19zMCwgKGludDh4OF90KV9fczEsIF9fcDIsIDMpOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2ZXh0X3MxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCi0gIGludDE2eDRfdCBfX3MxID0gX19wMTsgXAotICBpbnQxNng0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92ZXh0X3YoKGludDh4OF90KV9fczAsIChpbnQ4eDhfdClfX3MxLCBfX3AyLCAxKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZleHRfczE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCi0gIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAotICBpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKLSAgaW50MTZ4NF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdmV4dF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIF9fcDIsIDEpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgZmxvYXQzMng0X3QgdmZtYXFfZjMyKGZsb2F0MzJ4NF90IF9fcDAsIGZsb2F0MzJ4NF90IF9fcDEsIGZsb2F0MzJ4NF90IF9fcDIpIHsKLSAgZmxvYXQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92Zm1hcV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAoaW50OHgxNl90KV9fcDIsIDQxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgZmxvYXQzMng0X3QgdmZtYXFfZjMyKGZsb2F0MzJ4NF90IF9fcDAsIGZsb2F0MzJ4NF90IF9fcDEsIGZsb2F0MzJ4NF90IF9fcDIpIHsKLSAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIGZsb2F0MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOwotICBmbG9hdDMyeDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAzLCAyLCAxLCAwKTsKLSAgZmxvYXQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92Zm1hcV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgKGludDh4MTZfdClfX3JldjIsIDQxKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci1fX2FpIGZsb2F0MzJ4NF90IF9fbm9zd2FwX3ZmbWFxX2YzMihmbG9hdDMyeDRfdCBfX3AwLCBmbG9hdDMyeDRfdCBfX3AxLCBmbG9hdDMyeDRfdCBfX3AyKSB7Ci0gIGZsb2F0MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDMyeDRfdCkgX19idWlsdGluX25lb25fdmZtYXFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgKGludDh4MTZfdClfX3AyLCA0MSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgZmxvYXQzMngyX3QgdmZtYV9mMzIoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSwgZmxvYXQzMngyX3QgX19wMikgewotICBmbG9hdDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZmbWFfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIChpbnQ4eDhfdClfX3AyLCA5KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgZmxvYXQzMngyX3QgdmZtYV9mMzIoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSwgZmxvYXQzMngyX3QgX19wMikgewotICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgZmxvYXQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7Ci0gIGZsb2F0MzJ4Ml90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDEsIDApOwotICBmbG9hdDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZmbWFfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAoaW50OHg4X3QpX19yZXYyLCA5KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci1fX2FpIGZsb2F0MzJ4Ml90IF9fbm9zd2FwX3ZmbWFfZjMyKGZsb2F0MzJ4Ml90IF9fcDAsIGZsb2F0MzJ4Ml90IF9fcDEsIGZsb2F0MzJ4Ml90IF9fcDIpIHsKLSAgZmxvYXQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92Zm1hX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAoaW50OHg4X3QpX19wMiwgOSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgcG9seTh4OF90IHZnZXRfaGlnaF9wOChwb2x5OHgxNl90IF9fcDApIHsKLSAgcG9seTh4OF90IF9fcmV0OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBwb2x5OHg4X3QgdmdldF9oaWdoX3A4KHBvbHk4eDE2X3QgX19wMCkgewotICBwb2x5OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBwb2x5OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLV9fYWkgcG9seTh4OF90IF9fbm9zd2FwX3ZnZXRfaGlnaF9wOChwb2x5OHgxNl90IF9fcDApIHsKLSAgcG9seTh4OF90IF9fcmV0OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHBvbHkxNng0X3QgdmdldF9oaWdoX3AxNihwb2x5MTZ4OF90IF9fcDApIHsKLSAgcG9seTE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA0LCA1LCA2LCA3KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgcG9seTE2eDRfdCB2Z2V0X2hpZ2hfcDE2KHBvbHkxNng4X3QgX19wMCkgewotICBwb2x5MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBwb2x5MTZ4NF90IF9fcmV0OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCA0LCA1LCA2LCA3KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ4eDhfdCB2Z2V0X2hpZ2hfdTgodWludDh4MTZfdCBfX3AwKSB7Ci0gIHVpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDh4OF90IHZnZXRfaGlnaF91OCh1aW50OHgxNl90IF9fcDApIHsKLSAgdWludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDh4OF90IF9fcmV0OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci1fX2FpIHVpbnQ4eDhfdCBfX25vc3dhcF92Z2V0X2hpZ2hfdTgodWludDh4MTZfdCBfX3AwKSB7Ci0gIHVpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MzJ4Ml90IHZnZXRfaGlnaF91MzIodWludDMyeDRfdCBfX3AwKSB7Ci0gIHVpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMiwgMyk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQzMngyX3QgdmdldF9oaWdoX3UzMih1aW50MzJ4NF90IF9fcDApIHsKLSAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgdWludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgMiwgMyk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotX19haSB1aW50MzJ4Ml90IF9fbm9zd2FwX3ZnZXRfaGlnaF91MzIodWludDMyeDRfdCBfX3AwKSB7Ci0gIHVpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMiwgMyk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDY0eDFfdCB2Z2V0X2hpZ2hfdTY0KHVpbnQ2NHgyX3QgX19wMCkgewotICB1aW50NjR4MV90IF9fcmV0OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50NjR4MV90IHZnZXRfaGlnaF91NjQodWludDY0eDJfdCBfX3AwKSB7Ci0gIHVpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIHVpbnQ2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQxNng0X3QgdmdldF9oaWdoX3UxNih1aW50MTZ4OF90IF9fcDApIHsKLSAgdWludDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA0LCA1LCA2LCA3KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDE2eDRfdCB2Z2V0X2hpZ2hfdTE2KHVpbnQxNng4X3QgX19wMCkgewotICB1aW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCA0LCA1LCA2LCA3KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci1fX2FpIHVpbnQxNng0X3QgX19ub3N3YXBfdmdldF9oaWdoX3UxNih1aW50MTZ4OF90IF9fcDApIHsKLSAgdWludDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA0LCA1LCA2LCA3KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ4eDhfdCB2Z2V0X2hpZ2hfczgoaW50OHgxNl90IF9fcDApIHsKLSAgaW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDh4OF90IHZnZXRfaGlnaF9zOChpbnQ4eDE2X3QgX19wMCkgewotICBpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDh4OF90IF9fcmV0OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci1fX2FpIGludDh4OF90IF9fbm9zd2FwX3ZnZXRfaGlnaF9zOChpbnQ4eDE2X3QgX19wMCkgewotICBpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBmbG9hdDMyeDJfdCB2Z2V0X2hpZ2hfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKLSAgZmxvYXQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMiwgMyk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGZsb2F0MzJ4Ml90IHZnZXRfaGlnaF9mMzIoZmxvYXQzMng0X3QgX19wMCkgewotICBmbG9hdDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgZmxvYXQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIDIsIDMpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLV9fYWkgZmxvYXQzMngyX3QgX19ub3N3YXBfdmdldF9oaWdoX2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7Ci0gIGZsb2F0MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDIsIDMpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGZsb2F0MTZ4NF90IHZnZXRfaGlnaF9mMTYoZmxvYXQxNng4X3QgX19wMCkgewotICBmbG9hdDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA0LCA1LCA2LCA3KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgZmxvYXQxNng0X3QgdmdldF9oaWdoX2YxNihmbG9hdDE2eDhfdCBfX3AwKSB7Ci0gIGZsb2F0MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBmbG9hdDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgNCwgNSwgNiwgNyk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotX19haSBmbG9hdDE2eDRfdCBfX25vc3dhcF92Z2V0X2hpZ2hfZjE2KGZsb2F0MTZ4OF90IF9fcDApIHsKLSAgZmxvYXQxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNCwgNSwgNiwgNyk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MzJ4Ml90IHZnZXRfaGlnaF9zMzIoaW50MzJ4NF90IF9fcDApIHsKLSAgaW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDIsIDMpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQzMngyX3QgdmdldF9oaWdoX3MzMihpbnQzMng0X3QgX19wMCkgewotICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIGludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgMiwgMyk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotX19haSBpbnQzMngyX3QgX19ub3N3YXBfdmdldF9oaWdoX3MzMihpbnQzMng0X3QgX19wMCkgewotICBpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMiwgMyk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50NjR4MV90IHZnZXRfaGlnaF9zNjQoaW50NjR4Ml90IF9fcDApIHsKLSAgaW50NjR4MV90IF9fcmV0OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQ2NHgxX3QgdmdldF9oaWdoX3M2NChpbnQ2NHgyX3QgX19wMCkgewotICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIGludDY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MTZ4NF90IHZnZXRfaGlnaF9zMTYoaW50MTZ4OF90IF9fcDApIHsKLSAgaW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDQsIDUsIDYsIDcpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQxNng0X3QgdmdldF9oaWdoX3MxNihpbnQxNng4X3QgX19wMCkgewotICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgNCwgNSwgNiwgNyk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotX19haSBpbnQxNng0X3QgX19ub3N3YXBfdmdldF9oaWdoX3MxNihpbnQxNng4X3QgX19wMCkgewotICBpbnQxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNCwgNSwgNiwgNyk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmdldF9sYW5lX3A4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBwb2x5OHg4X3QgX19zMCA9IF9fcDA7IFwKLSAgcG9seThfdCBfX3JldDsgXAotICBfX3JldCA9IChwb2x5OF90KSBfX2J1aWx0aW5fbmVvbl92Z2V0X2xhbmVfaTgoKGludDh4OF90KV9fczAsIF9fcDEpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmdldF9sYW5lX3A4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBwb2x5OHg4X3QgX19zMCA9IF9fcDA7IFwKLSAgcG9seTh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIHBvbHk4X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAocG9seThfdCkgX19idWlsdGluX25lb25fdmdldF9sYW5lX2k4KChpbnQ4eDhfdClfX3JldjAsIF9fcDEpOyBcCi0gIF9fcmV0OyBcCi19KQotI2RlZmluZSBfX25vc3dhcF92Z2V0X2xhbmVfcDgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHk4eDhfdCBfX3MwID0gX19wMDsgXAotICBwb2x5OF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHBvbHk4X3QpIF9fYnVpbHRpbl9uZW9uX3ZnZXRfbGFuZV9pOCgoaW50OHg4X3QpX19zMCwgX19wMSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZnZXRfbGFuZV9wMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHkxNng0X3QgX19zMCA9IF9fcDA7IFwKLSAgcG9seTE2X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAocG9seTE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZnZXRfbGFuZV9pMTYoKGludDh4OF90KV9fczAsIF9fcDEpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmdldF9sYW5lX3AxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTE2eDRfdCBfX3MwID0gX19wMDsgXAotICBwb2x5MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCi0gIHBvbHkxNl90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHBvbHkxNl90KSBfX2J1aWx0aW5fbmVvbl92Z2V0X2xhbmVfaTE2KChpbnQ4eDhfdClfX3JldjAsIF9fcDEpOyBcCi0gIF9fcmV0OyBcCi19KQotI2RlZmluZSBfX25vc3dhcF92Z2V0X2xhbmVfcDE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBwb2x5MTZ4NF90IF9fczAgPSBfX3AwOyBcCi0gIHBvbHkxNl90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHBvbHkxNl90KSBfX2J1aWx0aW5fbmVvbl92Z2V0X2xhbmVfaTE2KChpbnQ4eDhfdClfX3MwLCBfX3AxKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmdldHFfbGFuZV9wOChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTh4MTZfdCBfX3MwID0gX19wMDsgXAotICBwb2x5OF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHBvbHk4X3QpIF9fYnVpbHRpbl9uZW9uX3ZnZXRxX2xhbmVfaTgoKGludDh4MTZfdClfX3MwLCBfX3AxKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZnZXRxX2xhbmVfcDgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHk4eDE2X3QgX19zMCA9IF9fcDA7IFwKLSAgcG9seTh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBwb2x5OF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHBvbHk4X3QpIF9fYnVpbHRpbl9uZW9uX3ZnZXRxX2xhbmVfaTgoKGludDh4MTZfdClfX3JldjAsIF9fcDEpOyBcCi0gIF9fcmV0OyBcCi19KQotI2RlZmluZSBfX25vc3dhcF92Z2V0cV9sYW5lX3A4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBwb2x5OHgxNl90IF9fczAgPSBfX3AwOyBcCi0gIHBvbHk4X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAocG9seThfdCkgX19idWlsdGluX25lb25fdmdldHFfbGFuZV9pOCgoaW50OHgxNl90KV9fczAsIF9fcDEpOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2Z2V0cV9sYW5lX3AxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTE2eDhfdCBfX3MwID0gX19wMDsgXAotICBwb2x5MTZfdCBfX3JldDsgXAotICBfX3JldCA9IChwb2x5MTZfdCkgX19idWlsdGluX25lb25fdmdldHFfbGFuZV9pMTYoKGludDh4MTZfdClfX3MwLCBfX3AxKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZnZXRxX2xhbmVfcDE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBwb2x5MTZ4OF90IF9fczAgPSBfX3AwOyBcCi0gIHBvbHkxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgcG9seTE2X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAocG9seTE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZnZXRxX2xhbmVfaTE2KChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxKTsgXAotICBfX3JldDsgXAotfSkKLSNkZWZpbmUgX19ub3N3YXBfdmdldHFfbGFuZV9wMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHkxNng4X3QgX19zMCA9IF9fcDA7IFwKLSAgcG9seTE2X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAocG9seTE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZnZXRxX2xhbmVfaTE2KChpbnQ4eDE2X3QpX19zMCwgX19wMSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZnZXRxX2xhbmVfdTgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ4eDE2X3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDhfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50OF90KSBfX2J1aWx0aW5fbmVvbl92Z2V0cV9sYW5lX2k4KChpbnQ4eDE2X3QpX19zMCwgX19wMSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2Z2V0cV9sYW5lX3U4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50OHgxNl90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgdWludDhfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50OF90KSBfX2J1aWx0aW5fbmVvbl92Z2V0cV9sYW5lX2k4KChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxKTsgXAotICBfX3JldDsgXAotfSkKLSNkZWZpbmUgX19ub3N3YXBfdmdldHFfbGFuZV91OChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDh4MTZfdCBfX3MwID0gX19wMDsgXAotICB1aW50OF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHVpbnQ4X3QpIF9fYnVpbHRpbl9uZW9uX3ZnZXRxX2xhbmVfaTgoKGludDh4MTZfdClfX3MwLCBfX3AxKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmdldHFfbGFuZV91MzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDMyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSAodWludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZnZXRxX2xhbmVfaTMyKChpbnQ4eDE2X3QpX19zMCwgX19wMSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2Z2V0cV9sYW5lX3UzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDMyeDRfdCBfX3MwID0gX19wMDsgXAotICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCi0gIHVpbnQzMl90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHVpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92Z2V0cV9sYW5lX2kzMigoaW50OHgxNl90KV9fcmV2MCwgX19wMSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZGVmaW5lIF9fbm9zd2FwX3ZnZXRxX2xhbmVfdTMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQzMl90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHVpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92Z2V0cV9sYW5lX2kzMigoaW50OHgxNl90KV9fczAsIF9fcDEpOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2Z2V0cV9sYW5lX3U2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDY0eDJfdCBfX3MwID0gX19wMDsgXAotICB1aW50NjRfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50NjRfdCkgX19idWlsdGluX25lb25fdmdldHFfbGFuZV9pNjQoKGludDh4MTZfdClfX3MwLCBfX3AxKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZnZXRxX2xhbmVfdTY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKLSAgdWludDY0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZnZXRxX2xhbmVfaTY0KChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxKTsgXAotICBfX3JldDsgXAotfSkKLSNkZWZpbmUgX19ub3N3YXBfdmdldHFfbGFuZV91NjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDY0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZnZXRxX2xhbmVfaTY0KChpbnQ4eDE2X3QpX19zMCwgX19wMSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZnZXRxX2xhbmVfdTE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQxNl90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHVpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92Z2V0cV9sYW5lX2kxNigoaW50OHgxNl90KV9fczAsIF9fcDEpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmdldHFfbGFuZV91MTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICB1aW50MTZfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50MTZfdCkgX19idWlsdGluX25lb25fdmdldHFfbGFuZV9pMTYoKGludDh4MTZfdClfX3JldjAsIF9fcDEpOyBcCi0gIF9fcmV0OyBcCi19KQotI2RlZmluZSBfX25vc3dhcF92Z2V0cV9sYW5lX3UxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDE2eDhfdCBfX3MwID0gX19wMDsgXAotICB1aW50MTZfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50MTZfdCkgX19idWlsdGluX25lb25fdmdldHFfbGFuZV9pMTYoKGludDh4MTZfdClfX3MwLCBfX3AxKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmdldHFfbGFuZV9zOChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50OHgxNl90IF9fczAgPSBfX3AwOyBcCi0gIGludDhfdCBfX3JldDsgXAotICBfX3JldCA9IChpbnQ4X3QpIF9fYnVpbHRpbl9uZW9uX3ZnZXRxX2xhbmVfaTgoKGludDh4MTZfdClfX3MwLCBfX3AxKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZnZXRxX2xhbmVfczgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDh4MTZfdCBfX3MwID0gX19wMDsgXAotICBpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgaW50OF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGludDhfdCkgX19idWlsdGluX25lb25fdmdldHFfbGFuZV9pOCgoaW50OHgxNl90KV9fcmV2MCwgX19wMSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZGVmaW5lIF9fbm9zd2FwX3ZnZXRxX2xhbmVfczgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDh4MTZfdCBfX3MwID0gX19wMDsgXAotICBpbnQ4X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoaW50OF90KSBfX2J1aWx0aW5fbmVvbl92Z2V0cV9sYW5lX2k4KChpbnQ4eDE2X3QpX19zMCwgX19wMSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZnZXRxX2xhbmVfZjMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDMyeDRfdCBfX3MwID0gX19wMDsgXAotICBmbG9hdDMyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoZmxvYXQzMl90KSBfX2J1aWx0aW5fbmVvbl92Z2V0cV9sYW5lX2YzMigoaW50OHgxNl90KV9fczAsIF9fcDEpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmdldHFfbGFuZV9mMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0MzJ4NF90IF9fczAgPSBfX3AwOyBcCi0gIGZsb2F0MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCi0gIGZsb2F0MzJfdCBfX3JldDsgXAotICBfX3JldCA9IChmbG9hdDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZnZXRxX2xhbmVfZjMyKChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxKTsgXAotICBfX3JldDsgXAotfSkKLSNkZWZpbmUgX19ub3N3YXBfdmdldHFfbGFuZV9mMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0MzJ4NF90IF9fczAgPSBfX3AwOyBcCi0gIGZsb2F0MzJfdCBfX3JldDsgXAotICBfX3JldCA9IChmbG9hdDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZnZXRxX2xhbmVfZjMyKChpbnQ4eDE2X3QpX19zMCwgX19wMSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZnZXRxX2xhbmVfczMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MzJfdCBfX3JldDsgXAotICBfX3JldCA9IChpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92Z2V0cV9sYW5lX2kzMigoaW50OHgxNl90KV9fczAsIF9fcDEpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmdldHFfbGFuZV9zMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAotICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKLSAgaW50MzJfdCBfX3JldDsgXAotICBfX3JldCA9IChpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92Z2V0cV9sYW5lX2kzMigoaW50OHgxNl90KV9fcmV2MCwgX19wMSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZGVmaW5lIF9fbm9zd2FwX3ZnZXRxX2xhbmVfczMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MzJfdCBfX3JldDsgXAotICBfX3JldCA9IChpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92Z2V0cV9sYW5lX2kzMigoaW50OHgxNl90KV9fczAsIF9fcDEpOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2Z2V0cV9sYW5lX3M2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCi0gIGludDY0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdmdldHFfbGFuZV9pNjQoKGludDh4MTZfdClfX3MwLCBfX3AxKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZnZXRxX2xhbmVfczY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKLSAgaW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCi0gIGludDY0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdmdldHFfbGFuZV9pNjQoKGludDh4MTZfdClfX3JldjAsIF9fcDEpOyBcCi0gIF9fcmV0OyBcCi19KQotI2RlZmluZSBfX25vc3dhcF92Z2V0cV9sYW5lX3M2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCi0gIGludDY0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdmdldHFfbGFuZV9pNjQoKGludDh4MTZfdClfX3MwLCBfX3AxKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmdldHFfbGFuZV9zMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDE2eDhfdCBfX3MwID0gX19wMDsgXAotICBpbnQxNl90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGludDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZnZXRxX2xhbmVfaTE2KChpbnQ4eDE2X3QpX19zMCwgX19wMSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2Z2V0cV9sYW5lX3MxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCi0gIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBpbnQxNl90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGludDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZnZXRxX2xhbmVfaTE2KChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxKTsgXAotICBfX3JldDsgXAotfSkKLSNkZWZpbmUgX19ub3N3YXBfdmdldHFfbGFuZV9zMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDE2eDhfdCBfX3MwID0gX19wMDsgXAotICBpbnQxNl90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGludDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZnZXRxX2xhbmVfaTE2KChpbnQ4eDE2X3QpX19zMCwgX19wMSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZnZXRfbGFuZV91OChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDh4OF90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQ4X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAodWludDhfdCkgX19idWlsdGluX25lb25fdmdldF9sYW5lX2k4KChpbnQ4eDhfdClfX3MwLCBfX3AxKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZnZXRfbGFuZV91OChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDh4OF90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICB1aW50OF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHVpbnQ4X3QpIF9fYnVpbHRpbl9uZW9uX3ZnZXRfbGFuZV9pOCgoaW50OHg4X3QpX19yZXYwLCBfX3AxKTsgXAotICBfX3JldDsgXAotfSkKLSNkZWZpbmUgX19ub3N3YXBfdmdldF9sYW5lX3U4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50OHg4X3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDhfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50OF90KSBfX2J1aWx0aW5fbmVvbl92Z2V0X2xhbmVfaTgoKGludDh4OF90KV9fczAsIF9fcDEpOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2Z2V0X2xhbmVfdTMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQzMl90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHVpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92Z2V0X2xhbmVfaTMyKChpbnQ4eDhfdClfX3MwLCBfX3AxKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZnZXRfbGFuZV91MzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAotICB1aW50MzJfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50MzJfdCkgX19idWlsdGluX25lb25fdmdldF9sYW5lX2kzMigoaW50OHg4X3QpX19yZXYwLCBfX3AxKTsgXAotICBfX3JldDsgXAotfSkKLSNkZWZpbmUgX19ub3N3YXBfdmdldF9sYW5lX3UzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDMyeDJfdCBfX3MwID0gX19wMDsgXAotICB1aW50MzJfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50MzJfdCkgX19idWlsdGluX25lb25fdmdldF9sYW5lX2kzMigoaW50OHg4X3QpX19zMCwgX19wMSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZnZXRfbGFuZV91NjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ2NHgxX3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDY0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZnZXRfbGFuZV9pNjQoKGludDh4OF90KV9fczAsIF9fcDEpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmdldF9sYW5lX3U2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDY0eDFfdCBfX3MwID0gX19wMDsgXAotICB1aW50NjRfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50NjRfdCkgX19idWlsdGluX25lb25fdmdldF9sYW5lX2k2NCgoaW50OHg4X3QpX19zMCwgX19wMSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZGVmaW5lIF9fbm9zd2FwX3ZnZXRfbGFuZV91NjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ2NHgxX3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDY0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZnZXRfbGFuZV9pNjQoKGludDh4OF90KV9fczAsIF9fcDEpOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2Z2V0X2xhbmVfdTE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQxNl90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHVpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92Z2V0X2xhbmVfaTE2KChpbnQ4eDhfdClfX3MwLCBfX3AxKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZnZXRfbGFuZV91MTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAotICB1aW50MTZfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50MTZfdCkgX19idWlsdGluX25lb25fdmdldF9sYW5lX2kxNigoaW50OHg4X3QpX19yZXYwLCBfX3AxKTsgXAotICBfX3JldDsgXAotfSkKLSNkZWZpbmUgX19ub3N3YXBfdmdldF9sYW5lX3UxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDE2eDRfdCBfX3MwID0gX19wMDsgXAotICB1aW50MTZfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50MTZfdCkgX19idWlsdGluX25lb25fdmdldF9sYW5lX2kxNigoaW50OHg4X3QpX19zMCwgX19wMSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZnZXRfbGFuZV9zOChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50OHg4X3QgX19zMCA9IF9fcDA7IFwKLSAgaW50OF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGludDhfdCkgX19idWlsdGluX25lb25fdmdldF9sYW5lX2k4KChpbnQ4eDhfdClfX3MwLCBfX3AxKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZnZXRfbGFuZV9zOChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50OHg4X3QgX19zMCA9IF9fcDA7IFwKLSAgaW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgaW50OF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGludDhfdCkgX19idWlsdGluX25lb25fdmdldF9sYW5lX2k4KChpbnQ4eDhfdClfX3JldjAsIF9fcDEpOyBcCi0gIF9fcmV0OyBcCi19KQotI2RlZmluZSBfX25vc3dhcF92Z2V0X2xhbmVfczgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDh4OF90IF9fczAgPSBfX3AwOyBcCi0gIGludDhfdCBfX3JldDsgXAotICBfX3JldCA9IChpbnQ4X3QpIF9fYnVpbHRpbl9uZW9uX3ZnZXRfbGFuZV9pOCgoaW50OHg4X3QpX19zMCwgX19wMSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZnZXRfbGFuZV9mMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0MzJ4Ml90IF9fczAgPSBfX3AwOyBcCi0gIGZsb2F0MzJfdCBfX3JldDsgXAotICBfX3JldCA9IChmbG9hdDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZnZXRfbGFuZV9mMzIoKGludDh4OF90KV9fczAsIF9fcDEpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmdldF9sYW5lX2YzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQzMngyX3QgX19zMCA9IF9fcDA7IFwKLSAgZmxvYXQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKLSAgZmxvYXQzMl90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGZsb2F0MzJfdCkgX19idWlsdGluX25lb25fdmdldF9sYW5lX2YzMigoaW50OHg4X3QpX19yZXYwLCBfX3AxKTsgXAotICBfX3JldDsgXAotfSkKLSNkZWZpbmUgX19ub3N3YXBfdmdldF9sYW5lX2YzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQzMngyX3QgX19zMCA9IF9fcDA7IFwKLSAgZmxvYXQzMl90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGZsb2F0MzJfdCkgX19idWlsdGluX25lb25fdmdldF9sYW5lX2YzMigoaW50OHg4X3QpX19zMCwgX19wMSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZnZXRfbGFuZV9zMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDMyeDJfdCBfX3MwID0gX19wMDsgXAotICBpbnQzMl90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZnZXRfbGFuZV9pMzIoKGludDh4OF90KV9fczAsIF9fcDEpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmdldF9sYW5lX3MzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCi0gIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAotICBpbnQzMl90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZnZXRfbGFuZV9pMzIoKGludDh4OF90KV9fcmV2MCwgX19wMSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZGVmaW5lIF9fbm9zd2FwX3ZnZXRfbGFuZV9zMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDMyeDJfdCBfX3MwID0gX19wMDsgXAotICBpbnQzMl90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZnZXRfbGFuZV9pMzIoKGludDh4OF90KV9fczAsIF9fcDEpOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2Z2V0X2xhbmVfczY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ2NHgxX3QgX19zMCA9IF9fcDA7IFwKLSAgaW50NjRfdCBfX3JldDsgXAotICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Z2V0X2xhbmVfaTY0KChpbnQ4eDhfdClfX3MwLCBfX3AxKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZnZXRfbGFuZV9zNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDY0eDFfdCBfX3MwID0gX19wMDsgXAotICBpbnQ2NF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZnZXRfbGFuZV9pNjQoKGludDh4OF90KV9fczAsIF9fcDEpOyBcCi0gIF9fcmV0OyBcCi19KQotI2RlZmluZSBfX25vc3dhcF92Z2V0X2xhbmVfczY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ2NHgxX3QgX19zMCA9IF9fcDA7IFwKLSAgaW50NjRfdCBfX3JldDsgXAotICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Z2V0X2xhbmVfaTY0KChpbnQ4eDhfdClfX3MwLCBfX3AxKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmdldF9sYW5lX3MxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCi0gIGludDE2X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoaW50MTZfdCkgX19idWlsdGluX25lb25fdmdldF9sYW5lX2kxNigoaW50OHg4X3QpX19zMCwgX19wMSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2Z2V0X2xhbmVfczE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCi0gIGludDE2X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoaW50MTZfdCkgX19idWlsdGluX25lb25fdmdldF9sYW5lX2kxNigoaW50OHg4X3QpX19yZXYwLCBfX3AxKTsgXAotICBfX3JldDsgXAotfSkKLSNkZWZpbmUgX19ub3N3YXBfdmdldF9sYW5lX3MxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCi0gIGludDE2X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoaW50MTZfdCkgX19idWlsdGluX25lb25fdmdldF9sYW5lX2kxNigoaW50OHg4X3QpX19zMCwgX19wMSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHBvbHk4eDhfdCB2Z2V0X2xvd19wOChwb2x5OHgxNl90IF9fcDApIHsKLSAgcG9seTh4OF90IF9fcmV0OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBwb2x5OHg4X3QgdmdldF9sb3dfcDgocG9seTh4MTZfdCBfX3AwKSB7Ci0gIHBvbHk4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHBvbHk4eDhfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgMCwgMSwgMiwgMywgNCwgNSwgNiwgNyk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBwb2x5MTZ4NF90IHZnZXRfbG93X3AxNihwb2x5MTZ4OF90IF9fcDApIHsKLSAgcG9seTE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAwLCAxLCAyLCAzKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgcG9seTE2eDRfdCB2Z2V0X2xvd19wMTYocG9seTE2eDhfdCBfX3AwKSB7Ci0gIHBvbHkxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHBvbHkxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIDAsIDEsIDIsIDMpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDh4OF90IHZnZXRfbG93X3U4KHVpbnQ4eDE2X3QgX19wMCkgewotICB1aW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMCwgMSwgMiwgMywgNCwgNSwgNiwgNyk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ4eDhfdCB2Z2V0X2xvd191OCh1aW50OHgxNl90IF9fcDApIHsKLSAgdWludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDh4OF90IF9fcmV0OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQzMngyX3QgdmdldF9sb3dfdTMyKHVpbnQzMng0X3QgX19wMCkgewotICB1aW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDAsIDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MzJ4Ml90IHZnZXRfbG93X3UzMih1aW50MzJ4NF90IF9fcDApIHsKLSAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgdWludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgMCwgMSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50NjR4MV90IHZnZXRfbG93X3U2NCh1aW50NjR4Ml90IF9fcDApIHsKLSAgdWludDY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDY0eDFfdCB2Z2V0X2xvd191NjQodWludDY0eDJfdCBfX3AwKSB7Ci0gIHVpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIHVpbnQ2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQxNng0X3QgdmdldF9sb3dfdTE2KHVpbnQxNng4X3QgX19wMCkgewotICB1aW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDAsIDEsIDIsIDMpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MTZ4NF90IHZnZXRfbG93X3UxNih1aW50MTZ4OF90IF9fcDApIHsKLSAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgMCwgMSwgMiwgMyk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ4eDhfdCB2Z2V0X2xvd19zOChpbnQ4eDE2X3QgX19wMCkgewotICBpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50OHg4X3QgdmdldF9sb3dfczgoaW50OHgxNl90IF9fcDApIHsKLSAgaW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgMCwgMSwgMiwgMywgNCwgNSwgNiwgNyk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBmbG9hdDMyeDJfdCB2Z2V0X2xvd19mMzIoZmxvYXQzMng0X3QgX19wMCkgewotICBmbG9hdDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAwLCAxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgZmxvYXQzMngyX3QgdmdldF9sb3dfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKLSAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIGZsb2F0MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCAwLCAxKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGZsb2F0MTZ4NF90IHZnZXRfbG93X2YxNihmbG9hdDE2eDhfdCBfX3AwKSB7Ci0gIGZsb2F0MTZ4NF90IF9fcmV0OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDAsIDEsIDIsIDMpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBmbG9hdDE2eDRfdCB2Z2V0X2xvd19mMTYoZmxvYXQxNng4X3QgX19wMCkgewotICBmbG9hdDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgZmxvYXQxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIDAsIDEsIDIsIDMpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MzJ4Ml90IHZnZXRfbG93X3MzMihpbnQzMng0X3QgX19wMCkgewotICBpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMCwgMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDMyeDJfdCB2Z2V0X2xvd19zMzIoaW50MzJ4NF90IF9fcDApIHsKLSAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICBpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIDAsIDEpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50NjR4MV90IHZnZXRfbG93X3M2NChpbnQ2NHgyX3QgX19wMCkgewotICBpbnQ2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDY0eDFfdCB2Z2V0X2xvd19zNjQoaW50NjR4Ml90IF9fcDApIHsKLSAgaW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICBpbnQ2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDE2eDRfdCB2Z2V0X2xvd19zMTYoaW50MTZ4OF90IF9fcDApIHsKLSAgaW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDAsIDEsIDIsIDMpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQxNng0X3QgdmdldF9sb3dfczE2KGludDE2eDhfdCBfX3AwKSB7Ci0gIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCAwLCAxLCAyLCAzKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ4eDE2X3QgdmhhZGRxX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7Ci0gIHVpbnQ4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZoYWRkcV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA0OCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ4eDE2X3QgdmhhZGRxX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7Ci0gIHVpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQ4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZoYWRkcV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNDgpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDMyeDRfdCB2aGFkZHFfdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7Ci0gIHVpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZoYWRkcV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA1MCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQzMng0X3QgdmhhZGRxX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgewotICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICB1aW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOwotICB1aW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92aGFkZHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDUwKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQxNng4X3QgdmhhZGRxX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSkgewotICB1aW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92aGFkZHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNDkpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MTZ4OF90IHZoYWRkcV91MTYodWludDE2eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEpIHsKLSAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDE2eDhfdCkgX19idWlsdGluX25lb25fdmhhZGRxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA0OSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ4eDE2X3QgdmhhZGRxX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgewotICBpbnQ4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDh4MTZfdCkgX19idWlsdGluX25lb25fdmhhZGRxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDMyKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50OHgxNl90IHZoYWRkcV9zOChpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEpIHsKLSAgaW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92aGFkZHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDMyKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDMyeDRfdCB2aGFkZHFfczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgewotICBpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdmhhZGRxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDM0KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MzJ4NF90IHZoYWRkcV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7Ci0gIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOwotICBpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdmhhZGRxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAzNCk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQxNng4X3QgdmhhZGRxX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKLSAgaW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZoYWRkcV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAzMyk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDE2eDhfdCB2aGFkZHFfczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgewotICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZoYWRkcV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMzMpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDh4OF90IHZoYWRkX3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgewotICB1aW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdmhhZGRfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDE2KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDh4OF90IHZoYWRkX3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgewotICB1aW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDh4OF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZoYWRkX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMTYpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDMyeDJfdCB2aGFkZF91MzIodWludDMyeDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEpIHsKLSAgdWludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdmhhZGRfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDE4KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDMyeDJfdCB2aGFkZF91MzIodWludDMyeDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEpIHsKLSAgdWludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgdWludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKLSAgdWludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdmhhZGRfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAxOCk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MTZ4NF90IHZoYWRkX3UxNih1aW50MTZ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSkgewotICB1aW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92aGFkZF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTcpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MTZ4NF90IHZoYWRkX3UxNih1aW50MTZ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSkgewotICB1aW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICB1aW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOwotICB1aW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92aGFkZF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDE3KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDh4OF90IHZoYWRkX3M4KGludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKLSAgaW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92aGFkZF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDh4OF90IHZoYWRkX3M4KGludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKLSAgaW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZoYWRkX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMCk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQzMngyX3QgdmhhZGRfczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgewotICBpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdmhhZGRfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDIpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQzMngyX3QgdmhhZGRfczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgewotICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIGludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKLSAgaW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZoYWRkX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMik7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQxNng0X3QgdmhhZGRfczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgewotICBpbnQxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdmhhZGRfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQxNng0X3QgdmhhZGRfczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgewotICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKLSAgaW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZoYWRkX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50OHgxNl90IHZoc3VicV91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgewotICB1aW50OHgxNl90IF9fcmV0OwotICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92aHN1YnFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNDgpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50OHgxNl90IHZoc3VicV91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgewotICB1aW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50OHgxNl90IF9fcmV0OwotICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92aHN1YnFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDQ4KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQzMng0X3QgdmhzdWJxX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgewotICB1aW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92aHN1YnFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNTApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MzJ4NF90IHZoc3VicV91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEpIHsKLSAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgdWludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKLSAgdWludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdmhzdWJxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA1MCk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MTZ4OF90IHZoc3VicV91MTYodWludDE2eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEpIHsKLSAgdWludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDE2eDhfdCkgX19idWlsdGluX25lb25fdmhzdWJxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDQ5KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDE2eDhfdCB2aHN1YnFfdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxKSB7Ci0gIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3Zoc3VicV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNDkpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50OHgxNl90IHZoc3VicV9zOChpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEpIHsKLSAgaW50OHgxNl90IF9fcmV0OwotICBfX3JldCA9IChpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3Zoc3VicV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAzMik7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDh4MTZfdCB2aHN1YnFfczgoaW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7Ci0gIGludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQ4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDh4MTZfdCkgX19idWlsdGluX25lb25fdmhzdWJxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAzMik7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQzMng0X3QgdmhzdWJxX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKLSAgaW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3Zoc3VicV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAzNCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDMyeDRfdCB2aHN1YnFfczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgewotICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKLSAgaW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3Zoc3VicV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMzQpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MTZ4OF90IHZoc3VicV9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7Ci0gIGludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92aHN1YnFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMzMpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQxNng4X3QgdmhzdWJxX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKLSAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92aHN1YnFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDMzKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ4eDhfdCB2aHN1Yl91OCh1aW50OHg4X3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKLSAgdWludDh4OF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Zoc3ViX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxNik7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ4eDhfdCB2aHN1Yl91OCh1aW50OHg4X3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKLSAgdWludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92aHN1Yl92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDE2KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQzMngyX3QgdmhzdWJfdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxKSB7Ci0gIHVpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3Zoc3ViX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxOCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQzMngyX3QgdmhzdWJfdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxKSB7Ci0gIHVpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIHVpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7Ci0gIHVpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3Zoc3ViX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMTgpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDE2eDRfdCB2aHN1Yl91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEpIHsKLSAgdWludDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdmhzdWJfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDE3KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDE2eDRfdCB2aHN1Yl91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEpIHsKLSAgdWludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgdWludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKLSAgdWludDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdmhzdWJfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAxNyk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ4eDhfdCB2aHN1Yl9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7Ci0gIGludDh4OF90IF9fcmV0OwotICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdmhzdWJfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQ4eDhfdCB2aHN1Yl9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7Ci0gIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92aHN1Yl92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDApOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MzJ4Ml90IHZoc3ViX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKLSAgaW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3Zoc3ViX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAyKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MzJ4Ml90IHZoc3ViX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKLSAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7Ci0gIGludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92aHN1Yl92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDIpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MTZ4NF90IHZoc3ViX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKLSAgaW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3Zoc3ViX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MTZ4NF90IHZoc3ViX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKLSAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICBpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7Ci0gIGludDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92aHN1Yl92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDEpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkMV9wOChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTh4OF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHBvbHk4eDhfdCkgX19idWlsdGluX25lb25fdmxkMV92KF9fcDAsIDQpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmxkMV9wOChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTh4OF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHBvbHk4eDhfdCkgX19idWlsdGluX25lb25fdmxkMV92KF9fcDAsIDQpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkMV9wMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHkxNng0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAocG9seTE2eDRfdCkgX19idWlsdGluX25lb25fdmxkMV92KF9fcDAsIDUpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmxkMV9wMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHkxNng0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAocG9seTE2eDRfdCkgX19idWlsdGluX25lb25fdmxkMV92KF9fcDAsIDUpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkMXFfcDgoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHk4eDE2X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAocG9seTh4MTZfdCkgX19idWlsdGluX25lb25fdmxkMXFfdihfX3AwLCAzNik7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQxcV9wOChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTh4MTZfdCBfX3JldDsgXAotICBfX3JldCA9IChwb2x5OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92bGQxcV92KF9fcDAsIDM2KTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZsZDFxX3AxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTE2eDhfdCBfX3JldDsgXAotICBfX3JldCA9IChwb2x5MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92bGQxcV92KF9fcDAsIDM3KTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDFxX3AxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTE2eDhfdCBfX3JldDsgXAotICBfX3JldCA9IChwb2x5MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92bGQxcV92KF9fcDAsIDM3KTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZsZDFxX3U4KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50OHgxNl90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX3YoX19wMCwgNDgpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmxkMXFfdTgoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ4eDE2X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdmxkMXFfdihfX3AwLCA0OCk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQxcV91MzIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQzMng0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdmxkMXFfdihfX3AwLCA1MCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQxcV91MzIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQzMng0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdmxkMXFfdihfX3AwLCA1MCk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQxcV91NjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ2NHgyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdmxkMXFfdihfX3AwLCA1MSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQxcV91NjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ2NHgyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdmxkMXFfdihfX3AwLCA1MSk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQxcV91MTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQxNng4X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAodWludDE2eDhfdCkgX19idWlsdGluX25lb25fdmxkMXFfdihfX3AwLCA0OSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQxcV91MTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQxNng4X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAodWludDE2eDhfdCkgX19idWlsdGluX25lb25fdmxkMXFfdihfX3AwLCA0OSk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQxcV9zOChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50OHgxNl90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGludDh4MTZfdCkgX19idWlsdGluX25lb25fdmxkMXFfdihfX3AwLCAzMik7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQxcV9zOChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50OHgxNl90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGludDh4MTZfdCkgX19idWlsdGluX25lb25fdmxkMXFfdihfX3AwLCAzMik7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQxcV9mMzIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0MzJ4NF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGZsb2F0MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92bGQxcV92KF9fcDAsIDQxKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDFxX2YzMihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQzMng0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoZmxvYXQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX3YoX19wMCwgNDEpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkMXFfZjE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDE2eDhfdCBfX3JldDsgXAotICBfX3JldCA9IChmbG9hdDE2eDhfdCkgX19idWlsdGluX25lb25fdmxkMXFfdihfX3AwLCA0MCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQxcV9mMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0MTZ4OF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGZsb2F0MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92bGQxcV92KF9fcDAsIDQwKTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZsZDFxX3MzMihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MzJ4NF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdmxkMXFfdihfX3AwLCAzNCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQxcV9zMzIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDMyeDRfdCBfX3JldDsgXAotICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX3YoX19wMCwgMzQpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkMXFfczY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ2NHgyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoaW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92bGQxcV92KF9fcDAsIDM1KTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDFxX3M2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50NjR4Ml90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGludDY0eDJfdCkgX19idWlsdGluX25lb25fdmxkMXFfdihfX3AwLCAzNSk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQxcV9zMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDE2eDhfdCBfX3JldDsgXAotICBfX3JldCA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX3YoX19wMCwgMzMpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmxkMXFfczE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQxNng4X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoaW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92bGQxcV92KF9fcDAsIDMzKTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZsZDFfdTgoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ4eDhfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFfdihfX3AwLCAxNik7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQxX3U4KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50OHg4X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92bGQxX3YoX19wMCwgMTYpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkMV91MzIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQzMngyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdmxkMV92KF9fcDAsIDE4KTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDFfdTMyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MzJ4Ml90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFfdihfX3AwLCAxOCk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQxX3U2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDY0eDFfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92bGQxX3YoX19wMCwgMTkpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmxkMV91NjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ2NHgxX3QgX19yZXQ7IFwKLSAgX19yZXQgPSAodWludDY0eDFfdCkgX19idWlsdGluX25lb25fdmxkMV92KF9fcDAsIDE5KTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkMV91MTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQxNng0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdmxkMV92KF9fcDAsIDE3KTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDFfdTE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MTZ4NF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFfdihfX3AwLCAxNyk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQxX3M4KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ4eDhfdCBfX3JldDsgXAotICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdmxkMV92KF9fcDAsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmxkMV9zOChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50OHg4X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFfdihfX3AwLCAwKTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZsZDFfZjMyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDMyeDJfdCBfX3JldDsgXAotICBfX3JldCA9IChmbG9hdDMyeDJfdCkgX19idWlsdGluX25lb25fdmxkMV92KF9fcDAsIDkpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmxkMV9mMzIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0MzJ4Ml90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92bGQxX3YoX19wMCwgOSk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQxX2YxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQxNng0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoZmxvYXQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFfdihfX3AwLCA4KTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDFfZjE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDE2eDRfdCBfX3JldDsgXAotICBfX3JldCA9IChmbG9hdDE2eDRfdCkgX19idWlsdGluX25lb25fdmxkMV92KF9fcDAsIDgpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkMV9zMzIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDMyeDJfdCBfX3JldDsgXAotICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFfdihfX3AwLCAyKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDFfczMyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQzMngyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92bGQxX3YoX19wMCwgMik7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQxX3M2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50NjR4MV90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGludDY0eDFfdCkgX19idWlsdGluX25lb25fdmxkMV92KF9fcDAsIDMpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmxkMV9zNjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDY0eDFfdCBfX3JldDsgXAotICBfX3JldCA9IChpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFfdihfX3AwLCAzKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkMV9zMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDE2eDRfdCBfX3JldDsgXAotICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFfdihfX3AwLCAxKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDFfczE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQxNng0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92bGQxX3YoX19wMCwgMSk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQxX2R1cF9wOChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTh4OF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHBvbHk4eDhfdCkgX19idWlsdGluX25lb25fdmxkMV9kdXBfdihfX3AwLCA0KTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDFfZHVwX3A4KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBwb2x5OHg4X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAocG9seTh4OF90KSBfX2J1aWx0aW5fbmVvbl92bGQxX2R1cF92KF9fcDAsIDQpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkMV9kdXBfcDE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBwb2x5MTZ4NF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHBvbHkxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFfZHVwX3YoX19wMCwgNSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQxX2R1cF9wMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHkxNng0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAocG9seTE2eDRfdCkgX19idWlsdGluX25lb25fdmxkMV9kdXBfdihfX3AwLCA1KTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZsZDFxX2R1cF9wOChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTh4MTZfdCBfX3JldDsgXAotICBfX3JldCA9IChwb2x5OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92bGQxcV9kdXBfdihfX3AwLCAzNik7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQxcV9kdXBfcDgoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHk4eDE2X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAocG9seTh4MTZfdCkgX19idWlsdGluX25lb25fdmxkMXFfZHVwX3YoX19wMCwgMzYpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkMXFfZHVwX3AxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTE2eDhfdCBfX3JldDsgXAotICBfX3JldCA9IChwb2x5MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92bGQxcV9kdXBfdihfX3AwLCAzNyk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQxcV9kdXBfcDE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBwb2x5MTZ4OF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHBvbHkxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX2R1cF92KF9fcDAsIDM3KTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZsZDFxX2R1cF91OChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDh4MTZfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92bGQxcV9kdXBfdihfX3AwLCA0OCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQxcV9kdXBfdTgoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ4eDE2X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdmxkMXFfZHVwX3YoX19wMCwgNDgpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkMXFfZHVwX3UzMihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDMyeDRfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92bGQxcV9kdXBfdihfX3AwLCA1MCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQxcV9kdXBfdTMyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MzJ4NF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX2R1cF92KF9fcDAsIDUwKTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZsZDFxX2R1cF91NjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ2NHgyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdmxkMXFfZHVwX3YoX19wMCwgNTEpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmxkMXFfZHVwX3U2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDY0eDJfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92bGQxcV9kdXBfdihfX3AwLCA1MSk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQxcV9kdXBfdTE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MTZ4OF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX2R1cF92KF9fcDAsIDQ5KTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDFxX2R1cF91MTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQxNng4X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAodWludDE2eDhfdCkgX19idWlsdGluX25lb25fdmxkMXFfZHVwX3YoX19wMCwgNDkpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkMXFfZHVwX3M4KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ4eDE2X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92bGQxcV9kdXBfdihfX3AwLCAzMik7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQxcV9kdXBfczgoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDh4MTZfdCBfX3JldDsgXAotICBfX3JldCA9IChpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX2R1cF92KF9fcDAsIDMyKTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZsZDFxX2R1cF9mMzIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0MzJ4NF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGZsb2F0MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92bGQxcV9kdXBfdihfX3AwLCA0MSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQxcV9kdXBfZjMyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDMyeDRfdCBfX3JldDsgXAotICBfX3JldCA9IChmbG9hdDMyeDRfdCkgX19idWlsdGluX25lb25fdmxkMXFfZHVwX3YoX19wMCwgNDEpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkMXFfZHVwX2YxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQxNng4X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoZmxvYXQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX2R1cF92KF9fcDAsIDQwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDFxX2R1cF9mMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0MTZ4OF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGZsb2F0MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92bGQxcV9kdXBfdihfX3AwLCA0MCk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQxcV9kdXBfczMyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQzMng0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92bGQxcV9kdXBfdihfX3AwLCAzNCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQxcV9kdXBfczMyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQzMng0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92bGQxcV9kdXBfdihfX3AwLCAzNCk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQxcV9kdXBfczY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ2NHgyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoaW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92bGQxcV9kdXBfdihfX3AwLCAzNSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQxcV9kdXBfczY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ2NHgyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoaW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92bGQxcV9kdXBfdihfX3AwLCAzNSk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQxcV9kdXBfczE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQxNng4X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoaW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92bGQxcV9kdXBfdihfX3AwLCAzMyk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQxcV9kdXBfczE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQxNng4X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoaW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92bGQxcV9kdXBfdihfX3AwLCAzMyk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQxX2R1cF91OChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDh4OF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdmxkMV9kdXBfdihfX3AwLCAxNik7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQxX2R1cF91OChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDh4OF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdmxkMV9kdXBfdihfX3AwLCAxNik7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQxX2R1cF91MzIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQzMngyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdmxkMV9kdXBfdihfX3AwLCAxOCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQxX2R1cF91MzIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQzMngyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdmxkMV9kdXBfdihfX3AwLCAxOCk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQxX2R1cF91NjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ2NHgxX3QgX19yZXQ7IFwKLSAgX19yZXQgPSAodWludDY0eDFfdCkgX19idWlsdGluX25lb25fdmxkMV9kdXBfdihfX3AwLCAxOSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQxX2R1cF91NjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ2NHgxX3QgX19yZXQ7IFwKLSAgX19yZXQgPSAodWludDY0eDFfdCkgX19idWlsdGluX25lb25fdmxkMV9kdXBfdihfX3AwLCAxOSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZsZDFfZHVwX3UxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDE2eDRfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92bGQxX2R1cF92KF9fcDAsIDE3KTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDFfZHVwX3UxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDE2eDRfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92bGQxX2R1cF92KF9fcDAsIDE3KTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZsZDFfZHVwX3M4KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ4eDhfdCBfX3JldDsgXAotICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdmxkMV9kdXBfdihfX3AwLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDFfZHVwX3M4KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ4eDhfdCBfX3JldDsgXAotICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdmxkMV9kdXBfdihfX3AwLCAwKTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZsZDFfZHVwX2YzMihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQzMngyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoZmxvYXQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFfZHVwX3YoX19wMCwgOSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQxX2R1cF9mMzIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0MzJ4Ml90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92bGQxX2R1cF92KF9fcDAsIDkpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkMV9kdXBfZjE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDE2eDRfdCBfX3JldDsgXAotICBfX3JldCA9IChmbG9hdDE2eDRfdCkgX19idWlsdGluX25lb25fdmxkMV9kdXBfdihfX3AwLCA4KTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDFfZHVwX2YxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQxNng0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoZmxvYXQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFfZHVwX3YoX19wMCwgOCk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQxX2R1cF9zMzIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDMyeDJfdCBfX3JldDsgXAotICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFfZHVwX3YoX19wMCwgMik7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQxX2R1cF9zMzIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDMyeDJfdCBfX3JldDsgXAotICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFfZHVwX3YoX19wMCwgMik7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQxX2R1cF9zNjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDY0eDFfdCBfX3JldDsgXAotICBfX3JldCA9IChpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFfZHVwX3YoX19wMCwgMyk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQxX2R1cF9zNjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDY0eDFfdCBfX3JldDsgXAotICBfX3JldCA9IChpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFfZHVwX3YoX19wMCwgMyk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZsZDFfZHVwX3MxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MTZ4NF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdmxkMV9kdXBfdihfX3AwLCAxKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDFfZHVwX3MxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MTZ4NF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdmxkMV9kdXBfdihfX3AwLCAxKTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZsZDFfbGFuZV9wOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTh4OF90IF9fczEgPSBfX3AxOyBcCi0gIHBvbHk4eDhfdCBfX3JldDsgXAotICBfX3JldCA9IChwb2x5OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFfbGFuZV92KF9fcDAsIChpbnQ4eDhfdClfX3MxLCBfX3AyLCA0KTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDFfbGFuZV9wOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTh4OF90IF9fczEgPSBfX3AxOyBcCi0gIHBvbHk4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBwb2x5OHg4X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAocG9seTh4OF90KSBfX2J1aWx0aW5fbmVvbl92bGQxX2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19yZXYxLCBfX3AyLCA0KTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZsZDFfbGFuZV9wMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHkxNng0X3QgX19zMSA9IF9fcDE7IFwKLSAgcG9seTE2eDRfdCBfX3JldDsgXAotICBfX3JldCA9IChwb2x5MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92bGQxX2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgNSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQxX2xhbmVfcDE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBwb2x5MTZ4NF90IF9fczEgPSBfX3AxOyBcCi0gIHBvbHkxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKLSAgcG9seTE2eDRfdCBfX3JldDsgXAotICBfX3JldCA9IChwb2x5MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92bGQxX2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19yZXYxLCBfX3AyLCA1KTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZsZDFxX2xhbmVfcDgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHk4eDE2X3QgX19zMSA9IF9fcDE7IFwKLSAgcG9seTh4MTZfdCBfX3JldDsgXAotICBfX3JldCA9IChwb2x5OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92bGQxcV9sYW5lX3YoX19wMCwgKGludDh4MTZfdClfX3MxLCBfX3AyLCAzNik7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQxcV9sYW5lX3A4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBwb2x5OHgxNl90IF9fczEgPSBfX3AxOyBcCi0gIHBvbHk4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgcG9seTh4MTZfdCBfX3JldDsgXAotICBfX3JldCA9IChwb2x5OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92bGQxcV9sYW5lX3YoX19wMCwgKGludDh4MTZfdClfX3JldjEsIF9fcDIsIDM2KTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZsZDFxX2xhbmVfcDE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBwb2x5MTZ4OF90IF9fczEgPSBfX3AxOyBcCi0gIHBvbHkxNng4X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAocG9seTE2eDhfdCkgX19idWlsdGluX25lb25fdmxkMXFfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19zMSwgX19wMiwgMzcpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmxkMXFfbGFuZV9wMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHkxNng4X3QgX19zMSA9IF9fcDE7IFwKLSAgcG9seTE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBwb2x5MTZ4OF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHBvbHkxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX2xhbmVfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MSwgX19wMiwgMzcpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkMXFfbGFuZV91OChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDh4MTZfdCBfX3MxID0gX19wMTsgXAotICB1aW50OHgxNl90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX2xhbmVfdihfX3AwLCAoaW50OHgxNl90KV9fczEsIF9fcDIsIDQ4KTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDFxX2xhbmVfdTgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ4eDE2X3QgX19zMSA9IF9fcDE7IFwKLSAgdWludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICB1aW50OHgxNl90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX2xhbmVfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MSwgX19wMiwgNDgpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkMXFfbGFuZV91MzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKLSAgdWludDMyeDRfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92bGQxcV9sYW5lX3YoX19wMCwgKGludDh4MTZfdClfX3MxLCBfX3AyLCA1MCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQxcV9sYW5lX3UzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDMyeDRfdCBfX3MxID0gX19wMTsgXAotICB1aW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCi0gIHVpbnQzMng0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdmxkMXFfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLCBfX3AyLCA1MCk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQxcV9sYW5lX3U2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDY0eDJfdCBfX3MxID0gX19wMTsgXAotICB1aW50NjR4Ml90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX2xhbmVfdihfX3AwLCAoaW50OHgxNl90KV9fczEsIF9fcDIsIDUxKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDFxX2xhbmVfdTY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50NjR4Ml90IF9fczEgPSBfX3AxOyBcCi0gIHVpbnQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMSwgMCk7IFwKLSAgdWludDY0eDJfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92bGQxcV9sYW5lX3YoX19wMCwgKGludDh4MTZfdClfX3JldjEsIF9fcDIsIDUxKTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZsZDFxX2xhbmVfdTE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCi0gIHVpbnQxNng4X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAodWludDE2eDhfdCkgX19idWlsdGluX25lb25fdmxkMXFfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19zMSwgX19wMiwgNDkpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmxkMXFfbGFuZV91MTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKLSAgdWludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICB1aW50MTZ4OF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX2xhbmVfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MSwgX19wMiwgNDkpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkMXFfbGFuZV9zOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50OHgxNl90IF9fczEgPSBfX3AxOyBcCi0gIGludDh4MTZfdCBfX3JldDsgXAotICBfX3JldCA9IChpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX2xhbmVfdihfX3AwLCAoaW50OHgxNl90KV9fczEsIF9fcDIsIDMyKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDFxX2xhbmVfczgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDh4MTZfdCBfX3MxID0gX19wMTsgXAotICBpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgaW50OHgxNl90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGludDh4MTZfdCkgX19idWlsdGluX25lb25fdmxkMXFfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLCBfX3AyLCAzMik7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQxcV9sYW5lX2YzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQzMng0X3QgX19zMSA9IF9fcDE7IFwKLSAgZmxvYXQzMng0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoZmxvYXQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX2xhbmVfdihfX3AwLCAoaW50OHgxNl90KV9fczEsIF9fcDIsIDQxKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDFxX2xhbmVfZjMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDMyeDRfdCBfX3MxID0gX19wMTsgXAotICBmbG9hdDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAotICBmbG9hdDMyeDRfdCBfX3JldDsgXAotICBfX3JldCA9IChmbG9hdDMyeDRfdCkgX19idWlsdGluX25lb25fdmxkMXFfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLCBfX3AyLCA0MSk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQxcV9sYW5lX2YxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQxNng4X3QgX19zMSA9IF9fcDE7IFwKLSAgZmxvYXQxNng4X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoZmxvYXQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX2xhbmVfdihfX3AwLCAoaW50OHgxNl90KV9fczEsIF9fcDIsIDQwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDFxX2xhbmVfZjE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDE2eDhfdCBfX3MxID0gX19wMTsgXAotICBmbG9hdDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBmbG9hdDE2eDhfdCBfX3JldDsgXAotICBfX3JldCA9IChmbG9hdDE2eDhfdCkgX19idWlsdGluX25lb25fdmxkMXFfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLCBfX3AyLCA0MCk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQxcV9sYW5lX3MzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCi0gIGludDMyeDRfdCBfX3JldDsgXAotICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX2xhbmVfdihfX3AwLCAoaW50OHgxNl90KV9fczEsIF9fcDIsIDM0KTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDFxX2xhbmVfczMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKLSAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCi0gIGludDMyeDRfdCBfX3JldDsgXAotICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX2xhbmVfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MSwgX19wMiwgMzQpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkMXFfbGFuZV9zNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDY0eDJfdCBfX3MxID0gX19wMTsgXAotICBpbnQ2NHgyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoaW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92bGQxcV9sYW5lX3YoX19wMCwgKGludDh4MTZfdClfX3MxLCBfX3AyLCAzNSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQxcV9sYW5lX3M2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50NjR4Ml90IF9fczEgPSBfX3AxOyBcCi0gIGludDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxLCAwKTsgXAotICBpbnQ2NHgyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoaW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92bGQxcV9sYW5lX3YoX19wMCwgKGludDh4MTZfdClfX3JldjEsIF9fcDIsIDM1KTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZsZDFxX2xhbmVfczE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKLSAgaW50MTZ4OF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGludDE2eDhfdCkgX19idWlsdGluX25lb25fdmxkMXFfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19zMSwgX19wMiwgMzMpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmxkMXFfbGFuZV9zMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDE2eDhfdCBfX3MxID0gX19wMTsgXAotICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgaW50MTZ4OF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGludDE2eDhfdCkgX19idWlsdGluX25lb25fdmxkMXFfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLCBfX3AyLCAzMyk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQxX2xhbmVfdTgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ4eDhfdCBfX3MxID0gX19wMTsgXAotICB1aW50OHg4X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92bGQxX2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgMTYpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmxkMV9sYW5lX3U4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50OHg4X3QgX19zMSA9IF9fcDE7IFwKLSAgdWludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIHVpbnQ4eDhfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFfbGFuZV92KF9fcDAsIChpbnQ4eDhfdClfX3JldjEsIF9fcDIsIDE2KTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZsZDFfbGFuZV91MzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKLSAgdWludDMyeDJfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92bGQxX2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgMTgpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmxkMV9sYW5lX3UzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDMyeDJfdCBfX3MxID0gX19wMTsgXAotICB1aW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCi0gIHVpbnQzMngyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdmxkMV9sYW5lX3YoX19wMCwgKGludDh4OF90KV9fcmV2MSwgX19wMiwgMTgpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkMV9sYW5lX3U2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDY0eDFfdCBfX3MxID0gX19wMTsgXAotICB1aW50NjR4MV90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFfbGFuZV92KF9fcDAsIChpbnQ4eDhfdClfX3MxLCBfX3AyLCAxOSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQxX2xhbmVfdTY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50NjR4MV90IF9fczEgPSBfX3AxOyBcCi0gIHVpbnQ2NHgxX3QgX19yZXQ7IFwKLSAgX19yZXQgPSAodWludDY0eDFfdCkgX19idWlsdGluX25lb25fdmxkMV9sYW5lX3YoX19wMCwgKGludDh4OF90KV9fczEsIF9fcDIsIDE5KTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkMV9sYW5lX3UxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDE2eDRfdCBfX3MxID0gX19wMTsgXAotICB1aW50MTZ4NF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFfbGFuZV92KF9fcDAsIChpbnQ4eDhfdClfX3MxLCBfX3AyLCAxNyk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQxX2xhbmVfdTE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCi0gIHVpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKLSAgdWludDE2eDRfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92bGQxX2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19yZXYxLCBfX3AyLCAxNyk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQxX2xhbmVfczgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDh4OF90IF9fczEgPSBfX3AxOyBcCi0gIGludDh4OF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92bGQxX2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQxX2xhbmVfczgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDh4OF90IF9fczEgPSBfX3AxOyBcCi0gIGludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIGludDh4OF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92bGQxX2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19yZXYxLCBfX3AyLCAwKTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZsZDFfbGFuZV9mMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0MzJ4Ml90IF9fczEgPSBfX3AxOyBcCi0gIGZsb2F0MzJ4Ml90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92bGQxX2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgOSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQxX2xhbmVfZjMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDMyeDJfdCBfX3MxID0gX19wMTsgXAotICBmbG9hdDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxLCAwKTsgXAotICBmbG9hdDMyeDJfdCBfX3JldDsgXAotICBfX3JldCA9IChmbG9hdDMyeDJfdCkgX19idWlsdGluX25lb25fdmxkMV9sYW5lX3YoX19wMCwgKGludDh4OF90KV9fcmV2MSwgX19wMiwgOSk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQxX2xhbmVfZjE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDE2eDRfdCBfX3MxID0gX19wMTsgXAotICBmbG9hdDE2eDRfdCBfX3JldDsgXAotICBfX3JldCA9IChmbG9hdDE2eDRfdCkgX19idWlsdGluX25lb25fdmxkMV9sYW5lX3YoX19wMCwgKGludDh4OF90KV9fczEsIF9fcDIsIDgpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmxkMV9sYW5lX2YxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQxNng0X3QgX19zMSA9IF9fcDE7IFwKLSAgZmxvYXQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKLSAgZmxvYXQxNng0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoZmxvYXQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFfbGFuZV92KF9fcDAsIChpbnQ4eDhfdClfX3JldjEsIF9fcDIsIDgpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkMV9sYW5lX3MzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCi0gIGludDMyeDJfdCBfX3JldDsgXAotICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFfbGFuZV92KF9fcDAsIChpbnQ4eDhfdClfX3MxLCBfX3AyLCAyKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDFfbGFuZV9zMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDMyeDJfdCBfX3MxID0gX19wMTsgXAotICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMSwgMCk7IFwKLSAgaW50MzJ4Ml90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdmxkMV9sYW5lX3YoX19wMCwgKGludDh4OF90KV9fcmV2MSwgX19wMiwgMik7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQxX2xhbmVfczY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ2NHgxX3QgX19zMSA9IF9fcDE7IFwKLSAgaW50NjR4MV90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGludDY0eDFfdCkgX19idWlsdGluX25lb25fdmxkMV9sYW5lX3YoX19wMCwgKGludDh4OF90KV9fczEsIF9fcDIsIDMpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmxkMV9sYW5lX3M2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50NjR4MV90IF9fczEgPSBfX3AxOyBcCi0gIGludDY0eDFfdCBfX3JldDsgXAotICBfX3JldCA9IChpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFfbGFuZV92KF9fcDAsIChpbnQ4eDhfdClfX3MxLCBfX3AyLCAzKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkMV9sYW5lX3MxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCi0gIGludDE2eDRfdCBfX3JldDsgXAotICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFfbGFuZV92KF9fcDAsIChpbnQ4eDhfdClfX3MxLCBfX3AyLCAxKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDFfbGFuZV9zMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDE2eDRfdCBfX3MxID0gX19wMTsgXAotICBpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKLSAgaW50MTZ4NF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdmxkMV9sYW5lX3YoX19wMCwgKGludDh4OF90KV9fcmV2MSwgX19wMiwgMSk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQyX3A4KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBwb2x5OHg4eDJfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQyX3YoJl9fcmV0LCBfX3AwLCA0KTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDJfcDgoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHk4eDh4Ml90IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDJfdigmX19yZXQsIF9fcDAsIDQpOyBcCi0gXAotICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQyX3AxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTE2eDR4Ml90IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDJfdigmX19yZXQsIF9fcDAsIDUpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmxkMl9wMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHkxNng0eDJfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQyX3YoJl9fcmV0LCBfX3AwLCA1KTsgXAotIFwKLSAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkMnFfcDgoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHk4eDE2eDJfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQycV92KCZfX3JldCwgX19wMCwgMzYpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmxkMnFfcDgoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHk4eDE2eDJfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQycV92KCZfX3JldCwgX19wMCwgMzYpOyBcCi0gXAotICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQycV9wMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHkxNng4eDJfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQycV92KCZfX3JldCwgX19wMCwgMzcpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmxkMnFfcDE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBwb2x5MTZ4OHgyX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkMnFfdigmX19yZXQsIF9fcDAsIDM3KTsgXAotIFwKLSAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkMnFfdTgoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ4eDE2eDJfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQycV92KCZfX3JldCwgX19wMCwgNDgpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmxkMnFfdTgoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ4eDE2eDJfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQycV92KCZfX3JldCwgX19wMCwgNDgpOyBcCi0gXAotICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQycV91MzIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQzMng0eDJfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQycV92KCZfX3JldCwgX19wMCwgNTApOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmxkMnFfdTMyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MzJ4NHgyX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkMnFfdigmX19yZXQsIF9fcDAsIDUwKTsgXAotIFwKLSAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkMnFfdTE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MTZ4OHgyX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkMnFfdigmX19yZXQsIF9fcDAsIDQ5KTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDJxX3UxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDE2eDh4Ml90IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDJxX3YoJl9fcmV0LCBfX3AwLCA0OSk7IFwKLSBcCi0gIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZsZDJxX3M4KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ4eDE2eDJfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQycV92KCZfX3JldCwgX19wMCwgMzIpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmxkMnFfczgoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDh4MTZ4Ml90IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDJxX3YoJl9fcmV0LCBfX3AwLCAzMik7IFwKLSBcCi0gIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZsZDJxX2YzMihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQzMng0eDJfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQycV92KCZfX3JldCwgX19wMCwgNDEpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmxkMnFfZjMyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDMyeDR4Ml90IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDJxX3YoJl9fcmV0LCBfX3AwLCA0MSk7IFwKLSBcCi0gIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAotICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZsZDJxX2YxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQxNng4eDJfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQycV92KCZfX3JldCwgX19wMCwgNDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmxkMnFfZjE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDE2eDh4Ml90IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDJxX3YoJl9fcmV0LCBfX3AwLCA0MCk7IFwKLSBcCi0gIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZsZDJxX3MzMihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MzJ4NHgyX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkMnFfdigmX19yZXQsIF9fcDAsIDM0KTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDJxX3MzMihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MzJ4NHgyX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkMnFfdigmX19yZXQsIF9fcDAsIDM0KTsgXAotIFwKLSAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkMnFfczE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQxNng4eDJfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQycV92KCZfX3JldCwgX19wMCwgMzMpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmxkMnFfczE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQxNng4eDJfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQycV92KCZfX3JldCwgX19wMCwgMzMpOyBcCi0gXAotICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQyX3U4KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50OHg4eDJfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQyX3YoJl9fcmV0LCBfX3AwLCAxNik7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQyX3U4KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50OHg4eDJfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQyX3YoJl9fcmV0LCBfX3AwLCAxNik7IFwKLSBcCi0gIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZsZDJfdTMyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MzJ4MngyX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkMl92KCZfX3JldCwgX19wMCwgMTgpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmxkMl91MzIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQzMngyeDJfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQyX3YoJl9fcmV0LCBfX3AwLCAxOCk7IFwKLSBcCi0gIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxLCAwKTsgXAotICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZsZDJfdTY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50NjR4MXgyX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkMl92KCZfX3JldCwgX19wMCwgMTkpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmxkMl91NjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ2NHgxeDJfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQyX3YoJl9fcmV0LCBfX3AwLCAxOSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZsZDJfdTE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MTZ4NHgyX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkMl92KCZfX3JldCwgX19wMCwgMTcpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmxkMl91MTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQxNng0eDJfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQyX3YoJl9fcmV0LCBfX3AwLCAxNyk7IFwKLSBcCi0gIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAotICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZsZDJfczgoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDh4OHgyX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkMl92KCZfX3JldCwgX19wMCwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQyX3M4KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ4eDh4Ml90IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDJfdigmX19yZXQsIF9fcDAsIDApOyBcCi0gXAotICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQyX2YzMihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQzMngyeDJfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQyX3YoJl9fcmV0LCBfX3AwLCA5KTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDJfZjMyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDMyeDJ4Ml90IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDJfdigmX19yZXQsIF9fcDAsIDkpOyBcCi0gXAotICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQyX2YxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQxNng0eDJfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQyX3YoJl9fcmV0LCBfX3AwLCA4KTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDJfZjE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDE2eDR4Ml90IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDJfdigmX19yZXQsIF9fcDAsIDgpOyBcCi0gXAotICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQyX3MzMihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MzJ4MngyX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkMl92KCZfX3JldCwgX19wMCwgMik7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQyX3MzMihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MzJ4MngyX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkMl92KCZfX3JldCwgX19wMCwgMik7IFwKLSBcCi0gIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxLCAwKTsgXAotICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZsZDJfczY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ2NHgxeDJfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQyX3YoJl9fcmV0LCBfX3AwLCAzKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDJfczY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ2NHgxeDJfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQyX3YoJl9fcmV0LCBfX3AwLCAzKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkMl9zMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDE2eDR4Ml90IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDJfdigmX19yZXQsIF9fcDAsIDEpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmxkMl9zMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDE2eDR4Ml90IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDJfdigmX19yZXQsIF9fcDAsIDEpOyBcCi0gXAotICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQyX2R1cF9wOChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTh4OHgyX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkMl9kdXBfdigmX19yZXQsIF9fcDAsIDQpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmxkMl9kdXBfcDgoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHk4eDh4Ml90IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDJfZHVwX3YoJl9fcmV0LCBfX3AwLCA0KTsgXAotIFwKLSAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkMl9kdXBfcDE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBwb2x5MTZ4NHgyX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkMl9kdXBfdigmX19yZXQsIF9fcDAsIDUpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmxkMl9kdXBfcDE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBwb2x5MTZ4NHgyX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkMl9kdXBfdigmX19yZXQsIF9fcDAsIDUpOyBcCi0gXAotICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQyX2R1cF91OChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDh4OHgyX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkMl9kdXBfdigmX19yZXQsIF9fcDAsIDE2KTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDJfZHVwX3U4KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50OHg4eDJfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQyX2R1cF92KCZfX3JldCwgX19wMCwgMTYpOyBcCi0gXAotICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQyX2R1cF91MzIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQzMngyeDJfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQyX2R1cF92KCZfX3JldCwgX19wMCwgMTgpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmxkMl9kdXBfdTMyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MzJ4MngyX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkMl9kdXBfdigmX19yZXQsIF9fcDAsIDE4KTsgXAotIFwKLSAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkMl9kdXBfdTY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50NjR4MXgyX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkMl9kdXBfdigmX19yZXQsIF9fcDAsIDE5KTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDJfZHVwX3U2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDY0eDF4Ml90IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDJfZHVwX3YoJl9fcmV0LCBfX3AwLCAxOSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZsZDJfZHVwX3UxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDE2eDR4Ml90IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDJfZHVwX3YoJl9fcmV0LCBfX3AwLCAxNyk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQyX2R1cF91MTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQxNng0eDJfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQyX2R1cF92KCZfX3JldCwgX19wMCwgMTcpOyBcCi0gXAotICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQyX2R1cF9zOChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50OHg4eDJfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQyX2R1cF92KCZfX3JldCwgX19wMCwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQyX2R1cF9zOChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50OHg4eDJfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQyX2R1cF92KCZfX3JldCwgX19wMCwgMCk7IFwKLSBcCi0gIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZsZDJfZHVwX2YzMihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQzMngyeDJfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQyX2R1cF92KCZfX3JldCwgX19wMCwgOSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQyX2R1cF9mMzIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0MzJ4MngyX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkMl9kdXBfdigmX19yZXQsIF9fcDAsIDkpOyBcCi0gXAotICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQyX2R1cF9mMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0MTZ4NHgyX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkMl9kdXBfdigmX19yZXQsIF9fcDAsIDgpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmxkMl9kdXBfZjE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDE2eDR4Ml90IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDJfZHVwX3YoJl9fcmV0LCBfX3AwLCA4KTsgXAotIFwKLSAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkMl9kdXBfczMyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQzMngyeDJfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQyX2R1cF92KCZfX3JldCwgX19wMCwgMik7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQyX2R1cF9zMzIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDMyeDJ4Ml90IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDJfZHVwX3YoJl9fcmV0LCBfX3AwLCAyKTsgXAotIFwKLSAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkMl9kdXBfczY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ2NHgxeDJfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQyX2R1cF92KCZfX3JldCwgX19wMCwgMyk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQyX2R1cF9zNjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDY0eDF4Ml90IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDJfZHVwX3YoJl9fcmV0LCBfX3AwLCAzKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkMl9kdXBfczE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQxNng0eDJfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQyX2R1cF92KCZfX3JldCwgX19wMCwgMSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQyX2R1cF9zMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDE2eDR4Ml90IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDJfZHVwX3YoJl9fcmV0LCBfX3AwLCAxKTsgXAotIFwKLSAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkMl9sYW5lX3A4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBwb2x5OHg4eDJfdCBfX3MxID0gX19wMTsgXAotICBwb2x5OHg4eDJfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQyX2xhbmVfdigmX19yZXQsIF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCBfX3AyLCA0KTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDJfbGFuZV9wOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTh4OHgyX3QgX19zMSA9IF9fcDE7IFwKLSAgcG9seTh4OHgyX3QgX19yZXYxOyBcCi0gIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIHBvbHk4eDh4Ml90IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDJfbGFuZV92KCZfX3JldCwgX19wMCwgKGludDh4OF90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDhfdClfX3JldjEudmFsWzFdLCBfX3AyLCA0KTsgXAotIFwKLSAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkMl9sYW5lX3AxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTE2eDR4Ml90IF9fczEgPSBfX3AxOyBcCi0gIHBvbHkxNng0eDJfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQyX2xhbmVfdigmX19yZXQsIF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCBfX3AyLCA1KTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDJfbGFuZV9wMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHkxNng0eDJfdCBfX3MxID0gX19wMTsgXAotICBwb2x5MTZ4NHgyX3QgX19yZXYxOyBcCi0gIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDMsIDIsIDEsIDApOyBcCi0gIHBvbHkxNng0eDJfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQyX2xhbmVfdigmX19yZXQsIF9fcDAsIChpbnQ4eDhfdClfX3JldjEudmFsWzBdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsxXSwgX19wMiwgNSk7IFwKLSBcCi0gIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAotICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZsZDJxX2xhbmVfcDE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBwb2x5MTZ4OHgyX3QgX19zMSA9IF9fcDE7IFwKLSAgcG9seTE2eDh4Ml90IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDJxX2xhbmVfdigmX19yZXQsIF9fcDAsIChpbnQ4eDE2X3QpX19zMS52YWxbMF0sIChpbnQ4eDE2X3QpX19zMS52YWxbMV0sIF9fcDIsIDM3KTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDJxX2xhbmVfcDE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBwb2x5MTZ4OHgyX3QgX19zMSA9IF9fcDE7IFwKLSAgcG9seTE2eDh4Ml90IF9fcmV2MTsgXAotICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBwb2x5MTZ4OHgyX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkMnFfbGFuZV92KCZfX3JldCwgX19wMCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIF9fcDIsIDM3KTsgXAotIFwKLSAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkMnFfbGFuZV91MzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQzMng0eDJfdCBfX3MxID0gX19wMTsgXAotICB1aW50MzJ4NHgyX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkMnFfbGFuZV92KCZfX3JldCwgX19wMCwgKGludDh4MTZfdClfX3MxLnZhbFswXSwgKGludDh4MTZfdClfX3MxLnZhbFsxXSwgX19wMiwgNTApOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmxkMnFfbGFuZV91MzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQzMng0eDJfdCBfX3MxID0gX19wMTsgXAotICB1aW50MzJ4NHgyX3QgX19yZXYxOyBcCi0gIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDMsIDIsIDEsIDApOyBcCi0gIHVpbnQzMng0eDJfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQycV9sYW5lX3YoJl9fcmV0LCBfX3AwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgX19wMiwgNTApOyBcCi0gXAotICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQycV9sYW5lX3UxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDE2eDh4Ml90IF9fczEgPSBfX3AxOyBcCi0gIHVpbnQxNng4eDJfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQycV9sYW5lX3YoJl9fcmV0LCBfX3AwLCAoaW50OHgxNl90KV9fczEudmFsWzBdLCAoaW50OHgxNl90KV9fczEudmFsWzFdLCBfX3AyLCA0OSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQycV9sYW5lX3UxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDE2eDh4Ml90IF9fczEgPSBfX3AxOyBcCi0gIHVpbnQxNng4eDJfdCBfX3JldjE7IFwKLSAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgdWludDE2eDh4Ml90IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDJxX2xhbmVfdigmX19yZXQsIF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCBfX3AyLCA0OSk7IFwKLSBcCi0gIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZsZDJxX2xhbmVfZjMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDMyeDR4Ml90IF9fczEgPSBfX3AxOyBcCi0gIGZsb2F0MzJ4NHgyX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkMnFfbGFuZV92KCZfX3JldCwgX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3AyLCA0MSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQycV9sYW5lX2YzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQzMng0eDJfdCBfX3MxID0gX19wMTsgXAotICBmbG9hdDMyeDR4Ml90IF9fcmV2MTsgXAotICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAotICBmbG9hdDMyeDR4Ml90IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDJxX2xhbmVfdigmX19yZXQsIF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcDIsIDQxKTsgXAotIFwKLSAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkMnFfbGFuZV9mMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0MTZ4OHgyX3QgX19zMSA9IF9fcDE7IFwKLSAgZmxvYXQxNng4eDJfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQycV9sYW5lX3YoJl9fcmV0LCBfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fcDIsIDQwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDJxX2xhbmVfZjE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDE2eDh4Ml90IF9fczEgPSBfX3AxOyBcCi0gIGZsb2F0MTZ4OHgyX3QgX19yZXYxOyBcCi0gIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIGZsb2F0MTZ4OHgyX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkMnFfbGFuZV92KCZfX3JldCwgX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgX19wMiwgNDApOyBcCi0gXAotICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQycV9sYW5lX3MzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MzJ4NHgyX3QgX19zMSA9IF9fcDE7IFwKLSAgaW50MzJ4NHgyX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkMnFfbGFuZV92KCZfX3JldCwgX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3AyLCAzNCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQycV9sYW5lX3MzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MzJ4NHgyX3QgX19zMSA9IF9fcDE7IFwKLSAgaW50MzJ4NHgyX3QgX19yZXYxOyBcCi0gIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDMsIDIsIDEsIDApOyBcCi0gIGludDMyeDR4Ml90IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDJxX2xhbmVfdigmX19yZXQsIF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcDIsIDM0KTsgXAotIFwKLSAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkMnFfbGFuZV9zMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDE2eDh4Ml90IF9fczEgPSBfX3AxOyBcCi0gIGludDE2eDh4Ml90IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDJxX2xhbmVfdigmX19yZXQsIF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19wMiwgMzMpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmxkMnFfbGFuZV9zMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDE2eDh4Ml90IF9fczEgPSBfX3AxOyBcCi0gIGludDE2eDh4Ml90IF9fcmV2MTsgXAotICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBpbnQxNng4eDJfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQycV9sYW5lX3YoJl9fcmV0LCBfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCBfX3AyLCAzMyk7IFwKLSBcCi0gIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZsZDJfbGFuZV91OChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDh4OHgyX3QgX19zMSA9IF9fcDE7IFwKLSAgdWludDh4OHgyX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkMl9sYW5lX3YoJl9fcmV0LCBfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgX19wMiwgMTYpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmxkMl9sYW5lX3U4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50OHg4eDJfdCBfX3MxID0gX19wMTsgXAotICB1aW50OHg4eDJfdCBfX3JldjE7IFwKLSAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgdWludDh4OHgyX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkMl9sYW5lX3YoJl9fcmV0LCBfX3AwLCAoaW50OHg4X3QpX19yZXYxLnZhbFswXSwgKGludDh4OF90KV9fcmV2MS52YWxbMV0sIF9fcDIsIDE2KTsgXAotIFwKLSAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkMl9sYW5lX3UzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDMyeDJ4Ml90IF9fczEgPSBfX3AxOyBcCi0gIHVpbnQzMngyeDJfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQyX2xhbmVfdigmX19yZXQsIF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCBfX3AyLCAxOCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQyX2xhbmVfdTMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MzJ4MngyX3QgX19zMSA9IF9fcDE7IFwKLSAgdWludDMyeDJ4Ml90IF9fcmV2MTsgXAotICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxLCAwKTsgXAotICB1aW50MzJ4MngyX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkMl9sYW5lX3YoJl9fcmV0LCBfX3AwLCAoaW50OHg4X3QpX19yZXYxLnZhbFswXSwgKGludDh4OF90KV9fcmV2MS52YWxbMV0sIF9fcDIsIDE4KTsgXAotIFwKLSAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkMl9sYW5lX3UxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDE2eDR4Ml90IF9fczEgPSBfX3AxOyBcCi0gIHVpbnQxNng0eDJfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQyX2xhbmVfdigmX19yZXQsIF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCBfX3AyLCAxNyk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQyX2xhbmVfdTE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MTZ4NHgyX3QgX19zMSA9IF9fcDE7IFwKLSAgdWludDE2eDR4Ml90IF9fcmV2MTsgXAotICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAotICB1aW50MTZ4NHgyX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkMl9sYW5lX3YoJl9fcmV0LCBfX3AwLCAoaW50OHg4X3QpX19yZXYxLnZhbFswXSwgKGludDh4OF90KV9fcmV2MS52YWxbMV0sIF9fcDIsIDE3KTsgXAotIFwKLSAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkMl9sYW5lX3M4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ4eDh4Ml90IF9fczEgPSBfX3AxOyBcCi0gIGludDh4OHgyX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkMl9sYW5lX3YoJl9fcmV0LCBfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgX19wMiwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQyX2xhbmVfczgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDh4OHgyX3QgX19zMSA9IF9fcDE7IFwKLSAgaW50OHg4eDJfdCBfX3JldjE7IFwKLSAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgaW50OHg4eDJfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQyX2xhbmVfdigmX19yZXQsIF9fcDAsIChpbnQ4eDhfdClfX3JldjEudmFsWzBdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsxXSwgX19wMiwgMCk7IFwKLSBcCi0gIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZsZDJfbGFuZV9mMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0MzJ4MngyX3QgX19zMSA9IF9fcDE7IFwKLSAgZmxvYXQzMngyeDJfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQyX2xhbmVfdigmX19yZXQsIF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19wMiwgOSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQyX2xhbmVfZjMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDMyeDJ4Ml90IF9fczEgPSBfX3AxOyBcCi0gIGZsb2F0MzJ4MngyX3QgX19yZXYxOyBcCi0gIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDEsIDApOyBcCi0gIGZsb2F0MzJ4MngyX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkMl9sYW5lX3YoJl9fcmV0LCBfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCBfX3AyLCA5KTsgXAotIFwKLSAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkMl9sYW5lX2YxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQxNng0eDJfdCBfX3MxID0gX19wMTsgXAotICBmbG9hdDE2eDR4Ml90IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDJfbGFuZV92KCZfX3JldCwgX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3AyLCA4KTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDJfbGFuZV9mMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0MTZ4NHgyX3QgX19zMSA9IF9fcDE7IFwKLSAgZmxvYXQxNng0eDJfdCBfX3JldjE7IFwKLSAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKLSAgZmxvYXQxNng0eDJfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQyX2xhbmVfdigmX19yZXQsIF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcDIsIDgpOyBcCi0gXAotICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQyX2xhbmVfczMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQzMngyeDJfdCBfX3MxID0gX19wMTsgXAotICBpbnQzMngyeDJfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQyX2xhbmVfdigmX19yZXQsIF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19wMiwgMik7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQyX2xhbmVfczMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQzMngyeDJfdCBfX3MxID0gX19wMTsgXAotICBpbnQzMngyeDJfdCBfX3JldjE7IFwKLSAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMSwgMCk7IFwKLSAgaW50MzJ4MngyX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkMl9sYW5lX3YoJl9fcmV0LCBfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCBfX3AyLCAyKTsgXAotIFwKLSAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkMl9sYW5lX3MxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MTZ4NHgyX3QgX19zMSA9IF9fcDE7IFwKLSAgaW50MTZ4NHgyX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkMl9sYW5lX3YoJl9fcmV0LCBfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fcDIsIDEpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmxkMl9sYW5lX3MxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MTZ4NHgyX3QgX19zMSA9IF9fcDE7IFwKLSAgaW50MTZ4NHgyX3QgX19yZXYxOyBcCi0gIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDMsIDIsIDEsIDApOyBcCi0gIGludDE2eDR4Ml90IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDJfbGFuZV92KCZfX3JldCwgX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgX19wMiwgMSk7IFwKLSBcCi0gIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAotICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZsZDNfcDgoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHk4eDh4M190IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDNfdigmX19yZXQsIF9fcDAsIDQpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmxkM19wOChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTh4OHgzX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkM192KCZfX3JldCwgX19wMCwgNCk7IFwKLSBcCi0gIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQzX3AxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTE2eDR4M190IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDNfdigmX19yZXQsIF9fcDAsIDUpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmxkM19wMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHkxNng0eDNfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQzX3YoJl9fcmV0LCBfX3AwLCA1KTsgXAotIFwKLSAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAotICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZsZDNxX3A4KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBwb2x5OHgxNngzX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkM3FfdigmX19yZXQsIF9fcDAsIDM2KTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDNxX3A4KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBwb2x5OHgxNngzX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkM3FfdigmX19yZXQsIF9fcDAsIDM2KTsgXAotIFwKLSAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZsZDNxX3AxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTE2eDh4M190IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDNxX3YoJl9fcmV0LCBfX3AwLCAzNyk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQzcV9wMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHkxNng4eDNfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQzcV92KCZfX3JldCwgX19wMCwgMzcpOyBcCi0gXAotICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkM3FfdTgoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ4eDE2eDNfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQzcV92KCZfX3JldCwgX19wMCwgNDgpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmxkM3FfdTgoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ4eDE2eDNfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQzcV92KCZfX3JldCwgX19wMCwgNDgpOyBcCi0gXAotICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkM3FfdTMyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MzJ4NHgzX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkM3FfdigmX19yZXQsIF9fcDAsIDUwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDNxX3UzMihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDMyeDR4M190IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDNxX3YoJl9fcmV0LCBfX3AwLCA1MCk7IFwKLSBcCi0gIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAotICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQzcV91MTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQxNng4eDNfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQzcV92KCZfX3JldCwgX19wMCwgNDkpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmxkM3FfdTE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MTZ4OHgzX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkM3FfdigmX19yZXQsIF9fcDAsIDQ5KTsgXAotIFwKLSAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZsZDNxX3M4KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ4eDE2eDNfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQzcV92KCZfX3JldCwgX19wMCwgMzIpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmxkM3FfczgoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDh4MTZ4M190IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDNxX3YoJl9fcmV0LCBfX3AwLCAzMik7IFwKLSBcCi0gIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQzcV9mMzIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0MzJ4NHgzX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkM3FfdigmX19yZXQsIF9fcDAsIDQxKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDNxX2YzMihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQzMng0eDNfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQzcV92KCZfX3JldCwgX19wMCwgNDEpOyBcCi0gXAotICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkM3FfZjE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDE2eDh4M190IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDNxX3YoJl9fcmV0LCBfX3AwLCA0MCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQzcV9mMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0MTZ4OHgzX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkM3FfdigmX19yZXQsIF9fcDAsIDQwKTsgXAotIFwKLSAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZsZDNxX3MzMihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MzJ4NHgzX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkM3FfdigmX19yZXQsIF9fcDAsIDM0KTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDNxX3MzMihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MzJ4NHgzX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkM3FfdigmX19yZXQsIF9fcDAsIDM0KTsgXAotIFwKLSAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAotICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZsZDNxX3MxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MTZ4OHgzX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkM3FfdigmX19yZXQsIF9fcDAsIDMzKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDNxX3MxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MTZ4OHgzX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkM3FfdigmX19yZXQsIF9fcDAsIDMzKTsgXAotIFwKLSAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZsZDNfdTgoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ4eDh4M190IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDNfdigmX19yZXQsIF9fcDAsIDE2KTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDNfdTgoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ4eDh4M190IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDNfdigmX19yZXQsIF9fcDAsIDE2KTsgXAotIFwKLSAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZsZDNfdTMyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MzJ4MngzX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkM192KCZfX3JldCwgX19wMCwgMTgpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmxkM191MzIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQzMngyeDNfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQzX3YoJl9fcmV0LCBfX3AwLCAxOCk7IFwKLSBcCi0gIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxLCAwKTsgXAotICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQzX3U2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDY0eDF4M190IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDNfdigmX19yZXQsIF9fcDAsIDE5KTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDNfdTY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50NjR4MXgzX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkM192KCZfX3JldCwgX19wMCwgMTkpOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQzX3UxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDE2eDR4M190IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDNfdigmX19yZXQsIF9fcDAsIDE3KTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDNfdTE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MTZ4NHgzX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkM192KCZfX3JldCwgX19wMCwgMTcpOyBcCi0gXAotICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkM19zOChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50OHg4eDNfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQzX3YoJl9fcmV0LCBfX3AwLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDNfczgoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDh4OHgzX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkM192KCZfX3JldCwgX19wMCwgMCk7IFwKLSBcCi0gIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQzX2YzMihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQzMngyeDNfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQzX3YoJl9fcmV0LCBfX3AwLCA5KTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDNfZjMyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDMyeDJ4M190IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDNfdigmX19yZXQsIF9fcDAsIDkpOyBcCi0gXAotICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkM19mMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0MTZ4NHgzX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkM192KCZfX3JldCwgX19wMCwgOCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQzX2YxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQxNng0eDNfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQzX3YoJl9fcmV0LCBfX3AwLCA4KTsgXAotIFwKLSAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAotICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZsZDNfczMyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQzMngyeDNfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQzX3YoJl9fcmV0LCBfX3AwLCAyKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDNfczMyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQzMngyeDNfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQzX3YoJl9fcmV0LCBfX3AwLCAyKTsgXAotIFwKLSAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxLCAwKTsgXAotICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZsZDNfczY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ2NHgxeDNfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQzX3YoJl9fcmV0LCBfX3AwLCAzKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDNfczY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ2NHgxeDNfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQzX3YoJl9fcmV0LCBfX3AwLCAzKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkM19zMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDE2eDR4M190IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDNfdigmX19yZXQsIF9fcDAsIDEpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmxkM19zMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDE2eDR4M190IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDNfdigmX19yZXQsIF9fcDAsIDEpOyBcCi0gXAotICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkM19kdXBfcDgoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHk4eDh4M190IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDNfZHVwX3YoJl9fcmV0LCBfX3AwLCA0KTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDNfZHVwX3A4KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBwb2x5OHg4eDNfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQzX2R1cF92KCZfX3JldCwgX19wMCwgNCk7IFwKLSBcCi0gIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQzX2R1cF9wMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHkxNng0eDNfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQzX2R1cF92KCZfX3JldCwgX19wMCwgNSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQzX2R1cF9wMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHkxNng0eDNfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQzX2R1cF92KCZfX3JldCwgX19wMCwgNSk7IFwKLSBcCi0gIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAotICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQzX2R1cF91OChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDh4OHgzX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkM19kdXBfdigmX19yZXQsIF9fcDAsIDE2KTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDNfZHVwX3U4KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50OHg4eDNfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQzX2R1cF92KCZfX3JldCwgX19wMCwgMTYpOyBcCi0gXAotICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkM19kdXBfdTMyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MzJ4MngzX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkM19kdXBfdigmX19yZXQsIF9fcDAsIDE4KTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDNfZHVwX3UzMihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDMyeDJ4M190IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDNfZHVwX3YoJl9fcmV0LCBfX3AwLCAxOCk7IFwKLSBcCi0gIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxLCAwKTsgXAotICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQzX2R1cF91NjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ2NHgxeDNfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQzX2R1cF92KCZfX3JldCwgX19wMCwgMTkpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmxkM19kdXBfdTY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50NjR4MXgzX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkM19kdXBfdigmX19yZXQsIF9fcDAsIDE5KTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkM19kdXBfdTE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MTZ4NHgzX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkM19kdXBfdigmX19yZXQsIF9fcDAsIDE3KTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDNfZHVwX3UxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDE2eDR4M190IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDNfZHVwX3YoJl9fcmV0LCBfX3AwLCAxNyk7IFwKLSBcCi0gIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAotICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQzX2R1cF9zOChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50OHg4eDNfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQzX2R1cF92KCZfX3JldCwgX19wMCwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQzX2R1cF9zOChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50OHg4eDNfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQzX2R1cF92KCZfX3JldCwgX19wMCwgMCk7IFwKLSBcCi0gIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQzX2R1cF9mMzIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0MzJ4MngzX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkM19kdXBfdigmX19yZXQsIF9fcDAsIDkpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmxkM19kdXBfZjMyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDMyeDJ4M190IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDNfZHVwX3YoJl9fcmV0LCBfX3AwLCA5KTsgXAotIFwKLSAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxLCAwKTsgXAotICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZsZDNfZHVwX2YxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQxNng0eDNfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQzX2R1cF92KCZfX3JldCwgX19wMCwgOCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQzX2R1cF9mMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0MTZ4NHgzX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkM19kdXBfdigmX19yZXQsIF9fcDAsIDgpOyBcCi0gXAotICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkM19kdXBfczMyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQzMngyeDNfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQzX2R1cF92KCZfX3JldCwgX19wMCwgMik7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQzX2R1cF9zMzIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDMyeDJ4M190IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDNfZHVwX3YoJl9fcmV0LCBfX3AwLCAyKTsgXAotIFwKLSAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxLCAwKTsgXAotICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZsZDNfZHVwX3M2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50NjR4MXgzX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkM19kdXBfdigmX19yZXQsIF9fcDAsIDMpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmxkM19kdXBfczY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ2NHgxeDNfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQzX2R1cF92KCZfX3JldCwgX19wMCwgMyk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZsZDNfZHVwX3MxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MTZ4NHgzX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkM19kdXBfdigmX19yZXQsIF9fcDAsIDEpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmxkM19kdXBfczE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQxNng0eDNfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQzX2R1cF92KCZfX3JldCwgX19wMCwgMSk7IFwKLSBcCi0gIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAotICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQzX2xhbmVfcDgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHk4eDh4M190IF9fczEgPSBfX3AxOyBcCi0gIHBvbHk4eDh4M190IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDNfbGFuZV92KCZfX3JldCwgX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIChpbnQ4eDhfdClfX3MxLnZhbFsyXSwgX19wMiwgNCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQzX2xhbmVfcDgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHk4eDh4M190IF9fczEgPSBfX3AxOyBcCi0gIHBvbHk4eDh4M190IF9fcmV2MTsgXAotICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBwb2x5OHg4eDNfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQzX2xhbmVfdigmX19yZXQsIF9fcDAsIChpbnQ4eDhfdClfX3JldjEudmFsWzBdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsxXSwgKGludDh4OF90KV9fcmV2MS52YWxbMl0sIF9fcDIsIDQpOyBcCi0gXAotICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkM19sYW5lX3AxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTE2eDR4M190IF9fczEgPSBfX3AxOyBcCi0gIHBvbHkxNng0eDNfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQzX2xhbmVfdigmX19yZXQsIF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCAoaW50OHg4X3QpX19zMS52YWxbMl0sIF9fcDIsIDUpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmxkM19sYW5lX3AxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTE2eDR4M190IF9fczEgPSBfX3AxOyBcCi0gIHBvbHkxNng0eDNfdCBfX3JldjE7IFwKLSAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKLSAgcG9seTE2eDR4M190IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDNfbGFuZV92KCZfX3JldCwgX19wMCwgKGludDh4OF90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDhfdClfX3JldjEudmFsWzFdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsyXSwgX19wMiwgNSk7IFwKLSBcCi0gIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAotICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQzcV9sYW5lX3AxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTE2eDh4M190IF9fczEgPSBfX3AxOyBcCi0gIHBvbHkxNng4eDNfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQzcV9sYW5lX3YoJl9fcmV0LCBfX3AwLCAoaW50OHgxNl90KV9fczEudmFsWzBdLCAoaW50OHgxNl90KV9fczEudmFsWzFdLCAoaW50OHgxNl90KV9fczEudmFsWzJdLCBfX3AyLCAzNyk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQzcV9sYW5lX3AxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTE2eDh4M190IF9fczEgPSBfX3AxOyBcCi0gIHBvbHkxNng4eDNfdCBfX3JldjE7IFwKLSAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgcG9seTE2eDh4M190IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDNxX2xhbmVfdigmX19yZXQsIF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMl0sIF9fcDIsIDM3KTsgXAotIFwKLSAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZsZDNxX2xhbmVfdTMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MzJ4NHgzX3QgX19zMSA9IF9fcDE7IFwKLSAgdWludDMyeDR4M190IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDNxX2xhbmVfdigmX19yZXQsIF9fcDAsIChpbnQ4eDE2X3QpX19zMS52YWxbMF0sIChpbnQ4eDE2X3QpX19zMS52YWxbMV0sIChpbnQ4eDE2X3QpX19zMS52YWxbMl0sIF9fcDIsIDUwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDNxX2xhbmVfdTMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MzJ4NHgzX3QgX19zMSA9IF9fcDE7IFwKLSAgdWludDMyeDR4M190IF9fcmV2MTsgXAotICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAotICB1aW50MzJ4NHgzX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkM3FfbGFuZV92KCZfX3JldCwgX19wMCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsyXSwgX19wMiwgNTApOyBcCi0gXAotICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkM3FfbGFuZV91MTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQxNng4eDNfdCBfX3MxID0gX19wMTsgXAotICB1aW50MTZ4OHgzX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkM3FfbGFuZV92KCZfX3JldCwgX19wMCwgKGludDh4MTZfdClfX3MxLnZhbFswXSwgKGludDh4MTZfdClfX3MxLnZhbFsxXSwgKGludDh4MTZfdClfX3MxLnZhbFsyXSwgX19wMiwgNDkpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmxkM3FfbGFuZV91MTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQxNng4eDNfdCBfX3MxID0gX19wMTsgXAotICB1aW50MTZ4OHgzX3QgX19yZXYxOyBcCi0gIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIHVpbnQxNng4eDNfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQzcV9sYW5lX3YoJl9fcmV0LCBfX3AwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgKGludDh4MTZfdClfX3JldjEudmFsWzJdLCBfX3AyLCA0OSk7IFwKLSBcCi0gIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQzcV9sYW5lX2YzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQzMng0eDNfdCBfX3MxID0gX19wMTsgXAotICBmbG9hdDMyeDR4M190IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDNxX2xhbmVfdigmX19yZXQsIF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIF9fcDIsIDQxKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDNxX2xhbmVfZjMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDMyeDR4M190IF9fczEgPSBfX3AxOyBcCi0gIGZsb2F0MzJ4NHgzX3QgX19yZXYxOyBcCi0gIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDMsIDIsIDEsIDApOyBcCi0gIGZsb2F0MzJ4NHgzX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkM3FfbGFuZV92KCZfX3JldCwgX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgX19yZXYxLnZhbFsyXSwgX19wMiwgNDEpOyBcCi0gXAotICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkM3FfbGFuZV9mMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0MTZ4OHgzX3QgX19zMSA9IF9fcDE7IFwKLSAgZmxvYXQxNng4eDNfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQzcV9sYW5lX3YoJl9fcmV0LCBfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCBfX3AyLCA0MCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQzcV9sYW5lX2YxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQxNng4eDNfdCBfX3MxID0gX19wMTsgXAotICBmbG9hdDE2eDh4M190IF9fcmV2MTsgXAotICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBmbG9hdDE2eDh4M190IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDNxX2xhbmVfdigmX19yZXQsIF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcmV2MS52YWxbMl0sIF9fcDIsIDQwKTsgXAotIFwKLSAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZsZDNxX2xhbmVfczMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQzMng0eDNfdCBfX3MxID0gX19wMTsgXAotICBpbnQzMng0eDNfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQzcV9sYW5lX3YoJl9fcmV0LCBfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCBfX3AyLCAzNCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQzcV9sYW5lX3MzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MzJ4NHgzX3QgX19zMSA9IF9fcDE7IFwKLSAgaW50MzJ4NHgzX3QgX19yZXYxOyBcCi0gIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDMsIDIsIDEsIDApOyBcCi0gIGludDMyeDR4M190IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDNxX2xhbmVfdigmX19yZXQsIF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcmV2MS52YWxbMl0sIF9fcDIsIDM0KTsgXAotIFwKLSAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAotICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZsZDNxX2xhbmVfczE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQxNng4eDNfdCBfX3MxID0gX19wMTsgXAotICBpbnQxNng4eDNfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQzcV9sYW5lX3YoJl9fcmV0LCBfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCBfX3AyLCAzMyk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQzcV9sYW5lX3MxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MTZ4OHgzX3QgX19zMSA9IF9fcDE7IFwKLSAgaW50MTZ4OHgzX3QgX19yZXYxOyBcCi0gIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIGludDE2eDh4M190IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDNxX2xhbmVfdigmX19yZXQsIF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcmV2MS52YWxbMl0sIF9fcDIsIDMzKTsgXAotIFwKLSAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZsZDNfbGFuZV91OChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDh4OHgzX3QgX19zMSA9IF9fcDE7IFwKLSAgdWludDh4OHgzX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkM19sYW5lX3YoJl9fcmV0LCBfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgKGludDh4OF90KV9fczEudmFsWzJdLCBfX3AyLCAxNik7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQzX2xhbmVfdTgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ4eDh4M190IF9fczEgPSBfX3AxOyBcCi0gIHVpbnQ4eDh4M190IF9fcmV2MTsgXAotICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICB1aW50OHg4eDNfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQzX2xhbmVfdigmX19yZXQsIF9fcDAsIChpbnQ4eDhfdClfX3JldjEudmFsWzBdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsxXSwgKGludDh4OF90KV9fcmV2MS52YWxbMl0sIF9fcDIsIDE2KTsgXAotIFwKLSAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZsZDNfbGFuZV91MzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQzMngyeDNfdCBfX3MxID0gX19wMTsgXAotICB1aW50MzJ4MngzX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkM19sYW5lX3YoJl9fcmV0LCBfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgKGludDh4OF90KV9fczEudmFsWzJdLCBfX3AyLCAxOCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQzX2xhbmVfdTMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MzJ4MngzX3QgX19zMSA9IF9fcDE7IFwKLSAgdWludDMyeDJ4M190IF9fcmV2MTsgXAotICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAxLCAwKTsgXAotICB1aW50MzJ4MngzX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkM19sYW5lX3YoJl9fcmV0LCBfX3AwLCAoaW50OHg4X3QpX19yZXYxLnZhbFswXSwgKGludDh4OF90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDhfdClfX3JldjEudmFsWzJdLCBfX3AyLCAxOCk7IFwKLSBcCi0gIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxLCAwKTsgXAotICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQzX2xhbmVfdTE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MTZ4NHgzX3QgX19zMSA9IF9fcDE7IFwKLSAgdWludDE2eDR4M190IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDNfbGFuZV92KCZfX3JldCwgX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIChpbnQ4eDhfdClfX3MxLnZhbFsyXSwgX19wMiwgMTcpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmxkM19sYW5lX3UxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDE2eDR4M190IF9fczEgPSBfX3AxOyBcCi0gIHVpbnQxNng0eDNfdCBfX3JldjE7IFwKLSAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKLSAgdWludDE2eDR4M190IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDNfbGFuZV92KCZfX3JldCwgX19wMCwgKGludDh4OF90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDhfdClfX3JldjEudmFsWzFdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsyXSwgX19wMiwgMTcpOyBcCi0gXAotICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkM19sYW5lX3M4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ4eDh4M190IF9fczEgPSBfX3AxOyBcCi0gIGludDh4OHgzX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkM19sYW5lX3YoJl9fcmV0LCBfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgKGludDh4OF90KV9fczEudmFsWzJdLCBfX3AyLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDNfbGFuZV9zOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50OHg4eDNfdCBfX3MxID0gX19wMTsgXAotICBpbnQ4eDh4M190IF9fcmV2MTsgXAotICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBpbnQ4eDh4M190IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDNfbGFuZV92KCZfX3JldCwgX19wMCwgKGludDh4OF90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDhfdClfX3JldjEudmFsWzFdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsyXSwgX19wMiwgMCk7IFwKLSBcCi0gIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQzX2xhbmVfZjMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDMyeDJ4M190IF9fczEgPSBfX3AxOyBcCi0gIGZsb2F0MzJ4MngzX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkM19sYW5lX3YoJl9fcmV0LCBfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCBfX3AyLCA5KTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDNfbGFuZV9mMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0MzJ4MngzX3QgX19zMSA9IF9fcDE7IFwKLSAgZmxvYXQzMngyeDNfdCBfX3JldjE7IFwKLSAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMSwgMCk7IFwKLSAgZmxvYXQzMngyeDNfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQzX2xhbmVfdigmX19yZXQsIF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcmV2MS52YWxbMl0sIF9fcDIsIDkpOyBcCi0gXAotICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkM19sYW5lX2YxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQxNng0eDNfdCBfX3MxID0gX19wMTsgXAotICBmbG9hdDE2eDR4M190IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDNfbGFuZV92KCZfX3JldCwgX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgX19wMiwgOCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQzX2xhbmVfZjE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDE2eDR4M190IF9fczEgPSBfX3AxOyBcCi0gIGZsb2F0MTZ4NHgzX3QgX19yZXYxOyBcCi0gIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDMsIDIsIDEsIDApOyBcCi0gIGZsb2F0MTZ4NHgzX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkM19sYW5lX3YoJl9fcmV0LCBfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCBfX3JldjEudmFsWzJdLCBfX3AyLCA4KTsgXAotIFwKLSAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAotICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZsZDNfbGFuZV9zMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDMyeDJ4M190IF9fczEgPSBfX3AxOyBcCi0gIGludDMyeDJ4M190IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDNfbGFuZV92KCZfX3JldCwgX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgX19wMiwgMik7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQzX2xhbmVfczMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQzMngyeDNfdCBfX3MxID0gX19wMTsgXAotICBpbnQzMngyeDNfdCBfX3JldjE7IFwKLSAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMSwgMCk7IFwKLSAgaW50MzJ4MngzX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkM19sYW5lX3YoJl9fcmV0LCBfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCBfX3JldjEudmFsWzJdLCBfX3AyLCAyKTsgXAotIFwKLSAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxLCAwKTsgXAotICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZsZDNfbGFuZV9zMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDE2eDR4M190IF9fczEgPSBfX3AxOyBcCi0gIGludDE2eDR4M190IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDNfbGFuZV92KCZfX3JldCwgX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgX19wMiwgMSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQzX2xhbmVfczE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQxNng0eDNfdCBfX3MxID0gX19wMTsgXAotICBpbnQxNng0eDNfdCBfX3JldjE7IFwKLSAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKLSAgaW50MTZ4NHgzX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkM19sYW5lX3YoJl9fcmV0LCBfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCBfX3JldjEudmFsWzJdLCBfX3AyLCAxKTsgXAotIFwKLSAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAotICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZsZDRfcDgoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHk4eDh4NF90IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDRfdigmX19yZXQsIF9fcDAsIDQpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmxkNF9wOChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTh4OHg0X3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkNF92KCZfX3JldCwgX19wMCwgNCk7IFwKLSBcCi0gIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0LnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFszXSwgX19yZXQudmFsWzNdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkNF9wMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHkxNng0eDRfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQ0X3YoJl9fcmV0LCBfX3AwLCA1KTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDRfcDE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBwb2x5MTZ4NHg0X3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkNF92KCZfX3JldCwgX19wMCwgNSk7IFwKLSBcCi0gIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAotICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0LnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFszXSwgX19yZXQudmFsWzNdLCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkNHFfcDgoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHk4eDE2eDRfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQ0cV92KCZfX3JldCwgX19wMCwgMzYpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmxkNHFfcDgoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHk4eDE2eDRfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQ0cV92KCZfX3JldCwgX19wMCwgMzYpOyBcCi0gXAotICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbM10sIF9fcmV0LnZhbFszXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZsZDRxX3AxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTE2eDh4NF90IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDRxX3YoJl9fcmV0LCBfX3AwLCAzNyk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQ0cV9wMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHkxNng4eDRfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQ0cV92KCZfX3JldCwgX19wMCwgMzcpOyBcCi0gXAotICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbM10sIF9fcmV0LnZhbFszXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZsZDRxX3U4KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50OHgxNng0X3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkNHFfdigmX19yZXQsIF9fcDAsIDQ4KTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDRxX3U4KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50OHgxNng0X3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkNHFfdigmX19yZXQsIF9fcDAsIDQ4KTsgXAotIFwKLSAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzNdLCBfX3JldC52YWxbM10sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQ0cV91MzIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQzMng0eDRfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQ0cV92KCZfX3JldCwgX19wMCwgNTApOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmxkNHFfdTMyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MzJ4NHg0X3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkNHFfdigmX19yZXQsIF9fcDAsIDUwKTsgXAotIFwKLSAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAotICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzNdLCBfX3JldC52YWxbM10sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQ0cV91MTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQxNng4eDRfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQ0cV92KCZfX3JldCwgX19wMCwgNDkpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmxkNHFfdTE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MTZ4OHg0X3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkNHFfdigmX19yZXQsIF9fcDAsIDQ5KTsgXAotIFwKLSAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzNdLCBfX3JldC52YWxbM10sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQ0cV9zOChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50OHgxNng0X3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkNHFfdigmX19yZXQsIF9fcDAsIDMyKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDRxX3M4KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ4eDE2eDRfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQ0cV92KCZfX3JldCwgX19wMCwgMzIpOyBcCi0gXAotICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbM10sIF9fcmV0LnZhbFszXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZsZDRxX2YzMihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQzMng0eDRfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQ0cV92KCZfX3JldCwgX19wMCwgNDEpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmxkNHFfZjMyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDMyeDR4NF90IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDRxX3YoJl9fcmV0LCBfX3AwLCA0MSk7IFwKLSBcCi0gIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAotICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0LnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFszXSwgX19yZXQudmFsWzNdLCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkNHFfZjE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDE2eDh4NF90IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDRxX3YoJl9fcmV0LCBfX3AwLCA0MCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQ0cV9mMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0MTZ4OHg0X3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkNHFfdigmX19yZXQsIF9fcDAsIDQwKTsgXAotIFwKLSAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzNdLCBfX3JldC52YWxbM10sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQ0cV9zMzIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDMyeDR4NF90IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDRxX3YoJl9fcmV0LCBfX3AwLCAzNCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQ0cV9zMzIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDMyeDR4NF90IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDRxX3YoJl9fcmV0LCBfX3AwLCAzNCk7IFwKLSBcCi0gIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAotICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0LnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFszXSwgX19yZXQudmFsWzNdLCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkNHFfczE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQxNng4eDRfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQ0cV92KCZfX3JldCwgX19wMCwgMzMpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmxkNHFfczE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQxNng4eDRfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQ0cV92KCZfX3JldCwgX19wMCwgMzMpOyBcCi0gXAotICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbM10sIF9fcmV0LnZhbFszXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZsZDRfdTgoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ4eDh4NF90IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDRfdigmX19yZXQsIF9fcDAsIDE2KTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDRfdTgoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ4eDh4NF90IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDRfdigmX19yZXQsIF9fcDAsIDE2KTsgXAotIFwKLSAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzNdLCBfX3JldC52YWxbM10sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQ0X3UzMihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDMyeDJ4NF90IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDRfdigmX19yZXQsIF9fcDAsIDE4KTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDRfdTMyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MzJ4Mng0X3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkNF92KCZfX3JldCwgX19wMCwgMTgpOyBcCi0gXAotICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAxLCAwKTsgXAotICBfX3JldC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbM10sIF9fcmV0LnZhbFszXSwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZsZDRfdTY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50NjR4MXg0X3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkNF92KCZfX3JldCwgX19wMCwgMTkpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmxkNF91NjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ2NHgxeDRfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQ0X3YoJl9fcmV0LCBfX3AwLCAxOSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZsZDRfdTE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MTZ4NHg0X3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkNF92KCZfX3JldCwgX19wMCwgMTcpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmxkNF91MTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQxNng0eDRfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQ0X3YoJl9fcmV0LCBfX3AwLCAxNyk7IFwKLSBcCi0gIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAotICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0LnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFszXSwgX19yZXQudmFsWzNdLCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkNF9zOChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50OHg4eDRfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQ0X3YoJl9fcmV0LCBfX3AwLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDRfczgoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDh4OHg0X3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkNF92KCZfX3JldCwgX19wMCwgMCk7IFwKLSBcCi0gIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0LnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFszXSwgX19yZXQudmFsWzNdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkNF9mMzIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0MzJ4Mng0X3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkNF92KCZfX3JldCwgX19wMCwgOSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQ0X2YzMihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQzMngyeDRfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQ0X3YoJl9fcmV0LCBfX3AwLCA5KTsgXAotIFwKLSAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxLCAwKTsgXAotICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzNdLCBfX3JldC52YWxbM10sIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQ0X2YxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQxNng0eDRfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQ0X3YoJl9fcmV0LCBfX3AwLCA4KTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDRfZjE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDE2eDR4NF90IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDRfdigmX19yZXQsIF9fcDAsIDgpOyBcCi0gXAotICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAotICBfX3JldC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbM10sIF9fcmV0LnZhbFszXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZsZDRfczMyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQzMngyeDRfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQ0X3YoJl9fcmV0LCBfX3AwLCAyKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDRfczMyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQzMngyeDRfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQ0X3YoJl9fcmV0LCBfX3AwLCAyKTsgXAotIFwKLSAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxLCAwKTsgXAotICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzNdLCBfX3JldC52YWxbM10sIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQ0X3M2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50NjR4MXg0X3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkNF92KCZfX3JldCwgX19wMCwgMyk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQ0X3M2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50NjR4MXg0X3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkNF92KCZfX3JldCwgX19wMCwgMyk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZsZDRfczE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQxNng0eDRfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQ0X3YoJl9fcmV0LCBfX3AwLCAxKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDRfczE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQxNng0eDRfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQ0X3YoJl9fcmV0LCBfX3AwLCAxKTsgXAotIFwKLSAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAotICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzNdLCBfX3JldC52YWxbM10sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQ0X2R1cF9wOChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTh4OHg0X3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkNF9kdXBfdigmX19yZXQsIF9fcDAsIDQpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmxkNF9kdXBfcDgoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHk4eDh4NF90IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDRfZHVwX3YoJl9fcmV0LCBfX3AwLCA0KTsgXAotIFwKLSAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzNdLCBfX3JldC52YWxbM10sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQ0X2R1cF9wMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHkxNng0eDRfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQ0X2R1cF92KCZfX3JldCwgX19wMCwgNSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQ0X2R1cF9wMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHkxNng0eDRfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQ0X2R1cF92KCZfX3JldCwgX19wMCwgNSk7IFwKLSBcCi0gIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAotICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0LnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFszXSwgX19yZXQudmFsWzNdLCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkNF9kdXBfdTgoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ4eDh4NF90IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDRfZHVwX3YoJl9fcmV0LCBfX3AwLCAxNik7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQ0X2R1cF91OChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDh4OHg0X3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkNF9kdXBfdigmX19yZXQsIF9fcDAsIDE2KTsgXAotIFwKLSAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzNdLCBfX3JldC52YWxbM10sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQ0X2R1cF91MzIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQzMngyeDRfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQ0X2R1cF92KCZfX3JldCwgX19wMCwgMTgpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmxkNF9kdXBfdTMyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MzJ4Mng0X3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkNF9kdXBfdigmX19yZXQsIF9fcDAsIDE4KTsgXAotIFwKLSAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxLCAwKTsgXAotICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzNdLCBfX3JldC52YWxbM10sIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQ0X2R1cF91NjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ2NHgxeDRfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQ0X2R1cF92KCZfX3JldCwgX19wMCwgMTkpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmxkNF9kdXBfdTY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50NjR4MXg0X3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkNF9kdXBfdigmX19yZXQsIF9fcDAsIDE5KTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkNF9kdXBfdTE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MTZ4NHg0X3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkNF9kdXBfdigmX19yZXQsIF9fcDAsIDE3KTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDRfZHVwX3UxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDE2eDR4NF90IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDRfZHVwX3YoJl9fcmV0LCBfX3AwLCAxNyk7IFwKLSBcCi0gIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAotICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0LnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFszXSwgX19yZXQudmFsWzNdLCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkNF9kdXBfczgoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDh4OHg0X3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkNF9kdXBfdigmX19yZXQsIF9fcDAsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmxkNF9kdXBfczgoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDh4OHg0X3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkNF9kdXBfdigmX19yZXQsIF9fcDAsIDApOyBcCi0gXAotICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbM10sIF9fcmV0LnZhbFszXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZsZDRfZHVwX2YzMihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQzMngyeDRfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQ0X2R1cF92KCZfX3JldCwgX19wMCwgOSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQ0X2R1cF9mMzIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0MzJ4Mng0X3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkNF9kdXBfdigmX19yZXQsIF9fcDAsIDkpOyBcCi0gXAotICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAxLCAwKTsgXAotICBfX3JldC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbM10sIF9fcmV0LnZhbFszXSwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZsZDRfZHVwX2YxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQxNng0eDRfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQ0X2R1cF92KCZfX3JldCwgX19wMCwgOCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQ0X2R1cF9mMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0MTZ4NHg0X3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkNF9kdXBfdigmX19yZXQsIF9fcDAsIDgpOyBcCi0gXAotICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAotICBfX3JldC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbM10sIF9fcmV0LnZhbFszXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZsZDRfZHVwX3MzMihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MzJ4Mng0X3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkNF9kdXBfdigmX19yZXQsIF9fcDAsIDIpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmxkNF9kdXBfczMyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQzMngyeDRfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQ0X2R1cF92KCZfX3JldCwgX19wMCwgMik7IFwKLSBcCi0gIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxLCAwKTsgXAotICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDEsIDApOyBcCi0gIF9fcmV0LnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFszXSwgX19yZXQudmFsWzNdLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkNF9kdXBfczY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ2NHgxeDRfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQ0X2R1cF92KCZfX3JldCwgX19wMCwgMyk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQ0X2R1cF9zNjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDY0eDF4NF90IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDRfZHVwX3YoJl9fcmV0LCBfX3AwLCAzKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkNF9kdXBfczE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQxNng0eDRfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQ0X2R1cF92KCZfX3JldCwgX19wMCwgMSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQ0X2R1cF9zMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDE2eDR4NF90IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDRfZHVwX3YoJl9fcmV0LCBfX3AwLCAxKTsgXAotIFwKLSAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAotICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzNdLCBfX3JldC52YWxbM10sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQ0X2xhbmVfcDgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHk4eDh4NF90IF9fczEgPSBfX3AxOyBcCi0gIHBvbHk4eDh4NF90IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDRfbGFuZV92KCZfX3JldCwgX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIChpbnQ4eDhfdClfX3MxLnZhbFsyXSwgKGludDh4OF90KV9fczEudmFsWzNdLCBfX3AyLCA0KTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDRfbGFuZV9wOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTh4OHg0X3QgX19zMSA9IF9fcDE7IFwKLSAgcG9seTh4OHg0X3QgX19yZXYxOyBcCi0gIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFszXSwgX19zMS52YWxbM10sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIHBvbHk4eDh4NF90IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDRfbGFuZV92KCZfX3JldCwgX19wMCwgKGludDh4OF90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDhfdClfX3JldjEudmFsWzFdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsyXSwgKGludDh4OF90KV9fcmV2MS52YWxbM10sIF9fcDIsIDQpOyBcCi0gXAotICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbM10sIF9fcmV0LnZhbFszXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZsZDRfbGFuZV9wMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHkxNng0eDRfdCBfX3MxID0gX19wMTsgXAotICBwb2x5MTZ4NHg0X3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkNF9sYW5lX3YoJl9fcmV0LCBfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgKGludDh4OF90KV9fczEudmFsWzJdLCAoaW50OHg4X3QpX19zMS52YWxbM10sIF9fcDIsIDUpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmxkNF9sYW5lX3AxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTE2eDR4NF90IF9fczEgPSBfX3AxOyBcCi0gIHBvbHkxNng0eDRfdCBfX3JldjE7IFwKLSAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzNdLCBfX3MxLnZhbFszXSwgMywgMiwgMSwgMCk7IFwKLSAgcG9seTE2eDR4NF90IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDRfbGFuZV92KCZfX3JldCwgX19wMCwgKGludDh4OF90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDhfdClfX3JldjEudmFsWzFdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsyXSwgKGludDh4OF90KV9fcmV2MS52YWxbM10sIF9fcDIsIDUpOyBcCi0gXAotICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAotICBfX3JldC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbM10sIF9fcmV0LnZhbFszXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZsZDRxX2xhbmVfcDE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBwb2x5MTZ4OHg0X3QgX19zMSA9IF9fcDE7IFwKLSAgcG9seTE2eDh4NF90IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDRxX2xhbmVfdigmX19yZXQsIF9fcDAsIChpbnQ4eDE2X3QpX19zMS52YWxbMF0sIChpbnQ4eDE2X3QpX19zMS52YWxbMV0sIChpbnQ4eDE2X3QpX19zMS52YWxbMl0sIChpbnQ4eDE2X3QpX19zMS52YWxbM10sIF9fcDIsIDM3KTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDRxX2xhbmVfcDE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBwb2x5MTZ4OHg0X3QgX19zMSA9IF9fcDE7IFwKLSAgcG9seTE2eDh4NF90IF9fcmV2MTsgXAotICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbM10sIF9fczEudmFsWzNdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBwb2x5MTZ4OHg0X3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkNHFfbGFuZV92KCZfX3JldCwgX19wMCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsyXSwgKGludDh4MTZfdClfX3JldjEudmFsWzNdLCBfX3AyLCAzNyk7IFwKLSBcCi0gIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0LnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFszXSwgX19yZXQudmFsWzNdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkNHFfbGFuZV91MzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQzMng0eDRfdCBfX3MxID0gX19wMTsgXAotICB1aW50MzJ4NHg0X3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkNHFfbGFuZV92KCZfX3JldCwgX19wMCwgKGludDh4MTZfdClfX3MxLnZhbFswXSwgKGludDh4MTZfdClfX3MxLnZhbFsxXSwgKGludDh4MTZfdClfX3MxLnZhbFsyXSwgKGludDh4MTZfdClfX3MxLnZhbFszXSwgX19wMiwgNTApOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmxkNHFfbGFuZV91MzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQzMng0eDRfdCBfX3MxID0gX19wMTsgXAotICB1aW50MzJ4NHg0X3QgX19yZXYxOyBcCi0gIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFszXSwgX19zMS52YWxbM10sIDMsIDIsIDEsIDApOyBcCi0gIHVpbnQzMng0eDRfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQ0cV9sYW5lX3YoJl9fcmV0LCBfX3AwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgKGludDh4MTZfdClfX3JldjEudmFsWzJdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbM10sIF9fcDIsIDUwKTsgXAotIFwKLSAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAotICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzNdLCBfX3JldC52YWxbM10sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQ0cV9sYW5lX3UxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDE2eDh4NF90IF9fczEgPSBfX3AxOyBcCi0gIHVpbnQxNng4eDRfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQ0cV9sYW5lX3YoJl9fcmV0LCBfX3AwLCAoaW50OHgxNl90KV9fczEudmFsWzBdLCAoaW50OHgxNl90KV9fczEudmFsWzFdLCAoaW50OHgxNl90KV9fczEudmFsWzJdLCAoaW50OHgxNl90KV9fczEudmFsWzNdLCBfX3AyLCA0OSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQ0cV9sYW5lX3UxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDE2eDh4NF90IF9fczEgPSBfX3AxOyBcCi0gIHVpbnQxNng4eDRfdCBfX3JldjE7IFwKLSAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzNdLCBfX3MxLnZhbFszXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgdWludDE2eDh4NF90IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDRxX2xhbmVfdigmX19yZXQsIF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMl0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFszXSwgX19wMiwgNDkpOyBcCi0gXAotICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbM10sIF9fcmV0LnZhbFszXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZsZDRxX2xhbmVfZjMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDMyeDR4NF90IF9fczEgPSBfX3AxOyBcCi0gIGZsb2F0MzJ4NHg0X3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkNHFfbGFuZV92KCZfX3JldCwgX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgX19zMS52YWxbM10sIF9fcDIsIDQxKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDRxX2xhbmVfZjMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDMyeDR4NF90IF9fczEgPSBfX3AxOyBcCi0gIGZsb2F0MzJ4NHg0X3QgX19yZXYxOyBcCi0gIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFszXSwgX19zMS52YWxbM10sIDMsIDIsIDEsIDApOyBcCi0gIGZsb2F0MzJ4NHg0X3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkNHFfbGFuZV92KCZfX3JldCwgX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgX19yZXYxLnZhbFsyXSwgX19yZXYxLnZhbFszXSwgX19wMiwgNDEpOyBcCi0gXAotICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAotICBfX3JldC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbM10sIF9fcmV0LnZhbFszXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZsZDRxX2xhbmVfZjE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDE2eDh4NF90IF9fczEgPSBfX3AxOyBcCi0gIGZsb2F0MTZ4OHg0X3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkNHFfbGFuZV92KCZfX3JldCwgX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgX19zMS52YWxbM10sIF9fcDIsIDQwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDRxX2xhbmVfZjE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDE2eDh4NF90IF9fczEgPSBfX3AxOyBcCi0gIGZsb2F0MTZ4OHg0X3QgX19yZXYxOyBcCi0gIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFszXSwgX19zMS52YWxbM10sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIGZsb2F0MTZ4OHg0X3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkNHFfbGFuZV92KCZfX3JldCwgX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgX19yZXYxLnZhbFsyXSwgX19yZXYxLnZhbFszXSwgX19wMiwgNDApOyBcCi0gXAotICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbM10sIF9fcmV0LnZhbFszXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZsZDRxX2xhbmVfczMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQzMng0eDRfdCBfX3MxID0gX19wMTsgXAotICBpbnQzMng0eDRfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQ0cV9sYW5lX3YoJl9fcmV0LCBfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCBfX3MxLnZhbFszXSwgX19wMiwgMzQpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmxkNHFfbGFuZV9zMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDMyeDR4NF90IF9fczEgPSBfX3AxOyBcCi0gIGludDMyeDR4NF90IF9fcmV2MTsgXAotICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbM10sIF9fczEudmFsWzNdLCAzLCAyLCAxLCAwKTsgXAotICBpbnQzMng0eDRfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQ0cV9sYW5lX3YoJl9fcmV0LCBfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCBfX3JldjEudmFsWzJdLCBfX3JldjEudmFsWzNdLCBfX3AyLCAzNCk7IFwKLSBcCi0gIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAotICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0LnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFszXSwgX19yZXQudmFsWzNdLCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkNHFfbGFuZV9zMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDE2eDh4NF90IF9fczEgPSBfX3AxOyBcCi0gIGludDE2eDh4NF90IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDRxX2xhbmVfdigmX19yZXQsIF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIF9fczEudmFsWzNdLCBfX3AyLCAzMyk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQ0cV9sYW5lX3MxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MTZ4OHg0X3QgX19zMSA9IF9fcDE7IFwKLSAgaW50MTZ4OHg0X3QgX19yZXYxOyBcCi0gIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFszXSwgX19zMS52YWxbM10sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIGludDE2eDh4NF90IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDRxX2xhbmVfdigmX19yZXQsIF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcmV2MS52YWxbMl0sIF9fcmV2MS52YWxbM10sIF9fcDIsIDMzKTsgXAotIFwKLSAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzNdLCBfX3JldC52YWxbM10sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQ0X2xhbmVfdTgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ4eDh4NF90IF9fczEgPSBfX3AxOyBcCi0gIHVpbnQ4eDh4NF90IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDRfbGFuZV92KCZfX3JldCwgX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIChpbnQ4eDhfdClfX3MxLnZhbFsyXSwgKGludDh4OF90KV9fczEudmFsWzNdLCBfX3AyLCAxNik7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQ0X2xhbmVfdTgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ4eDh4NF90IF9fczEgPSBfX3AxOyBcCi0gIHVpbnQ4eDh4NF90IF9fcmV2MTsgXAotICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbM10sIF9fczEudmFsWzNdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICB1aW50OHg4eDRfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQ0X2xhbmVfdigmX19yZXQsIF9fcDAsIChpbnQ4eDhfdClfX3JldjEudmFsWzBdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsxXSwgKGludDh4OF90KV9fcmV2MS52YWxbMl0sIChpbnQ4eDhfdClfX3JldjEudmFsWzNdLCBfX3AyLCAxNik7IFwKLSBcCi0gIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0LnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFszXSwgX19yZXQudmFsWzNdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkNF9sYW5lX3UzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDMyeDJ4NF90IF9fczEgPSBfX3AxOyBcCi0gIHVpbnQzMngyeDRfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQ0X2xhbmVfdigmX19yZXQsIF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCAoaW50OHg4X3QpX19zMS52YWxbMl0sIChpbnQ4eDhfdClfX3MxLnZhbFszXSwgX19wMiwgMTgpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmxkNF9sYW5lX3UzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDMyeDJ4NF90IF9fczEgPSBfX3AxOyBcCi0gIHVpbnQzMngyeDRfdCBfX3JldjE7IFwKLSAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzNdLCBfX3MxLnZhbFszXSwgMSwgMCk7IFwKLSAgdWludDMyeDJ4NF90IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDRfbGFuZV92KCZfX3JldCwgX19wMCwgKGludDh4OF90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDhfdClfX3JldjEudmFsWzFdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsyXSwgKGludDh4OF90KV9fcmV2MS52YWxbM10sIF9fcDIsIDE4KTsgXAotIFwKLSAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxLCAwKTsgXAotICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzNdLCBfX3JldC52YWxbM10sIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQ0X2xhbmVfdTE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MTZ4NHg0X3QgX19zMSA9IF9fcDE7IFwKLSAgdWludDE2eDR4NF90IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDRfbGFuZV92KCZfX3JldCwgX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIChpbnQ4eDhfdClfX3MxLnZhbFsyXSwgKGludDh4OF90KV9fczEudmFsWzNdLCBfX3AyLCAxNyk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQ0X2xhbmVfdTE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MTZ4NHg0X3QgX19zMSA9IF9fcDE7IFwKLSAgdWludDE2eDR4NF90IF9fcmV2MTsgXAotICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbM10sIF9fczEudmFsWzNdLCAzLCAyLCAxLCAwKTsgXAotICB1aW50MTZ4NHg0X3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkNF9sYW5lX3YoJl9fcmV0LCBfX3AwLCAoaW50OHg4X3QpX19yZXYxLnZhbFswXSwgKGludDh4OF90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDhfdClfX3JldjEudmFsWzJdLCAoaW50OHg4X3QpX19yZXYxLnZhbFszXSwgX19wMiwgMTcpOyBcCi0gXAotICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAotICBfX3JldC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbM10sIF9fcmV0LnZhbFszXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZsZDRfbGFuZV9zOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50OHg4eDRfdCBfX3MxID0gX19wMTsgXAotICBpbnQ4eDh4NF90IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDRfbGFuZV92KCZfX3JldCwgX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIChpbnQ4eDhfdClfX3MxLnZhbFsyXSwgKGludDh4OF90KV9fczEudmFsWzNdLCBfX3AyLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDRfbGFuZV9zOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50OHg4eDRfdCBfX3MxID0gX19wMTsgXAotICBpbnQ4eDh4NF90IF9fcmV2MTsgXAotICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbM10sIF9fczEudmFsWzNdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBpbnQ4eDh4NF90IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDRfbGFuZV92KCZfX3JldCwgX19wMCwgKGludDh4OF90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDhfdClfX3JldjEudmFsWzFdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsyXSwgKGludDh4OF90KV9fcmV2MS52YWxbM10sIF9fcDIsIDApOyBcCi0gXAotICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbM10sIF9fcmV0LnZhbFszXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZsZDRfbGFuZV9mMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0MzJ4Mng0X3QgX19zMSA9IF9fcDE7IFwKLSAgZmxvYXQzMngyeDRfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQ0X2xhbmVfdigmX19yZXQsIF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIF9fczEudmFsWzNdLCBfX3AyLCA5KTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDRfbGFuZV9mMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0MzJ4Mng0X3QgX19zMSA9IF9fcDE7IFwKLSAgZmxvYXQzMngyeDRfdCBfX3JldjE7IFwKLSAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzNdLCBfX3MxLnZhbFszXSwgMSwgMCk7IFwKLSAgZmxvYXQzMngyeDRfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQ0X2xhbmVfdigmX19yZXQsIF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcmV2MS52YWxbMl0sIF9fcmV2MS52YWxbM10sIF9fcDIsIDkpOyBcCi0gXAotICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAxLCAwKTsgXAotICBfX3JldC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbM10sIF9fcmV0LnZhbFszXSwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZsZDRfbGFuZV9mMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0MTZ4NHg0X3QgX19zMSA9IF9fcDE7IFwKLSAgZmxvYXQxNng0eDRfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQ0X2xhbmVfdigmX19yZXQsIF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIF9fczEudmFsWzNdLCBfX3AyLCA4KTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDRfbGFuZV9mMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0MTZ4NHg0X3QgX19zMSA9IF9fcDE7IFwKLSAgZmxvYXQxNng0eDRfdCBfX3JldjE7IFwKLSAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzNdLCBfX3MxLnZhbFszXSwgMywgMiwgMSwgMCk7IFwKLSAgZmxvYXQxNng0eDRfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQ0X2xhbmVfdigmX19yZXQsIF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcmV2MS52YWxbMl0sIF9fcmV2MS52YWxbM10sIF9fcDIsIDgpOyBcCi0gXAotICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAotICBfX3JldC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbM10sIF9fcmV0LnZhbFszXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZsZDRfbGFuZV9zMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDMyeDJ4NF90IF9fczEgPSBfX3AxOyBcCi0gIGludDMyeDJ4NF90IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDRfbGFuZV92KCZfX3JldCwgX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgX19zMS52YWxbM10sIF9fcDIsIDIpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmxkNF9sYW5lX3MzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MzJ4Mng0X3QgX19zMSA9IF9fcDE7IFwKLSAgaW50MzJ4Mng0X3QgX19yZXYxOyBcCi0gIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFszXSwgX19zMS52YWxbM10sIDEsIDApOyBcCi0gIGludDMyeDJ4NF90IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDRfbGFuZV92KCZfX3JldCwgX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgX19yZXYxLnZhbFsyXSwgX19yZXYxLnZhbFszXSwgX19wMiwgMik7IFwKLSBcCi0gIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxLCAwKTsgXAotICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDEsIDApOyBcCi0gIF9fcmV0LnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFszXSwgX19yZXQudmFsWzNdLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkNF9sYW5lX3MxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MTZ4NHg0X3QgX19zMSA9IF9fcDE7IFwKLSAgaW50MTZ4NHg0X3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkNF9sYW5lX3YoJl9fcmV0LCBfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCBfX3MxLnZhbFszXSwgX19wMiwgMSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQ0X2xhbmVfczE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQxNng0eDRfdCBfX3MxID0gX19wMTsgXAotICBpbnQxNng0eDRfdCBfX3JldjE7IFwKLSAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzNdLCBfX3MxLnZhbFszXSwgMywgMiwgMSwgMCk7IFwKLSAgaW50MTZ4NHg0X3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkNF9sYW5lX3YoJl9fcmV0LCBfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCBfX3JldjEudmFsWzJdLCBfX3JldjEudmFsWzNdLCBfX3AyLCAxKTsgXAotIFwKLSAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAotICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzNdLCBfX3JldC52YWxbM10sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50OHgxNl90IHZtYXhxX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7Ci0gIHVpbnQ4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZtYXhxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDQ4KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDh4MTZfdCB2bWF4cV91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgewotICB1aW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50OHgxNl90IF9fcmV0OwotICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92bWF4cV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNDgpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDMyeDRfdCB2bWF4cV91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEpIHsKLSAgdWludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdm1heHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNTApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MzJ4NF90IHZtYXhxX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgewotICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICB1aW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOwotICB1aW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92bWF4cV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNTApOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDE2eDhfdCB2bWF4cV91MTYodWludDE2eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEpIHsKLSAgdWludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDE2eDhfdCkgX19idWlsdGluX25lb25fdm1heHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNDkpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MTZ4OF90IHZtYXhxX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSkgewotICB1aW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92bWF4cV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNDkpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50OHgxNl90IHZtYXhxX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgewotICBpbnQ4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDh4MTZfdCkgX19idWlsdGluX25lb25fdm1heHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMzIpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQ4eDE2X3Qgdm1heHFfczgoaW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7Ci0gIGludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQ4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDh4MTZfdCkgX19idWlsdGluX25lb25fdm1heHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDMyKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGZsb2F0MzJ4NF90IHZtYXhxX2YzMihmbG9hdDMyeDRfdCBfX3AwLCBmbG9hdDMyeDRfdCBfX3AxKSB7Ci0gIGZsb2F0MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDMyeDRfdCkgX19idWlsdGluX25lb25fdm1heHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBmbG9hdDMyeDRfdCB2bWF4cV9mMzIoZmxvYXQzMng0X3QgX19wMCwgZmxvYXQzMng0X3QgX19wMSkgewotICBmbG9hdDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgZmxvYXQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7Ci0gIGZsb2F0MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDMyeDRfdCkgX19idWlsdGluX25lb25fdm1heHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDQxKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDMyeDRfdCB2bWF4cV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7Ci0gIGludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92bWF4cV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAzNCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDMyeDRfdCB2bWF4cV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7Ci0gIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOwotICBpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdm1heHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDM0KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDE2eDhfdCB2bWF4cV9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7Ci0gIGludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92bWF4cV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAzMyk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDE2eDhfdCB2bWF4cV9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7Ci0gIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDE2eDhfdCkgX19idWlsdGluX25lb25fdm1heHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDMzKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ4eDhfdCB2bWF4X3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgewotICB1aW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdm1heF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTYpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50OHg4X3Qgdm1heF91OCh1aW50OHg4X3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKLSAgdWludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92bWF4X3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMTYpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDMyeDJfdCB2bWF4X3UzMih1aW50MzJ4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSkgewotICB1aW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92bWF4X3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxOCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQzMngyX3Qgdm1heF91MzIodWludDMyeDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEpIHsKLSAgdWludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgdWludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKLSAgdWludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdm1heF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDE4KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQxNng0X3Qgdm1heF91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEpIHsKLSAgdWludDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdm1heF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTcpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MTZ4NF90IHZtYXhfdTE2KHVpbnQxNng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxKSB7Ci0gIHVpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7Ci0gIHVpbnQxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZtYXhfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAxNyk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ4eDhfdCB2bWF4X3M4KGludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKLSAgaW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92bWF4X3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50OHg4X3Qgdm1heF9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7Ci0gIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92bWF4X3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMCk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBmbG9hdDMyeDJfdCB2bWF4X2YzMihmbG9hdDMyeDJfdCBfX3AwLCBmbG9hdDMyeDJfdCBfX3AxKSB7Ci0gIGZsb2F0MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDMyeDJfdCkgX19idWlsdGluX25lb25fdm1heF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgOSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGZsb2F0MzJ4Ml90IHZtYXhfZjMyKGZsb2F0MzJ4Ml90IF9fcDAsIGZsb2F0MzJ4Ml90IF9fcDEpIHsKLSAgZmxvYXQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIGZsb2F0MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOwotICBmbG9hdDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZtYXhfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCA5KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDMyeDJfdCB2bWF4X3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKLSAgaW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZtYXhfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDIpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQzMngyX3Qgdm1heF9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7Ci0gIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOwotICBpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdm1heF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDIpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MTZ4NF90IHZtYXhfczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgewotICBpbnQxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdm1heF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDE2eDRfdCB2bWF4X3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKLSAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICBpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7Ci0gIGludDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92bWF4X3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50OHgxNl90IHZtaW5xX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7Ci0gIHVpbnQ4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZtaW5xX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDQ4KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDh4MTZfdCB2bWlucV91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgewotICB1aW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50OHgxNl90IF9fcmV0OwotICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92bWlucV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNDgpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDMyeDRfdCB2bWlucV91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEpIHsKLSAgdWludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdm1pbnFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNTApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MzJ4NF90IHZtaW5xX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgewotICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICB1aW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOwotICB1aW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92bWlucV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNTApOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDE2eDhfdCB2bWlucV91MTYodWludDE2eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEpIHsKLSAgdWludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDE2eDhfdCkgX19idWlsdGluX25lb25fdm1pbnFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNDkpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MTZ4OF90IHZtaW5xX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSkgewotICB1aW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92bWlucV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNDkpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50OHgxNl90IHZtaW5xX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgewotICBpbnQ4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDh4MTZfdCkgX19idWlsdGluX25lb25fdm1pbnFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMzIpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQ4eDE2X3Qgdm1pbnFfczgoaW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7Ci0gIGludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQ4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDh4MTZfdCkgX19idWlsdGluX25lb25fdm1pbnFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDMyKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGZsb2F0MzJ4NF90IHZtaW5xX2YzMihmbG9hdDMyeDRfdCBfX3AwLCBmbG9hdDMyeDRfdCBfX3AxKSB7Ci0gIGZsb2F0MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDMyeDRfdCkgX19idWlsdGluX25lb25fdm1pbnFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBmbG9hdDMyeDRfdCB2bWlucV9mMzIoZmxvYXQzMng0X3QgX19wMCwgZmxvYXQzMng0X3QgX19wMSkgewotICBmbG9hdDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgZmxvYXQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7Ci0gIGZsb2F0MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDMyeDRfdCkgX19idWlsdGluX25lb25fdm1pbnFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDQxKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDMyeDRfdCB2bWlucV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7Ci0gIGludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92bWlucV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAzNCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDMyeDRfdCB2bWlucV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7Ci0gIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOwotICBpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdm1pbnFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDM0KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDE2eDhfdCB2bWlucV9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7Ci0gIGludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92bWlucV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAzMyk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDE2eDhfdCB2bWlucV9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7Ci0gIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDE2eDhfdCkgX19idWlsdGluX25lb25fdm1pbnFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDMzKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ4eDhfdCB2bWluX3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgewotICB1aW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdm1pbl92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTYpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50OHg4X3Qgdm1pbl91OCh1aW50OHg4X3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKLSAgdWludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92bWluX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMTYpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDMyeDJfdCB2bWluX3UzMih1aW50MzJ4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSkgewotICB1aW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92bWluX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxOCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQzMngyX3Qgdm1pbl91MzIodWludDMyeDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEpIHsKLSAgdWludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgdWludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKLSAgdWludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdm1pbl92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDE4KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQxNng0X3Qgdm1pbl91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEpIHsKLSAgdWludDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdm1pbl92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTcpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MTZ4NF90IHZtaW5fdTE2KHVpbnQxNng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxKSB7Ci0gIHVpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7Ci0gIHVpbnQxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZtaW5fdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAxNyk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ4eDhfdCB2bWluX3M4KGludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKLSAgaW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92bWluX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50OHg4X3Qgdm1pbl9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7Ci0gIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92bWluX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMCk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBmbG9hdDMyeDJfdCB2bWluX2YzMihmbG9hdDMyeDJfdCBfX3AwLCBmbG9hdDMyeDJfdCBfX3AxKSB7Ci0gIGZsb2F0MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDMyeDJfdCkgX19idWlsdGluX25lb25fdm1pbl92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgOSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGZsb2F0MzJ4Ml90IHZtaW5fZjMyKGZsb2F0MzJ4Ml90IF9fcDAsIGZsb2F0MzJ4Ml90IF9fcDEpIHsKLSAgZmxvYXQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIGZsb2F0MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOwotICBmbG9hdDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZtaW5fdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCA5KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDMyeDJfdCB2bWluX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKLSAgaW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZtaW5fdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDIpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQzMngyX3Qgdm1pbl9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7Ci0gIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOwotICBpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdm1pbl92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDIpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MTZ4NF90IHZtaW5fczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgewotICBpbnQxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdm1pbl92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDE2eDRfdCB2bWluX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKLSAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICBpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7Ci0gIGludDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92bWluX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50OHgxNl90IHZtbGFxX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZfdCBfX3AxLCB1aW50OHgxNl90IF9fcDIpIHsKLSAgdWludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSBfX3AwICsgX19wMSAqIF9fcDI7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ4eDE2X3Qgdm1sYXFfdTgodWludDh4MTZfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEsIHVpbnQ4eDE2X3QgX19wMikgewotICB1aW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50OHgxNl90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50OHgxNl90IF9fcmV0OwotICBfX3JldCA9IF9fcmV2MCArIF9fcmV2MSAqIF9fcmV2MjsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQzMng0X3Qgdm1sYXFfdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxLCB1aW50MzJ4NF90IF9fcDIpIHsKLSAgdWludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSBfX3AwICsgX19wMSAqIF9fcDI7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQzMng0X3Qgdm1sYXFfdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxLCB1aW50MzJ4NF90IF9fcDIpIHsKLSAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgdWludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKLSAgdWludDMyeDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAzLCAyLCAxLCAwKTsKLSAgdWludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSBfX3JldjAgKyBfX3JldjEgKiBfX3JldjI7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MTZ4OF90IHZtbGFxX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSwgdWludDE2eDhfdCBfX3AyKSB7Ci0gIHVpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19wMCArIF9fcDEgKiBfX3AyOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MTZ4OF90IHZtbGFxX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSwgdWludDE2eDhfdCBfX3AyKSB7Ci0gIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQxNng4X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19yZXYwICsgX19yZXYxICogX19yZXYyOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50OHgxNl90IHZtbGFxX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSwgaW50OHgxNl90IF9fcDIpIHsKLSAgaW50OHgxNl90IF9fcmV0OwotICBfX3JldCA9IF9fcDAgKyBfX3AxICogX19wMjsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50OHgxNl90IHZtbGFxX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSwgaW50OHgxNl90IF9fcDIpIHsKLSAgaW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDh4MTZfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50OHgxNl90IF9fcmV0OwotICBfX3JldCA9IF9fcmV2MCArIF9fcmV2MSAqIF9fcmV2MjsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGZsb2F0MzJ4NF90IHZtbGFxX2YzMihmbG9hdDMyeDRfdCBfX3AwLCBmbG9hdDMyeDRfdCBfX3AxLCBmbG9hdDMyeDRfdCBfX3AyKSB7Ci0gIGZsb2F0MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IF9fcDAgKyBfX3AxICogX19wMjsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgZmxvYXQzMng0X3Qgdm1sYXFfZjMyKGZsb2F0MzJ4NF90IF9fcDAsIGZsb2F0MzJ4NF90IF9fcDEsIGZsb2F0MzJ4NF90IF9fcDIpIHsKLSAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIGZsb2F0MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOwotICBmbG9hdDMyeDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAzLCAyLCAxLCAwKTsKLSAgZmxvYXQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19yZXYwICsgX19yZXYxICogX19yZXYyOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MzJ4NF90IHZtbGFxX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEsIGludDMyeDRfdCBfX3AyKSB7Ci0gIGludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSBfX3AwICsgX19wMSAqIF9fcDI7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDMyeDRfdCB2bWxhcV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxLCBpbnQzMng0X3QgX19wMikgewotICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKLSAgaW50MzJ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDMsIDIsIDEsIDApOwotICBpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19yZXYwICsgX19yZXYxICogX19yZXYyOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MTZ4OF90IHZtbGFxX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEsIGludDE2eDhfdCBfX3AyKSB7Ci0gIGludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSBfX3AwICsgX19wMSAqIF9fcDI7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDE2eDhfdCB2bWxhcV9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxLCBpbnQxNng4X3QgX19wMikgewotICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50MTZ4OF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19yZXYwICsgX19yZXYxICogX19yZXYyOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDh4OF90IHZtbGFfdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxLCB1aW50OHg4X3QgX19wMikgewotICB1aW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19wMCArIF9fcDEgKiBfX3AyOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50OHg4X3Qgdm1sYV91OCh1aW50OHg4X3QgX19wMCwgdWludDh4OF90IF9fcDEsIHVpbnQ4eDhfdCBfX3AyKSB7Ci0gIHVpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50OHg4X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSBfX3JldjAgKyBfX3JldjEgKiBfX3JldjI7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MzJ4Ml90IHZtbGFfdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxLCB1aW50MzJ4Ml90IF9fcDIpIHsKLSAgdWludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSBfX3AwICsgX19wMSAqIF9fcDI7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQzMngyX3Qgdm1sYV91MzIodWludDMyeDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEsIHVpbnQzMngyX3QgX19wMikgewotICB1aW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICB1aW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOwotICB1aW50MzJ4Ml90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDEsIDApOwotICB1aW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IF9fcmV2MCArIF9fcmV2MSAqIF9fcmV2MjsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQxNng0X3Qgdm1sYV91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEsIHVpbnQxNng0X3QgX19wMikgewotICB1aW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9IF9fcDAgKyBfX3AxICogX19wMjsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDE2eDRfdCB2bWxhX3UxNih1aW50MTZ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSwgdWludDE2eDRfdCBfX3AyKSB7Ci0gIHVpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7Ci0gIHVpbnQxNng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMywgMiwgMSwgMCk7Ci0gIHVpbnQxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19yZXYwICsgX19yZXYxICogX19yZXYyOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50OHg4X3Qgdm1sYV9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxLCBpbnQ4eDhfdCBfX3AyKSB7Ci0gIGludDh4OF90IF9fcmV0OwotICBfX3JldCA9IF9fcDAgKyBfX3AxICogX19wMjsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50OHg4X3Qgdm1sYV9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxLCBpbnQ4eDhfdCBfX3AyKSB7Ci0gIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50OHg4X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDh4OF90IF9fcmV0OwotICBfX3JldCA9IF9fcmV2MCArIF9fcmV2MSAqIF9fcmV2MjsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGZsb2F0MzJ4Ml90IHZtbGFfZjMyKGZsb2F0MzJ4Ml90IF9fcDAsIGZsb2F0MzJ4Ml90IF9fcDEsIGZsb2F0MzJ4Ml90IF9fcDIpIHsKLSAgZmxvYXQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19wMCArIF9fcDEgKiBfX3AyOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBmbG9hdDMyeDJfdCB2bWxhX2YzMihmbG9hdDMyeDJfdCBfX3AwLCBmbG9hdDMyeDJfdCBfX3AxLCBmbG9hdDMyeDJfdCBfX3AyKSB7Ci0gIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICBmbG9hdDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKLSAgZmxvYXQzMngyX3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMSwgMCk7Ci0gIGZsb2F0MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IF9fcmV2MCArIF9fcmV2MSAqIF9fcmV2MjsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDMyeDJfdCB2bWxhX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEsIGludDMyeDJfdCBfX3AyKSB7Ci0gIGludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSBfX3AwICsgX19wMSAqIF9fcDI7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDMyeDJfdCB2bWxhX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEsIGludDMyeDJfdCBfX3AyKSB7Ci0gIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOwotICBpbnQzMngyX3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMSwgMCk7Ci0gIGludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSBfX3JldjAgKyBfX3JldjEgKiBfX3JldjI7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQxNng0X3Qgdm1sYV9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxLCBpbnQxNng0X3QgX19wMikgewotICBpbnQxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19wMCArIF9fcDEgKiBfX3AyOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQxNng0X3Qgdm1sYV9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxLCBpbnQxNng0X3QgX19wMikgewotICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKLSAgaW50MTZ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDMsIDIsIDEsIDApOwotICBpbnQxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19yZXYwICsgX19yZXYxICogX19yZXYyOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdm1sYXFfbGFuZV91MzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDMyeDRfdCBfX3MxID0gX19wMTsgXAotICB1aW50MzJ4Ml90IF9fczIgPSBfX3AyOyBcCi0gIHVpbnQzMng0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSBfX3MwICsgX19zMSAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdm1sYXFfbGFuZV91MzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDMyeDRfdCBfX3MxID0gX19wMTsgXAotICB1aW50MzJ4Ml90IF9fczIgPSBfX3AyOyBcCi0gIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKLSAgdWludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAotICB1aW50MzJ4Ml90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDEsIDApOyBcCi0gIHVpbnQzMng0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSBfX3JldjAgKyBfX3JldjEgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMywgX19wMywgX19wMyk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bWxhcV9sYW5lX3UxNihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDE2eDhfdCBfX3MwID0gX19wMDsgXAotICB1aW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCi0gIHVpbnQxNng0X3QgX19zMiA9IF9fcDI7IFwKLSAgdWludDE2eDhfdCBfX3JldDsgXAotICBfX3JldCA9IF9fczAgKyBfX3MxICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMywgX19wMywgX19wMywgX19wMywgX19wMywgX19wMywgX19wMyk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bWxhcV9sYW5lX3UxNihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDE2eDhfdCBfX3MwID0gX19wMDsgXAotICB1aW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCi0gIHVpbnQxNng0X3QgX19zMiA9IF9fcDI7IFwKLSAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICB1aW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIHVpbnQxNng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgMywgMiwgMSwgMCk7IFwKLSAgdWludDE2eDhfdCBfX3JldDsgXAotICBfX3JldCA9IF9fcmV2MCArIF9fcmV2MSAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MiwgX19yZXYyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZtbGFxX2xhbmVfZjMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDMyeDRfdCBfX3MwID0gX19wMDsgXAotICBmbG9hdDMyeDRfdCBfX3MxID0gX19wMTsgXAotICBmbG9hdDMyeDJfdCBfX3MyID0gX19wMjsgXAotICBmbG9hdDMyeDRfdCBfX3JldDsgXAotICBfX3JldCA9IF9fczAgKyBfX3MxICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMywgX19wMywgX19wMyk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bWxhcV9sYW5lX2YzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQzMng0X3QgX19zMCA9IF9fcDA7IFwKLSAgZmxvYXQzMng0X3QgX19zMSA9IF9fcDE7IFwKLSAgZmxvYXQzMngyX3QgX19zMiA9IF9fcDI7IFwKLSAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKLSAgZmxvYXQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKLSAgZmxvYXQzMngyX3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgMSwgMCk7IFwKLSAgZmxvYXQzMng0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSBfX3JldjAgKyBfX3JldjEgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMywgX19wMywgX19wMyk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bWxhcV9sYW5lX3MzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCi0gIGludDMyeDRfdCBfX3MxID0gX19wMTsgXAotICBpbnQzMngyX3QgX19zMiA9IF9fcDI7IFwKLSAgaW50MzJ4NF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gX19zMCArIF9fczEgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZtbGFxX2xhbmVfczMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCi0gIGludDMyeDJfdCBfX3MyID0gX19wMjsgXAotICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKLSAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCi0gIGludDMyeDJfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCAxLCAwKTsgXAotICBpbnQzMng0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSBfX3JldjAgKyBfX3JldjEgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMywgX19wMywgX19wMyk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bWxhcV9sYW5lX3MxNihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCi0gIGludDE2eDhfdCBfX3MxID0gX19wMTsgXAotICBpbnQxNng0X3QgX19zMiA9IF9fcDI7IFwKLSAgaW50MTZ4OF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gX19zMCArIF9fczEgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZtbGFxX2xhbmVfczE2KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCi0gIGludDE2eDRfdCBfX3MyID0gX19wMjsgXAotICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIGludDE2eDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCAzLCAyLCAxLCAwKTsgXAotICBpbnQxNng4X3QgX19yZXQ7IFwKLSAgX19yZXQgPSBfX3JldjAgKyBfX3JldjEgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMywgX19wMywgX19wMywgX19wMywgX19wMywgX19wMywgX19wMyk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bWxhX2xhbmVfdTMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKLSAgdWludDMyeDJfdCBfX3MyID0gX19wMjsgXAotICB1aW50MzJ4Ml90IF9fcmV0OyBcCi0gIF9fcmV0ID0gX19zMCArIF9fczEgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCBfX3AzLCBfX3AzKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZtbGFfbGFuZV91MzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDMyeDJfdCBfX3MxID0gX19wMTsgXAotICB1aW50MzJ4Ml90IF9fczIgPSBfX3AyOyBcCi0gIHVpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKLSAgdWludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxLCAwKTsgXAotICB1aW50MzJ4Ml90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDEsIDApOyBcCi0gIHVpbnQzMngyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSBfX3JldjAgKyBfX3JldjEgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMyk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bWxhX2xhbmVfdTE2KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKLSAgdWludDE2eDRfdCBfX3MyID0gX19wMjsgXAotICB1aW50MTZ4NF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gX19zMCArIF9fczEgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZtbGFfbGFuZV91MTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDE2eDRfdCBfX3MxID0gX19wMTsgXAotICB1aW50MTZ4NF90IF9fczIgPSBfX3AyOyBcCi0gIHVpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKLSAgdWludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAotICB1aW50MTZ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDMsIDIsIDEsIDApOyBcCi0gIHVpbnQxNng0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSBfX3JldjAgKyBfX3JldjEgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMywgX19wMywgX19wMyk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bWxhX2xhbmVfZjMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDMyeDJfdCBfX3MwID0gX19wMDsgXAotICBmbG9hdDMyeDJfdCBfX3MxID0gX19wMTsgXAotICBmbG9hdDMyeDJfdCBfX3MyID0gX19wMjsgXAotICBmbG9hdDMyeDJfdCBfX3JldDsgXAotICBfX3JldCA9IF9fczAgKyBfX3MxICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMyk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bWxhX2xhbmVfZjMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDMyeDJfdCBfX3MwID0gX19wMDsgXAotICBmbG9hdDMyeDJfdCBfX3MxID0gX19wMTsgXAotICBmbG9hdDMyeDJfdCBfX3MyID0gX19wMjsgXAotICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAotICBmbG9hdDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxLCAwKTsgXAotICBmbG9hdDMyeDJfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCAxLCAwKTsgXAotICBmbG9hdDMyeDJfdCBfX3JldDsgXAotICBfX3JldCA9IF9fcmV2MCArIF9fcmV2MSAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MiwgX19yZXYyLCBfX3AzLCBfX3AzKTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZtbGFfbGFuZV9zMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDMyeDJfdCBfX3MwID0gX19wMDsgXAotICBpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKLSAgaW50MzJ4Ml90IF9fczIgPSBfX3AyOyBcCi0gIGludDMyeDJfdCBfX3JldDsgXAotICBfX3JldCA9IF9fczAgKyBfX3MxICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMyk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bWxhX2xhbmVfczMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCi0gIGludDMyeDJfdCBfX3MyID0gX19wMjsgXAotICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKLSAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCi0gIGludDMyeDJfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCAxLCAwKTsgXAotICBpbnQzMngyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSBfX3JldjAgKyBfX3JldjEgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMyk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bWxhX2xhbmVfczE2KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCi0gIGludDE2eDRfdCBfX3MyID0gX19wMjsgXAotICBpbnQxNng0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSBfX3MwICsgX19zMSAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdm1sYV9sYW5lX3MxNihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCi0gIGludDE2eDRfdCBfX3MxID0gX19wMTsgXAotICBpbnQxNng0X3QgX19zMiA9IF9fcDI7IFwKLSAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCi0gIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAotICBpbnQxNng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgMywgMiwgMSwgMCk7IFwKLSAgaW50MTZ4NF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gX19yZXYwICsgX19yZXYxICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDMyeDRfdCB2bWxhcV9uX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSwgdWludDMyX3QgX19wMikgewotICB1aW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IF9fcDAgKyBfX3AxICogKHVpbnQzMng0X3QpIHtfX3AyLCBfX3AyLCBfX3AyLCBfX3AyfTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDMyeDRfdCB2bWxhcV9uX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSwgdWludDMyX3QgX19wMikgewotICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICB1aW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOwotICB1aW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IF9fcmV2MCArIF9fcmV2MSAqICh1aW50MzJ4NF90KSB7X19wMiwgX19wMiwgX19wMiwgX19wMn07Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MTZ4OF90IHZtbGFxX25fdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxLCB1aW50MTZfdCBfX3AyKSB7Ci0gIHVpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19wMCArIF9fcDEgKiAodWludDE2eDhfdCkge19fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDJ9OwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MTZ4OF90IHZtbGFxX25fdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxLCB1aW50MTZfdCBfX3AyKSB7Ci0gIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19yZXYwICsgX19yZXYxICogKHVpbnQxNng4X3QpIHtfX3AyLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyfTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGZsb2F0MzJ4NF90IHZtbGFxX25fZjMyKGZsb2F0MzJ4NF90IF9fcDAsIGZsb2F0MzJ4NF90IF9fcDEsIGZsb2F0MzJfdCBfX3AyKSB7Ci0gIGZsb2F0MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IF9fcDAgKyBfX3AxICogKGZsb2F0MzJ4NF90KSB7X19wMiwgX19wMiwgX19wMiwgX19wMn07Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGZsb2F0MzJ4NF90IHZtbGFxX25fZjMyKGZsb2F0MzJ4NF90IF9fcDAsIGZsb2F0MzJ4NF90IF9fcDEsIGZsb2F0MzJfdCBfX3AyKSB7Ci0gIGZsb2F0MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICBmbG9hdDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKLSAgZmxvYXQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19yZXYwICsgX19yZXYxICogKGZsb2F0MzJ4NF90KSB7X19wMiwgX19wMiwgX19wMiwgX19wMn07Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQzMng0X3Qgdm1sYXFfbl9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxLCBpbnQzMl90IF9fcDIpIHsKLSAgaW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IF9fcDAgKyBfX3AxICogKGludDMyeDRfdCkge19fcDIsIF9fcDIsIF9fcDIsIF9fcDJ9OwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQzMng0X3Qgdm1sYXFfbl9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxLCBpbnQzMl90IF9fcDIpIHsKLSAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7Ci0gIGludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSBfX3JldjAgKyBfX3JldjEgKiAoaW50MzJ4NF90KSB7X19wMiwgX19wMiwgX19wMiwgX19wMn07Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQxNng4X3Qgdm1sYXFfbl9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxLCBpbnQxNl90IF9fcDIpIHsKLSAgaW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IF9fcDAgKyBfX3AxICogKGludDE2eDhfdCkge19fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDJ9OwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQxNng4X3Qgdm1sYXFfbl9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxLCBpbnQxNl90IF9fcDIpIHsKLSAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSBfX3JldjAgKyBfX3JldjEgKiAoaW50MTZ4OF90KSB7X19wMiwgX19wMiwgX19wMiwgX19wMiwgX19wMiwgX19wMiwgX19wMiwgX19wMn07Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MzJ4Ml90IHZtbGFfbl91MzIodWludDMyeDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEsIHVpbnQzMl90IF9fcDIpIHsKLSAgdWludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSBfX3AwICsgX19wMSAqICh1aW50MzJ4Ml90KSB7X19wMiwgX19wMn07Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQzMngyX3Qgdm1sYV9uX3UzMih1aW50MzJ4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSwgdWludDMyX3QgX19wMikgewotICB1aW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICB1aW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOwotICB1aW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IF9fcmV2MCArIF9fcmV2MSAqICh1aW50MzJ4Ml90KSB7X19wMiwgX19wMn07Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MTZ4NF90IHZtbGFfbl91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEsIHVpbnQxNl90IF9fcDIpIHsKLSAgdWludDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSBfX3AwICsgX19wMSAqICh1aW50MTZ4NF90KSB7X19wMiwgX19wMiwgX19wMiwgX19wMn07Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQxNng0X3Qgdm1sYV9uX3UxNih1aW50MTZ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSwgdWludDE2X3QgX19wMikgewotICB1aW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICB1aW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOwotICB1aW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9IF9fcmV2MCArIF9fcmV2MSAqICh1aW50MTZ4NF90KSB7X19wMiwgX19wMiwgX19wMiwgX19wMn07Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBmbG9hdDMyeDJfdCB2bWxhX25fZjMyKGZsb2F0MzJ4Ml90IF9fcDAsIGZsb2F0MzJ4Ml90IF9fcDEsIGZsb2F0MzJfdCBfX3AyKSB7Ci0gIGZsb2F0MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IF9fcDAgKyBfX3AxICogKGZsb2F0MzJ4Ml90KSB7X19wMiwgX19wMn07Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGZsb2F0MzJ4Ml90IHZtbGFfbl9mMzIoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSwgZmxvYXQzMl90IF9fcDIpIHsKLSAgZmxvYXQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIGZsb2F0MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOwotICBmbG9hdDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSBfX3JldjAgKyBfX3JldjEgKiAoZmxvYXQzMngyX3QpIHtfX3AyLCBfX3AyfTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDMyeDJfdCB2bWxhX25fczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSwgaW50MzJfdCBfX3AyKSB7Ci0gIGludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSBfX3AwICsgX19wMSAqIChpbnQzMngyX3QpIHtfX3AyLCBfX3AyfTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MzJ4Ml90IHZtbGFfbl9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxLCBpbnQzMl90IF9fcDIpIHsKLSAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7Ci0gIGludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSBfX3JldjAgKyBfX3JldjEgKiAoaW50MzJ4Ml90KSB7X19wMiwgX19wMn07Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQxNng0X3Qgdm1sYV9uX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEsIGludDE2X3QgX19wMikgewotICBpbnQxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19wMCArIF9fcDEgKiAoaW50MTZ4NF90KSB7X19wMiwgX19wMiwgX19wMiwgX19wMn07Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDE2eDRfdCB2bWxhX25fczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSwgaW50MTZfdCBfX3AyKSB7Ci0gIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOwotICBpbnQxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19yZXYwICsgX19yZXYxICogKGludDE2eDRfdCkge19fcDIsIF9fcDIsIF9fcDIsIF9fcDJ9OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDh4MTZfdCB2bWxzcV91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSwgdWludDh4MTZfdCBfX3AyKSB7Ci0gIHVpbnQ4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19wMCAtIF9fcDEgKiBfX3AyOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50OHgxNl90IHZtbHNxX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZfdCBfX3AxLCB1aW50OHgxNl90IF9fcDIpIHsKLSAgdWludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDh4MTZfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSBfX3JldjAgLSBfX3JldjEgKiBfX3JldjI7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MzJ4NF90IHZtbHNxX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSwgdWludDMyeDRfdCBfX3AyKSB7Ci0gIHVpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19wMCAtIF9fcDEgKiBfX3AyOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MzJ4NF90IHZtbHNxX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSwgdWludDMyeDRfdCBfX3AyKSB7Ci0gIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7Ci0gIHVpbnQzMng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMywgMiwgMSwgMCk7Ci0gIHVpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19yZXYwIC0gX19yZXYxICogX19yZXYyOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDE2eDhfdCB2bWxzcV91MTYodWludDE2eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEsIHVpbnQxNng4X3QgX19wMikgewotICB1aW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IF9fcDAgLSBfX3AxICogX19wMjsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDE2eDhfdCB2bWxzcV91MTYodWludDE2eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEsIHVpbnQxNng4X3QgX19wMikgewotICB1aW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50MTZ4OF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IF9fcmV2MCAtIF9fcmV2MSAqIF9fcmV2MjsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDh4MTZfdCB2bWxzcV9zOChpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEsIGludDh4MTZfdCBfX3AyKSB7Ci0gIGludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSBfX3AwIC0gX19wMSAqIF9fcDI7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDh4MTZfdCB2bWxzcV9zOChpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEsIGludDh4MTZfdCBfX3AyKSB7Ci0gIGludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQ4eDE2X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSBfX3JldjAgLSBfX3JldjEgKiBfX3JldjI7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBmbG9hdDMyeDRfdCB2bWxzcV9mMzIoZmxvYXQzMng0X3QgX19wMCwgZmxvYXQzMng0X3QgX19wMSwgZmxvYXQzMng0X3QgX19wMikgewotICBmbG9hdDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSBfX3AwIC0gX19wMSAqIF9fcDI7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGZsb2F0MzJ4NF90IHZtbHNxX2YzMihmbG9hdDMyeDRfdCBfX3AwLCBmbG9hdDMyeDRfdCBfX3AxLCBmbG9hdDMyeDRfdCBfX3AyKSB7Ci0gIGZsb2F0MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICBmbG9hdDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKLSAgZmxvYXQzMng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMywgMiwgMSwgMCk7Ci0gIGZsb2F0MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IF9fcmV2MCAtIF9fcmV2MSAqIF9fcmV2MjsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDMyeDRfdCB2bWxzcV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxLCBpbnQzMng0X3QgX19wMikgewotICBpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19wMCAtIF9fcDEgKiBfX3AyOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQzMng0X3Qgdm1sc3FfczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSwgaW50MzJ4NF90IF9fcDIpIHsKLSAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7Ci0gIGludDMyeDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAzLCAyLCAxLCAwKTsKLSAgaW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IF9fcmV2MCAtIF9fcmV2MSAqIF9fcmV2MjsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDE2eDhfdCB2bWxzcV9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxLCBpbnQxNng4X3QgX19wMikgewotICBpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19wMCAtIF9fcDEgKiBfX3AyOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQxNng4X3Qgdm1sc3FfczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSwgaW50MTZ4OF90IF9fcDIpIHsKLSAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDE2eDhfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IF9fcmV2MCAtIF9fcmV2MSAqIF9fcmV2MjsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ4eDhfdCB2bWxzX3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSwgdWludDh4OF90IF9fcDIpIHsKLSAgdWludDh4OF90IF9fcmV0OwotICBfX3JldCA9IF9fcDAgLSBfX3AxICogX19wMjsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDh4OF90IHZtbHNfdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxLCB1aW50OHg4X3QgX19wMikgewotICB1aW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDh4OF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19yZXYwIC0gX19yZXYxICogX19yZXYyOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDMyeDJfdCB2bWxzX3UzMih1aW50MzJ4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSwgdWludDMyeDJfdCBfX3AyKSB7Ci0gIHVpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19wMCAtIF9fcDEgKiBfX3AyOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MzJ4Ml90IHZtbHNfdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxLCB1aW50MzJ4Ml90IF9fcDIpIHsKLSAgdWludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgdWludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKLSAgdWludDMyeDJfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAxLCAwKTsKLSAgdWludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSBfX3JldjAgLSBfX3JldjEgKiBfX3JldjI7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MTZ4NF90IHZtbHNfdTE2KHVpbnQxNng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxLCB1aW50MTZ4NF90IF9fcDIpIHsKLSAgdWludDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSBfX3AwIC0gX19wMSAqIF9fcDI7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQxNng0X3Qgdm1sc191MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEsIHVpbnQxNng0X3QgX19wMikgewotICB1aW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICB1aW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOwotICB1aW50MTZ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDMsIDIsIDEsIDApOwotICB1aW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9IF9fcmV2MCAtIF9fcmV2MSAqIF9fcmV2MjsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDh4OF90IHZtbHNfczgoaW50OHg4X3QgX19wMCwgaW50OHg4X3QgX19wMSwgaW50OHg4X3QgX19wMikgewotICBpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSBfX3AwIC0gX19wMSAqIF9fcDI7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDh4OF90IHZtbHNfczgoaW50OHg4X3QgX19wMCwgaW50OHg4X3QgX19wMSwgaW50OHg4X3QgX19wMikgewotICBpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDh4OF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSBfX3JldjAgLSBfX3JldjEgKiBfX3JldjI7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBmbG9hdDMyeDJfdCB2bWxzX2YzMihmbG9hdDMyeDJfdCBfX3AwLCBmbG9hdDMyeDJfdCBfX3AxLCBmbG9hdDMyeDJfdCBfX3AyKSB7Ci0gIGZsb2F0MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IF9fcDAgLSBfX3AxICogX19wMjsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgZmxvYXQzMngyX3Qgdm1sc19mMzIoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSwgZmxvYXQzMngyX3QgX19wMikgewotICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgZmxvYXQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7Ci0gIGZsb2F0MzJ4Ml90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDEsIDApOwotICBmbG9hdDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSBfX3JldjAgLSBfX3JldjEgKiBfX3JldjI7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQzMngyX3Qgdm1sc19zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxLCBpbnQzMngyX3QgX19wMikgewotICBpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19wMCAtIF9fcDEgKiBfX3AyOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQzMngyX3Qgdm1sc19zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxLCBpbnQzMngyX3QgX19wMikgewotICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIGludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKLSAgaW50MzJ4Ml90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDEsIDApOwotICBpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19yZXYwIC0gX19yZXYxICogX19yZXYyOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MTZ4NF90IHZtbHNfczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSwgaW50MTZ4NF90IF9fcDIpIHsKLSAgaW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9IF9fcDAgLSBfX3AxICogX19wMjsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MTZ4NF90IHZtbHNfczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSwgaW50MTZ4NF90IF9fcDIpIHsKLSAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICBpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7Ci0gIGludDE2eDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAzLCAyLCAxLCAwKTsKLSAgaW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9IF9fcmV2MCAtIF9fcmV2MSAqIF9fcmV2MjsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZtbHNxX2xhbmVfdTMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKLSAgdWludDMyeDJfdCBfX3MyID0gX19wMjsgXAotICB1aW50MzJ4NF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gX19zMCAtIF9fczEgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZtbHNxX2xhbmVfdTMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKLSAgdWludDMyeDJfdCBfX3MyID0gX19wMjsgXAotICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCi0gIHVpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKLSAgdWludDMyeDJfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCAxLCAwKTsgXAotICB1aW50MzJ4NF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gX19yZXYwIC0gX19yZXYxICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdm1sc3FfbGFuZV91MTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDE2eDhfdCBfX3MxID0gX19wMTsgXAotICB1aW50MTZ4NF90IF9fczIgPSBfX3AyOyBcCi0gIHVpbnQxNng4X3QgX19yZXQ7IFwKLSAgX19yZXQgPSBfX3MwIC0gX19zMSAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdm1sc3FfbGFuZV91MTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDE2eDhfdCBfX3MxID0gX19wMTsgXAotICB1aW50MTZ4NF90IF9fczIgPSBfX3AyOyBcCi0gIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgdWludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICB1aW50MTZ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDMsIDIsIDEsIDApOyBcCi0gIHVpbnQxNng4X3QgX19yZXQ7IFwKLSAgX19yZXQgPSBfX3JldjAgLSBfX3JldjEgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMywgX19wMywgX19wMywgX19wMywgX19wMywgX19wMywgX19wMyk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bWxzcV9sYW5lX2YzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQzMng0X3QgX19zMCA9IF9fcDA7IFwKLSAgZmxvYXQzMng0X3QgX19zMSA9IF9fcDE7IFwKLSAgZmxvYXQzMngyX3QgX19zMiA9IF9fcDI7IFwKLSAgZmxvYXQzMng0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSBfX3MwIC0gX19zMSAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdm1sc3FfbGFuZV9mMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0MzJ4NF90IF9fczAgPSBfX3AwOyBcCi0gIGZsb2F0MzJ4NF90IF9fczEgPSBfX3AxOyBcCi0gIGZsb2F0MzJ4Ml90IF9fczIgPSBfX3AyOyBcCi0gIGZsb2F0MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCi0gIGZsb2F0MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCi0gIGZsb2F0MzJ4Ml90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDEsIDApOyBcCi0gIGZsb2F0MzJ4NF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gX19yZXYwIC0gX19yZXYxICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdm1sc3FfbGFuZV9zMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAotICBpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKLSAgaW50MzJ4Ml90IF9fczIgPSBfX3AyOyBcCi0gIGludDMyeDRfdCBfX3JldDsgXAotICBfX3JldCA9IF9fczAgLSBfX3MxICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMywgX19wMywgX19wMyk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bWxzcV9sYW5lX3MzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCi0gIGludDMyeDRfdCBfX3MxID0gX19wMTsgXAotICBpbnQzMngyX3QgX19zMiA9IF9fcDI7IFwKLSAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCi0gIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAotICBpbnQzMngyX3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgMSwgMCk7IFwKLSAgaW50MzJ4NF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gX19yZXYwIC0gX19yZXYxICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdm1sc3FfbGFuZV9zMTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDE2eDhfdCBfX3MwID0gX19wMDsgXAotICBpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKLSAgaW50MTZ4NF90IF9fczIgPSBfX3AyOyBcCi0gIGludDE2eDhfdCBfX3JldDsgXAotICBfX3JldCA9IF9fczAgLSBfX3MxICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMywgX19wMywgX19wMywgX19wMywgX19wMywgX19wMywgX19wMyk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bWxzcV9sYW5lX3MxNihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCi0gIGludDE2eDhfdCBfX3MxID0gX19wMTsgXAotICBpbnQxNng0X3QgX19zMiA9IF9fcDI7IFwKLSAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBpbnQxNng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgMywgMiwgMSwgMCk7IFwKLSAgaW50MTZ4OF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gX19yZXYwIC0gX19yZXYxICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdm1sc19sYW5lX3UzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDMyeDJfdCBfX3MwID0gX19wMDsgXAotICB1aW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCi0gIHVpbnQzMngyX3QgX19zMiA9IF9fcDI7IFwKLSAgdWludDMyeDJfdCBfX3JldDsgXAotICBfX3JldCA9IF9fczAgLSBfX3MxICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMyk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bWxzX2xhbmVfdTMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKLSAgdWludDMyeDJfdCBfX3MyID0gX19wMjsgXAotICB1aW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCi0gIHVpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMSwgMCk7IFwKLSAgdWludDMyeDJfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCAxLCAwKTsgXAotICB1aW50MzJ4Ml90IF9fcmV0OyBcCi0gIF9fcmV0ID0gX19yZXYwIC0gX19yZXYxICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdm1sc19sYW5lX3UxNihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDE2eDRfdCBfX3MwID0gX19wMDsgXAotICB1aW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCi0gIHVpbnQxNng0X3QgX19zMiA9IF9fcDI7IFwKLSAgdWludDE2eDRfdCBfX3JldDsgXAotICBfX3JldCA9IF9fczAgLSBfX3MxICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMywgX19wMywgX19wMyk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bWxzX2xhbmVfdTE2KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKLSAgdWludDE2eDRfdCBfX3MyID0gX19wMjsgXAotICB1aW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCi0gIHVpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKLSAgdWludDE2eDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCAzLCAyLCAxLCAwKTsgXAotICB1aW50MTZ4NF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gX19yZXYwIC0gX19yZXYxICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdm1sc19sYW5lX2YzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQzMngyX3QgX19zMCA9IF9fcDA7IFwKLSAgZmxvYXQzMngyX3QgX19zMSA9IF9fcDE7IFwKLSAgZmxvYXQzMngyX3QgX19zMiA9IF9fcDI7IFwKLSAgZmxvYXQzMngyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSBfX3MwIC0gX19zMSAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIF9fcDMsIF9fcDMpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdm1sc19sYW5lX2YzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQzMngyX3QgX19zMCA9IF9fcDA7IFwKLSAgZmxvYXQzMngyX3QgX19zMSA9IF9fcDE7IFwKLSAgZmxvYXQzMngyX3QgX19zMiA9IF9fcDI7IFwKLSAgZmxvYXQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKLSAgZmxvYXQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMSwgMCk7IFwKLSAgZmxvYXQzMngyX3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgMSwgMCk7IFwKLSAgZmxvYXQzMngyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSBfX3JldjAgLSBfX3JldjEgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMyk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bWxzX2xhbmVfczMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCi0gIGludDMyeDJfdCBfX3MyID0gX19wMjsgXAotICBpbnQzMngyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSBfX3MwIC0gX19zMSAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIF9fcDMsIF9fcDMpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdm1sc19sYW5lX3MzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCi0gIGludDMyeDJfdCBfX3MxID0gX19wMTsgXAotICBpbnQzMngyX3QgX19zMiA9IF9fcDI7IFwKLSAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCi0gIGludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxLCAwKTsgXAotICBpbnQzMngyX3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgMSwgMCk7IFwKLSAgaW50MzJ4Ml90IF9fcmV0OyBcCi0gIF9fcmV0ID0gX19yZXYwIC0gX19yZXYxICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdm1sc19sYW5lX3MxNihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCi0gIGludDE2eDRfdCBfX3MxID0gX19wMTsgXAotICBpbnQxNng0X3QgX19zMiA9IF9fcDI7IFwKLSAgaW50MTZ4NF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gX19zMCAtIF9fczEgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZtbHNfbGFuZV9zMTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDE2eDRfdCBfX3MwID0gX19wMDsgXAotICBpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKLSAgaW50MTZ4NF90IF9fczIgPSBfX3AyOyBcCi0gIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAotICBpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKLSAgaW50MTZ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDMsIDIsIDEsIDApOyBcCi0gIGludDE2eDRfdCBfX3JldDsgXAotICBfX3JldCA9IF9fcmV2MCAtIF9fcmV2MSAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MiwgX19yZXYyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQzMng0X3Qgdm1sc3Ffbl91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEsIHVpbnQzMl90IF9fcDIpIHsKLSAgdWludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSBfX3AwIC0gX19wMSAqICh1aW50MzJ4NF90KSB7X19wMiwgX19wMiwgX19wMiwgX19wMn07Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQzMng0X3Qgdm1sc3Ffbl91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEsIHVpbnQzMl90IF9fcDIpIHsKLSAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgdWludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKLSAgdWludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSBfX3JldjAgLSBfX3JldjEgKiAodWludDMyeDRfdCkge19fcDIsIF9fcDIsIF9fcDIsIF9fcDJ9OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDE2eDhfdCB2bWxzcV9uX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSwgdWludDE2X3QgX19wMikgewotICB1aW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IF9fcDAgLSBfX3AxICogKHVpbnQxNng4X3QpIHtfX3AyLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyfTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDE2eDhfdCB2bWxzcV9uX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSwgdWludDE2X3QgX19wMikgewotICB1aW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IF9fcmV2MCAtIF9fcmV2MSAqICh1aW50MTZ4OF90KSB7X19wMiwgX19wMiwgX19wMiwgX19wMiwgX19wMiwgX19wMiwgX19wMiwgX19wMn07Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBmbG9hdDMyeDRfdCB2bWxzcV9uX2YzMihmbG9hdDMyeDRfdCBfX3AwLCBmbG9hdDMyeDRfdCBfX3AxLCBmbG9hdDMyX3QgX19wMikgewotICBmbG9hdDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSBfX3AwIC0gX19wMSAqIChmbG9hdDMyeDRfdCkge19fcDIsIF9fcDIsIF9fcDIsIF9fcDJ9OwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBmbG9hdDMyeDRfdCB2bWxzcV9uX2YzMihmbG9hdDMyeDRfdCBfX3AwLCBmbG9hdDMyeDRfdCBfX3AxLCBmbG9hdDMyX3QgX19wMikgewotICBmbG9hdDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgZmxvYXQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7Ci0gIGZsb2F0MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IF9fcmV2MCAtIF9fcmV2MSAqIChmbG9hdDMyeDRfdCkge19fcDIsIF9fcDIsIF9fcDIsIF9fcDJ9OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MzJ4NF90IHZtbHNxX25fczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSwgaW50MzJfdCBfX3AyKSB7Ci0gIGludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSBfX3AwIC0gX19wMSAqIChpbnQzMng0X3QpIHtfX3AyLCBfX3AyLCBfX3AyLCBfX3AyfTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MzJ4NF90IHZtbHNxX25fczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSwgaW50MzJfdCBfX3AyKSB7Ci0gIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOwotICBpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19yZXYwIC0gX19yZXYxICogKGludDMyeDRfdCkge19fcDIsIF9fcDIsIF9fcDIsIF9fcDJ9OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MTZ4OF90IHZtbHNxX25fczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSwgaW50MTZfdCBfX3AyKSB7Ci0gIGludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSBfX3AwIC0gX19wMSAqIChpbnQxNng4X3QpIHtfX3AyLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyfTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MTZ4OF90IHZtbHNxX25fczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSwgaW50MTZfdCBfX3AyKSB7Ci0gIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19yZXYwIC0gX19yZXYxICogKGludDE2eDhfdCkge19fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDJ9OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDMyeDJfdCB2bWxzX25fdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxLCB1aW50MzJfdCBfX3AyKSB7Ci0gIHVpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19wMCAtIF9fcDEgKiAodWludDMyeDJfdCkge19fcDIsIF9fcDJ9OwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MzJ4Ml90IHZtbHNfbl91MzIodWludDMyeDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEsIHVpbnQzMl90IF9fcDIpIHsKLSAgdWludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgdWludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKLSAgdWludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSBfX3JldjAgLSBfX3JldjEgKiAodWludDMyeDJfdCkge19fcDIsIF9fcDJ9OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDE2eDRfdCB2bWxzX25fdTE2KHVpbnQxNng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxLCB1aW50MTZfdCBfX3AyKSB7Ci0gIHVpbnQxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19wMCAtIF9fcDEgKiAodWludDE2eDRfdCkge19fcDIsIF9fcDIsIF9fcDIsIF9fcDJ9OwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MTZ4NF90IHZtbHNfbl91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEsIHVpbnQxNl90IF9fcDIpIHsKLSAgdWludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgdWludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKLSAgdWludDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSBfX3JldjAgLSBfX3JldjEgKiAodWludDE2eDRfdCkge19fcDIsIF9fcDIsIF9fcDIsIF9fcDJ9OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgZmxvYXQzMngyX3Qgdm1sc19uX2YzMihmbG9hdDMyeDJfdCBfX3AwLCBmbG9hdDMyeDJfdCBfX3AxLCBmbG9hdDMyX3QgX19wMikgewotICBmbG9hdDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSBfX3AwIC0gX19wMSAqIChmbG9hdDMyeDJfdCkge19fcDIsIF9fcDJ9OwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBmbG9hdDMyeDJfdCB2bWxzX25fZjMyKGZsb2F0MzJ4Ml90IF9fcDAsIGZsb2F0MzJ4Ml90IF9fcDEsIGZsb2F0MzJfdCBfX3AyKSB7Ci0gIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICBmbG9hdDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKLSAgZmxvYXQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19yZXYwIC0gX19yZXYxICogKGZsb2F0MzJ4Ml90KSB7X19wMiwgX19wMn07Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQzMngyX3Qgdm1sc19uX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEsIGludDMyX3QgX19wMikgewotICBpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19wMCAtIF9fcDEgKiAoaW50MzJ4Ml90KSB7X19wMiwgX19wMn07Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDMyeDJfdCB2bWxzX25fczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSwgaW50MzJfdCBfX3AyKSB7Ci0gIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOwotICBpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19yZXYwIC0gX19yZXYxICogKGludDMyeDJfdCkge19fcDIsIF9fcDJ9OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MTZ4NF90IHZtbHNfbl9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxLCBpbnQxNl90IF9fcDIpIHsKLSAgaW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9IF9fcDAgLSBfX3AxICogKGludDE2eDRfdCkge19fcDIsIF9fcDIsIF9fcDIsIF9fcDJ9OwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQxNng0X3Qgdm1sc19uX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEsIGludDE2X3QgX19wMikgewotICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKLSAgaW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9IF9fcmV2MCAtIF9fcmV2MSAqIChpbnQxNng0X3QpIHtfX3AyLCBfX3AyLCBfX3AyLCBfX3AyfTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHBvbHk4eDhfdCB2bW92X25fcDgocG9seThfdCBfX3AwKSB7Ci0gIHBvbHk4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAocG9seTh4OF90KSB7X19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMH07Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHBvbHk4eDhfdCB2bW92X25fcDgocG9seThfdCBfX3AwKSB7Ci0gIHBvbHk4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAocG9seTh4OF90KSB7X19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMH07Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBwb2x5MTZ4NF90IHZtb3Zfbl9wMTYocG9seTE2X3QgX19wMCkgewotICBwb2x5MTZ4NF90IF9fcmV0OwotICBfX3JldCA9IChwb2x5MTZ4NF90KSB7X19wMCwgX19wMCwgX19wMCwgX19wMH07Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHBvbHkxNng0X3Qgdm1vdl9uX3AxNihwb2x5MTZfdCBfX3AwKSB7Ci0gIHBvbHkxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHBvbHkxNng0X3QpIHtfX3AwLCBfX3AwLCBfX3AwLCBfX3AwfTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHBvbHk4eDE2X3Qgdm1vdnFfbl9wOChwb2x5OF90IF9fcDApIHsKLSAgcG9seTh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSAocG9seTh4MTZfdCkge19fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDB9OwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBwb2x5OHgxNl90IHZtb3ZxX25fcDgocG9seThfdCBfX3AwKSB7Ci0gIHBvbHk4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHBvbHk4eDE2X3QpIHtfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwfTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHBvbHkxNng4X3Qgdm1vdnFfbl9wMTYocG9seTE2X3QgX19wMCkgewotICBwb2x5MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IChwb2x5MTZ4OF90KSB7X19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMH07Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHBvbHkxNng4X3Qgdm1vdnFfbl9wMTYocG9seTE2X3QgX19wMCkgewotICBwb2x5MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IChwb2x5MTZ4OF90KSB7X19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMH07Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50OHgxNl90IHZtb3ZxX25fdTgodWludDhfdCBfX3AwKSB7Ci0gIHVpbnQ4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIHtfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwfTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDh4MTZfdCB2bW92cV9uX3U4KHVpbnQ4X3QgX19wMCkgewotICB1aW50OHgxNl90IF9fcmV0OwotICBfX3JldCA9ICh1aW50OHgxNl90KSB7X19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMH07Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MzJ4NF90IHZtb3ZxX25fdTMyKHVpbnQzMl90IF9fcDApIHsKLSAgdWludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDMyeDRfdCkge19fcDAsIF9fcDAsIF9fcDAsIF9fcDB9OwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MzJ4NF90IHZtb3ZxX25fdTMyKHVpbnQzMl90IF9fcDApIHsKLSAgdWludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDMyeDRfdCkge19fcDAsIF9fcDAsIF9fcDAsIF9fcDB9OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDY0eDJfdCB2bW92cV9uX3U2NCh1aW50NjRfdCBfX3AwKSB7Ci0gIHVpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIHtfX3AwLCBfX3AwfTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDY0eDJfdCB2bW92cV9uX3U2NCh1aW50NjRfdCBfX3AwKSB7Ci0gIHVpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIHtfX3AwLCBfX3AwfTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQxNng4X3Qgdm1vdnFfbl91MTYodWludDE2X3QgX19wMCkgewotICB1aW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MTZ4OF90KSB7X19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMH07Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQxNng4X3Qgdm1vdnFfbl91MTYodWludDE2X3QgX19wMCkgewotICB1aW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MTZ4OF90KSB7X19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMH07Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ4eDE2X3Qgdm1vdnFfbl9zOChpbnQ4X3QgX19wMCkgewotICBpbnQ4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDh4MTZfdCkge19fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDB9OwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQ4eDE2X3Qgdm1vdnFfbl9zOChpbnQ4X3QgX19wMCkgewotICBpbnQ4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDh4MTZfdCkge19fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDB9OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgZmxvYXQzMng0X3Qgdm1vdnFfbl9mMzIoZmxvYXQzMl90IF9fcDApIHsKLSAgZmxvYXQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0MzJ4NF90KSB7X19wMCwgX19wMCwgX19wMCwgX19wMH07Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGZsb2F0MzJ4NF90IHZtb3ZxX25fZjMyKGZsb2F0MzJfdCBfX3AwKSB7Ci0gIGZsb2F0MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDMyeDRfdCkge19fcDAsIF9fcDAsIF9fcDAsIF9fcDB9OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdm1vdnFfbl9mMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0MTZfdCBfX3MwID0gX19wMDsgXAotICBmbG9hdDE2eDhfdCBfX3JldDsgXAotICBfX3JldCA9IChmbG9hdDE2eDhfdCkge19fczAsIF9fczAsIF9fczAsIF9fczAsIF9fczAsIF9fczAsIF9fczAsIF9fczB9OyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdm1vdnFfbl9mMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0MTZfdCBfX3MwID0gX19wMDsgXAotICBmbG9hdDE2eDhfdCBfX3JldDsgXAotICBfX3JldCA9IChmbG9hdDE2eDhfdCkge19fczAsIF9fczAsIF9fczAsIF9fczAsIF9fczAsIF9fczAsIF9fczAsIF9fczB9OyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MzJ4NF90IHZtb3ZxX25fczMyKGludDMyX3QgX19wMCkgewotICBpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDMyeDRfdCkge19fcDAsIF9fcDAsIF9fcDAsIF9fcDB9OwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQzMng0X3Qgdm1vdnFfbl9zMzIoaW50MzJfdCBfX3AwKSB7Ci0gIGludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MzJ4NF90KSB7X19wMCwgX19wMCwgX19wMCwgX19wMH07Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ2NHgyX3Qgdm1vdnFfbl9zNjQoaW50NjRfdCBfX3AwKSB7Ci0gIGludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50NjR4Ml90KSB7X19wMCwgX19wMH07Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDY0eDJfdCB2bW92cV9uX3M2NChpbnQ2NF90IF9fcDApIHsKLSAgaW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IChpbnQ2NHgyX3QpIHtfX3AwLCBfX3AwfTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDE2eDhfdCB2bW92cV9uX3MxNihpbnQxNl90IF9fcDApIHsKLSAgaW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IChpbnQxNng4X3QpIHtfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwfTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MTZ4OF90IHZtb3ZxX25fczE2KGludDE2X3QgX19wMCkgewotICBpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDE2eDhfdCkge19fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDB9OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDh4OF90IHZtb3Zfbl91OCh1aW50OF90IF9fcDApIHsKLSAgdWludDh4OF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50OHg4X3QpIHtfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwfTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDh4OF90IHZtb3Zfbl91OCh1aW50OF90IF9fcDApIHsKLSAgdWludDh4OF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50OHg4X3QpIHtfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwfTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQzMngyX3Qgdm1vdl9uX3UzMih1aW50MzJfdCBfX3AwKSB7Ci0gIHVpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMngyX3QpIHtfX3AwLCBfX3AwfTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDMyeDJfdCB2bW92X25fdTMyKHVpbnQzMl90IF9fcDApIHsKLSAgdWludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDMyeDJfdCkge19fcDAsIF9fcDB9OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDY0eDFfdCB2bW92X25fdTY0KHVpbnQ2NF90IF9fcDApIHsKLSAgdWludDY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDY0eDFfdCkge19fcDB9OwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50NjR4MV90IHZtb3Zfbl91NjQodWludDY0X3QgX19wMCkgewotICB1aW50NjR4MV90IF9fcmV0OwotICBfX3JldCA9ICh1aW50NjR4MV90KSB7X19wMH07Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDE2eDRfdCB2bW92X25fdTE2KHVpbnQxNl90IF9fcDApIHsKLSAgdWludDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDE2eDRfdCkge19fcDAsIF9fcDAsIF9fcDAsIF9fcDB9OwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MTZ4NF90IHZtb3Zfbl91MTYodWludDE2X3QgX19wMCkgewotICB1aW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MTZ4NF90KSB7X19wMCwgX19wMCwgX19wMCwgX19wMH07Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ4eDhfdCB2bW92X25fczgoaW50OF90IF9fcDApIHsKLSAgaW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDh4OF90KSB7X19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMH07Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDh4OF90IHZtb3Zfbl9zOChpbnQ4X3QgX19wMCkgewotICBpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50OHg4X3QpIHtfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwfTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGZsb2F0MzJ4Ml90IHZtb3Zfbl9mMzIoZmxvYXQzMl90IF9fcDApIHsKLSAgZmxvYXQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KSB7X19wMCwgX19wMH07Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGZsb2F0MzJ4Ml90IHZtb3Zfbl9mMzIoZmxvYXQzMl90IF9fcDApIHsKLSAgZmxvYXQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KSB7X19wMCwgX19wMH07Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bW92X25fZjE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDE2X3QgX19zMCA9IF9fcDA7IFwKLSAgZmxvYXQxNng0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoZmxvYXQxNng0X3QpIHtfX3MwLCBfX3MwLCBfX3MwLCBfX3MwfTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZtb3Zfbl9mMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0MTZfdCBfX3MwID0gX19wMDsgXAotICBmbG9hdDE2eDRfdCBfX3JldDsgXAotICBfX3JldCA9IChmbG9hdDE2eDRfdCkge19fczAsIF9fczAsIF9fczAsIF9fczB9OyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MzJ4Ml90IHZtb3Zfbl9zMzIoaW50MzJfdCBfX3AwKSB7Ci0gIGludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MzJ4Ml90KSB7X19wMCwgX19wMH07Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDMyeDJfdCB2bW92X25fczMyKGludDMyX3QgX19wMCkgewotICBpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDMyeDJfdCkge19fcDAsIF9fcDB9OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50NjR4MV90IHZtb3Zfbl9zNjQoaW50NjRfdCBfX3AwKSB7Ci0gIGludDY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50NjR4MV90KSB7X19wMH07Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDY0eDFfdCB2bW92X25fczY0KGludDY0X3QgX19wMCkgewotICBpbnQ2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDY0eDFfdCkge19fcDB9OwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDE2eDRfdCB2bW92X25fczE2KGludDE2X3QgX19wMCkgewotICBpbnQxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDE2eDRfdCkge19fcDAsIF9fcDAsIF9fcDAsIF9fcDB9OwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQxNng0X3Qgdm1vdl9uX3MxNihpbnQxNl90IF9fcDApIHsKLSAgaW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9IChpbnQxNng0X3QpIHtfX3AwLCBfX3AwLCBfX3AwLCBfX3AwfTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQxNng4X3Qgdm1vdmxfdTgodWludDh4OF90IF9fcDApIHsKLSAgdWludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDE2eDhfdCkgX19idWlsdGluX25lb25fdm1vdmxfdigoaW50OHg4X3QpX19wMCwgNDkpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MTZ4OF90IHZtb3ZsX3U4KHVpbnQ4eDhfdCBfX3AwKSB7Ci0gIHVpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDE2eDhfdCkgX19idWlsdGluX25lb25fdm1vdmxfdigoaW50OHg4X3QpX19yZXYwLCA0OSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotX19haSB1aW50MTZ4OF90IF9fbm9zd2FwX3Ztb3ZsX3U4KHVpbnQ4eDhfdCBfX3AwKSB7Ci0gIHVpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3Ztb3ZsX3YoKGludDh4OF90KV9fcDAsIDQ5KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50NjR4Ml90IHZtb3ZsX3UzMih1aW50MzJ4Ml90IF9fcDApIHsKLSAgdWludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdm1vdmxfdigoaW50OHg4X3QpX19wMCwgNTEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50NjR4Ml90IHZtb3ZsX3UzMih1aW50MzJ4Ml90IF9fcDApIHsKLSAgdWludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgdWludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdm1vdmxfdigoaW50OHg4X3QpX19yZXYwLCA1MSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotX19haSB1aW50NjR4Ml90IF9fbm9zd2FwX3Ztb3ZsX3UzMih1aW50MzJ4Ml90IF9fcDApIHsKLSAgdWludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdm1vdmxfdigoaW50OHg4X3QpX19wMCwgNTEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQzMng0X3Qgdm1vdmxfdTE2KHVpbnQxNng0X3QgX19wMCkgewotICB1aW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92bW92bF92KChpbnQ4eDhfdClfX3AwLCA1MCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQzMng0X3Qgdm1vdmxfdTE2KHVpbnQxNng0X3QgX19wMCkgewotICB1aW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICB1aW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92bW92bF92KChpbnQ4eDhfdClfX3JldjAsIDUwKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci1fX2FpIHVpbnQzMng0X3QgX19ub3N3YXBfdm1vdmxfdTE2KHVpbnQxNng0X3QgX19wMCkgewotICB1aW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92bW92bF92KChpbnQ4eDhfdClfX3AwLCA1MCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MTZ4OF90IHZtb3ZsX3M4KGludDh4OF90IF9fcDApIHsKLSAgaW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3Ztb3ZsX3YoKGludDh4OF90KV9fcDAsIDMzKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MTZ4OF90IHZtb3ZsX3M4KGludDh4OF90IF9fcDApIHsKLSAgaW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92bW92bF92KChpbnQ4eDhfdClfX3JldjAsIDMzKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci1fX2FpIGludDE2eDhfdCBfX25vc3dhcF92bW92bF9zOChpbnQ4eDhfdCBfX3AwKSB7Ci0gIGludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92bW92bF92KChpbnQ4eDhfdClfX3AwLCAzMyk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50NjR4Ml90IHZtb3ZsX3MzMihpbnQzMngyX3QgX19wMCkgewotICBpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDY0eDJfdCkgX19idWlsdGluX25lb25fdm1vdmxfdigoaW50OHg4X3QpX19wMCwgMzUpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQ2NHgyX3Qgdm1vdmxfczMyKGludDMyeDJfdCBfX3AwKSB7Ci0gIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgaW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3Ztb3ZsX3YoKGludDh4OF90KV9fcmV2MCwgMzUpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLV9fYWkgaW50NjR4Ml90IF9fbm9zd2FwX3Ztb3ZsX3MzMihpbnQzMngyX3QgX19wMCkgewotICBpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDY0eDJfdCkgX19idWlsdGluX25lb25fdm1vdmxfdigoaW50OHg4X3QpX19wMCwgMzUpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDMyeDRfdCB2bW92bF9zMTYoaW50MTZ4NF90IF9fcDApIHsKLSAgaW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3Ztb3ZsX3YoKGludDh4OF90KV9fcDAsIDM0KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MzJ4NF90IHZtb3ZsX3MxNihpbnQxNng0X3QgX19wMCkgewotICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIGludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92bW92bF92KChpbnQ4eDhfdClfX3JldjAsIDM0KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci1fX2FpIGludDMyeDRfdCBfX25vc3dhcF92bW92bF9zMTYoaW50MTZ4NF90IF9fcDApIHsKLSAgaW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3Ztb3ZsX3YoKGludDh4OF90KV9fcDAsIDM0KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MTZ4NF90IHZtb3ZuX3UzMih1aW50MzJ4NF90IF9fcDApIHsKLSAgdWludDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdm1vdm5fdigoaW50OHgxNl90KV9fcDAsIDE3KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDE2eDRfdCB2bW92bl91MzIodWludDMyeDRfdCBfX3AwKSB7Ci0gIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3Ztb3ZuX3YoKGludDh4MTZfdClfX3JldjAsIDE3KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci1fX2FpIHVpbnQxNng0X3QgX19ub3N3YXBfdm1vdm5fdTMyKHVpbnQzMng0X3QgX19wMCkgewotICB1aW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92bW92bl92KChpbnQ4eDE2X3QpX19wMCwgMTcpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQzMngyX3Qgdm1vdm5fdTY0KHVpbnQ2NHgyX3QgX19wMCkgewotICB1aW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92bW92bl92KChpbnQ4eDE2X3QpX19wMCwgMTgpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MzJ4Ml90IHZtb3ZuX3U2NCh1aW50NjR4Ml90IF9fcDApIHsKLSAgdWludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgdWludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdm1vdm5fdigoaW50OHgxNl90KV9fcmV2MCwgMTgpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLV9fYWkgdWludDMyeDJfdCBfX25vc3dhcF92bW92bl91NjQodWludDY0eDJfdCBfX3AwKSB7Ci0gIHVpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3Ztb3ZuX3YoKGludDh4MTZfdClfX3AwLCAxOCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDh4OF90IHZtb3ZuX3UxNih1aW50MTZ4OF90IF9fcDApIHsKLSAgdWludDh4OF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Ztb3ZuX3YoKGludDh4MTZfdClfX3AwLCAxNik7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ4eDhfdCB2bW92bl91MTYodWludDE2eDhfdCBfX3AwKSB7Ci0gIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92bW92bl92KChpbnQ4eDE2X3QpX19yZXYwLCAxNik7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotX19haSB1aW50OHg4X3QgX19ub3N3YXBfdm1vdm5fdTE2KHVpbnQxNng4X3QgX19wMCkgewotICB1aW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdm1vdm5fdigoaW50OHgxNl90KV9fcDAsIDE2KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQxNng0X3Qgdm1vdm5fczMyKGludDMyeDRfdCBfX3AwKSB7Ci0gIGludDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92bW92bl92KChpbnQ4eDE2X3QpX19wMCwgMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDE2eDRfdCB2bW92bl9zMzIoaW50MzJ4NF90IF9fcDApIHsKLSAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICBpbnQxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdm1vdm5fdigoaW50OHgxNl90KV9fcmV2MCwgMSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotX19haSBpbnQxNng0X3QgX19ub3N3YXBfdm1vdm5fczMyKGludDMyeDRfdCBfX3AwKSB7Ci0gIGludDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92bW92bl92KChpbnQ4eDE2X3QpX19wMCwgMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MzJ4Ml90IHZtb3ZuX3M2NChpbnQ2NHgyX3QgX19wMCkgewotICBpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdm1vdm5fdigoaW50OHgxNl90KV9fcDAsIDIpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQzMngyX3Qgdm1vdm5fczY0KGludDY0eDJfdCBfX3AwKSB7Ci0gIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgaW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3Ztb3ZuX3YoKGludDh4MTZfdClfX3JldjAsIDIpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLV9fYWkgaW50MzJ4Ml90IF9fbm9zd2FwX3Ztb3ZuX3M2NChpbnQ2NHgyX3QgX19wMCkgewotICBpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdm1vdm5fdigoaW50OHgxNl90KV9fcDAsIDIpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDh4OF90IHZtb3ZuX3MxNihpbnQxNng4X3QgX19wMCkgewotICBpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Ztb3ZuX3YoKGludDh4MTZfdClfX3AwLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50OHg4X3Qgdm1vdm5fczE2KGludDE2eDhfdCBfX3AwKSB7Ci0gIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92bW92bl92KChpbnQ4eDE2X3QpX19yZXYwLCAwKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci1fX2FpIGludDh4OF90IF9fbm9zd2FwX3Ztb3ZuX3MxNihpbnQxNng4X3QgX19wMCkgewotICBpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Ztb3ZuX3YoKGludDh4MTZfdClfX3AwLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50OHgxNl90IHZtdWxxX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7Ci0gIHVpbnQ4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19wMCAqIF9fcDE7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ4eDE2X3Qgdm11bHFfdTgodWludDh4MTZfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEpIHsKLSAgdWludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSBfX3JldjAgKiBfX3JldjE7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MzJ4NF90IHZtdWxxX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgewotICB1aW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IF9fcDAgKiBfX3AxOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MzJ4NF90IHZtdWxxX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgewotICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICB1aW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOwotICB1aW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IF9fcmV2MCAqIF9fcmV2MTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQxNng4X3Qgdm11bHFfdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxKSB7Ci0gIHVpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19wMCAqIF9fcDE7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQxNng4X3Qgdm11bHFfdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxKSB7Ci0gIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19yZXYwICogX19yZXYxOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50OHgxNl90IHZtdWxxX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgewotICBpbnQ4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19wMCAqIF9fcDE7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDh4MTZfdCB2bXVscV9zOChpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEpIHsKLSAgaW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSBfX3JldjAgKiBfX3JldjE7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBmbG9hdDMyeDRfdCB2bXVscV9mMzIoZmxvYXQzMng0X3QgX19wMCwgZmxvYXQzMng0X3QgX19wMSkgewotICBmbG9hdDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSBfX3AwICogX19wMTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgZmxvYXQzMng0X3Qgdm11bHFfZjMyKGZsb2F0MzJ4NF90IF9fcDAsIGZsb2F0MzJ4NF90IF9fcDEpIHsKLSAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIGZsb2F0MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOwotICBmbG9hdDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSBfX3JldjAgKiBfX3JldjE7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQzMng0X3Qgdm11bHFfczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgewotICBpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19wMCAqIF9fcDE7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDMyeDRfdCB2bXVscV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7Ci0gIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOwotICBpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19yZXYwICogX19yZXYxOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MTZ4OF90IHZtdWxxX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKLSAgaW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IF9fcDAgKiBfX3AxOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQxNng4X3Qgdm11bHFfczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgewotICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IF9fcmV2MCAqIF9fcmV2MTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ4eDhfdCB2bXVsX3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgewotICB1aW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19wMCAqIF9fcDE7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ4eDhfdCB2bXVsX3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgewotICB1aW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDh4OF90IF9fcmV0OwotICBfX3JldCA9IF9fcmV2MCAqIF9fcmV2MTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQzMngyX3Qgdm11bF91MzIodWludDMyeDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEpIHsKLSAgdWludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSBfX3AwICogX19wMTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDMyeDJfdCB2bXVsX3UzMih1aW50MzJ4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSkgewotICB1aW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICB1aW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOwotICB1aW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IF9fcmV2MCAqIF9fcmV2MTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQxNng0X3Qgdm11bF91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEpIHsKLSAgdWludDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSBfX3AwICogX19wMTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDE2eDRfdCB2bXVsX3UxNih1aW50MTZ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSkgewotICB1aW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICB1aW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOwotICB1aW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9IF9fcmV2MCAqIF9fcmV2MTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDh4OF90IHZtdWxfczgoaW50OHg4X3QgX19wMCwgaW50OHg4X3QgX19wMSkgewotICBpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSBfX3AwICogX19wMTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50OHg4X3Qgdm11bF9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7Ci0gIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19yZXYwICogX19yZXYxOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgZmxvYXQzMngyX3Qgdm11bF9mMzIoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSkgewotICBmbG9hdDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSBfX3AwICogX19wMTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgZmxvYXQzMngyX3Qgdm11bF9mMzIoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSkgewotICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgZmxvYXQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7Ci0gIGZsb2F0MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IF9fcmV2MCAqIF9fcmV2MTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDMyeDJfdCB2bXVsX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKLSAgaW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IF9fcDAgKiBfX3AxOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQzMngyX3Qgdm11bF9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7Ci0gIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOwotICBpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19yZXYwICogX19yZXYxOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MTZ4NF90IHZtdWxfczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgewotICBpbnQxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19wMCAqIF9fcDE7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDE2eDRfdCB2bXVsX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKLSAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICBpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7Ci0gIGludDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSBfX3JldjAgKiBfX3JldjE7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBwb2x5OHg4X3Qgdm11bF9wOChwb2x5OHg4X3QgX19wMCwgcG9seTh4OF90IF9fcDEpIHsKLSAgcG9seTh4OF90IF9fcmV0OwotICBfX3JldCA9IChwb2x5OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZtdWxfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDQpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBwb2x5OHg4X3Qgdm11bF9wOChwb2x5OHg4X3QgX19wMCwgcG9seTh4OF90IF9fcDEpIHsKLSAgcG9seTh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBwb2x5OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHBvbHk4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAocG9seTh4OF90KSBfX2J1aWx0aW5fbmVvbl92bXVsX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgNCk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBwb2x5OHgxNl90IHZtdWxxX3A4KHBvbHk4eDE2X3QgX19wMCwgcG9seTh4MTZfdCBfX3AxKSB7Ci0gIHBvbHk4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHBvbHk4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZtdWxxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDM2KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgcG9seTh4MTZfdCB2bXVscV9wOChwb2x5OHgxNl90IF9fcDAsIHBvbHk4eDE2X3QgX19wMSkgewotICBwb2x5OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBwb2x5OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBwb2x5OHgxNl90IF9fcmV0OwotICBfX3JldCA9IChwb2x5OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92bXVscV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMzYpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdm11bHFfbGFuZV91MzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDMyeDJfdCBfX3MxID0gX19wMTsgXAotICB1aW50MzJ4NF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gX19zMCAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdm11bHFfbGFuZV91MzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDMyeDJfdCBfX3MxID0gX19wMTsgXAotICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCi0gIHVpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMSwgMCk7IFwKLSAgdWludDMyeDRfdCBfX3JldDsgXAotICBfX3JldCA9IF9fcmV2MCAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MSwgX19yZXYxLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyKTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZtdWxxX2xhbmVfdTE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKLSAgdWludDE2eDhfdCBfX3JldDsgXAotICBfX3JldCA9IF9fczAgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZtdWxxX2xhbmVfdTE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKLSAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICB1aW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCi0gIHVpbnQxNng4X3QgX19yZXQ7IFwKLSAgX19yZXQgPSBfX3JldjAgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjEsIF9fcmV2MSwgX19wMiwgX19wMiwgX19wMiwgX19wMiwgX19wMiwgX19wMiwgX19wMiwgX19wMik7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bXVscV9sYW5lX2YzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQzMng0X3QgX19zMCA9IF9fcDA7IFwKLSAgZmxvYXQzMngyX3QgX19zMSA9IF9fcDE7IFwKLSAgZmxvYXQzMng0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSBfX3MwICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgX19wMiwgX19wMiwgX19wMiwgX19wMik7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bXVscV9sYW5lX2YzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQzMng0X3QgX19zMCA9IF9fcDA7IFwKLSAgZmxvYXQzMngyX3QgX19zMSA9IF9fcDE7IFwKLSAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKLSAgZmxvYXQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMSwgMCk7IFwKLSAgZmxvYXQzMng0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSBfX3JldjAgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjEsIF9fcmV2MSwgX19wMiwgX19wMiwgX19wMiwgX19wMik7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bXVscV9sYW5lX3MzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCi0gIGludDMyeDJfdCBfX3MxID0gX19wMTsgXAotICBpbnQzMng0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSBfX3MwICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgX19wMiwgX19wMiwgX19wMiwgX19wMik7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bXVscV9sYW5lX3MzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCi0gIGludDMyeDJfdCBfX3MxID0gX19wMTsgXAotICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKLSAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCi0gIGludDMyeDRfdCBfX3JldDsgXAotICBfX3JldCA9IF9fcmV2MCAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MSwgX19yZXYxLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyKTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZtdWxxX2xhbmVfczE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCi0gIGludDE2eDhfdCBfX3JldDsgXAotICBfX3JldCA9IF9fczAgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZtdWxxX2xhbmVfczE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCi0gIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKLSAgaW50MTZ4OF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gX19yZXYwICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYxLCBfX3JldjEsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdm11bF9sYW5lX3UzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDMyeDJfdCBfX3MwID0gX19wMDsgXAotICB1aW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCi0gIHVpbnQzMngyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSBfX3MwICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgX19wMiwgX19wMik7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bXVsX2xhbmVfdTMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKLSAgdWludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAotICB1aW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCi0gIHVpbnQzMngyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSBfX3JldjAgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjEsIF9fcmV2MSwgX19wMiwgX19wMik7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bXVsX2xhbmVfdTE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKLSAgdWludDE2eDRfdCBfX3JldDsgXAotICBfX3JldCA9IF9fczAgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZtdWxfbGFuZV91MTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDE2eDRfdCBfX3MxID0gX19wMTsgXAotICB1aW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCi0gIHVpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKLSAgdWludDE2eDRfdCBfX3JldDsgXAotICBfX3JldCA9IF9fcmV2MCAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MSwgX19yZXYxLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyKTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZtdWxfbGFuZV9mMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0MzJ4Ml90IF9fczAgPSBfX3AwOyBcCi0gIGZsb2F0MzJ4Ml90IF9fczEgPSBfX3AxOyBcCi0gIGZsb2F0MzJ4Ml90IF9fcmV0OyBcCi0gIF9fcmV0ID0gX19zMCAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIF9fcDIsIF9fcDIpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdm11bF9sYW5lX2YzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQzMngyX3QgX19zMCA9IF9fcDA7IFwKLSAgZmxvYXQzMngyX3QgX19zMSA9IF9fcDE7IFwKLSAgZmxvYXQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKLSAgZmxvYXQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMSwgMCk7IFwKLSAgZmxvYXQzMngyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSBfX3JldjAgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjEsIF9fcmV2MSwgX19wMiwgX19wMik7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bXVsX2xhbmVfczMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCi0gIGludDMyeDJfdCBfX3JldDsgXAotICBfX3JldCA9IF9fczAgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCBfX3AyLCBfX3AyKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZtdWxfbGFuZV9zMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDMyeDJfdCBfX3MwID0gX19wMDsgXAotICBpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKLSAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCi0gIGludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxLCAwKTsgXAotICBpbnQzMngyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSBfX3JldjAgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjEsIF9fcmV2MSwgX19wMiwgX19wMik7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bXVsX2xhbmVfczE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCi0gIGludDE2eDRfdCBfX3JldDsgXAotICBfX3JldCA9IF9fczAgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZtdWxfbGFuZV9zMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDE2eDRfdCBfX3MwID0gX19wMDsgXAotICBpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKLSAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCi0gIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAotICBpbnQxNng0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSBfX3JldjAgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjEsIF9fcmV2MSwgX19wMiwgX19wMiwgX19wMiwgX19wMik7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MzJ4NF90IHZtdWxxX25fdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyX3QgX19wMSkgewotICB1aW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IF9fcDAgKiAodWludDMyeDRfdCkge19fcDEsIF9fcDEsIF9fcDEsIF9fcDF9OwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MzJ4NF90IHZtdWxxX25fdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyX3QgX19wMSkgewotICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICB1aW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IF9fcmV2MCAqICh1aW50MzJ4NF90KSB7X19wMSwgX19wMSwgX19wMSwgX19wMX07Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MTZ4OF90IHZtdWxxX25fdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2X3QgX19wMSkgewotICB1aW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IF9fcDAgKiAodWludDE2eDhfdCkge19fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDF9OwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MTZ4OF90IHZtdWxxX25fdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2X3QgX19wMSkgewotICB1aW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IF9fcmV2MCAqICh1aW50MTZ4OF90KSB7X19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMX07Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBmbG9hdDMyeDRfdCB2bXVscV9uX2YzMihmbG9hdDMyeDRfdCBfX3AwLCBmbG9hdDMyX3QgX19wMSkgewotICBmbG9hdDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSBfX3AwICogKGZsb2F0MzJ4NF90KSB7X19wMSwgX19wMSwgX19wMSwgX19wMX07Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGZsb2F0MzJ4NF90IHZtdWxxX25fZjMyKGZsb2F0MzJ4NF90IF9fcDAsIGZsb2F0MzJfdCBfX3AxKSB7Ci0gIGZsb2F0MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICBmbG9hdDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSBfX3JldjAgKiAoZmxvYXQzMng0X3QpIHtfX3AxLCBfX3AxLCBfX3AxLCBfX3AxfTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDMyeDRfdCB2bXVscV9uX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJfdCBfX3AxKSB7Ci0gIGludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSBfX3AwICogKGludDMyeDRfdCkge19fcDEsIF9fcDEsIF9fcDEsIF9fcDF9OwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQzMng0X3Qgdm11bHFfbl9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyX3QgX19wMSkgewotICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIGludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSBfX3JldjAgKiAoaW50MzJ4NF90KSB7X19wMSwgX19wMSwgX19wMSwgX19wMX07Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQxNng4X3Qgdm11bHFfbl9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2X3QgX19wMSkgewotICBpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19wMCAqIChpbnQxNng4X3QpIHtfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxfTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MTZ4OF90IHZtdWxxX25fczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNl90IF9fcDEpIHsKLSAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19yZXYwICogKGludDE2eDhfdCkge19fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDF9OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDMyeDJfdCB2bXVsX25fdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyX3QgX19wMSkgewotICB1aW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IF9fcDAgKiAodWludDMyeDJfdCkge19fcDEsIF9fcDF9OwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MzJ4Ml90IHZtdWxfbl91MzIodWludDMyeDJfdCBfX3AwLCB1aW50MzJfdCBfX3AxKSB7Ci0gIHVpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIHVpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19yZXYwICogKHVpbnQzMngyX3QpIHtfX3AxLCBfX3AxfTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQxNng0X3Qgdm11bF9uX3UxNih1aW50MTZ4NF90IF9fcDAsIHVpbnQxNl90IF9fcDEpIHsKLSAgdWludDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSBfX3AwICogKHVpbnQxNng0X3QpIHtfX3AxLCBfX3AxLCBfX3AxLCBfX3AxfTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDE2eDRfdCB2bXVsX25fdTE2KHVpbnQxNng0X3QgX19wMCwgdWludDE2X3QgX19wMSkgewotICB1aW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICB1aW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9IF9fcmV2MCAqICh1aW50MTZ4NF90KSB7X19wMSwgX19wMSwgX19wMSwgX19wMX07Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBmbG9hdDMyeDJfdCB2bXVsX25fZjMyKGZsb2F0MzJ4Ml90IF9fcDAsIGZsb2F0MzJfdCBfX3AxKSB7Ci0gIGZsb2F0MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IF9fcDAgKiAoZmxvYXQzMngyX3QpIHtfX3AxLCBfX3AxfTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgZmxvYXQzMngyX3Qgdm11bF9uX2YzMihmbG9hdDMyeDJfdCBfX3AwLCBmbG9hdDMyX3QgX19wMSkgewotICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgZmxvYXQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19yZXYwICogKGZsb2F0MzJ4Ml90KSB7X19wMSwgX19wMX07Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQzMngyX3Qgdm11bF9uX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJfdCBfX3AxKSB7Ci0gIGludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSBfX3AwICogKGludDMyeDJfdCkge19fcDEsIF9fcDF9OwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQzMngyX3Qgdm11bF9uX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJfdCBfX3AxKSB7Ci0gIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgaW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IF9fcmV2MCAqIChpbnQzMngyX3QpIHtfX3AxLCBfX3AxfTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDE2eDRfdCB2bXVsX25fczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNl90IF9fcDEpIHsKLSAgaW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9IF9fcDAgKiAoaW50MTZ4NF90KSB7X19wMSwgX19wMSwgX19wMSwgX19wMX07Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDE2eDRfdCB2bXVsX25fczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNl90IF9fcDEpIHsKLSAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICBpbnQxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19yZXYwICogKGludDE2eDRfdCkge19fcDEsIF9fcDEsIF9fcDEsIF9fcDF9OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgcG9seTE2eDhfdCB2bXVsbF9wOChwb2x5OHg4X3QgX19wMCwgcG9seTh4OF90IF9fcDEpIHsKLSAgcG9seTE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSAocG9seTE2eDhfdCkgX19idWlsdGluX25lb25fdm11bGxfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDM3KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgcG9seTE2eDhfdCB2bXVsbF9wOChwb2x5OHg4X3QgX19wMCwgcG9seTh4OF90IF9fcDEpIHsKLSAgcG9seTh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBwb2x5OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHBvbHkxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHBvbHkxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZtdWxsX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMzcpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLV9fYWkgcG9seTE2eDhfdCBfX25vc3dhcF92bXVsbF9wOChwb2x5OHg4X3QgX19wMCwgcG9seTh4OF90IF9fcDEpIHsKLSAgcG9seTE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSAocG9seTE2eDhfdCkgX19idWlsdGluX25lb25fdm11bGxfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDM3KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MTZ4OF90IHZtdWxsX3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgewotICB1aW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92bXVsbF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgNDkpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MTZ4OF90IHZtdWxsX3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgewotICB1aW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDE2eDhfdCkgX19idWlsdGluX25lb25fdm11bGxfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCA0OSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotX19haSB1aW50MTZ4OF90IF9fbm9zd2FwX3ZtdWxsX3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgewotICB1aW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92bXVsbF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgNDkpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ2NHgyX3Qgdm11bGxfdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxKSB7Ci0gIHVpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZtdWxsX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCA1MSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ2NHgyX3Qgdm11bGxfdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxKSB7Ci0gIHVpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIHVpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7Ci0gIHVpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZtdWxsX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgNTEpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLV9fYWkgdWludDY0eDJfdCBfX25vc3dhcF92bXVsbF91MzIodWludDMyeDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEpIHsKLSAgdWludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdm11bGxfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDUxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MzJ4NF90IHZtdWxsX3UxNih1aW50MTZ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSkgewotICB1aW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92bXVsbF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgNTApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MzJ4NF90IHZtdWxsX3UxNih1aW50MTZ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSkgewotICB1aW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICB1aW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOwotICB1aW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92bXVsbF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDUwKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci1fX2FpIHVpbnQzMng0X3QgX19ub3N3YXBfdm11bGxfdTE2KHVpbnQxNng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxKSB7Ci0gIHVpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZtdWxsX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCA1MCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MTZ4OF90IHZtdWxsX3M4KGludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKLSAgaW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZtdWxsX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAzMyk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDE2eDhfdCB2bXVsbF9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7Ci0gIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZtdWxsX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMzMpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLV9fYWkgaW50MTZ4OF90IF9fbm9zd2FwX3ZtdWxsX3M4KGludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKLSAgaW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZtdWxsX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAzMyk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50NjR4Ml90IHZtdWxsX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKLSAgaW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZtdWxsX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAzNSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDY0eDJfdCB2bXVsbF9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7Ci0gIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOwotICBpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDY0eDJfdCkgX19idWlsdGluX25lb25fdm11bGxfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAzNSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotX19haSBpbnQ2NHgyX3QgX19ub3N3YXBfdm11bGxfczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgewotICBpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDY0eDJfdCkgX19idWlsdGluX25lb25fdm11bGxfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDM1KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQzMng0X3Qgdm11bGxfczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgewotICBpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdm11bGxfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDM0KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MzJ4NF90IHZtdWxsX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKLSAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICBpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7Ci0gIGludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92bXVsbF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDM0KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci1fX2FpIGludDMyeDRfdCBfX25vc3dhcF92bXVsbF9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7Ci0gIGludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92bXVsbF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMzQpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZtdWxsX2xhbmVfdTMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKLSAgdWludDY0eDJfdCBfX3JldDsgXAotICBfX3JldCA9IHZtdWxsX3UzMihfX3MwLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCBfX3AyLCBfX3AyKSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bXVsbF9sYW5lX3UzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDMyeDJfdCBfX3MwID0gX19wMDsgXAotICB1aW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCi0gIHVpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKLSAgdWludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxLCAwKTsgXAotICB1aW50NjR4Ml90IF9fcmV0OyBcCi0gIF9fcmV0ID0gX19ub3N3YXBfdm11bGxfdTMyKF9fcmV2MCwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYxLCBfX3JldjEsIF9fcDIsIF9fcDIpKTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZtdWxsX2xhbmVfdTE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKLSAgdWludDMyeDRfdCBfX3JldDsgXAotICBfX3JldCA9IHZtdWxsX3UxNihfX3MwLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyKSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bXVsbF9sYW5lX3UxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDE2eDRfdCBfX3MwID0gX19wMDsgXAotICB1aW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCi0gIHVpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKLSAgdWludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAotICB1aW50MzJ4NF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gX19ub3N3YXBfdm11bGxfdTE2KF9fcmV2MCwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYxLCBfX3JldjEsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIpKTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZtdWxsX2xhbmVfczMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCi0gIGludDY0eDJfdCBfX3JldDsgXAotICBfX3JldCA9IHZtdWxsX3MzMihfX3MwLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCBfX3AyLCBfX3AyKSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bXVsbF9sYW5lX3MzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCi0gIGludDMyeDJfdCBfX3MxID0gX19wMTsgXAotICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKLSAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCi0gIGludDY0eDJfdCBfX3JldDsgXAotICBfX3JldCA9IF9fbm9zd2FwX3ZtdWxsX3MzMihfX3JldjAsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MSwgX19yZXYxLCBfX3AyLCBfX3AyKSk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bXVsbF9sYW5lX3MxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCi0gIGludDE2eDRfdCBfX3MxID0gX19wMTsgXAotICBpbnQzMng0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSB2bXVsbF9zMTYoX19zMCwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgX19wMiwgX19wMiwgX19wMiwgX19wMikpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdm11bGxfbGFuZV9zMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDE2eDRfdCBfX3MwID0gX19wMDsgXAotICBpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKLSAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCi0gIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAotICBpbnQzMng0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSBfX25vc3dhcF92bXVsbF9zMTYoX19yZXYwLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjEsIF9fcmV2MSwgX19wMiwgX19wMiwgX19wMiwgX19wMikpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDY0eDJfdCB2bXVsbF9uX3UzMih1aW50MzJ4Ml90IF9fcDAsIHVpbnQzMl90IF9fcDEpIHsKLSAgdWludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdm11bGxfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KSh1aW50MzJ4Ml90KSB7X19wMSwgX19wMX0sIDUxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDY0eDJfdCB2bXVsbF9uX3UzMih1aW50MzJ4Ml90IF9fcDAsIHVpbnQzMl90IF9fcDEpIHsKLSAgdWludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgdWludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdm11bGxfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpKHVpbnQzMngyX3QpIHtfX3AxLCBfX3AxfSwgNTEpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLV9fYWkgdWludDY0eDJfdCBfX25vc3dhcF92bXVsbF9uX3UzMih1aW50MzJ4Ml90IF9fcDAsIHVpbnQzMl90IF9fcDEpIHsKLSAgdWludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdm11bGxfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KSh1aW50MzJ4Ml90KSB7X19wMSwgX19wMX0sIDUxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MzJ4NF90IHZtdWxsX25fdTE2KHVpbnQxNng0X3QgX19wMCwgdWludDE2X3QgX19wMSkgewotICB1aW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92bXVsbF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpKHVpbnQxNng0X3QpIHtfX3AxLCBfX3AxLCBfX3AxLCBfX3AxfSwgNTApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MzJ4NF90IHZtdWxsX25fdTE2KHVpbnQxNng0X3QgX19wMCwgdWludDE2X3QgX19wMSkgewotICB1aW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICB1aW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92bXVsbF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdCkodWludDE2eDRfdCkge19fcDEsIF9fcDEsIF9fcDEsIF9fcDF9LCA1MCk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotX19haSB1aW50MzJ4NF90IF9fbm9zd2FwX3ZtdWxsX25fdTE2KHVpbnQxNng0X3QgX19wMCwgdWludDE2X3QgX19wMSkgewotICB1aW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92bXVsbF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpKHVpbnQxNng0X3QpIHtfX3AxLCBfX3AxLCBfX3AxLCBfX3AxfSwgNTApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDY0eDJfdCB2bXVsbF9uX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJfdCBfX3AxKSB7Ci0gIGludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92bXVsbF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpKGludDMyeDJfdCkge19fcDEsIF9fcDF9LCAzNSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDY0eDJfdCB2bXVsbF9uX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJfdCBfX3AxKSB7Ci0gIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgaW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZtdWxsX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KShpbnQzMngyX3QpIHtfX3AxLCBfX3AxfSwgMzUpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLV9fYWkgaW50NjR4Ml90IF9fbm9zd2FwX3ZtdWxsX25fczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMl90IF9fcDEpIHsKLSAgaW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZtdWxsX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdCkoaW50MzJ4Ml90KSB7X19wMSwgX19wMX0sIDM1KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQzMng0X3Qgdm11bGxfbl9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2X3QgX19wMSkgewotICBpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdm11bGxfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KShpbnQxNng0X3QpIHtfX3AxLCBfX3AxLCBfX3AxLCBfX3AxfSwgMzQpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQzMng0X3Qgdm11bGxfbl9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2X3QgX19wMSkgewotICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIGludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92bXVsbF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdCkoaW50MTZ4NF90KSB7X19wMSwgX19wMSwgX19wMSwgX19wMX0sIDM0KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci1fX2FpIGludDMyeDRfdCBfX25vc3dhcF92bXVsbF9uX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZfdCBfX3AxKSB7Ci0gIGludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92bXVsbF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpKGludDE2eDRfdCkge19fcDEsIF9fcDEsIF9fcDEsIF9fcDF9LCAzNCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgcG9seTh4OF90IHZtdm5fcDgocG9seTh4OF90IF9fcDApIHsKLSAgcG9seTh4OF90IF9fcmV0OwotICBfX3JldCA9IH5fX3AwOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBwb2x5OHg4X3Qgdm12bl9wOChwb2x5OHg4X3QgX19wMCkgewotICBwb2x5OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHBvbHk4eDhfdCBfX3JldDsKLSAgX19yZXQgPSB+X19yZXYwOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgcG9seTh4MTZfdCB2bXZucV9wOChwb2x5OHgxNl90IF9fcDApIHsKLSAgcG9seTh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSB+X19wMDsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgcG9seTh4MTZfdCB2bXZucV9wOChwb2x5OHgxNl90IF9fcDApIHsKLSAgcG9seTh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcG9seTh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSB+X19yZXYwOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDh4MTZfdCB2bXZucV91OCh1aW50OHgxNl90IF9fcDApIHsKLSAgdWludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSB+X19wMDsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDh4MTZfdCB2bXZucV91OCh1aW50OHgxNl90IF9fcDApIHsKLSAgdWludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSB+X19yZXYwOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDMyeDRfdCB2bXZucV91MzIodWludDMyeDRfdCBfX3AwKSB7Ci0gIHVpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gfl9fcDA7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQzMng0X3Qgdm12bnFfdTMyKHVpbnQzMng0X3QgX19wMCkgewotICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICB1aW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IH5fX3JldjA7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MTZ4OF90IHZtdm5xX3UxNih1aW50MTZ4OF90IF9fcDApIHsKLSAgdWludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSB+X19wMDsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDE2eDhfdCB2bXZucV91MTYodWludDE2eDhfdCBfX3AwKSB7Ci0gIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gfl9fcmV2MDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDh4MTZfdCB2bXZucV9zOChpbnQ4eDE2X3QgX19wMCkgewotICBpbnQ4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gfl9fcDA7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDh4MTZfdCB2bXZucV9zOChpbnQ4eDE2X3QgX19wMCkgewotICBpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSB+X19yZXYwOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MzJ4NF90IHZtdm5xX3MzMihpbnQzMng0X3QgX19wMCkgewotICBpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gfl9fcDA7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDMyeDRfdCB2bXZucV9zMzIoaW50MzJ4NF90IF9fcDApIHsKLSAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICBpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gfl9fcmV2MDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDE2eDhfdCB2bXZucV9zMTYoaW50MTZ4OF90IF9fcDApIHsKLSAgaW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IH5fX3AwOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQxNng4X3Qgdm12bnFfczE2KGludDE2eDhfdCBfX3AwKSB7Ci0gIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IH5fX3JldjA7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50OHg4X3Qgdm12bl91OCh1aW50OHg4X3QgX19wMCkgewotICB1aW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gfl9fcDA7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ4eDhfdCB2bXZuX3U4KHVpbnQ4eDhfdCBfX3AwKSB7Ci0gIHVpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDh4OF90IF9fcmV0OwotICBfX3JldCA9IH5fX3JldjA7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MzJ4Ml90IHZtdm5fdTMyKHVpbnQzMngyX3QgX19wMCkgewotICB1aW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IH5fX3AwOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MzJ4Ml90IHZtdm5fdTMyKHVpbnQzMngyX3QgX19wMCkgewotICB1aW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICB1aW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IH5fX3JldjA7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MTZ4NF90IHZtdm5fdTE2KHVpbnQxNng0X3QgX19wMCkgewotICB1aW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9IH5fX3AwOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MTZ4NF90IHZtdm5fdTE2KHVpbnQxNng0X3QgX19wMCkgewotICB1aW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICB1aW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9IH5fX3JldjA7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ4eDhfdCB2bXZuX3M4KGludDh4OF90IF9fcDApIHsKLSAgaW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gfl9fcDA7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDh4OF90IHZtdm5fczgoaW50OHg4X3QgX19wMCkgewotICBpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gfl9fcmV2MDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDMyeDJfdCB2bXZuX3MzMihpbnQzMngyX3QgX19wMCkgewotICBpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gfl9fcDA7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDMyeDJfdCB2bXZuX3MzMihpbnQzMngyX3QgX19wMCkgewotICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIGludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSB+X19yZXYwOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MTZ4NF90IHZtdm5fczE2KGludDE2eDRfdCBfX3AwKSB7Ci0gIGludDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSB+X19wMDsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MTZ4NF90IHZtdm5fczE2KGludDE2eDRfdCBfX3AwKSB7Ci0gIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgaW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9IH5fX3JldjA7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ4eDE2X3Qgdm5lZ3FfczgoaW50OHgxNl90IF9fcDApIHsKLSAgaW50OHgxNl90IF9fcmV0OwotICBfX3JldCA9IC1fX3AwOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQ4eDE2X3Qgdm5lZ3FfczgoaW50OHgxNl90IF9fcDApIHsKLSAgaW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQ4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gLV9fcmV2MDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGZsb2F0MzJ4NF90IHZuZWdxX2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7Ci0gIGZsb2F0MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IC1fX3AwOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBmbG9hdDMyeDRfdCB2bmVncV9mMzIoZmxvYXQzMng0X3QgX19wMCkgewotICBmbG9hdDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgZmxvYXQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gLV9fcmV2MDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDMyeDRfdCB2bmVncV9zMzIoaW50MzJ4NF90IF9fcDApIHsKLSAgaW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IC1fX3AwOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQzMng0X3Qgdm5lZ3FfczMyKGludDMyeDRfdCBfX3AwKSB7Ci0gIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgaW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IC1fX3JldjA7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQxNng4X3Qgdm5lZ3FfczE2KGludDE2eDhfdCBfX3AwKSB7Ci0gIGludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSAtX19wMDsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MTZ4OF90IHZuZWdxX3MxNihpbnQxNng4X3QgX19wMCkgewotICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSAtX19yZXYwOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50OHg4X3Qgdm5lZ19zOChpbnQ4eDhfdCBfX3AwKSB7Ci0gIGludDh4OF90IF9fcmV0OwotICBfX3JldCA9IC1fX3AwOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQ4eDhfdCB2bmVnX3M4KGludDh4OF90IF9fcDApIHsKLSAgaW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDh4OF90IF9fcmV0OwotICBfX3JldCA9IC1fX3JldjA7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBmbG9hdDMyeDJfdCB2bmVnX2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7Ci0gIGZsb2F0MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IC1fX3AwOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBmbG9hdDMyeDJfdCB2bmVnX2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7Ci0gIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICBmbG9hdDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAtX19yZXYwOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MzJ4Ml90IHZuZWdfczMyKGludDMyeDJfdCBfX3AwKSB7Ci0gIGludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAtX19wMDsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MzJ4Ml90IHZuZWdfczMyKGludDMyeDJfdCBfX3AwKSB7Ci0gIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgaW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IC1fX3JldjA7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQxNng0X3Qgdm5lZ19zMTYoaW50MTZ4NF90IF9fcDApIHsKLSAgaW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9IC1fX3AwOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQxNng0X3Qgdm5lZ19zMTYoaW50MTZ4NF90IF9fcDApIHsKLSAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICBpbnQxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gLV9fcmV2MDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ4eDE2X3Qgdm9ybnFfdTgodWludDh4MTZfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEpIHsKLSAgdWludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSBfX3AwIHwgfl9fcDE7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ4eDE2X3Qgdm9ybnFfdTgodWludDh4MTZfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEpIHsKLSAgdWludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSBfX3JldjAgfCB+X19yZXYxOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDMyeDRfdCB2b3JucV91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEpIHsKLSAgdWludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSBfX3AwIHwgfl9fcDE7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQzMng0X3Qgdm9ybnFfdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7Ci0gIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7Ci0gIHVpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19yZXYwIHwgfl9fcmV2MTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ2NHgyX3Qgdm9ybnFfdTY0KHVpbnQ2NHgyX3QgX19wMCwgdWludDY0eDJfdCBfX3AxKSB7Ci0gIHVpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19wMCB8IH5fX3AxOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50NjR4Ml90IHZvcm5xX3U2NCh1aW50NjR4Ml90IF9fcDAsIHVpbnQ2NHgyX3QgX19wMSkgewotICB1aW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICB1aW50NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOwotICB1aW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IF9fcmV2MCB8IH5fX3JldjE7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MTZ4OF90IHZvcm5xX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSkgewotICB1aW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IF9fcDAgfCB+X19wMTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDE2eDhfdCB2b3JucV91MTYodWludDE2eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEpIHsKLSAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSBfX3JldjAgfCB+X19yZXYxOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50OHgxNl90IHZvcm5xX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgewotICBpbnQ4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19wMCB8IH5fX3AxOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQ4eDE2X3Qgdm9ybnFfczgoaW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7Ci0gIGludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQ4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19yZXYwIHwgfl9fcmV2MTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDMyeDRfdCB2b3JucV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7Ci0gIGludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSBfX3AwIHwgfl9fcDE7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDMyeDRfdCB2b3JucV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7Ci0gIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOwotICBpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19yZXYwIHwgfl9fcmV2MTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDY0eDJfdCB2b3JucV9zNjQoaW50NjR4Ml90IF9fcDAsIGludDY0eDJfdCBfX3AxKSB7Ci0gIGludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSBfX3AwIHwgfl9fcDE7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDY0eDJfdCB2b3JucV9zNjQoaW50NjR4Ml90IF9fcDAsIGludDY0eDJfdCBfX3AxKSB7Ci0gIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgaW50NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOwotICBpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19yZXYwIHwgfl9fcmV2MTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDE2eDhfdCB2b3JucV9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7Ci0gIGludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSBfX3AwIHwgfl9fcDE7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDE2eDhfdCB2b3JucV9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7Ci0gIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19yZXYwIHwgfl9fcmV2MTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ4eDhfdCB2b3JuX3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgewotICB1aW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19wMCB8IH5fX3AxOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50OHg4X3Qgdm9ybl91OCh1aW50OHg4X3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKLSAgdWludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSBfX3JldjAgfCB+X19yZXYxOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDMyeDJfdCB2b3JuX3UzMih1aW50MzJ4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSkgewotICB1aW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IF9fcDAgfCB+X19wMTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDMyeDJfdCB2b3JuX3UzMih1aW50MzJ4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSkgewotICB1aW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICB1aW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOwotICB1aW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IF9fcmV2MCB8IH5fX3JldjE7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50NjR4MV90IHZvcm5fdTY0KHVpbnQ2NHgxX3QgX19wMCwgdWludDY0eDFfdCBfX3AxKSB7Ci0gIHVpbnQ2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19wMCB8IH5fX3AxOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50NjR4MV90IHZvcm5fdTY0KHVpbnQ2NHgxX3QgX19wMCwgdWludDY0eDFfdCBfX3AxKSB7Ci0gIHVpbnQ2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19wMCB8IH5fX3AxOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQxNng0X3Qgdm9ybl91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEpIHsKLSAgdWludDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSBfX3AwIHwgfl9fcDE7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQxNng0X3Qgdm9ybl91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEpIHsKLSAgdWludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgdWludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKLSAgdWludDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSBfX3JldjAgfCB+X19yZXYxOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50OHg4X3Qgdm9ybl9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7Ci0gIGludDh4OF90IF9fcmV0OwotICBfX3JldCA9IF9fcDAgfCB+X19wMTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50OHg4X3Qgdm9ybl9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7Ci0gIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19yZXYwIHwgfl9fcmV2MTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDMyeDJfdCB2b3JuX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKLSAgaW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IF9fcDAgfCB+X19wMTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MzJ4Ml90IHZvcm5fczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgewotICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIGludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKLSAgaW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IF9fcmV2MCB8IH5fX3JldjE7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ2NHgxX3Qgdm9ybl9zNjQoaW50NjR4MV90IF9fcDAsIGludDY0eDFfdCBfX3AxKSB7Ci0gIGludDY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSBfX3AwIHwgfl9fcDE7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDY0eDFfdCB2b3JuX3M2NChpbnQ2NHgxX3QgX19wMCwgaW50NjR4MV90IF9fcDEpIHsKLSAgaW50NjR4MV90IF9fcmV0OwotICBfX3JldCA9IF9fcDAgfCB+X19wMTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQxNng0X3Qgdm9ybl9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7Ci0gIGludDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSBfX3AwIHwgfl9fcDE7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDE2eDRfdCB2b3JuX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKLSAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICBpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7Ci0gIGludDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSBfX3JldjAgfCB+X19yZXYxOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDh4MTZfdCB2b3JycV91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgewotICB1aW50OHgxNl90IF9fcmV0OwotICBfX3JldCA9IF9fcDAgfCBfX3AxOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50OHgxNl90IHZvcnJxX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7Ci0gIHVpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQ4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19yZXYwIHwgX19yZXYxOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDMyeDRfdCB2b3JycV91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEpIHsKLSAgdWludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSBfX3AwIHwgX19wMTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDMyeDRfdCB2b3JycV91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEpIHsKLSAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgdWludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKLSAgdWludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSBfX3JldjAgfCBfX3JldjE7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50NjR4Ml90IHZvcnJxX3U2NCh1aW50NjR4Ml90IF9fcDAsIHVpbnQ2NHgyX3QgX19wMSkgewotICB1aW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IF9fcDAgfCBfX3AxOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50NjR4Ml90IHZvcnJxX3U2NCh1aW50NjR4Ml90IF9fcDAsIHVpbnQ2NHgyX3QgX19wMSkgewotICB1aW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICB1aW50NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOwotICB1aW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IF9fcmV2MCB8IF9fcmV2MTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQxNng4X3Qgdm9ycnFfdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxKSB7Ci0gIHVpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19wMCB8IF9fcDE7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQxNng4X3Qgdm9ycnFfdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxKSB7Ci0gIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19yZXYwIHwgX19yZXYxOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50OHgxNl90IHZvcnJxX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgewotICBpbnQ4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19wMCB8IF9fcDE7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDh4MTZfdCB2b3JycV9zOChpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEpIHsKLSAgaW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSBfX3JldjAgfCBfX3JldjE7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQzMng0X3Qgdm9ycnFfczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgewotICBpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19wMCB8IF9fcDE7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDMyeDRfdCB2b3JycV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7Ci0gIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOwotICBpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19yZXYwIHwgX19yZXYxOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50NjR4Ml90IHZvcnJxX3M2NChpbnQ2NHgyX3QgX19wMCwgaW50NjR4Ml90IF9fcDEpIHsKLSAgaW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IF9fcDAgfCBfX3AxOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQ2NHgyX3Qgdm9ycnFfczY0KGludDY0eDJfdCBfX3AwLCBpbnQ2NHgyX3QgX19wMSkgewotICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIGludDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKLSAgaW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IF9fcmV2MCB8IF9fcmV2MTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDE2eDhfdCB2b3JycV9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7Ci0gIGludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSBfX3AwIHwgX19wMTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MTZ4OF90IHZvcnJxX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKLSAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSBfX3JldjAgfCBfX3JldjE7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50OHg4X3Qgdm9ycl91OCh1aW50OHg4X3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKLSAgdWludDh4OF90IF9fcmV0OwotICBfX3JldCA9IF9fcDAgfCBfX3AxOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50OHg4X3Qgdm9ycl91OCh1aW50OHg4X3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKLSAgdWludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSBfX3JldjAgfCBfX3JldjE7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MzJ4Ml90IHZvcnJfdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxKSB7Ci0gIHVpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19wMCB8IF9fcDE7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQzMngyX3Qgdm9ycl91MzIodWludDMyeDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEpIHsKLSAgdWludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgdWludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKLSAgdWludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSBfX3JldjAgfCBfX3JldjE7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50NjR4MV90IHZvcnJfdTY0KHVpbnQ2NHgxX3QgX19wMCwgdWludDY0eDFfdCBfX3AxKSB7Ci0gIHVpbnQ2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19wMCB8IF9fcDE7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ2NHgxX3Qgdm9ycl91NjQodWludDY0eDFfdCBfX3AwLCB1aW50NjR4MV90IF9fcDEpIHsKLSAgdWludDY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSBfX3AwIHwgX19wMTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MTZ4NF90IHZvcnJfdTE2KHVpbnQxNng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxKSB7Ci0gIHVpbnQxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19wMCB8IF9fcDE7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQxNng0X3Qgdm9ycl91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEpIHsKLSAgdWludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgdWludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKLSAgdWludDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSBfX3JldjAgfCBfX3JldjE7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ4eDhfdCB2b3JyX3M4KGludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKLSAgaW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19wMCB8IF9fcDE7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDh4OF90IHZvcnJfczgoaW50OHg4X3QgX19wMCwgaW50OHg4X3QgX19wMSkgewotICBpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDh4OF90IF9fcmV0OwotICBfX3JldCA9IF9fcmV2MCB8IF9fcmV2MTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDMyeDJfdCB2b3JyX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKLSAgaW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IF9fcDAgfCBfX3AxOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQzMngyX3Qgdm9ycl9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7Ci0gIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOwotICBpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19yZXYwIHwgX19yZXYxOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50NjR4MV90IHZvcnJfczY0KGludDY0eDFfdCBfX3AwLCBpbnQ2NHgxX3QgX19wMSkgewotICBpbnQ2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19wMCB8IF9fcDE7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDY0eDFfdCB2b3JyX3M2NChpbnQ2NHgxX3QgX19wMCwgaW50NjR4MV90IF9fcDEpIHsKLSAgaW50NjR4MV90IF9fcmV0OwotICBfX3JldCA9IF9fcDAgfCBfX3AxOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDE2eDRfdCB2b3JyX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKLSAgaW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9IF9fcDAgfCBfX3AxOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQxNng0X3Qgdm9ycl9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7Ci0gIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOwotICBpbnQxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19yZXYwIHwgX19yZXYxOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDE2eDhfdCB2cGFkYWxxX3U4KHVpbnQxNng4X3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7Ci0gIHVpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZwYWRhbHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNDkpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MTZ4OF90IHZwYWRhbHFfdTgodWludDE2eDhfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEpIHsKLSAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDE2eDhfdCkgX19idWlsdGluX25lb25fdnBhZGFscV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNDkpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDY0eDJfdCB2cGFkYWxxX3UzMih1aW50NjR4Ml90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgewotICB1aW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92cGFkYWxxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDUxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDY0eDJfdCB2cGFkYWxxX3UzMih1aW50NjR4Ml90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgewotICB1aW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICB1aW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOwotICB1aW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92cGFkYWxxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA1MSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MzJ4NF90IHZwYWRhbHFfdTE2KHVpbnQzMng0X3QgX19wMCwgdWludDE2eDhfdCBfX3AxKSB7Ci0gIHVpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZwYWRhbHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNTApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MzJ4NF90IHZwYWRhbHFfdTE2KHVpbnQzMng0X3QgX19wMCwgdWludDE2eDhfdCBfX3AxKSB7Ci0gIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZwYWRhbHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDUwKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDE2eDhfdCB2cGFkYWxxX3M4KGludDE2eDhfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgewotICBpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDE2eDhfdCkgX19idWlsdGluX25lb25fdnBhZGFscV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAzMyk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDE2eDhfdCB2cGFkYWxxX3M4KGludDE2eDhfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgewotICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZwYWRhbHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDMzKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDY0eDJfdCB2cGFkYWxxX3MzMihpbnQ2NHgyX3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKLSAgaW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZwYWRhbHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMzUpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQ2NHgyX3QgdnBhZGFscV9zMzIoaW50NjR4Ml90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7Ci0gIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOwotICBpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDY0eDJfdCkgX19idWlsdGluX25lb25fdnBhZGFscV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMzUpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MzJ4NF90IHZwYWRhbHFfczE2KGludDMyeDRfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgewotICBpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdnBhZGFscV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAzNCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDMyeDRfdCB2cGFkYWxxX3MxNihpbnQzMng0X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKLSAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cGFkYWxxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAzNCk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MTZ4NF90IHZwYWRhbF91OCh1aW50MTZ4NF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7Ci0gIHVpbnQxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZwYWRhbF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTcpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MTZ4NF90IHZwYWRhbF91OCh1aW50MTZ4NF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7Ci0gIHVpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdnBhZGFsX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMTcpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDY0eDFfdCB2cGFkYWxfdTMyKHVpbnQ2NHgxX3QgX19wMCwgdWludDMyeDJfdCBfX3AxKSB7Ci0gIHVpbnQ2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZwYWRhbF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTkpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50NjR4MV90IHZwYWRhbF91MzIodWludDY0eDFfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEpIHsKLSAgdWludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKLSAgdWludDY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDY0eDFfdCkgX19idWlsdGluX25lb25fdnBhZGFsX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3JldjEsIDE5KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MzJ4Ml90IHZwYWRhbF91MTYodWludDMyeDJfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEpIHsKLSAgdWludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdnBhZGFsX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxOCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQzMngyX3QgdnBhZGFsX3UxNih1aW50MzJ4Ml90IF9fcDAsIHVpbnQxNng0X3QgX19wMSkgewotICB1aW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICB1aW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOwotICB1aW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cGFkYWxfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAxOCk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQxNng0X3QgdnBhZGFsX3M4KGludDE2eDRfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7Ci0gIGludDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cGFkYWxfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQxNng0X3QgdnBhZGFsX3M4KGludDE2eDRfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7Ci0gIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgaW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cGFkYWxfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAxKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDY0eDFfdCB2cGFkYWxfczMyKGludDY0eDFfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgewotICBpbnQ2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDY0eDFfdCkgX19idWlsdGluX25lb25fdnBhZGFsX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAzKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50NjR4MV90IHZwYWRhbF9zMzIoaW50NjR4MV90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7Ci0gIGludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKLSAgaW50NjR4MV90IF9fcmV0OwotICBfX3JldCA9IChpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZwYWRhbF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19yZXYxLCAzKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQzMngyX3QgdnBhZGFsX3MxNihpbnQzMngyX3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKLSAgaW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZwYWRhbF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMik7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDMyeDJfdCB2cGFkYWxfczE2KGludDMyeDJfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgewotICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKLSAgaW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZwYWRhbF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDIpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDh4OF90IHZwYWRkX3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgewotICB1aW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnBhZGRfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDE2KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDh4OF90IHZwYWRkX3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgewotICB1aW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDh4OF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZwYWRkX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMTYpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDMyeDJfdCB2cGFkZF91MzIodWludDMyeDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEpIHsKLSAgdWludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdnBhZGRfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDE4KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDMyeDJfdCB2cGFkZF91MzIodWludDMyeDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEpIHsKLSAgdWludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgdWludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKLSAgdWludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdnBhZGRfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAxOCk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MTZ4NF90IHZwYWRkX3UxNih1aW50MTZ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSkgewotICB1aW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cGFkZF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTcpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MTZ4NF90IHZwYWRkX3UxNih1aW50MTZ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSkgewotICB1aW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICB1aW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOwotICB1aW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cGFkZF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDE3KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDh4OF90IHZwYWRkX3M4KGludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKLSAgaW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cGFkZF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDh4OF90IHZwYWRkX3M4KGludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKLSAgaW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZwYWRkX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMCk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBmbG9hdDMyeDJfdCB2cGFkZF9mMzIoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSkgewotICBmbG9hdDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZwYWRkX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCA5KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgZmxvYXQzMngyX3QgdnBhZGRfZjMyKGZsb2F0MzJ4Ml90IF9fcDAsIGZsb2F0MzJ4Ml90IF9fcDEpIHsKLSAgZmxvYXQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIGZsb2F0MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOwotICBmbG9hdDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZwYWRkX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgOSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQzMngyX3QgdnBhZGRfczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgewotICBpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdnBhZGRfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDIpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQzMngyX3QgdnBhZGRfczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgewotICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIGludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKLSAgaW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZwYWRkX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMik7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQxNng0X3QgdnBhZGRfczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgewotICBpbnQxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdnBhZGRfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQxNng0X3QgdnBhZGRfczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgewotICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKLSAgaW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZwYWRkX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MTZ4OF90IHZwYWRkbHFfdTgodWludDh4MTZfdCBfX3AwKSB7Ci0gIHVpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZwYWRkbHFfdigoaW50OHgxNl90KV9fcDAsIDQ5KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDE2eDhfdCB2cGFkZGxxX3U4KHVpbnQ4eDE2X3QgX19wMCkgewotICB1aW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92cGFkZGxxX3YoKGludDh4MTZfdClfX3JldjAsIDQ5KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ2NHgyX3QgdnBhZGRscV91MzIodWludDMyeDRfdCBfX3AwKSB7Ci0gIHVpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZwYWRkbHFfdigoaW50OHgxNl90KV9fcDAsIDUxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDY0eDJfdCB2cGFkZGxxX3UzMih1aW50MzJ4NF90IF9fcDApIHsKLSAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgdWludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdnBhZGRscV92KChpbnQ4eDE2X3QpX19yZXYwLCA1MSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MzJ4NF90IHZwYWRkbHFfdTE2KHVpbnQxNng4X3QgX19wMCkgewotICB1aW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cGFkZGxxX3YoKGludDh4MTZfdClfX3AwLCA1MCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQzMng0X3QgdnBhZGRscV91MTYodWludDE2eDhfdCBfX3AwKSB7Ci0gIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZwYWRkbHFfdigoaW50OHgxNl90KV9fcmV2MCwgNTApOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MTZ4OF90IHZwYWRkbHFfczgoaW50OHgxNl90IF9fcDApIHsKLSAgaW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZwYWRkbHFfdigoaW50OHgxNl90KV9fcDAsIDMzKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MTZ4OF90IHZwYWRkbHFfczgoaW50OHgxNl90IF9fcDApIHsKLSAgaW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDE2eDhfdCkgX19idWlsdGluX25lb25fdnBhZGRscV92KChpbnQ4eDE2X3QpX19yZXYwLCAzMyk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ2NHgyX3QgdnBhZGRscV9zMzIoaW50MzJ4NF90IF9fcDApIHsKLSAgaW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZwYWRkbHFfdigoaW50OHgxNl90KV9fcDAsIDM1KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50NjR4Ml90IHZwYWRkbHFfczMyKGludDMyeDRfdCBfX3AwKSB7Ci0gIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgaW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZwYWRkbHFfdigoaW50OHgxNl90KV9fcmV2MCwgMzUpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MzJ4NF90IHZwYWRkbHFfczE2KGludDE2eDhfdCBfX3AwKSB7Ci0gIGludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cGFkZGxxX3YoKGludDh4MTZfdClfX3AwLCAzNCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDMyeDRfdCB2cGFkZGxxX3MxNihpbnQxNng4X3QgX19wMCkgewotICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cGFkZGxxX3YoKGludDh4MTZfdClfX3JldjAsIDM0KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQxNng0X3QgdnBhZGRsX3U4KHVpbnQ4eDhfdCBfX3AwKSB7Ci0gIHVpbnQxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZwYWRkbF92KChpbnQ4eDhfdClfX3AwLCAxNyk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQxNng0X3QgdnBhZGRsX3U4KHVpbnQ4eDhfdCBfX3AwKSB7Ci0gIHVpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdnBhZGRsX3YoKGludDh4OF90KV9fcmV2MCwgMTcpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDY0eDFfdCB2cGFkZGxfdTMyKHVpbnQzMngyX3QgX19wMCkgewotICB1aW50NjR4MV90IF9fcmV0OwotICBfX3JldCA9ICh1aW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92cGFkZGxfdigoaW50OHg4X3QpX19wMCwgMTkpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50NjR4MV90IHZwYWRkbF91MzIodWludDMyeDJfdCBfX3AwKSB7Ci0gIHVpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIHVpbnQ2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZwYWRkbF92KChpbnQ4eDhfdClfX3JldjAsIDE5KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MzJ4Ml90IHZwYWRkbF91MTYodWludDE2eDRfdCBfX3AwKSB7Ci0gIHVpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZwYWRkbF92KChpbnQ4eDhfdClfX3AwLCAxOCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQzMngyX3QgdnBhZGRsX3UxNih1aW50MTZ4NF90IF9fcDApIHsKLSAgdWludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgdWludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdnBhZGRsX3YoKGludDh4OF90KV9fcmV2MCwgMTgpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MTZ4NF90IHZwYWRkbF9zOChpbnQ4eDhfdCBfX3AwKSB7Ci0gIGludDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cGFkZGxfdigoaW50OHg4X3QpX19wMCwgMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDE2eDRfdCB2cGFkZGxfczgoaW50OHg4X3QgX19wMCkgewotICBpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZwYWRkbF92KChpbnQ4eDhfdClfX3JldjAsIDEpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50NjR4MV90IHZwYWRkbF9zMzIoaW50MzJ4Ml90IF9fcDApIHsKLSAgaW50NjR4MV90IF9fcmV0OwotICBfX3JldCA9IChpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZwYWRkbF92KChpbnQ4eDhfdClfX3AwLCAzKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50NjR4MV90IHZwYWRkbF9zMzIoaW50MzJ4Ml90IF9fcDApIHsKLSAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICBpbnQ2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDY0eDFfdCkgX19idWlsdGluX25lb25fdnBhZGRsX3YoKGludDh4OF90KV9fcmV2MCwgMyk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MzJ4Ml90IHZwYWRkbF9zMTYoaW50MTZ4NF90IF9fcDApIHsKLSAgaW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZwYWRkbF92KChpbnQ4eDhfdClfX3AwLCAyKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MzJ4Ml90IHZwYWRkbF9zMTYoaW50MTZ4NF90IF9fcDApIHsKLSAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICBpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdnBhZGRsX3YoKGludDh4OF90KV9fcmV2MCwgMik7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50OHg4X3QgdnBtYXhfdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7Ci0gIHVpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cG1heF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTYpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50OHg4X3QgdnBtYXhfdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7Ci0gIHVpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnBtYXhfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAxNik7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MzJ4Ml90IHZwbWF4X3UzMih1aW50MzJ4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSkgewotICB1aW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cG1heF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTgpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MzJ4Ml90IHZwbWF4X3UzMih1aW50MzJ4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSkgewotICB1aW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICB1aW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOwotICB1aW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cG1heF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDE4KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQxNng0X3QgdnBtYXhfdTE2KHVpbnQxNng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxKSB7Ci0gIHVpbnQxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZwbWF4X3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxNyk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQxNng0X3QgdnBtYXhfdTE2KHVpbnQxNng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxKSB7Ci0gIHVpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7Ci0gIHVpbnQxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZwbWF4X3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMTcpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50OHg4X3QgdnBtYXhfczgoaW50OHg4X3QgX19wMCwgaW50OHg4X3QgX19wMSkgewotICBpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZwbWF4X3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50OHg4X3QgdnBtYXhfczgoaW50OHg4X3QgX19wMCwgaW50OHg4X3QgX19wMSkgewotICBpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDh4OF90IF9fcmV0OwotICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnBtYXhfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAwKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGZsb2F0MzJ4Ml90IHZwbWF4X2YzMihmbG9hdDMyeDJfdCBfX3AwLCBmbG9hdDMyeDJfdCBfX3AxKSB7Ci0gIGZsb2F0MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDMyeDJfdCkgX19idWlsdGluX25lb25fdnBtYXhfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDkpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBmbG9hdDMyeDJfdCB2cG1heF9mMzIoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSkgewotICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgZmxvYXQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7Ci0gIGZsb2F0MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDMyeDJfdCkgX19idWlsdGluX25lb25fdnBtYXhfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCA5KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDMyeDJfdCB2cG1heF9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7Ci0gIGludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cG1heF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMik7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDMyeDJfdCB2cG1heF9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7Ci0gIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOwotICBpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdnBtYXhfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAyKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDE2eDRfdCB2cG1heF9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7Ci0gIGludDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cG1heF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDE2eDRfdCB2cG1heF9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7Ci0gIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOwotICBpbnQxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdnBtYXhfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAxKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ4eDhfdCB2cG1pbl91OCh1aW50OHg4X3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKLSAgdWludDh4OF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZwbWluX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxNik7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ4eDhfdCB2cG1pbl91OCh1aW50OHg4X3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKLSAgdWludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cG1pbl92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDE2KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQzMngyX3QgdnBtaW5fdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxKSB7Ci0gIHVpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZwbWluX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxOCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQzMngyX3QgdnBtaW5fdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxKSB7Ci0gIHVpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIHVpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7Ci0gIHVpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZwbWluX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMTgpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDE2eDRfdCB2cG1pbl91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEpIHsKLSAgdWludDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdnBtaW5fdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDE3KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDE2eDRfdCB2cG1pbl91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEpIHsKLSAgdWludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgdWludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKLSAgdWludDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdnBtaW5fdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAxNyk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ4eDhfdCB2cG1pbl9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7Ci0gIGludDh4OF90IF9fcmV0OwotICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnBtaW5fdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQ4eDhfdCB2cG1pbl9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7Ci0gIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cG1pbl92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDApOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgZmxvYXQzMngyX3QgdnBtaW5fZjMyKGZsb2F0MzJ4Ml90IF9fcDAsIGZsb2F0MzJ4Ml90IF9fcDEpIHsKLSAgZmxvYXQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cG1pbl92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgOSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGZsb2F0MzJ4Ml90IHZwbWluX2YzMihmbG9hdDMyeDJfdCBfX3AwLCBmbG9hdDMyeDJfdCBfX3AxKSB7Ci0gIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICBmbG9hdDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKLSAgZmxvYXQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cG1pbl92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDkpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MzJ4Ml90IHZwbWluX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKLSAgaW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZwbWluX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAyKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MzJ4Ml90IHZwbWluX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKLSAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7Ci0gIGludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cG1pbl92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDIpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MTZ4NF90IHZwbWluX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKLSAgaW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZwbWluX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MTZ4NF90IHZwbWluX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKLSAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICBpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7Ci0gIGludDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cG1pbl92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDEpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50OHgxNl90IHZxYWJzcV9zOChpbnQ4eDE2X3QgX19wMCkgewotICBpbnQ4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDh4MTZfdCkgX19idWlsdGluX25lb25fdnFhYnNxX3YoKGludDh4MTZfdClfX3AwLCAzMik7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDh4MTZfdCB2cWFic3FfczgoaW50OHgxNl90IF9fcDApIHsKLSAgaW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQ4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDh4MTZfdCkgX19idWlsdGluX25lb25fdnFhYnNxX3YoKGludDh4MTZfdClfX3JldjAsIDMyKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDMyeDRfdCB2cWFic3FfczMyKGludDMyeDRfdCBfX3AwKSB7Ci0gIGludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cWFic3FfdigoaW50OHgxNl90KV9fcDAsIDM0KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MzJ4NF90IHZxYWJzcV9zMzIoaW50MzJ4NF90IF9fcDApIHsKLSAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICBpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdnFhYnNxX3YoKGludDh4MTZfdClfX3JldjAsIDM0KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDE2eDhfdCB2cWFic3FfczE2KGludDE2eDhfdCBfX3AwKSB7Ci0gIGludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92cWFic3FfdigoaW50OHgxNl90KV9fcDAsIDMzKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MTZ4OF90IHZxYWJzcV9zMTYoaW50MTZ4OF90IF9fcDApIHsKLSAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDE2eDhfdCkgX19idWlsdGluX25lb25fdnFhYnNxX3YoKGludDh4MTZfdClfX3JldjAsIDMzKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDh4OF90IHZxYWJzX3M4KGludDh4OF90IF9fcDApIHsKLSAgaW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cWFic192KChpbnQ4eDhfdClfX3AwLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50OHg4X3QgdnFhYnNfczgoaW50OHg4X3QgX19wMCkgewotICBpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cWFic192KChpbnQ4eDhfdClfX3JldjAsIDApOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MzJ4Ml90IHZxYWJzX3MzMihpbnQzMngyX3QgX19wMCkgewotICBpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdnFhYnNfdigoaW50OHg4X3QpX19wMCwgMik7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDMyeDJfdCB2cWFic19zMzIoaW50MzJ4Ml90IF9fcDApIHsKLSAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICBpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdnFhYnNfdigoaW50OHg4X3QpX19yZXYwLCAyKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDE2eDRfdCB2cWFic19zMTYoaW50MTZ4NF90IF9fcDApIHsKLSAgaW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZxYWJzX3YoKGludDh4OF90KV9fcDAsIDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQxNng0X3QgdnFhYnNfczE2KGludDE2eDRfdCBfX3AwKSB7Ci0gIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgaW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZxYWJzX3YoKGludDh4OF90KV9fcmV2MCwgMSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50OHgxNl90IHZxYWRkcV91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgewotICB1aW50OHgxNl90IF9fcmV0OwotICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cWFkZHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNDgpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50OHgxNl90IHZxYWRkcV91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgewotICB1aW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50OHgxNl90IF9fcmV0OwotICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cWFkZHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDQ4KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQzMng0X3QgdnFhZGRxX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgewotICB1aW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cWFkZHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNTApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MzJ4NF90IHZxYWRkcV91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEpIHsKLSAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgdWludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKLSAgdWludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdnFhZGRxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA1MCk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50NjR4Ml90IHZxYWRkcV91NjQodWludDY0eDJfdCBfX3AwLCB1aW50NjR4Ml90IF9fcDEpIHsKLSAgdWludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdnFhZGRxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDUxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDY0eDJfdCB2cWFkZHFfdTY0KHVpbnQ2NHgyX3QgX19wMCwgdWludDY0eDJfdCBfX3AxKSB7Ci0gIHVpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIHVpbnQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7Ci0gIHVpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxYWRkcV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNTEpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDE2eDhfdCB2cWFkZHFfdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxKSB7Ci0gIHVpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxYWRkcV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA0OSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQxNng4X3QgdnFhZGRxX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSkgewotICB1aW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92cWFkZHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDQ5KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDh4MTZfdCB2cWFkZHFfczgoaW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7Ci0gIGludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cWFkZHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMzIpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQ4eDE2X3QgdnFhZGRxX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgewotICBpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50OHgxNl90IF9fcmV0OwotICBfX3JldCA9IChpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZxYWRkcV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMzIpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MzJ4NF90IHZxYWRkcV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7Ci0gIGludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cWFkZHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMzQpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQzMng0X3QgdnFhZGRxX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKLSAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7Ci0gIGludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cWFkZHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDM0KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci1fX2FpIGludDMyeDRfdCBfX25vc3dhcF92cWFkZHFfczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgewotICBpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdnFhZGRxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDM0KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ2NHgyX3QgdnFhZGRxX3M2NChpbnQ2NHgyX3QgX19wMCwgaW50NjR4Ml90IF9fcDEpIHsKLSAgaW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxYWRkcV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAzNSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDY0eDJfdCB2cWFkZHFfczY0KGludDY0eDJfdCBfX3AwLCBpbnQ2NHgyX3QgX19wMSkgewotICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIGludDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKLSAgaW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxYWRkcV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMzUpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MTZ4OF90IHZxYWRkcV9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7Ci0gIGludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92cWFkZHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMzMpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQxNng4X3QgdnFhZGRxX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKLSAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92cWFkZHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDMzKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci1fX2FpIGludDE2eDhfdCBfX25vc3dhcF92cWFkZHFfczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgewotICBpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDE2eDhfdCkgX19idWlsdGluX25lb25fdnFhZGRxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDMzKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50OHg4X3QgdnFhZGRfdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7Ci0gIHVpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cWFkZF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTYpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50OHg4X3QgdnFhZGRfdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7Ci0gIHVpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnFhZGRfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAxNik7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MzJ4Ml90IHZxYWRkX3UzMih1aW50MzJ4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSkgewotICB1aW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cWFkZF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTgpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MzJ4Ml90IHZxYWRkX3UzMih1aW50MzJ4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSkgewotICB1aW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICB1aW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOwotICB1aW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cWFkZF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDE4KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ2NHgxX3QgdnFhZGRfdTY0KHVpbnQ2NHgxX3QgX19wMCwgdWludDY0eDFfdCBfX3AxKSB7Ci0gIHVpbnQ2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZxYWRkX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxOSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ2NHgxX3QgdnFhZGRfdTY0KHVpbnQ2NHgxX3QgX19wMCwgdWludDY0eDFfdCBfX3AxKSB7Ci0gIHVpbnQ2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZxYWRkX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxOSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDE2eDRfdCB2cWFkZF91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEpIHsKLSAgdWludDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdnFhZGRfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDE3KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDE2eDRfdCB2cWFkZF91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEpIHsKLSAgdWludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgdWludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKLSAgdWludDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdnFhZGRfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAxNyk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ4eDhfdCB2cWFkZF9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7Ci0gIGludDh4OF90IF9fcmV0OwotICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnFhZGRfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQ4eDhfdCB2cWFkZF9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7Ci0gIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cWFkZF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDApOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MzJ4Ml90IHZxYWRkX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKLSAgaW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxYWRkX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAyKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MzJ4Ml90IHZxYWRkX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKLSAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7Ci0gIGludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cWFkZF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDIpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLV9fYWkgaW50MzJ4Ml90IF9fbm9zd2FwX3ZxYWRkX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKLSAgaW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxYWRkX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAyKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ2NHgxX3QgdnFhZGRfczY0KGludDY0eDFfdCBfX3AwLCBpbnQ2NHgxX3QgX19wMSkgewotICBpbnQ2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDY0eDFfdCkgX19idWlsdGluX25lb25fdnFhZGRfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDMpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQ2NHgxX3QgdnFhZGRfczY0KGludDY0eDFfdCBfX3AwLCBpbnQ2NHgxX3QgX19wMSkgewotICBpbnQ2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDY0eDFfdCkgX19idWlsdGluX25lb25fdnFhZGRfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDMpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDE2eDRfdCB2cWFkZF9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7Ci0gIGludDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cWFkZF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDE2eDRfdCB2cWFkZF9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7Ci0gIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOwotICBpbnQxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdnFhZGRfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAxKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci1fX2FpIGludDE2eDRfdCBfX25vc3dhcF92cWFkZF9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7Ci0gIGludDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cWFkZF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50NjR4Ml90IHZxZG1sYWxfczMyKGludDY0eDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSwgaW50MzJ4Ml90IF9fcDIpIHsKLSAgaW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxZG1sYWxfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAoaW50OHg4X3QpX19wMiwgMzUpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQ2NHgyX3QgdnFkbWxhbF9zMzIoaW50NjR4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxLCBpbnQzMngyX3QgX19wMikgewotICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIGludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKLSAgaW50MzJ4Ml90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDEsIDApOwotICBpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDY0eDJfdCkgX19idWlsdGluX25lb25fdnFkbWxhbF92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAoaW50OHg4X3QpX19yZXYyLCAzNSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotX19haSBpbnQ2NHgyX3QgX19ub3N3YXBfdnFkbWxhbF9zMzIoaW50NjR4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxLCBpbnQzMngyX3QgX19wMikgewotICBpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDY0eDJfdCkgX19idWlsdGluX25lb25fdnFkbWxhbF92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4OF90KV9fcDEsIChpbnQ4eDhfdClfX3AyLCAzNSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MzJ4NF90IHZxZG1sYWxfczE2KGludDMyeDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSwgaW50MTZ4NF90IF9fcDIpIHsKLSAgaW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZxZG1sYWxfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAoaW50OHg4X3QpX19wMiwgMzQpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQzMng0X3QgdnFkbWxhbF9zMTYoaW50MzJ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxLCBpbnQxNng0X3QgX19wMikgewotICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKLSAgaW50MTZ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDMsIDIsIDEsIDApOwotICBpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdnFkbWxhbF92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAoaW50OHg4X3QpX19yZXYyLCAzNCk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotX19haSBpbnQzMng0X3QgX19ub3N3YXBfdnFkbWxhbF9zMTYoaW50MzJ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxLCBpbnQxNng0X3QgX19wMikgewotICBpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdnFkbWxhbF92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4OF90KV9fcDEsIChpbnQ4eDhfdClfX3AyLCAzNCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnFkbWxhbF9sYW5lX3MzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCi0gIGludDMyeDJfdCBfX3MxID0gX19wMTsgXAotICBpbnQzMngyX3QgX19zMiA9IF9fcDI7IFwKLSAgaW50NjR4Ml90IF9fcmV0OyBcCi0gIF9fcmV0ID0gdnFkbWxhbF9zMzIoX19zMCwgX19zMSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMykpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnFkbWxhbF9sYW5lX3MzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCi0gIGludDMyeDJfdCBfX3MxID0gX19wMTsgXAotICBpbnQzMngyX3QgX19zMiA9IF9fcDI7IFwKLSAgaW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCi0gIGludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxLCAwKTsgXAotICBpbnQzMngyX3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgMSwgMCk7IFwKLSAgaW50NjR4Ml90IF9fcmV0OyBcCi0gIF9fcmV0ID0gX19ub3N3YXBfdnFkbWxhbF9zMzIoX19yZXYwLCBfX3JldjEsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MiwgX19yZXYyLCBfX3AzLCBfX3AzKSk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2cWRtbGFsX2xhbmVfczE2KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCi0gIGludDE2eDRfdCBfX3MyID0gX19wMjsgXAotICBpbnQzMng0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSB2cWRtbGFsX3MxNihfX3MwLCBfX3MxLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2cWRtbGFsX2xhbmVfczE2KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCi0gIGludDE2eDRfdCBfX3MyID0gX19wMjsgXAotICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKLSAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCi0gIGludDE2eDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCAzLCAyLCAxLCAwKTsgXAotICBpbnQzMng0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSBfX25vc3dhcF92cWRtbGFsX3MxNihfX3JldjAsIF9fcmV2MSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpKTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDY0eDJfdCB2cWRtbGFsX25fczMyKGludDY0eDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSwgaW50MzJfdCBfX3AyKSB7Ci0gIGludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92cWRtbGFsX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgKGludDh4OF90KShpbnQzMngyX3QpIHtfX3AyLCBfX3AyfSwgMzUpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQ2NHgyX3QgdnFkbWxhbF9uX3MzMihpbnQ2NHgyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEsIGludDMyX3QgX19wMikgewotICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIGludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKLSAgaW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxZG1sYWxfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgKGludDh4OF90KShpbnQzMngyX3QpIHtfX3AyLCBfX3AyfSwgMzUpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLV9fYWkgaW50NjR4Ml90IF9fbm9zd2FwX3ZxZG1sYWxfbl9zMzIoaW50NjR4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxLCBpbnQzMl90IF9fcDIpIHsKLSAgaW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxZG1sYWxfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAoaW50OHg4X3QpKGludDMyeDJfdCkge19fcDIsIF9fcDJ9LCAzNSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MzJ4NF90IHZxZG1sYWxfbl9zMTYoaW50MzJ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxLCBpbnQxNl90IF9fcDIpIHsKLSAgaW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZxZG1sYWxfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAoaW50OHg4X3QpKGludDE2eDRfdCkge19fcDIsIF9fcDIsIF9fcDIsIF9fcDJ9LCAzNCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDMyeDRfdCB2cWRtbGFsX25fczE2KGludDMyeDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSwgaW50MTZfdCBfX3AyKSB7Ci0gIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOwotICBpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdnFkbWxhbF92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAoaW50OHg4X3QpKGludDE2eDRfdCkge19fcDIsIF9fcDIsIF9fcDIsIF9fcDJ9LCAzNCk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotX19haSBpbnQzMng0X3QgX19ub3N3YXBfdnFkbWxhbF9uX3MxNihpbnQzMng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEsIGludDE2X3QgX19wMikgewotICBpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdnFkbWxhbF92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4OF90KV9fcDEsIChpbnQ4eDhfdCkoaW50MTZ4NF90KSB7X19wMiwgX19wMiwgX19wMiwgX19wMn0sIDM0KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ2NHgyX3QgdnFkbWxzbF9zMzIoaW50NjR4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxLCBpbnQzMngyX3QgX19wMikgewotICBpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDY0eDJfdCkgX19idWlsdGluX25lb25fdnFkbWxzbF92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4OF90KV9fcDEsIChpbnQ4eDhfdClfX3AyLCAzNSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDY0eDJfdCB2cWRtbHNsX3MzMihpbnQ2NHgyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEsIGludDMyeDJfdCBfX3AyKSB7Ci0gIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOwotICBpbnQzMngyX3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMSwgMCk7Ci0gIGludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92cWRtbHNsX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIChpbnQ4eDhfdClfX3JldjIsIDM1KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci1fX2FpIGludDY0eDJfdCBfX25vc3dhcF92cWRtbHNsX3MzMihpbnQ2NHgyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEsIGludDMyeDJfdCBfX3AyKSB7Ci0gIGludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92cWRtbHNsX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgKGludDh4OF90KV9fcDIsIDM1KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQzMng0X3QgdnFkbWxzbF9zMTYoaW50MzJ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxLCBpbnQxNng0X3QgX19wMikgewotICBpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdnFkbWxzbF92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4OF90KV9fcDEsIChpbnQ4eDhfdClfX3AyLCAzNCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDMyeDRfdCB2cWRtbHNsX3MxNihpbnQzMng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEsIGludDE2eDRfdCBfX3AyKSB7Ci0gIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOwotICBpbnQxNng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMywgMiwgMSwgMCk7Ci0gIGludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cWRtbHNsX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIChpbnQ4eDhfdClfX3JldjIsIDM0KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci1fX2FpIGludDMyeDRfdCBfX25vc3dhcF92cWRtbHNsX3MxNihpbnQzMng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEsIGludDE2eDRfdCBfX3AyKSB7Ci0gIGludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cWRtbHNsX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgKGludDh4OF90KV9fcDIsIDM0KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2cWRtbHNsX2xhbmVfczMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCi0gIGludDMyeDJfdCBfX3MyID0gX19wMjsgXAotICBpbnQ2NHgyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSB2cWRtbHNsX3MzMihfX3MwLCBfX3MxLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCBfX3AzLCBfX3AzKSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2cWRtbHNsX2xhbmVfczMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCi0gIGludDMyeDJfdCBfX3MyID0gX19wMjsgXAotICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKLSAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCi0gIGludDMyeDJfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCAxLCAwKTsgXAotICBpbnQ2NHgyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSBfX25vc3dhcF92cWRtbHNsX3MzMihfX3JldjAsIF9fcmV2MSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMpKTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZxZG1sc2xfbGFuZV9zMTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAotICBpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKLSAgaW50MTZ4NF90IF9fczIgPSBfX3AyOyBcCi0gIGludDMyeDRfdCBfX3JldDsgXAotICBfX3JldCA9IHZxZG1sc2xfczE2KF9fczAsIF9fczEsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZxZG1sc2xfbGFuZV9zMTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAotICBpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKLSAgaW50MTZ4NF90IF9fczIgPSBfX3AyOyBcCi0gIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAotICBpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKLSAgaW50MTZ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDMsIDIsIDEsIDApOyBcCi0gIGludDMyeDRfdCBfX3JldDsgXAotICBfX3JldCA9IF9fbm9zd2FwX3ZxZG1sc2xfczE2KF9fcmV2MCwgX19yZXYxLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMywgX19wMywgX19wMykpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50NjR4Ml90IHZxZG1sc2xfbl9zMzIoaW50NjR4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxLCBpbnQzMl90IF9fcDIpIHsKLSAgaW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxZG1sc2xfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAoaW50OHg4X3QpKGludDMyeDJfdCkge19fcDIsIF9fcDJ9LCAzNSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDY0eDJfdCB2cWRtbHNsX25fczMyKGludDY0eDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSwgaW50MzJfdCBfX3AyKSB7Ci0gIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOwotICBpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDY0eDJfdCkgX19idWlsdGluX25lb25fdnFkbWxzbF92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAoaW50OHg4X3QpKGludDMyeDJfdCkge19fcDIsIF9fcDJ9LCAzNSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotX19haSBpbnQ2NHgyX3QgX19ub3N3YXBfdnFkbWxzbF9uX3MzMihpbnQ2NHgyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEsIGludDMyX3QgX19wMikgewotICBpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDY0eDJfdCkgX19idWlsdGluX25lb25fdnFkbWxzbF92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4OF90KV9fcDEsIChpbnQ4eDhfdCkoaW50MzJ4Ml90KSB7X19wMiwgX19wMn0sIDM1KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQzMng0X3QgdnFkbWxzbF9uX3MxNihpbnQzMng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEsIGludDE2X3QgX19wMikgewotICBpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdnFkbWxzbF92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4OF90KV9fcDEsIChpbnQ4eDhfdCkoaW50MTZ4NF90KSB7X19wMiwgX19wMiwgX19wMiwgX19wMn0sIDM0KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MzJ4NF90IHZxZG1sc2xfbl9zMTYoaW50MzJ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxLCBpbnQxNl90IF9fcDIpIHsKLSAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICBpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7Ci0gIGludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cWRtbHNsX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIChpbnQ4eDhfdCkoaW50MTZ4NF90KSB7X19wMiwgX19wMiwgX19wMiwgX19wMn0sIDM0KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci1fX2FpIGludDMyeDRfdCBfX25vc3dhcF92cWRtbHNsX25fczE2KGludDMyeDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSwgaW50MTZfdCBfX3AyKSB7Ci0gIGludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cWRtbHNsX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgKGludDh4OF90KShpbnQxNng0X3QpIHtfX3AyLCBfX3AyLCBfX3AyLCBfX3AyfSwgMzQpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDMyeDRfdCB2cWRtdWxocV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7Ci0gIGludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cWRtdWxocV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAzNCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDMyeDRfdCB2cWRtdWxocV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7Ci0gIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOwotICBpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdnFkbXVsaHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDM0KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci1fX2FpIGludDMyeDRfdCBfX25vc3dhcF92cWRtdWxocV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7Ci0gIGludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cWRtdWxocV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAzNCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MTZ4OF90IHZxZG11bGhxX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKLSAgaW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxZG11bGhxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDMzKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MTZ4OF90IHZxZG11bGhxX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKLSAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92cWRtdWxocV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMzMpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLV9fYWkgaW50MTZ4OF90IF9fbm9zd2FwX3ZxZG11bGhxX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKLSAgaW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxZG11bGhxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDMzKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQzMngyX3QgdnFkbXVsaF9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7Ci0gIGludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cWRtdWxoX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAyKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MzJ4Ml90IHZxZG11bGhfczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgewotICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIGludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKLSAgaW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxZG11bGhfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAyKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci1fX2FpIGludDMyeDJfdCBfX25vc3dhcF92cWRtdWxoX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKLSAgaW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxZG11bGhfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDIpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDE2eDRfdCB2cWRtdWxoX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKLSAgaW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZxZG11bGhfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQxNng0X3QgdnFkbXVsaF9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7Ci0gIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOwotICBpbnQxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdnFkbXVsaF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDEpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLV9fYWkgaW50MTZ4NF90IF9fbm9zd2FwX3ZxZG11bGhfczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgewotICBpbnQxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdnFkbXVsaF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnFkbXVsaHFfbGFuZV9zMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAotICBpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKLSAgaW50MzJ4NF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gdnFkbXVsaHFfczMyKF9fczAsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIpKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZxZG11bGhxX2xhbmVfczMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCi0gIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAotICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMSwgMCk7IFwKLSAgaW50MzJ4NF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gX19ub3N3YXBfdnFkbXVsaHFfczMyKF9fcmV2MCwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYxLCBfX3JldjEsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIpKTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZxZG11bGhxX2xhbmVfczE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCi0gIGludDE2eDhfdCBfX3JldDsgXAotICBfX3JldCA9IHZxZG11bGhxX3MxNihfX3MwLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyKSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2cWRtdWxocV9sYW5lX3MxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCi0gIGludDE2eDRfdCBfX3MxID0gX19wMTsgXAotICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCi0gIGludDE2eDhfdCBfX3JldDsgXAotICBfX3JldCA9IF9fbm9zd2FwX3ZxZG11bGhxX3MxNihfX3JldjAsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MSwgX19yZXYxLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyKSk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2cWRtdWxoX2xhbmVfczMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCi0gIGludDMyeDJfdCBfX3JldDsgXAotICBfX3JldCA9IHZxZG11bGhfczMyKF9fczAsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIF9fcDIsIF9fcDIpKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZxZG11bGhfbGFuZV9zMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDMyeDJfdCBfX3MwID0gX19wMDsgXAotICBpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKLSAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCi0gIGludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxLCAwKTsgXAotICBpbnQzMngyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSBfX25vc3dhcF92cWRtdWxoX3MzMihfX3JldjAsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MSwgX19yZXYxLCBfX3AyLCBfX3AyKSk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2cWRtdWxoX2xhbmVfczE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCi0gIGludDE2eDRfdCBfX3JldDsgXAotICBfX3JldCA9IHZxZG11bGhfczE2KF9fczAsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIpKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZxZG11bGhfbGFuZV9zMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDE2eDRfdCBfX3MwID0gX19wMDsgXAotICBpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKLSAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCi0gIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAotICBpbnQxNng0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSBfX25vc3dhcF92cWRtdWxoX3MxNihfX3JldjAsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MSwgX19yZXYxLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyKSk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQzMng0X3QgdnFkbXVsaHFfbl9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyX3QgX19wMSkgewotICBpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdnFkbXVsaHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpKGludDMyeDRfdCkge19fcDEsIF9fcDEsIF9fcDEsIF9fcDF9LCAzNCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDMyeDRfdCB2cWRtdWxocV9uX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJfdCBfX3AxKSB7Ci0gIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgaW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZxZG11bGhxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpKGludDMyeDRfdCkge19fcDEsIF9fcDEsIF9fcDEsIF9fcDF9LCAzNCk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQxNng4X3QgdnFkbXVsaHFfbl9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2X3QgX19wMSkgewotICBpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDE2eDhfdCkgX19idWlsdGluX25lb25fdnFkbXVsaHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpKGludDE2eDhfdCkge19fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDF9LCAzMyk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDE2eDhfdCB2cWRtdWxocV9uX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZfdCBfX3AxKSB7Ci0gIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxZG11bGhxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpKGludDE2eDhfdCkge19fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDF9LCAzMyk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQzMngyX3QgdnFkbXVsaF9uX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJfdCBfX3AxKSB7Ci0gIGludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cWRtdWxoX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdCkoaW50MzJ4Ml90KSB7X19wMSwgX19wMX0sIDIpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQzMngyX3QgdnFkbXVsaF9uX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJfdCBfX3AxKSB7Ci0gIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgaW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxZG11bGhfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpKGludDMyeDJfdCkge19fcDEsIF9fcDF9LCAyKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDE2eDRfdCB2cWRtdWxoX25fczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNl90IF9fcDEpIHsKLSAgaW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZxZG11bGhfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KShpbnQxNng0X3QpIHtfX3AxLCBfX3AxLCBfX3AxLCBfX3AxfSwgMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDE2eDRfdCB2cWRtdWxoX25fczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNl90IF9fcDEpIHsKLSAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICBpbnQxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdnFkbXVsaF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdCkoaW50MTZ4NF90KSB7X19wMSwgX19wMSwgX19wMSwgX19wMX0sIDEpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50NjR4Ml90IHZxZG11bGxfczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgewotICBpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDY0eDJfdCkgX19idWlsdGluX25lb25fdnFkbXVsbF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMzUpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQ2NHgyX3QgdnFkbXVsbF9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7Ci0gIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOwotICBpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDY0eDJfdCkgX19idWlsdGluX25lb25fdnFkbXVsbF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDM1KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci1fX2FpIGludDY0eDJfdCBfX25vc3dhcF92cWRtdWxsX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKLSAgaW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxZG11bGxfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDM1KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQzMng0X3QgdnFkbXVsbF9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7Ci0gIGludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cWRtdWxsX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAzNCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDMyeDRfdCB2cWRtdWxsX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKLSAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICBpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7Ci0gIGludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cWRtdWxsX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMzQpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLV9fYWkgaW50MzJ4NF90IF9fbm9zd2FwX3ZxZG11bGxfczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgewotICBpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdnFkbXVsbF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMzQpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZxZG11bGxfbGFuZV9zMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDMyeDJfdCBfX3MwID0gX19wMDsgXAotICBpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKLSAgaW50NjR4Ml90IF9fcmV0OyBcCi0gIF9fcmV0ID0gdnFkbXVsbF9zMzIoX19zMCwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgX19wMiwgX19wMikpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnFkbXVsbF9sYW5lX3MzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCi0gIGludDMyeDJfdCBfX3MxID0gX19wMTsgXAotICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKLSAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCi0gIGludDY0eDJfdCBfX3JldDsgXAotICBfX3JldCA9IF9fbm9zd2FwX3ZxZG11bGxfczMyKF9fcmV2MCwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYxLCBfX3JldjEsIF9fcDIsIF9fcDIpKTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZxZG11bGxfbGFuZV9zMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDE2eDRfdCBfX3MwID0gX19wMDsgXAotICBpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKLSAgaW50MzJ4NF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gdnFkbXVsbF9zMTYoX19zMCwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgX19wMiwgX19wMiwgX19wMiwgX19wMikpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnFkbXVsbF9sYW5lX3MxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCi0gIGludDE2eDRfdCBfX3MxID0gX19wMTsgXAotICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKLSAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCi0gIGludDMyeDRfdCBfX3JldDsgXAotICBfX3JldCA9IF9fbm9zd2FwX3ZxZG11bGxfczE2KF9fcmV2MCwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYxLCBfX3JldjEsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIpKTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDY0eDJfdCB2cWRtdWxsX25fczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMl90IF9fcDEpIHsKLSAgaW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxZG11bGxfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KShpbnQzMngyX3QpIHtfX3AxLCBfX3AxfSwgMzUpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQ2NHgyX3QgdnFkbXVsbF9uX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJfdCBfX3AxKSB7Ci0gIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgaW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxZG11bGxfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpKGludDMyeDJfdCkge19fcDEsIF9fcDF9LCAzNSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotX19haSBpbnQ2NHgyX3QgX19ub3N3YXBfdnFkbXVsbF9uX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJfdCBfX3AxKSB7Ci0gIGludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92cWRtdWxsX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdCkoaW50MzJ4Ml90KSB7X19wMSwgX19wMX0sIDM1KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQzMng0X3QgdnFkbXVsbF9uX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZfdCBfX3AxKSB7Ci0gIGludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cWRtdWxsX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdCkoaW50MTZ4NF90KSB7X19wMSwgX19wMSwgX19wMSwgX19wMX0sIDM0KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MzJ4NF90IHZxZG11bGxfbl9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2X3QgX19wMSkgewotICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIGludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cWRtdWxsX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KShpbnQxNng0X3QpIHtfX3AxLCBfX3AxLCBfX3AxLCBfX3AxfSwgMzQpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLV9fYWkgaW50MzJ4NF90IF9fbm9zd2FwX3ZxZG11bGxfbl9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2X3QgX19wMSkgewotICBpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdnFkbXVsbF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpKGludDE2eDRfdCkge19fcDEsIF9fcDEsIF9fcDEsIF9fcDF9LCAzNCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDE2eDRfdCB2cW1vdm5fdTMyKHVpbnQzMng0X3QgX19wMCkgewotICB1aW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cW1vdm5fdigoaW50OHgxNl90KV9fcDAsIDE3KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDE2eDRfdCB2cW1vdm5fdTMyKHVpbnQzMng0X3QgX19wMCkgewotICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICB1aW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cW1vdm5fdigoaW50OHgxNl90KV9fcmV2MCwgMTcpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLV9fYWkgdWludDE2eDRfdCBfX25vc3dhcF92cW1vdm5fdTMyKHVpbnQzMng0X3QgX19wMCkgewotICB1aW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cW1vdm5fdigoaW50OHgxNl90KV9fcDAsIDE3KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MzJ4Ml90IHZxbW92bl91NjQodWludDY0eDJfdCBfX3AwKSB7Ci0gIHVpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxbW92bl92KChpbnQ4eDE2X3QpX19wMCwgMTgpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MzJ4Ml90IHZxbW92bl91NjQodWludDY0eDJfdCBfX3AwKSB7Ci0gIHVpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIHVpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxbW92bl92KChpbnQ4eDE2X3QpX19yZXYwLCAxOCk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotX19haSB1aW50MzJ4Ml90IF9fbm9zd2FwX3ZxbW92bl91NjQodWludDY0eDJfdCBfX3AwKSB7Ci0gIHVpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxbW92bl92KChpbnQ4eDE2X3QpX19wMCwgMTgpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ4eDhfdCB2cW1vdm5fdTE2KHVpbnQxNng4X3QgX19wMCkgewotICB1aW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnFtb3ZuX3YoKGludDh4MTZfdClfX3AwLCAxNik7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ4eDhfdCB2cW1vdm5fdTE2KHVpbnQxNng4X3QgX19wMCkgewotICB1aW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnFtb3ZuX3YoKGludDh4MTZfdClfX3JldjAsIDE2KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci1fX2FpIHVpbnQ4eDhfdCBfX25vc3dhcF92cW1vdm5fdTE2KHVpbnQxNng4X3QgX19wMCkgewotICB1aW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnFtb3ZuX3YoKGludDh4MTZfdClfX3AwLCAxNik7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MTZ4NF90IHZxbW92bl9zMzIoaW50MzJ4NF90IF9fcDApIHsKLSAgaW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZxbW92bl92KChpbnQ4eDE2X3QpX19wMCwgMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDE2eDRfdCB2cW1vdm5fczMyKGludDMyeDRfdCBfX3AwKSB7Ci0gIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgaW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZxbW92bl92KChpbnQ4eDE2X3QpX19yZXYwLCAxKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci1fX2FpIGludDE2eDRfdCBfX25vc3dhcF92cW1vdm5fczMyKGludDMyeDRfdCBfX3AwKSB7Ci0gIGludDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cW1vdm5fdigoaW50OHgxNl90KV9fcDAsIDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDMyeDJfdCB2cW1vdm5fczY0KGludDY0eDJfdCBfX3AwKSB7Ci0gIGludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cW1vdm5fdigoaW50OHgxNl90KV9fcDAsIDIpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQzMngyX3QgdnFtb3ZuX3M2NChpbnQ2NHgyX3QgX19wMCkgewotICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIGludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cW1vdm5fdigoaW50OHgxNl90KV9fcmV2MCwgMik7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotX19haSBpbnQzMngyX3QgX19ub3N3YXBfdnFtb3ZuX3M2NChpbnQ2NHgyX3QgX19wMCkgewotICBpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdnFtb3ZuX3YoKGludDh4MTZfdClfX3AwLCAyKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ4eDhfdCB2cW1vdm5fczE2KGludDE2eDhfdCBfX3AwKSB7Ci0gIGludDh4OF90IF9fcmV0OwotICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnFtb3ZuX3YoKGludDh4MTZfdClfX3AwLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50OHg4X3QgdnFtb3ZuX3MxNihpbnQxNng4X3QgX19wMCkgewotICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDh4OF90IF9fcmV0OwotICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnFtb3ZuX3YoKGludDh4MTZfdClfX3JldjAsIDApOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLV9fYWkgaW50OHg4X3QgX19ub3N3YXBfdnFtb3ZuX3MxNihpbnQxNng4X3QgX19wMCkgewotICBpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxbW92bl92KChpbnQ4eDE2X3QpX19wMCwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDE2eDRfdCB2cW1vdnVuX3MzMihpbnQzMng0X3QgX19wMCkgewotICB1aW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cW1vdnVuX3YoKGludDh4MTZfdClfX3AwLCAxNyk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQxNng0X3QgdnFtb3Z1bl9zMzIoaW50MzJ4NF90IF9fcDApIHsKLSAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICB1aW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cW1vdnVuX3YoKGludDh4MTZfdClfX3JldjAsIDE3KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci1fX2FpIHVpbnQxNng0X3QgX19ub3N3YXBfdnFtb3Z1bl9zMzIoaW50MzJ4NF90IF9fcDApIHsKLSAgdWludDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdnFtb3Z1bl92KChpbnQ4eDE2X3QpX19wMCwgMTcpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQzMngyX3QgdnFtb3Z1bl9zNjQoaW50NjR4Ml90IF9fcDApIHsKLSAgdWludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdnFtb3Z1bl92KChpbnQ4eDE2X3QpX19wMCwgMTgpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MzJ4Ml90IHZxbW92dW5fczY0KGludDY0eDJfdCBfX3AwKSB7Ci0gIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgdWludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdnFtb3Z1bl92KChpbnQ4eDE2X3QpX19yZXYwLCAxOCk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotX19haSB1aW50MzJ4Ml90IF9fbm9zd2FwX3ZxbW92dW5fczY0KGludDY0eDJfdCBfX3AwKSB7Ci0gIHVpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxbW92dW5fdigoaW50OHgxNl90KV9fcDAsIDE4KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50OHg4X3QgdnFtb3Z1bl9zMTYoaW50MTZ4OF90IF9fcDApIHsKLSAgdWludDh4OF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxbW92dW5fdigoaW50OHgxNl90KV9fcDAsIDE2KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDh4OF90IHZxbW92dW5fczE2KGludDE2eDhfdCBfX3AwKSB7Ci0gIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDh4OF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxbW92dW5fdigoaW50OHgxNl90KV9fcmV2MCwgMTYpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLV9fYWkgdWludDh4OF90IF9fbm9zd2FwX3ZxbW92dW5fczE2KGludDE2eDhfdCBfX3AwKSB7Ci0gIHVpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cW1vdnVuX3YoKGludDh4MTZfdClfX3AwLCAxNik7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50OHgxNl90IHZxbmVncV9zOChpbnQ4eDE2X3QgX19wMCkgewotICBpbnQ4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDh4MTZfdCkgX19idWlsdGluX25lb25fdnFuZWdxX3YoKGludDh4MTZfdClfX3AwLCAzMik7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDh4MTZfdCB2cW5lZ3FfczgoaW50OHgxNl90IF9fcDApIHsKLSAgaW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQ4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDh4MTZfdCkgX19idWlsdGluX25lb25fdnFuZWdxX3YoKGludDh4MTZfdClfX3JldjAsIDMyKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDMyeDRfdCB2cW5lZ3FfczMyKGludDMyeDRfdCBfX3AwKSB7Ci0gIGludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cW5lZ3FfdigoaW50OHgxNl90KV9fcDAsIDM0KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MzJ4NF90IHZxbmVncV9zMzIoaW50MzJ4NF90IF9fcDApIHsKLSAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICBpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdnFuZWdxX3YoKGludDh4MTZfdClfX3JldjAsIDM0KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDE2eDhfdCB2cW5lZ3FfczE2KGludDE2eDhfdCBfX3AwKSB7Ci0gIGludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92cW5lZ3FfdigoaW50OHgxNl90KV9fcDAsIDMzKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MTZ4OF90IHZxbmVncV9zMTYoaW50MTZ4OF90IF9fcDApIHsKLSAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDE2eDhfdCkgX19idWlsdGluX25lb25fdnFuZWdxX3YoKGludDh4MTZfdClfX3JldjAsIDMzKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDh4OF90IHZxbmVnX3M4KGludDh4OF90IF9fcDApIHsKLSAgaW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cW5lZ192KChpbnQ4eDhfdClfX3AwLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50OHg4X3QgdnFuZWdfczgoaW50OHg4X3QgX19wMCkgewotICBpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cW5lZ192KChpbnQ4eDhfdClfX3JldjAsIDApOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MzJ4Ml90IHZxbmVnX3MzMihpbnQzMngyX3QgX19wMCkgewotICBpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdnFuZWdfdigoaW50OHg4X3QpX19wMCwgMik7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDMyeDJfdCB2cW5lZ19zMzIoaW50MzJ4Ml90IF9fcDApIHsKLSAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICBpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdnFuZWdfdigoaW50OHg4X3QpX19yZXYwLCAyKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDE2eDRfdCB2cW5lZ19zMTYoaW50MTZ4NF90IF9fcDApIHsKLSAgaW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZxbmVnX3YoKGludDh4OF90KV9fcDAsIDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQxNng0X3QgdnFuZWdfczE2KGludDE2eDRfdCBfX3AwKSB7Ci0gIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgaW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZxbmVnX3YoKGludDh4OF90KV9fcmV2MCwgMSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQzMng0X3QgdnFyZG11bGhxX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKLSAgaW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZxcmRtdWxocV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAzNCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDMyeDRfdCB2cXJkbXVsaHFfczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgewotICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKLSAgaW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZxcmRtdWxocV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMzQpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLV9fYWkgaW50MzJ4NF90IF9fbm9zd2FwX3ZxcmRtdWxocV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7Ci0gIGludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cXJkbXVsaHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMzQpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDE2eDhfdCB2cXJkbXVsaHFfczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgewotICBpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDE2eDhfdCkgX19idWlsdGluX25lb25fdnFyZG11bGhxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDMzKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MTZ4OF90IHZxcmRtdWxocV9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7Ci0gIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDE2eDhfdCkgX19idWlsdGluX25lb25fdnFyZG11bGhxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAzMyk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotX19haSBpbnQxNng4X3QgX19ub3N3YXBfdnFyZG11bGhxX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKLSAgaW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxcmRtdWxocV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAzMyk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MzJ4Ml90IHZxcmRtdWxoX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKLSAgaW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxcmRtdWxoX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAyKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MzJ4Ml90IHZxcmRtdWxoX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKLSAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7Ci0gIGludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cXJkbXVsaF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDIpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLV9fYWkgaW50MzJ4Ml90IF9fbm9zd2FwX3ZxcmRtdWxoX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKLSAgaW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxcmRtdWxoX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAyKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQxNng0X3QgdnFyZG11bGhfczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgewotICBpbnQxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdnFyZG11bGhfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQxNng0X3QgdnFyZG11bGhfczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgewotICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKLSAgaW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZxcmRtdWxoX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotX19haSBpbnQxNng0X3QgX19ub3N3YXBfdnFyZG11bGhfczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgewotICBpbnQxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdnFyZG11bGhfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZxcmRtdWxocV9sYW5lX3MzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCi0gIGludDMyeDJfdCBfX3MxID0gX19wMTsgXAotICBpbnQzMng0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSB2cXJkbXVsaHFfczMyKF9fczAsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIpKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZxcmRtdWxocV9sYW5lX3MzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCi0gIGludDMyeDJfdCBfX3MxID0gX19wMTsgXAotICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKLSAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCi0gIGludDMyeDRfdCBfX3JldDsgXAotICBfX3JldCA9IF9fbm9zd2FwX3ZxcmRtdWxocV9zMzIoX19yZXYwLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjEsIF9fcmV2MSwgX19wMiwgX19wMiwgX19wMiwgX19wMikpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnFyZG11bGhxX2xhbmVfczE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCi0gIGludDE2eDhfdCBfX3JldDsgXAotICBfX3JldCA9IHZxcmRtdWxocV9zMTYoX19zMCwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgX19wMiwgX19wMiwgX19wMiwgX19wMiwgX19wMiwgX19wMiwgX19wMiwgX19wMikpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnFyZG11bGhxX2xhbmVfczE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCi0gIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKLSAgaW50MTZ4OF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gX19ub3N3YXBfdnFyZG11bGhxX3MxNihfX3JldjAsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MSwgX19yZXYxLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyKSk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2cXJkbXVsaF9sYW5lX3MzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCi0gIGludDMyeDJfdCBfX3MxID0gX19wMTsgXAotICBpbnQzMngyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSB2cXJkbXVsaF9zMzIoX19zMCwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgX19wMiwgX19wMikpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnFyZG11bGhfbGFuZV9zMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDMyeDJfdCBfX3MwID0gX19wMDsgXAotICBpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKLSAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCi0gIGludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxLCAwKTsgXAotICBpbnQzMngyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSBfX25vc3dhcF92cXJkbXVsaF9zMzIoX19yZXYwLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjEsIF9fcmV2MSwgX19wMiwgX19wMikpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnFyZG11bGhfbGFuZV9zMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDE2eDRfdCBfX3MwID0gX19wMDsgXAotICBpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKLSAgaW50MTZ4NF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gdnFyZG11bGhfczE2KF9fczAsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIpKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZxcmRtdWxoX2xhbmVfczE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCi0gIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAotICBpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKLSAgaW50MTZ4NF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gX19ub3N3YXBfdnFyZG11bGhfczE2KF9fcmV2MCwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYxLCBfX3JldjEsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIpKTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDMyeDRfdCB2cXJkbXVsaHFfbl9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyX3QgX19wMSkgewotICBpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdnFyZG11bGhxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KShpbnQzMng0X3QpIHtfX3AxLCBfX3AxLCBfX3AxLCBfX3AxfSwgMzQpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQzMng0X3QgdnFyZG11bGhxX25fczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMl90IF9fcDEpIHsKLSAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICBpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdnFyZG11bGhxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpKGludDMyeDRfdCkge19fcDEsIF9fcDEsIF9fcDEsIF9fcDF9LCAzNCk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQxNng4X3QgdnFyZG11bGhxX25fczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNl90IF9fcDEpIHsKLSAgaW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxcmRtdWxocV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdCkoaW50MTZ4OF90KSB7X19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMX0sIDMzKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MTZ4OF90IHZxcmRtdWxocV9uX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZfdCBfX3AxKSB7Ci0gIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxcmRtdWxocV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KShpbnQxNng4X3QpIHtfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxfSwgMzMpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MzJ4Ml90IHZxcmRtdWxoX25fczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMl90IF9fcDEpIHsKLSAgaW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxcmRtdWxoX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdCkoaW50MzJ4Ml90KSB7X19wMSwgX19wMX0sIDIpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQzMngyX3QgdnFyZG11bGhfbl9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyX3QgX19wMSkgewotICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIGludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cXJkbXVsaF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdCkoaW50MzJ4Ml90KSB7X19wMSwgX19wMX0sIDIpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MTZ4NF90IHZxcmRtdWxoX25fczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNl90IF9fcDEpIHsKLSAgaW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZxcmRtdWxoX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdCkoaW50MTZ4NF90KSB7X19wMSwgX19wMSwgX19wMSwgX19wMX0sIDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQxNng0X3QgdnFyZG11bGhfbl9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2X3QgX19wMSkgewotICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIGludDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cXJkbXVsaF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdCkoaW50MTZ4NF90KSB7X19wMSwgX19wMSwgX19wMSwgX19wMX0sIDEpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDh4MTZfdCB2cXJzaGxxX3U4KHVpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEpIHsKLSAgdWludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdnFyc2hscV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA0OCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ4eDE2X3QgdnFyc2hscV91OCh1aW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7Ci0gIHVpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdnFyc2hscV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNDgpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDMyeDRfdCB2cXJzaGxxX3UzMih1aW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7Ci0gIHVpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZxcnNobHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNTApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MzJ4NF90IHZxcnNobHFfdTMyKHVpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKLSAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOwotICB1aW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cXJzaGxxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA1MCk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50NjR4Ml90IHZxcnNobHFfdTY0KHVpbnQ2NHgyX3QgX19wMCwgaW50NjR4Ml90IF9fcDEpIHsKLSAgdWludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdnFyc2hscV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA1MSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ2NHgyX3QgdnFyc2hscV91NjQodWludDY0eDJfdCBfX3AwLCBpbnQ2NHgyX3QgX19wMSkgewotICB1aW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICBpbnQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7Ci0gIHVpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxcnNobHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDUxKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQxNng4X3QgdnFyc2hscV91MTYodWludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgewotICB1aW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92cXJzaGxxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDQ5KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDE2eDhfdCB2cXJzaGxxX3UxNih1aW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7Ci0gIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDE2eDhfdCkgX19idWlsdGluX25lb25fdnFyc2hscV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNDkpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50OHgxNl90IHZxcnNobHFfczgoaW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7Ci0gIGludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cXJzaGxxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDMyKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50OHgxNl90IHZxcnNobHFfczgoaW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7Ci0gIGludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQ4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDh4MTZfdCkgX19idWlsdGluX25lb25fdnFyc2hscV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMzIpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MzJ4NF90IHZxcnNobHFfczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgewotICBpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdnFyc2hscV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAzNCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDMyeDRfdCB2cXJzaGxxX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKLSAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7Ci0gIGludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cXJzaGxxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAzNCk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ2NHgyX3QgdnFyc2hscV9zNjQoaW50NjR4Ml90IF9fcDAsIGludDY0eDJfdCBfX3AxKSB7Ci0gIGludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92cXJzaGxxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDM1KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50NjR4Ml90IHZxcnNobHFfczY0KGludDY0eDJfdCBfX3AwLCBpbnQ2NHgyX3QgX19wMSkgewotICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIGludDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKLSAgaW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxcnNobHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDM1KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDE2eDhfdCB2cXJzaGxxX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKLSAgaW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxcnNobHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMzMpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQxNng4X3QgdnFyc2hscV9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7Ci0gIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDE2eDhfdCkgX19idWlsdGluX25lb25fdnFyc2hscV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMzMpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDh4OF90IHZxcnNobF91OCh1aW50OHg4X3QgX19wMCwgaW50OHg4X3QgX19wMSkgewotICB1aW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnFyc2hsX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxNik7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ4eDhfdCB2cXJzaGxfdTgodWludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKLSAgdWludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDh4OF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxcnNobF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDE2KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQzMngyX3QgdnFyc2hsX3UzMih1aW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7Ci0gIHVpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxcnNobF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTgpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MzJ4Ml90IHZxcnNobF91MzIodWludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgewotICB1aW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7Ci0gIHVpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxcnNobF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDE4KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ2NHgxX3QgdnFyc2hsX3U2NCh1aW50NjR4MV90IF9fcDAsIGludDY0eDFfdCBfX3AxKSB7Ci0gIHVpbnQ2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZxcnNobF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTkpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50NjR4MV90IHZxcnNobF91NjQodWludDY0eDFfdCBfX3AwLCBpbnQ2NHgxX3QgX19wMSkgewotICB1aW50NjR4MV90IF9fcmV0OwotICBfX3JldCA9ICh1aW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92cXJzaGxfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDE5KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MTZ4NF90IHZxcnNobF91MTYodWludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgewotICB1aW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cXJzaGxfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDE3KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDE2eDRfdCB2cXJzaGxfdTE2KHVpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKLSAgdWludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOwotICB1aW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cXJzaGxfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAxNyk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ4eDhfdCB2cXJzaGxfczgoaW50OHg4X3QgX19wMCwgaW50OHg4X3QgX19wMSkgewotICBpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxcnNobF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDh4OF90IHZxcnNobF9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7Ci0gIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cXJzaGxfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAwKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDMyeDJfdCB2cXJzaGxfczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgewotICBpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdnFyc2hsX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAyKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MzJ4Ml90IHZxcnNobF9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7Ci0gIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOwotICBpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdnFyc2hsX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMik7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ2NHgxX3QgdnFyc2hsX3M2NChpbnQ2NHgxX3QgX19wMCwgaW50NjR4MV90IF9fcDEpIHsKLSAgaW50NjR4MV90IF9fcmV0OwotICBfX3JldCA9IChpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZxcnNobF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMyk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDY0eDFfdCB2cXJzaGxfczY0KGludDY0eDFfdCBfX3AwLCBpbnQ2NHgxX3QgX19wMSkgewotICBpbnQ2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDY0eDFfdCkgX19idWlsdGluX25lb25fdnFyc2hsX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAzKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQxNng0X3QgdnFyc2hsX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKLSAgaW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZxcnNobF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDE2eDRfdCB2cXJzaGxfczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgewotICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKLSAgaW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZxcnNobF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDEpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnFyc2hybl9uX3UzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDMyeDRfdCBfX3MwID0gX19wMDsgXAotICB1aW50MTZ4NF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZxcnNocm5fbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgMTcpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnFyc2hybl9uX3UzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDMyeDRfdCBfX3MwID0gX19wMDsgXAotICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCi0gIHVpbnQxNng0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdnFyc2hybl9uX3YoKGludDh4MTZfdClfX3JldjAsIF9fcDEsIDE3KTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZGVmaW5lIF9fbm9zd2FwX3ZxcnNocm5fbl91MzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDE2eDRfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cXJzaHJuX25fdigoaW50OHgxNl90KV9fczAsIF9fcDEsIDE3KTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnFyc2hybl9uX3U2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDY0eDJfdCBfX3MwID0gX19wMDsgXAotICB1aW50MzJ4Ml90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxcnNocm5fbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgMTgpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnFyc2hybl9uX3U2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDY0eDJfdCBfX3MwID0gX19wMDsgXAotICB1aW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCi0gIHVpbnQzMngyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdnFyc2hybl9uX3YoKGludDh4MTZfdClfX3JldjAsIF9fcDEsIDE4KTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZGVmaW5lIF9fbm9zd2FwX3ZxcnNocm5fbl91NjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDMyeDJfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cXJzaHJuX25fdigoaW50OHgxNl90KV9fczAsIF9fcDEsIDE4KTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnFyc2hybl9uX3UxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDE2eDhfdCBfX3MwID0gX19wMDsgXAotICB1aW50OHg4X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cXJzaHJuX25fdigoaW50OHgxNl90KV9fczAsIF9fcDEsIDE2KTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZxcnNocm5fbl91MTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICB1aW50OHg4X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cXJzaHJuX25fdigoaW50OHgxNl90KV9fcmV2MCwgX19wMSwgMTYpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNkZWZpbmUgX19ub3N3YXBfdnFyc2hybl9uX3UxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDE2eDhfdCBfX3MwID0gX19wMDsgXAotICB1aW50OHg4X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cXJzaHJuX25fdigoaW50OHgxNl90KV9fczAsIF9fcDEsIDE2KTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnFyc2hybl9uX3MzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCi0gIGludDE2eDRfdCBfX3JldDsgXAotICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZxcnNocm5fbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgMSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2cXJzaHJuX25fczMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCi0gIGludDE2eDRfdCBfX3JldDsgXAotICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZxcnNocm5fbl92KChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxLCAxKTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZGVmaW5lIF9fbm9zd2FwX3ZxcnNocm5fbl9zMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAotICBpbnQxNng0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cXJzaHJuX25fdigoaW50OHgxNl90KV9fczAsIF9fcDEsIDEpOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2cXJzaHJuX25fczY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MzJ4Ml90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdnFyc2hybl9uX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCAyKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZxcnNocm5fbl9zNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDY0eDJfdCBfX3MwID0gX19wMDsgXAotICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKLSAgaW50MzJ4Ml90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdnFyc2hybl9uX3YoKGludDh4MTZfdClfX3JldjAsIF9fcDEsIDIpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNkZWZpbmUgX19ub3N3YXBfdnFyc2hybl9uX3M2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCi0gIGludDMyeDJfdCBfX3JldDsgXAotICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxcnNocm5fbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgMik7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZxcnNocm5fbl9zMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDE2eDhfdCBfX3MwID0gX19wMDsgXAotICBpbnQ4eDhfdCBfX3JldDsgXAotICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnFyc2hybl9uX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZxcnNocm5fbl9zMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDE2eDhfdCBfX3MwID0gX19wMDsgXAotICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgaW50OHg4X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxcnNocm5fbl92KChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxLCAwKTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZGVmaW5lIF9fbm9zd2FwX3ZxcnNocm5fbl9zMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDE2eDhfdCBfX3MwID0gX19wMDsgXAotICBpbnQ4eDhfdCBfX3JldDsgXAotICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnFyc2hybl9uX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnFyc2hydW5fbl9zMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAotICB1aW50MTZ4NF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZxcnNocnVuX25fdigoaW50OHgxNl90KV9fczAsIF9fcDEsIDE3KTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZxcnNocnVuX25fczMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCi0gIHVpbnQxNng0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdnFyc2hydW5fbl92KChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxLCAxNyk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2RlZmluZSBfX25vc3dhcF92cXJzaHJ1bl9uX3MzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQxNng0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdnFyc2hydW5fbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgMTcpOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2cXJzaHJ1bl9uX3M2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQzMngyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdnFyc2hydW5fbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgMTgpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnFyc2hydW5fbl9zNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDY0eDJfdCBfX3MwID0gX19wMDsgXAotICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKLSAgdWludDMyeDJfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cXJzaHJ1bl9uX3YoKGludDh4MTZfdClfX3JldjAsIF9fcDEsIDE4KTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZGVmaW5lIF9fbm9zd2FwX3ZxcnNocnVuX25fczY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDMyeDJfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cXJzaHJ1bl9uX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCAxOCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZxcnNocnVuX25fczE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDh4OF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnFyc2hydW5fbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgMTYpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnFyc2hydW5fbl9zMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDE2eDhfdCBfX3MwID0gX19wMDsgXAotICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgdWludDh4OF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnFyc2hydW5fbl92KChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxLCAxNik7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2RlZmluZSBfX25vc3dhcF92cXJzaHJ1bl9uX3MxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQ4eDhfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxcnNocnVuX25fdigoaW50OHgxNl90KV9fczAsIF9fcDEsIDE2KTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDh4MTZfdCB2cXNobHFfdTgodWludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgewotICB1aW50OHgxNl90IF9fcmV0OwotICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cXNobHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNDgpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50OHgxNl90IHZxc2hscV91OCh1aW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7Ci0gIHVpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdnFzaGxxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA0OCk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MzJ4NF90IHZxc2hscV91MzIodWludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgewotICB1aW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cXNobHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNTApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MzJ4NF90IHZxc2hscV91MzIodWludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgewotICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7Ci0gIHVpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hscV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNTApOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDY0eDJfdCB2cXNobHFfdTY0KHVpbnQ2NHgyX3QgX19wMCwgaW50NjR4Ml90IF9fcDEpIHsKLSAgdWludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdnFzaGxxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDUxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDY0eDJfdCB2cXNobHFfdTY0KHVpbnQ2NHgyX3QgX19wMCwgaW50NjR4Ml90IF9fcDEpIHsKLSAgdWludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgaW50NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOwotICB1aW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92cXNobHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDUxKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQxNng4X3QgdnFzaGxxX3UxNih1aW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7Ci0gIHVpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hscV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA0OSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQxNng4X3QgdnFzaGxxX3UxNih1aW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7Ci0gIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDE2eDhfdCkgX19idWlsdGluX25lb25fdnFzaGxxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA0OSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ4eDE2X3QgdnFzaGxxX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgewotICBpbnQ4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDh4MTZfdCkgX19idWlsdGluX25lb25fdnFzaGxxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDMyKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50OHgxNl90IHZxc2hscV9zOChpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEpIHsKLSAgaW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cXNobHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDMyKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDMyeDRfdCB2cXNobHFfczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgewotICBpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdnFzaGxxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDM0KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MzJ4NF90IHZxc2hscV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7Ci0gIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOwotICBpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdnFzaGxxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAzNCk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ2NHgyX3QgdnFzaGxxX3M2NChpbnQ2NHgyX3QgX19wMCwgaW50NjR4Ml90IF9fcDEpIHsKLSAgaW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hscV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAzNSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDY0eDJfdCB2cXNobHFfczY0KGludDY0eDJfdCBfX3AwLCBpbnQ2NHgyX3QgX19wMSkgewotICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIGludDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKLSAgaW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hscV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMzUpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MTZ4OF90IHZxc2hscV9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7Ci0gIGludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92cXNobHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMzMpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQxNng4X3QgdnFzaGxxX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKLSAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92cXNobHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDMzKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ4eDhfdCB2cXNobF91OCh1aW50OHg4X3QgX19wMCwgaW50OHg4X3QgX19wMSkgewotICB1aW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnFzaGxfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDE2KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDh4OF90IHZxc2hsX3U4KHVpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7Ci0gIHVpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cXNobF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDE2KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQzMngyX3QgdnFzaGxfdTMyKHVpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKLSAgdWludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdnFzaGxfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDE4KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDMyeDJfdCB2cXNobF91MzIodWludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgewotICB1aW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7Ci0gIHVpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hsX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMTgpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDY0eDFfdCB2cXNobF91NjQodWludDY0eDFfdCBfX3AwLCBpbnQ2NHgxX3QgX19wMSkgewotICB1aW50NjR4MV90IF9fcmV0OwotICBfX3JldCA9ICh1aW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92cXNobF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTkpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50NjR4MV90IHZxc2hsX3U2NCh1aW50NjR4MV90IF9fcDAsIGludDY0eDFfdCBfX3AxKSB7Ci0gIHVpbnQ2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hsX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxOSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDE2eDRfdCB2cXNobF91MTYodWludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgewotICB1aW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cXNobF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTcpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MTZ4NF90IHZxc2hsX3UxNih1aW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7Ci0gIHVpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKLSAgdWludDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdnFzaGxfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAxNyk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ4eDhfdCB2cXNobF9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7Ci0gIGludDh4OF90IF9fcmV0OwotICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnFzaGxfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQ4eDhfdCB2cXNobF9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7Ci0gIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cXNobF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDApOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MzJ4Ml90IHZxc2hsX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKLSAgaW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hsX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAyKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MzJ4Ml90IHZxc2hsX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKLSAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7Ci0gIGludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cXNobF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDIpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50NjR4MV90IHZxc2hsX3M2NChpbnQ2NHgxX3QgX19wMCwgaW50NjR4MV90IF9fcDEpIHsKLSAgaW50NjR4MV90IF9fcmV0OwotICBfX3JldCA9IChpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hsX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAzKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50NjR4MV90IHZxc2hsX3M2NChpbnQ2NHgxX3QgX19wMCwgaW50NjR4MV90IF9fcDEpIHsKLSAgaW50NjR4MV90IF9fcmV0OwotICBfX3JldCA9IChpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hsX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAzKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQxNng0X3QgdnFzaGxfczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgewotICBpbnQxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdnFzaGxfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQxNng0X3QgdnFzaGxfczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgewotICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKLSAgaW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hsX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2cXNobHFfbl91OChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDh4MTZfdCBfX3MwID0gX19wMDsgXAotICB1aW50OHgxNl90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hscV9uX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCA0OCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2cXNobHFfbl91OChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDh4MTZfdCBfX3MwID0gX19wMDsgXAotICB1aW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIHVpbnQ4eDE2X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdnFzaGxxX25fdigoaW50OHgxNl90KV9fcmV2MCwgX19wMSwgNDgpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnFzaGxxX25fdTMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQzMng0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdnFzaGxxX25fdigoaW50OHgxNl90KV9fczAsIF9fcDEsIDUwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZxc2hscV9uX3UzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDMyeDRfdCBfX3MwID0gX19wMDsgXAotICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCi0gIHVpbnQzMng0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdnFzaGxxX25fdigoaW50OHgxNl90KV9fcmV2MCwgX19wMSwgNTApOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnFzaGxxX25fdTY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQ2NHgyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdnFzaGxxX25fdigoaW50OHgxNl90KV9fczAsIF9fcDEsIDUxKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZxc2hscV9uX3U2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDY0eDJfdCBfX3MwID0gX19wMDsgXAotICB1aW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCi0gIHVpbnQ2NHgyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdnFzaGxxX25fdigoaW50OHgxNl90KV9fcmV2MCwgX19wMSwgNTEpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnFzaGxxX25fdTE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQxNng4X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAodWludDE2eDhfdCkgX19idWlsdGluX25lb25fdnFzaGxxX25fdigoaW50OHgxNl90KV9fczAsIF9fcDEsIDQ5KTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZxc2hscV9uX3UxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDE2eDhfdCBfX3MwID0gX19wMDsgXAotICB1aW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIHVpbnQxNng4X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAodWludDE2eDhfdCkgX19idWlsdGluX25lb25fdnFzaGxxX25fdigoaW50OHgxNl90KV9fcmV2MCwgX19wMSwgNDkpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnFzaGxxX25fczgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDh4MTZfdCBfX3MwID0gX19wMDsgXAotICBpbnQ4eDE2X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cXNobHFfbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgMzIpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnFzaGxxX25fczgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDh4MTZfdCBfX3MwID0gX19wMDsgXAotICBpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgaW50OHgxNl90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGludDh4MTZfdCkgX19idWlsdGluX25lb25fdnFzaGxxX25fdigoaW50OHgxNl90KV9fcmV2MCwgX19wMSwgMzIpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnFzaGxxX25fczMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MzJ4NF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdnFzaGxxX25fdigoaW50OHgxNl90KV9fczAsIF9fcDEsIDM0KTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZxc2hscV9uX3MzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCi0gIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAotICBpbnQzMng0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cXNobHFfbl92KChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxLCAzNCk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2cXNobHFfbl9zNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDY0eDJfdCBfX3MwID0gX19wMDsgXAotICBpbnQ2NHgyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoaW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92cXNobHFfbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgMzUpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnFzaGxxX25fczY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKLSAgaW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCi0gIGludDY0eDJfdCBfX3JldDsgXAotICBfX3JldCA9IChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hscV9uX3YoKGludDh4MTZfdClfX3JldjAsIF9fcDEsIDM1KTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZxc2hscV9uX3MxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCi0gIGludDE2eDhfdCBfX3JldDsgXAotICBfX3JldCA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hscV9uX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCAzMyk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2cXNobHFfbl9zMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDE2eDhfdCBfX3MwID0gX19wMDsgXAotICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgaW50MTZ4OF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGludDE2eDhfdCkgX19idWlsdGluX25lb25fdnFzaGxxX25fdigoaW50OHgxNl90KV9fcmV2MCwgX19wMSwgMzMpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnFzaGxfbl91OChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDh4OF90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQ4eDhfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hsX25fdigoaW50OHg4X3QpX19zMCwgX19wMSwgMTYpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnFzaGxfbl91OChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDh4OF90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICB1aW50OHg4X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cXNobF9uX3YoKGludDh4OF90KV9fcmV2MCwgX19wMSwgMTYpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnFzaGxfbl91MzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDMyeDJfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cXNobF9uX3YoKGludDh4OF90KV9fczAsIF9fcDEsIDE4KTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZxc2hsX25fdTMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKLSAgdWludDMyeDJfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cXNobF9uX3YoKGludDh4OF90KV9fcmV2MCwgX19wMSwgMTgpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnFzaGxfbl91NjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ2NHgxX3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDY0eDFfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92cXNobF9uX3YoKGludDh4OF90KV9fczAsIF9fcDEsIDE5KTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZxc2hsX25fdTY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50NjR4MV90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQ2NHgxX3QgX19yZXQ7IFwKLSAgX19yZXQgPSAodWludDY0eDFfdCkgX19idWlsdGluX25lb25fdnFzaGxfbl92KChpbnQ4eDhfdClfX3MwLCBfX3AxLCAxOSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZxc2hsX25fdTE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQxNng0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdnFzaGxfbl92KChpbnQ4eDhfdClfX3MwLCBfX3AxLCAxNyk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2cXNobF9uX3UxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDE2eDRfdCBfX3MwID0gX19wMDsgXAotICB1aW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCi0gIHVpbnQxNng0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdnFzaGxfbl92KChpbnQ4eDhfdClfX3JldjAsIF9fcDEsIDE3KTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZxc2hsX25fczgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDh4OF90IF9fczAgPSBfX3AwOyBcCi0gIGludDh4OF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cXNobF9uX3YoKGludDh4OF90KV9fczAsIF9fcDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnFzaGxfbl9zOChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50OHg4X3QgX19zMCA9IF9fcDA7IFwKLSAgaW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgaW50OHg4X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hsX25fdigoaW50OHg4X3QpX19yZXYwLCBfX3AxLCAwKTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZxc2hsX25fczMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MzJ4Ml90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdnFzaGxfbl92KChpbnQ4eDhfdClfX3MwLCBfX3AxLCAyKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZxc2hsX25fczMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCi0gIGludDMyeDJfdCBfX3JldDsgXAotICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hsX25fdigoaW50OHg4X3QpX19yZXYwLCBfX3AxLCAyKTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZxc2hsX25fczY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ2NHgxX3QgX19zMCA9IF9fcDA7IFwKLSAgaW50NjR4MV90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGludDY0eDFfdCkgX19idWlsdGluX25lb25fdnFzaGxfbl92KChpbnQ4eDhfdClfX3MwLCBfX3AxLCAzKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZxc2hsX25fczY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ2NHgxX3QgX19zMCA9IF9fcDA7IFwKLSAgaW50NjR4MV90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGludDY0eDFfdCkgX19idWlsdGluX25lb25fdnFzaGxfbl92KChpbnQ4eDhfdClfX3MwLCBfX3AxLCAzKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnFzaGxfbl9zMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDE2eDRfdCBfX3MwID0gX19wMDsgXAotICBpbnQxNng0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cXNobF9uX3YoKGludDh4OF90KV9fczAsIF9fcDEsIDEpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnFzaGxfbl9zMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDE2eDRfdCBfX3MwID0gX19wMDsgXAotICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKLSAgaW50MTZ4NF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdnFzaGxfbl92KChpbnQ4eDhfdClfX3JldjAsIF9fcDEsIDEpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnFzaGx1cV9uX3M4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ4eDE2X3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDh4MTZfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cXNobHVxX25fdigoaW50OHgxNl90KV9fczAsIF9fcDEsIDQ4KTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZxc2hsdXFfbl9zOChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50OHgxNl90IF9fczAgPSBfX3AwOyBcCi0gIGludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICB1aW50OHgxNl90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hsdXFfbl92KChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxLCA0OCk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2cXNobHVxX25fczMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDMyeDRfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cXNobHVxX25fdigoaW50OHgxNl90KV9fczAsIF9fcDEsIDUwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZxc2hsdXFfbl9zMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAotICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKLSAgdWludDMyeDRfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cXNobHVxX25fdigoaW50OHgxNl90KV9fcmV2MCwgX19wMSwgNTApOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnFzaGx1cV9uX3M2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQ2NHgyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdnFzaGx1cV9uX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCA1MSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2cXNobHVxX25fczY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKLSAgaW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCi0gIHVpbnQ2NHgyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdnFzaGx1cV9uX3YoKGludDh4MTZfdClfX3JldjAsIF9fcDEsIDUxKTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZxc2hsdXFfbl9zMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDE2eDhfdCBfX3MwID0gX19wMDsgXAotICB1aW50MTZ4OF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hsdXFfbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgNDkpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnFzaGx1cV9uX3MxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCi0gIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICB1aW50MTZ4OF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hsdXFfbl92KChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxLCA0OSk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2cXNobHVfbl9zOChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50OHg4X3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDh4OF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnFzaGx1X25fdigoaW50OHg4X3QpX19zMCwgX19wMSwgMTYpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnFzaGx1X25fczgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDh4OF90IF9fczAgPSBfX3AwOyBcCi0gIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIHVpbnQ4eDhfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hsdV9uX3YoKGludDh4OF90KV9fcmV2MCwgX19wMSwgMTYpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnFzaGx1X25fczMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDMyeDJfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cXNobHVfbl92KChpbnQ4eDhfdClfX3MwLCBfX3AxLCAxOCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2cXNobHVfbl9zMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDMyeDJfdCBfX3MwID0gX19wMDsgXAotICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKLSAgdWludDMyeDJfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cXNobHVfbl92KChpbnQ4eDhfdClfX3JldjAsIF9fcDEsIDE4KTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZxc2hsdV9uX3M2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50NjR4MV90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQ2NHgxX3QgX19yZXQ7IFwKLSAgX19yZXQgPSAodWludDY0eDFfdCkgX19idWlsdGluX25lb25fdnFzaGx1X25fdigoaW50OHg4X3QpX19zMCwgX19wMSwgMTkpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnFzaGx1X25fczY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ2NHgxX3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDY0eDFfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92cXNobHVfbl92KChpbnQ4eDhfdClfX3MwLCBfX3AxLCAxOSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZxc2hsdV9uX3MxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQxNng0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdnFzaGx1X25fdigoaW50OHg4X3QpX19zMCwgX19wMSwgMTcpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnFzaGx1X25fczE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCi0gIHVpbnQxNng0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdnFzaGx1X25fdigoaW50OHg4X3QpX19yZXYwLCBfX3AxLCAxNyk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2cXNocm5fbl91MzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDE2eDRfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cXNocm5fbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgMTcpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnFzaHJuX25fdTMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKLSAgdWludDE2eDRfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cXNocm5fbl92KChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxLCAxNyk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2RlZmluZSBfX25vc3dhcF92cXNocm5fbl91MzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDE2eDRfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cXNocm5fbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgMTcpOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2cXNocm5fbl91NjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDMyeDJfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cXNocm5fbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgMTgpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnFzaHJuX25fdTY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKLSAgdWludDMyeDJfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cXNocm5fbl92KChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxLCAxOCk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2RlZmluZSBfX25vc3dhcF92cXNocm5fbl91NjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDMyeDJfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cXNocm5fbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgMTgpOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2cXNocm5fbl91MTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDh4OF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnFzaHJuX25fdigoaW50OHgxNl90KV9fczAsIF9fcDEsIDE2KTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZxc2hybl9uX3UxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDE2eDhfdCBfX3MwID0gX19wMDsgXAotICB1aW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIHVpbnQ4eDhfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hybl9uX3YoKGludDh4MTZfdClfX3JldjAsIF9fcDEsIDE2KTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZGVmaW5lIF9fbm9zd2FwX3Zxc2hybl9uX3UxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDE2eDhfdCBfX3MwID0gX19wMDsgXAotICB1aW50OHg4X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cXNocm5fbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgMTYpOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2cXNocm5fbl9zMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAotICBpbnQxNng0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cXNocm5fbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgMSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2cXNocm5fbl9zMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAotICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKLSAgaW50MTZ4NF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdnFzaHJuX25fdigoaW50OHgxNl90KV9fcmV2MCwgX19wMSwgMSk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2RlZmluZSBfX25vc3dhcF92cXNocm5fbl9zMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAotICBpbnQxNng0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cXNocm5fbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgMSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZxc2hybl9uX3M2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCi0gIGludDMyeDJfdCBfX3JldDsgXAotICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hybl9uX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCAyKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZxc2hybl9uX3M2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCi0gIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAotICBpbnQzMngyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cXNocm5fbl92KChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxLCAyKTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZGVmaW5lIF9fbm9zd2FwX3Zxc2hybl9uX3M2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCi0gIGludDMyeDJfdCBfX3JldDsgXAotICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hybl9uX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCAyKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnFzaHJuX25fczE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKLSAgaW50OHg4X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hybl9uX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZxc2hybl9uX3MxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCi0gIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBpbnQ4eDhfdCBfX3JldDsgXAotICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnFzaHJuX25fdigoaW50OHgxNl90KV9fcmV2MCwgX19wMSwgMCk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2RlZmluZSBfX25vc3dhcF92cXNocm5fbl9zMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDE2eDhfdCBfX3MwID0gX19wMDsgXAotICBpbnQ4eDhfdCBfX3JldDsgXAotICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnFzaHJuX25fdigoaW50OHgxNl90KV9fczAsIF9fcDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2cXNocnVuX25fczMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDE2eDRfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cXNocnVuX25fdigoaW50OHgxNl90KV9fczAsIF9fcDEsIDE3KTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZxc2hydW5fbl9zMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAotICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKLSAgdWludDE2eDRfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cXNocnVuX25fdigoaW50OHgxNl90KV9fcmV2MCwgX19wMSwgMTcpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNkZWZpbmUgX19ub3N3YXBfdnFzaHJ1bl9uX3MzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQxNng0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdnFzaHJ1bl9uX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCAxNyk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZxc2hydW5fbl9zNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDY0eDJfdCBfX3MwID0gX19wMDsgXAotICB1aW50MzJ4Ml90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hydW5fbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgMTgpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnFzaHJ1bl9uX3M2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCi0gIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAotICB1aW50MzJ4Ml90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hydW5fbl92KChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxLCAxOCk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2RlZmluZSBfX25vc3dhcF92cXNocnVuX25fczY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDMyeDJfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cXNocnVuX25fdigoaW50OHgxNl90KV9fczAsIF9fcDEsIDE4KTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnFzaHJ1bl9uX3MxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQ4eDhfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hydW5fbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgMTYpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnFzaHJ1bl9uX3MxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCi0gIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICB1aW50OHg4X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cXNocnVuX25fdigoaW50OHgxNl90KV9fcmV2MCwgX19wMSwgMTYpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNkZWZpbmUgX19ub3N3YXBfdnFzaHJ1bl9uX3MxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQ4eDhfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hydW5fbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgMTYpOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50OHgxNl90IHZxc3VicV91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgewotICB1aW50OHgxNl90IF9fcmV0OwotICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cXN1YnFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNDgpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50OHgxNl90IHZxc3VicV91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgewotICB1aW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50OHgxNl90IF9fcmV0OwotICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cXN1YnFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDQ4KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQzMng0X3QgdnFzdWJxX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgewotICB1aW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cXN1YnFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNTApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MzJ4NF90IHZxc3VicV91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEpIHsKLSAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgdWludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKLSAgdWludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdnFzdWJxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA1MCk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50NjR4Ml90IHZxc3VicV91NjQodWludDY0eDJfdCBfX3AwLCB1aW50NjR4Ml90IF9fcDEpIHsKLSAgdWludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdnFzdWJxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDUxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDY0eDJfdCB2cXN1YnFfdTY0KHVpbnQ2NHgyX3QgX19wMCwgdWludDY0eDJfdCBfX3AxKSB7Ci0gIHVpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIHVpbnQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7Ci0gIHVpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3Zxc3VicV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNTEpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDE2eDhfdCB2cXN1YnFfdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxKSB7Ci0gIHVpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc3VicV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA0OSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQxNng4X3QgdnFzdWJxX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSkgewotICB1aW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92cXN1YnFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDQ5KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDh4MTZfdCB2cXN1YnFfczgoaW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7Ci0gIGludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cXN1YnFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMzIpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQ4eDE2X3QgdnFzdWJxX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgewotICBpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50OHgxNl90IF9fcmV0OwotICBfX3JldCA9IChpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc3VicV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMzIpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MzJ4NF90IHZxc3VicV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7Ci0gIGludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cXN1YnFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMzQpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQzMng0X3QgdnFzdWJxX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKLSAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7Ci0gIGludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cXN1YnFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDM0KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci1fX2FpIGludDMyeDRfdCBfX25vc3dhcF92cXN1YnFfczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgewotICBpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdnFzdWJxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDM0KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ2NHgyX3QgdnFzdWJxX3M2NChpbnQ2NHgyX3QgX19wMCwgaW50NjR4Ml90IF9fcDEpIHsKLSAgaW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3Zxc3VicV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAzNSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDY0eDJfdCB2cXN1YnFfczY0KGludDY0eDJfdCBfX3AwLCBpbnQ2NHgyX3QgX19wMSkgewotICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIGludDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKLSAgaW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3Zxc3VicV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMzUpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MTZ4OF90IHZxc3VicV9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7Ci0gIGludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92cXN1YnFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMzMpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQxNng4X3QgdnFzdWJxX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKLSAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92cXN1YnFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDMzKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci1fX2FpIGludDE2eDhfdCBfX25vc3dhcF92cXN1YnFfczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgewotICBpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDE2eDhfdCkgX19idWlsdGluX25lb25fdnFzdWJxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDMzKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50OHg4X3QgdnFzdWJfdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7Ci0gIHVpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cXN1Yl92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTYpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50OHg4X3QgdnFzdWJfdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7Ci0gIHVpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnFzdWJfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAxNik7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MzJ4Ml90IHZxc3ViX3UzMih1aW50MzJ4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSkgewotICB1aW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cXN1Yl92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTgpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MzJ4Ml90IHZxc3ViX3UzMih1aW50MzJ4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSkgewotICB1aW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICB1aW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOwotICB1aW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cXN1Yl92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDE4KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ2NHgxX3QgdnFzdWJfdTY0KHVpbnQ2NHgxX3QgX19wMCwgdWludDY0eDFfdCBfX3AxKSB7Ci0gIHVpbnQ2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3Zxc3ViX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxOSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ2NHgxX3QgdnFzdWJfdTY0KHVpbnQ2NHgxX3QgX19wMCwgdWludDY0eDFfdCBfX3AxKSB7Ci0gIHVpbnQ2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3Zxc3ViX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxOSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDE2eDRfdCB2cXN1Yl91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEpIHsKLSAgdWludDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdnFzdWJfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDE3KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDE2eDRfdCB2cXN1Yl91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEpIHsKLSAgdWludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgdWludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKLSAgdWludDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdnFzdWJfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAxNyk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ4eDhfdCB2cXN1Yl9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7Ci0gIGludDh4OF90IF9fcmV0OwotICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnFzdWJfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQ4eDhfdCB2cXN1Yl9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7Ci0gIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cXN1Yl92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDApOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MzJ4Ml90IHZxc3ViX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKLSAgaW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3Zxc3ViX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAyKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MzJ4Ml90IHZxc3ViX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKLSAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7Ci0gIGludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cXN1Yl92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDIpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLV9fYWkgaW50MzJ4Ml90IF9fbm9zd2FwX3Zxc3ViX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKLSAgaW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3Zxc3ViX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAyKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ2NHgxX3QgdnFzdWJfczY0KGludDY0eDFfdCBfX3AwLCBpbnQ2NHgxX3QgX19wMSkgewotICBpbnQ2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDY0eDFfdCkgX19idWlsdGluX25lb25fdnFzdWJfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDMpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQ2NHgxX3QgdnFzdWJfczY0KGludDY0eDFfdCBfX3AwLCBpbnQ2NHgxX3QgX19wMSkgewotICBpbnQ2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDY0eDFfdCkgX19idWlsdGluX25lb25fdnFzdWJfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDMpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDE2eDRfdCB2cXN1Yl9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7Ci0gIGludDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cXN1Yl92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDE2eDRfdCB2cXN1Yl9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7Ci0gIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOwotICBpbnQxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdnFzdWJfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAxKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci1fX2FpIGludDE2eDRfdCBfX25vc3dhcF92cXN1Yl9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7Ci0gIGludDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cXN1Yl92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDE2eDRfdCB2cmFkZGhuX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgewotICB1aW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cmFkZGhuX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDE3KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDE2eDRfdCB2cmFkZGhuX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgewotICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICB1aW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOwotICB1aW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cmFkZGhuX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAxNyk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotX19haSB1aW50MTZ4NF90IF9fbm9zd2FwX3ZyYWRkaG5fdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7Ci0gIHVpbnQxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZyYWRkaG5fdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMTcpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQzMngyX3QgdnJhZGRobl91NjQodWludDY0eDJfdCBfX3AwLCB1aW50NjR4Ml90IF9fcDEpIHsKLSAgdWludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdnJhZGRobl92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAxOCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQzMngyX3QgdnJhZGRobl91NjQodWludDY0eDJfdCBfX3AwLCB1aW50NjR4Ml90IF9fcDEpIHsKLSAgdWludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgdWludDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKLSAgdWludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdnJhZGRobl92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMTgpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLV9fYWkgdWludDMyeDJfdCBfX25vc3dhcF92cmFkZGhuX3U2NCh1aW50NjR4Ml90IF9fcDAsIHVpbnQ2NHgyX3QgX19wMSkgewotICB1aW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cmFkZGhuX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDE4KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50OHg4X3QgdnJhZGRobl91MTYodWludDE2eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEpIHsKLSAgdWludDh4OF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZyYWRkaG5fdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMTYpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50OHg4X3QgdnJhZGRobl91MTYodWludDE2eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEpIHsKLSAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDh4OF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZyYWRkaG5fdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDE2KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci1fX2FpIHVpbnQ4eDhfdCBfX25vc3dhcF92cmFkZGhuX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSkgewotICB1aW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnJhZGRobl92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAxNik7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MTZ4NF90IHZyYWRkaG5fczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgewotICBpbnQxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdnJhZGRobl92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MTZ4NF90IHZyYWRkaG5fczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgewotICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKLSAgaW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZyYWRkaG5fdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDEpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLV9fYWkgaW50MTZ4NF90IF9fbm9zd2FwX3ZyYWRkaG5fczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgewotICBpbnQxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdnJhZGRobl92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQzMngyX3QgdnJhZGRobl9zNjQoaW50NjR4Ml90IF9fcDAsIGludDY0eDJfdCBfX3AxKSB7Ci0gIGludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cmFkZGhuX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDIpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQzMngyX3QgdnJhZGRobl9zNjQoaW50NjR4Ml90IF9fcDAsIGludDY0eDJfdCBfX3AxKSB7Ci0gIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgaW50NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOwotICBpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdnJhZGRobl92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMik7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotX19haSBpbnQzMngyX3QgX19ub3N3YXBfdnJhZGRobl9zNjQoaW50NjR4Ml90IF9fcDAsIGludDY0eDJfdCBfX3AxKSB7Ci0gIGludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cmFkZGhuX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDIpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDh4OF90IHZyYWRkaG5fczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgewotICBpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZyYWRkaG5fdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDh4OF90IHZyYWRkaG5fczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgewotICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cmFkZGhuX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAwKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci1fX2FpIGludDh4OF90IF9fbm9zd2FwX3ZyYWRkaG5fczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgewotICBpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZyYWRkaG5fdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDMyeDRfdCB2cmVjcGVxX3UzMih1aW50MzJ4NF90IF9fcDApIHsKLSAgdWludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdnJlY3BlcV92KChpbnQ4eDE2X3QpX19wMCwgNTApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MzJ4NF90IHZyZWNwZXFfdTMyKHVpbnQzMng0X3QgX19wMCkgewotICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICB1aW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cmVjcGVxX3YoKGludDh4MTZfdClfX3JldjAsIDUwKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGZsb2F0MzJ4NF90IHZyZWNwZXFfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKLSAgZmxvYXQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cmVjcGVxX3YoKGludDh4MTZfdClfX3AwLCA0MSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGZsb2F0MzJ4NF90IHZyZWNwZXFfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKLSAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIGZsb2F0MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDMyeDRfdCkgX19idWlsdGluX25lb25fdnJlY3BlcV92KChpbnQ4eDE2X3QpX19yZXYwLCA0MSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MzJ4Ml90IHZyZWNwZV91MzIodWludDMyeDJfdCBfX3AwKSB7Ci0gIHVpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZyZWNwZV92KChpbnQ4eDhfdClfX3AwLCAxOCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQzMngyX3QgdnJlY3BlX3UzMih1aW50MzJ4Ml90IF9fcDApIHsKLSAgdWludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgdWludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdnJlY3BlX3YoKGludDh4OF90KV9fcmV2MCwgMTgpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgZmxvYXQzMngyX3QgdnJlY3BlX2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7Ci0gIGZsb2F0MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDMyeDJfdCkgX19idWlsdGluX25lb25fdnJlY3BlX3YoKGludDh4OF90KV9fcDAsIDkpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBmbG9hdDMyeDJfdCB2cmVjcGVfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKLSAgZmxvYXQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIGZsb2F0MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDMyeDJfdCkgX19idWlsdGluX25lb25fdnJlY3BlX3YoKGludDh4OF90KV9fcmV2MCwgOSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBmbG9hdDMyeDRfdCB2cmVjcHNxX2YzMihmbG9hdDMyeDRfdCBfX3AwLCBmbG9hdDMyeDRfdCBfX3AxKSB7Ci0gIGZsb2F0MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDMyeDRfdCkgX19idWlsdGluX25lb25fdnJlY3BzcV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA0MSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGZsb2F0MzJ4NF90IHZyZWNwc3FfZjMyKGZsb2F0MzJ4NF90IF9fcDAsIGZsb2F0MzJ4NF90IF9fcDEpIHsKLSAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIGZsb2F0MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOwotICBmbG9hdDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZyZWNwc3FfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDQxKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGZsb2F0MzJ4Ml90IHZyZWNwc19mMzIoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSkgewotICBmbG9hdDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZyZWNwc192KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgOSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGZsb2F0MzJ4Ml90IHZyZWNwc19mMzIoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSkgewotICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgZmxvYXQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7Ci0gIGZsb2F0MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDMyeDJfdCkgX19idWlsdGluX25lb25fdnJlY3BzX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgOSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBwb2x5OHg4X3QgdnJldjE2X3A4KHBvbHk4eDhfdCBfX3AwKSB7Ci0gIHBvbHk4eDhfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwLCAzLCAyLCA1LCA0LCA3LCA2KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgcG9seTh4OF90IHZyZXYxNl9wOChwb2x5OHg4X3QgX19wMCkgewotICBwb2x5OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHBvbHk4eDhfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgMSwgMCwgMywgMiwgNSwgNCwgNywgNik7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBwb2x5OHgxNl90IHZyZXYxNnFfcDgocG9seTh4MTZfdCBfX3AwKSB7Ci0gIHBvbHk4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCwgMywgMiwgNSwgNCwgNywgNiwgOSwgOCwgMTEsIDEwLCAxMywgMTIsIDE1LCAxNCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHBvbHk4eDE2X3QgdnJldjE2cV9wOChwb2x5OHgxNl90IF9fcDApIHsKLSAgcG9seTh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcG9seTh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgMSwgMCwgMywgMiwgNSwgNCwgNywgNiwgOSwgOCwgMTEsIDEwLCAxMywgMTIsIDE1LCAxNCk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50OHgxNl90IHZyZXYxNnFfdTgodWludDh4MTZfdCBfX3AwKSB7Ci0gIHVpbnQ4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCwgMywgMiwgNSwgNCwgNywgNiwgOSwgOCwgMTEsIDEwLCAxMywgMTIsIDE1LCAxNCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ4eDE2X3QgdnJldjE2cV91OCh1aW50OHgxNl90IF9fcDApIHsKLSAgdWludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgMSwgMCwgMywgMiwgNSwgNCwgNywgNiwgOSwgOCwgMTEsIDEwLCAxMywgMTIsIDE1LCAxNCk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ4eDE2X3QgdnJldjE2cV9zOChpbnQ4eDE2X3QgX19wMCkgewotICBpbnQ4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCwgMywgMiwgNSwgNCwgNywgNiwgOSwgOCwgMTEsIDEwLCAxMywgMTIsIDE1LCAxNCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDh4MTZfdCB2cmV2MTZxX3M4KGludDh4MTZfdCBfX3AwKSB7Ci0gIGludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50OHgxNl90IF9fcmV0OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCAxLCAwLCAzLCAyLCA1LCA0LCA3LCA2LCA5LCA4LCAxMSwgMTAsIDEzLCAxMiwgMTUsIDE0KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ4eDhfdCB2cmV2MTZfdTgodWludDh4OF90IF9fcDApIHsKLSAgdWludDh4OF90IF9fcmV0OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDAsIDMsIDIsIDUsIDQsIDcsIDYpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50OHg4X3QgdnJldjE2X3U4KHVpbnQ4eDhfdCBfX3AwKSB7Ci0gIHVpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDh4OF90IF9fcmV0OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCAxLCAwLCAzLCAyLCA1LCA0LCA3LCA2KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDh4OF90IHZyZXYxNl9zOChpbnQ4eDhfdCBfX3AwKSB7Ci0gIGludDh4OF90IF9fcmV0OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDAsIDMsIDIsIDUsIDQsIDcsIDYpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQ4eDhfdCB2cmV2MTZfczgoaW50OHg4X3QgX19wMCkgewotICBpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIDEsIDAsIDMsIDIsIDUsIDQsIDcsIDYpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgcG9seTh4OF90IHZyZXYzMl9wOChwb2x5OHg4X3QgX19wMCkgewotICBwb2x5OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCwgNywgNiwgNSwgNCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHBvbHk4eDhfdCB2cmV2MzJfcDgocG9seTh4OF90IF9fcDApIHsKLSAgcG9seTh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBwb2x5OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIDMsIDIsIDEsIDAsIDcsIDYsIDUsIDQpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgcG9seTE2eDRfdCB2cmV2MzJfcDE2KHBvbHkxNng0X3QgX19wMCkgewotICBwb2x5MTZ4NF90IF9fcmV0OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDAsIDMsIDIpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBwb2x5MTZ4NF90IHZyZXYzMl9wMTYocG9seTE2eDRfdCBfX3AwKSB7Ci0gIHBvbHkxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIHBvbHkxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIDEsIDAsIDMsIDIpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgcG9seTh4MTZfdCB2cmV2MzJxX3A4KHBvbHk4eDE2X3QgX19wMCkgewotICBwb2x5OHgxNl90IF9fcmV0OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDAsIDcsIDYsIDUsIDQsIDExLCAxMCwgOSwgOCwgMTUsIDE0LCAxMywgMTIpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBwb2x5OHgxNl90IHZyZXYzMnFfcDgocG9seTh4MTZfdCBfX3AwKSB7Ci0gIHBvbHk4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHBvbHk4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIDMsIDIsIDEsIDAsIDcsIDYsIDUsIDQsIDExLCAxMCwgOSwgOCwgMTUsIDE0LCAxMywgMTIpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgcG9seTE2eDhfdCB2cmV2MzJxX3AxNihwb2x5MTZ4OF90IF9fcDApIHsKLSAgcG9seTE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwLCAzLCAyLCA1LCA0LCA3LCA2KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgcG9seTE2eDhfdCB2cmV2MzJxX3AxNihwb2x5MTZ4OF90IF9fcDApIHsKLSAgcG9seTE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcG9seTE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgMSwgMCwgMywgMiwgNSwgNCwgNywgNik7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50OHgxNl90IHZyZXYzMnFfdTgodWludDh4MTZfdCBfX3AwKSB7Ci0gIHVpbnQ4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCwgNywgNiwgNSwgNCwgMTEsIDEwLCA5LCA4LCAxNSwgMTQsIDEzLCAxMik7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ4eDE2X3QgdnJldjMycV91OCh1aW50OHgxNl90IF9fcDApIHsKLSAgdWludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgMywgMiwgMSwgMCwgNywgNiwgNSwgNCwgMTEsIDEwLCA5LCA4LCAxNSwgMTQsIDEzLCAxMik7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MTZ4OF90IHZyZXYzMnFfdTE2KHVpbnQxNng4X3QgX19wMCkgewotICB1aW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDAsIDMsIDIsIDUsIDQsIDcsIDYpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MTZ4OF90IHZyZXYzMnFfdTE2KHVpbnQxNng4X3QgX19wMCkgewotICB1aW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCAxLCAwLCAzLCAyLCA1LCA0LCA3LCA2KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDh4MTZfdCB2cmV2MzJxX3M4KGludDh4MTZfdCBfX3AwKSB7Ci0gIGludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwLCA3LCA2LCA1LCA0LCAxMSwgMTAsIDksIDgsIDE1LCAxNCwgMTMsIDEyKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50OHgxNl90IHZyZXYzMnFfczgoaW50OHgxNl90IF9fcDApIHsKLSAgaW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQ4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIDMsIDIsIDEsIDAsIDcsIDYsIDUsIDQsIDExLCAxMCwgOSwgOCwgMTUsIDE0LCAxMywgMTIpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MTZ4OF90IHZyZXYzMnFfczE2KGludDE2eDhfdCBfX3AwKSB7Ci0gIGludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwLCAzLCAyLCA1LCA0LCA3LCA2KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MTZ4OF90IHZyZXYzMnFfczE2KGludDE2eDhfdCBfX3AwKSB7Ci0gIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCAxLCAwLCAzLCAyLCA1LCA0LCA3LCA2KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ4eDhfdCB2cmV2MzJfdTgodWludDh4OF90IF9fcDApIHsKLSAgdWludDh4OF90IF9fcmV0OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDAsIDcsIDYsIDUsIDQpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50OHg4X3QgdnJldjMyX3U4KHVpbnQ4eDhfdCBfX3AwKSB7Ci0gIHVpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDh4OF90IF9fcmV0OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCAzLCAyLCAxLCAwLCA3LCA2LCA1LCA0KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQxNng0X3QgdnJldjMyX3UxNih1aW50MTZ4NF90IF9fcDApIHsKLSAgdWludDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwLCAzLCAyKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDE2eDRfdCB2cmV2MzJfdTE2KHVpbnQxNng0X3QgX19wMCkgewotICB1aW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICB1aW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCAxLCAwLCAzLCAyKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDh4OF90IHZyZXYzMl9zOChpbnQ4eDhfdCBfX3AwKSB7Ci0gIGludDh4OF90IF9fcmV0OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDAsIDcsIDYsIDUsIDQpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQ4eDhfdCB2cmV2MzJfczgoaW50OHg4X3QgX19wMCkgewotICBpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIDMsIDIsIDEsIDAsIDcsIDYsIDUsIDQpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MTZ4NF90IHZyZXYzMl9zMTYoaW50MTZ4NF90IF9fcDApIHsKLSAgaW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDAsIDMsIDIpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQxNng0X3QgdnJldjMyX3MxNihpbnQxNng0X3QgX19wMCkgewotICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIGludDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgMSwgMCwgMywgMik7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBwb2x5OHg4X3QgdnJldjY0X3A4KHBvbHk4eDhfdCBfX3AwKSB7Ci0gIHBvbHk4eDhfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgcG9seTh4OF90IHZyZXY2NF9wOChwb2x5OHg4X3QgX19wMCkgewotICBwb2x5OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHBvbHk4eDhfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBwb2x5MTZ4NF90IHZyZXY2NF9wMTYocG9seTE2eDRfdCBfX3AwKSB7Ci0gIHBvbHkxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHBvbHkxNng0X3QgdnJldjY0X3AxNihwb2x5MTZ4NF90IF9fcDApIHsKLSAgcG9seTE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgcG9seTE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgMywgMiwgMSwgMCk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBwb2x5OHgxNl90IHZyZXY2NHFfcDgocG9seTh4MTZfdCBfX3AwKSB7Ci0gIHBvbHk4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHBvbHk4eDE2X3QgdnJldjY0cV9wOChwb2x5OHgxNl90IF9fcDApIHsKLSAgcG9seTh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcG9seTh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBwb2x5MTZ4OF90IHZyZXY2NHFfcDE2KHBvbHkxNng4X3QgX19wMCkgewotICBwb2x5MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDAsIDcsIDYsIDUsIDQpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBwb2x5MTZ4OF90IHZyZXY2NHFfcDE2KHBvbHkxNng4X3QgX19wMCkgewotICBwb2x5MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBwb2x5MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCAzLCAyLCAxLCAwLCA3LCA2LCA1LCA0KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ4eDE2X3QgdnJldjY0cV91OCh1aW50OHgxNl90IF9fcDApIHsKLSAgdWludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDh4MTZfdCB2cmV2NjRxX3U4KHVpbnQ4eDE2X3QgX19wMCkgewotICB1aW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50OHgxNl90IF9fcmV0OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQzMng0X3QgdnJldjY0cV91MzIodWludDMyeDRfdCBfX3AwKSB7Ci0gIHVpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCwgMywgMik7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQzMng0X3QgdnJldjY0cV91MzIodWludDMyeDRfdCBfX3AwKSB7Ci0gIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIDEsIDAsIDMsIDIpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDE2eDhfdCB2cmV2NjRxX3UxNih1aW50MTZ4OF90IF9fcDApIHsKLSAgdWludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwLCA3LCA2LCA1LCA0KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDE2eDhfdCB2cmV2NjRxX3UxNih1aW50MTZ4OF90IF9fcDApIHsKLSAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgMywgMiwgMSwgMCwgNywgNiwgNSwgNCk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ4eDE2X3QgdnJldjY0cV9zOChpbnQ4eDE2X3QgX19wMCkgewotICBpbnQ4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDh4MTZfdCB2cmV2NjRxX3M4KGludDh4MTZfdCBfX3AwKSB7Ci0gIGludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50OHgxNl90IF9fcmV0OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGZsb2F0MzJ4NF90IHZyZXY2NHFfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKLSAgZmxvYXQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCwgMywgMik7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGZsb2F0MzJ4NF90IHZyZXY2NHFfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKLSAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIGZsb2F0MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCAxLCAwLCAzLCAyKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDMyeDRfdCB2cmV2NjRxX3MzMihpbnQzMng0X3QgX19wMCkgewotICBpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCwgMywgMik7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDMyeDRfdCB2cmV2NjRxX3MzMihpbnQzMng0X3QgX19wMCkgewotICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIGludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgMSwgMCwgMywgMik7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQxNng4X3QgdnJldjY0cV9zMTYoaW50MTZ4OF90IF9fcDApIHsKLSAgaW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDAsIDcsIDYsIDUsIDQpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQxNng4X3QgdnJldjY0cV9zMTYoaW50MTZ4OF90IF9fcDApIHsKLSAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIDMsIDIsIDEsIDAsIDcsIDYsIDUsIDQpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDh4OF90IHZyZXY2NF91OCh1aW50OHg4X3QgX19wMCkgewotICB1aW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ4eDhfdCB2cmV2NjRfdTgodWludDh4OF90IF9fcDApIHsKLSAgdWludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDMyeDJfdCB2cmV2NjRfdTMyKHVpbnQzMngyX3QgX19wMCkgewotICB1aW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MzJ4Ml90IHZyZXY2NF91MzIodWludDMyeDJfdCBfX3AwKSB7Ci0gIHVpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIHVpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIDEsIDApOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDE2eDRfdCB2cmV2NjRfdTE2KHVpbnQxNng0X3QgX19wMCkgewotICB1aW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MTZ4NF90IHZyZXY2NF91MTYodWludDE2eDRfdCBfX3AwKSB7Ci0gIHVpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIDMsIDIsIDEsIDApOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50OHg4X3QgdnJldjY0X3M4KGludDh4OF90IF9fcDApIHsKLSAgaW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDh4OF90IHZyZXY2NF9zOChpbnQ4eDhfdCBfX3AwKSB7Ci0gIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBmbG9hdDMyeDJfdCB2cmV2NjRfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKLSAgZmxvYXQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGZsb2F0MzJ4Ml90IHZyZXY2NF9mMzIoZmxvYXQzMngyX3QgX19wMCkgewotICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgZmxvYXQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIDEsIDApOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MzJ4Ml90IHZyZXY2NF9zMzIoaW50MzJ4Ml90IF9fcDApIHsKLSAgaW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQzMngyX3QgdnJldjY0X3MzMihpbnQzMngyX3QgX19wMCkgewotICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIGludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgMSwgMCk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQxNng0X3QgdnJldjY0X3MxNihpbnQxNng0X3QgX19wMCkgewotICBpbnQxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDE2eDRfdCB2cmV2NjRfczE2KGludDE2eDRfdCBfX3AwKSB7Ci0gIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgaW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCAzLCAyLCAxLCAwKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ4eDE2X3QgdnJoYWRkcV91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgewotICB1aW50OHgxNl90IF9fcmV0OwotICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cmhhZGRxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDQ4KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDh4MTZfdCB2cmhhZGRxX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7Ci0gIHVpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQ4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZyaGFkZHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDQ4KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQzMng0X3QgdnJoYWRkcV91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEpIHsKLSAgdWludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdnJoYWRkcV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA1MCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQzMng0X3QgdnJoYWRkcV91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEpIHsKLSAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgdWludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKLSAgdWludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdnJoYWRkcV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNTApOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDE2eDhfdCB2cmhhZGRxX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSkgewotICB1aW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92cmhhZGRxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDQ5KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDE2eDhfdCB2cmhhZGRxX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSkgewotICB1aW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92cmhhZGRxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA0OSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ4eDE2X3QgdnJoYWRkcV9zOChpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEpIHsKLSAgaW50OHgxNl90IF9fcmV0OwotICBfX3JldCA9IChpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZyaGFkZHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMzIpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQ4eDE2X3QgdnJoYWRkcV9zOChpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEpIHsKLSAgaW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cmhhZGRxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAzMik7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQzMng0X3QgdnJoYWRkcV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7Ci0gIGludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cmhhZGRxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDM0KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MzJ4NF90IHZyaGFkZHFfczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgewotICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKLSAgaW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZyaGFkZHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDM0KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDE2eDhfdCB2cmhhZGRxX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKLSAgaW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZyaGFkZHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMzMpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQxNng4X3QgdnJoYWRkcV9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7Ci0gIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDE2eDhfdCkgX19idWlsdGluX25lb25fdnJoYWRkcV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMzMpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDh4OF90IHZyaGFkZF91OCh1aW50OHg4X3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKLSAgdWludDh4OF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZyaGFkZF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTYpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50OHg4X3QgdnJoYWRkX3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgewotICB1aW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDh4OF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZyaGFkZF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDE2KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQzMngyX3QgdnJoYWRkX3UzMih1aW50MzJ4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSkgewotICB1aW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cmhhZGRfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDE4KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDMyeDJfdCB2cmhhZGRfdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxKSB7Ci0gIHVpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIHVpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7Ci0gIHVpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZyaGFkZF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDE4KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQxNng0X3QgdnJoYWRkX3UxNih1aW50MTZ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSkgewotICB1aW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cmhhZGRfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDE3KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDE2eDRfdCB2cmhhZGRfdTE2KHVpbnQxNng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxKSB7Ci0gIHVpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7Ci0gIHVpbnQxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZyaGFkZF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDE3KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDh4OF90IHZyaGFkZF9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7Ci0gIGludDh4OF90IF9fcmV0OwotICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnJoYWRkX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50OHg4X3QgdnJoYWRkX3M4KGludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKLSAgaW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZyaGFkZF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDApOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MzJ4Ml90IHZyaGFkZF9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7Ci0gIGludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cmhhZGRfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDIpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQzMngyX3QgdnJoYWRkX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKLSAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7Ci0gIGludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cmhhZGRfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAyKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDE2eDRfdCB2cmhhZGRfczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgewotICBpbnQxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdnJoYWRkX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MTZ4NF90IHZyaGFkZF9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7Ci0gIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOwotICBpbnQxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdnJoYWRkX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50OHgxNl90IHZyc2hscV91OCh1aW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7Ci0gIHVpbnQ4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc2hscV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA0OCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ4eDE2X3QgdnJzaGxxX3U4KHVpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEpIHsKLSAgdWludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50OHgxNl90IF9fcmV0OwotICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cnNobHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDQ4KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQzMng0X3QgdnJzaGxxX3UzMih1aW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7Ci0gIHVpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc2hscV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA1MCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQzMng0X3QgdnJzaGxxX3UzMih1aW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7Ci0gIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKLSAgdWludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdnJzaGxxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA1MCk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50NjR4Ml90IHZyc2hscV91NjQodWludDY0eDJfdCBfX3AwLCBpbnQ2NHgyX3QgX19wMSkgewotICB1aW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92cnNobHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNTEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50NjR4Ml90IHZyc2hscV91NjQodWludDY0eDJfdCBfX3AwLCBpbnQ2NHgyX3QgX19wMSkgewotICB1aW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICBpbnQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7Ci0gIHVpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3Zyc2hscV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNTEpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDE2eDhfdCB2cnNobHFfdTE2KHVpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKLSAgdWludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDE2eDhfdCkgX19idWlsdGluX25lb25fdnJzaGxxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDQ5KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDE2eDhfdCB2cnNobHFfdTE2KHVpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKLSAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92cnNobHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDQ5KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDh4MTZfdCB2cnNobHFfczgoaW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7Ci0gIGludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cnNobHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMzIpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQ4eDE2X3QgdnJzaGxxX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgewotICBpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50OHgxNl90IF9fcmV0OwotICBfX3JldCA9IChpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc2hscV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMzIpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MzJ4NF90IHZyc2hscV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7Ci0gIGludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cnNobHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMzQpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQzMng0X3QgdnJzaGxxX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKLSAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7Ci0gIGludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cnNobHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDM0KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDY0eDJfdCB2cnNobHFfczY0KGludDY0eDJfdCBfX3AwLCBpbnQ2NHgyX3QgX19wMSkgewotICBpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDY0eDJfdCkgX19idWlsdGluX25lb25fdnJzaGxxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDM1KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50NjR4Ml90IHZyc2hscV9zNjQoaW50NjR4Ml90IF9fcDAsIGludDY0eDJfdCBfX3AxKSB7Ci0gIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgaW50NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOwotICBpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDY0eDJfdCkgX19idWlsdGluX25lb25fdnJzaGxxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAzNSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQxNng4X3QgdnJzaGxxX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKLSAgaW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc2hscV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAzMyk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDE2eDhfdCB2cnNobHFfczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgewotICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc2hscV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMzMpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDh4OF90IHZyc2hsX3U4KHVpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7Ci0gIHVpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cnNobF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTYpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50OHg4X3QgdnJzaGxfdTgodWludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKLSAgdWludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDh4OF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc2hsX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMTYpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDMyeDJfdCB2cnNobF91MzIodWludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgewotICB1aW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cnNobF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTgpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MzJ4Ml90IHZyc2hsX3UzMih1aW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7Ci0gIHVpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIGludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKLSAgdWludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdnJzaGxfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAxOCk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50NjR4MV90IHZyc2hsX3U2NCh1aW50NjR4MV90IF9fcDAsIGludDY0eDFfdCBfX3AxKSB7Ci0gIHVpbnQ2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3Zyc2hsX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxOSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ2NHgxX3QgdnJzaGxfdTY0KHVpbnQ2NHgxX3QgX19wMCwgaW50NjR4MV90IF9fcDEpIHsKLSAgdWludDY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDY0eDFfdCkgX19idWlsdGluX25lb25fdnJzaGxfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDE5KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MTZ4NF90IHZyc2hsX3UxNih1aW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7Ci0gIHVpbnQxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc2hsX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxNyk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQxNng0X3QgdnJzaGxfdTE2KHVpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKLSAgdWludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOwotICB1aW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cnNobF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDE3KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDh4OF90IHZyc2hsX3M4KGludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKLSAgaW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cnNobF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDh4OF90IHZyc2hsX3M4KGludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKLSAgaW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc2hsX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMCk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQzMngyX3QgdnJzaGxfczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgewotICBpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdnJzaGxfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDIpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQzMngyX3QgdnJzaGxfczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgewotICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIGludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKLSAgaW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3Zyc2hsX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMik7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ2NHgxX3QgdnJzaGxfczY0KGludDY0eDFfdCBfX3AwLCBpbnQ2NHgxX3QgX19wMSkgewotICBpbnQ2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDY0eDFfdCkgX19idWlsdGluX25lb25fdnJzaGxfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDMpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQ2NHgxX3QgdnJzaGxfczY0KGludDY0eDFfdCBfX3AwLCBpbnQ2NHgxX3QgX19wMSkgewotICBpbnQ2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDY0eDFfdCkgX19idWlsdGluX25lb25fdnJzaGxfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDMpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDE2eDRfdCB2cnNobF9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7Ci0gIGludDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cnNobF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDE2eDRfdCB2cnNobF9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7Ci0gIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOwotICBpbnQxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdnJzaGxfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAxKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZyc2hycV9uX3U4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50OHgxNl90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQ4eDE2X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdnJzaHJxX25fdigoaW50OHgxNl90KV9fczAsIF9fcDEsIDQ4KTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZyc2hycV9uX3U4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50OHgxNl90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgdWludDh4MTZfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cnNocnFfbl92KChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxLCA0OCk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2cnNocnFfbl91MzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDMyeDRfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cnNocnFfbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgNTApOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnJzaHJxX25fdTMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKLSAgdWludDMyeDRfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cnNocnFfbl92KChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxLCA1MCk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2cnNocnFfbl91NjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDY0eDJfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92cnNocnFfbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgNTEpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnJzaHJxX25fdTY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKLSAgdWludDY0eDJfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92cnNocnFfbl92KChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxLCA1MSk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2cnNocnFfbl91MTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDE2eDhfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92cnNocnFfbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgNDkpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnJzaHJxX25fdTE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgdWludDE2eDhfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92cnNocnFfbl92KChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxLCA0OSk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2cnNocnFfbl9zOChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50OHgxNl90IF9fczAgPSBfX3AwOyBcCi0gIGludDh4MTZfdCBfX3JldDsgXAotICBfX3JldCA9IChpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc2hycV9uX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCAzMik7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2cnNocnFfbl9zOChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50OHgxNl90IF9fczAgPSBfX3AwOyBcCi0gIGludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBpbnQ4eDE2X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cnNocnFfbl92KChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxLCAzMik7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2cnNocnFfbl9zMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAotICBpbnQzMng0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cnNocnFfbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgMzQpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnJzaHJxX25fczMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCi0gIGludDMyeDRfdCBfX3JldDsgXAotICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc2hycV9uX3YoKGludDh4MTZfdClfX3JldjAsIF9fcDEsIDM0KTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZyc2hycV9uX3M2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCi0gIGludDY0eDJfdCBfX3JldDsgXAotICBfX3JldCA9IChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3Zyc2hycV9uX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCAzNSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2cnNocnFfbl9zNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDY0eDJfdCBfX3MwID0gX19wMDsgXAotICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKLSAgaW50NjR4Ml90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGludDY0eDJfdCkgX19idWlsdGluX25lb25fdnJzaHJxX25fdigoaW50OHgxNl90KV9fcmV2MCwgX19wMSwgMzUpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnJzaHJxX25fczE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MTZ4OF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGludDE2eDhfdCkgX19idWlsdGluX25lb25fdnJzaHJxX25fdigoaW50OHgxNl90KV9fczAsIF9fcDEsIDMzKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZyc2hycV9uX3MxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCi0gIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBpbnQxNng4X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoaW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92cnNocnFfbl92KChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxLCAzMyk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2cnNocl9uX3U4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50OHg4X3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDh4OF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnJzaHJfbl92KChpbnQ4eDhfdClfX3MwLCBfX3AxLCAxNik7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2cnNocl9uX3U4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50OHg4X3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIHVpbnQ4eDhfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc2hyX25fdigoaW50OHg4X3QpX19yZXYwLCBfX3AxLCAxNik7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2cnNocl9uX3UzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDMyeDJfdCBfX3MwID0gX19wMDsgXAotICB1aW50MzJ4Ml90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3Zyc2hyX25fdigoaW50OHg4X3QpX19zMCwgX19wMSwgMTgpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnJzaHJfbl91MzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAotICB1aW50MzJ4Ml90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3Zyc2hyX25fdigoaW50OHg4X3QpX19yZXYwLCBfX3AxLCAxOCk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2cnNocl9uX3U2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDY0eDFfdCBfX3MwID0gX19wMDsgXAotICB1aW50NjR4MV90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3Zyc2hyX25fdigoaW50OHg4X3QpX19zMCwgX19wMSwgMTkpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnJzaHJfbl91NjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ2NHgxX3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDY0eDFfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92cnNocl9uX3YoKGludDh4OF90KV9fczAsIF9fcDEsIDE5KTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnJzaHJfbl91MTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDE2eDRfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cnNocl9uX3YoKGludDh4OF90KV9fczAsIF9fcDEsIDE3KTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZyc2hyX25fdTE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKLSAgdWludDE2eDRfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cnNocl9uX3YoKGludDh4OF90KV9fcmV2MCwgX19wMSwgMTcpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnJzaHJfbl9zOChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50OHg4X3QgX19zMCA9IF9fcDA7IFwKLSAgaW50OHg4X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc2hyX25fdigoaW50OHg4X3QpX19zMCwgX19wMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2cnNocl9uX3M4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ4eDhfdCBfX3MwID0gX19wMDsgXAotICBpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBpbnQ4eDhfdCBfX3JldDsgXAotICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnJzaHJfbl92KChpbnQ4eDhfdClfX3JldjAsIF9fcDEsIDApOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnJzaHJfbl9zMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDMyeDJfdCBfX3MwID0gX19wMDsgXAotICBpbnQzMngyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cnNocl9uX3YoKGludDh4OF90KV9fczAsIF9fcDEsIDIpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnJzaHJfbl9zMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDMyeDJfdCBfX3MwID0gX19wMDsgXAotICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKLSAgaW50MzJ4Ml90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdnJzaHJfbl92KChpbnQ4eDhfdClfX3JldjAsIF9fcDEsIDIpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnJzaHJfbl9zNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDY0eDFfdCBfX3MwID0gX19wMDsgXAotICBpbnQ2NHgxX3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoaW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92cnNocl9uX3YoKGludDh4OF90KV9fczAsIF9fcDEsIDMpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnJzaHJfbl9zNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDY0eDFfdCBfX3MwID0gX19wMDsgXAotICBpbnQ2NHgxX3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoaW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92cnNocl9uX3YoKGludDh4OF90KV9fczAsIF9fcDEsIDMpOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2cnNocl9uX3MxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCi0gIGludDE2eDRfdCBfX3JldDsgXAotICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc2hyX25fdigoaW50OHg4X3QpX19zMCwgX19wMSwgMSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2cnNocl9uX3MxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCi0gIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAotICBpbnQxNng0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cnNocl9uX3YoKGludDh4OF90KV9fcmV2MCwgX19wMSwgMSk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2cnNocm5fbl91MzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDE2eDRfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cnNocm5fbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgMTcpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnJzaHJuX25fdTMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKLSAgdWludDE2eDRfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cnNocm5fbl92KChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxLCAxNyk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2RlZmluZSBfX25vc3dhcF92cnNocm5fbl91MzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDE2eDRfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cnNocm5fbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgMTcpOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2cnNocm5fbl91NjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDMyeDJfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cnNocm5fbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgMTgpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnJzaHJuX25fdTY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKLSAgdWludDMyeDJfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cnNocm5fbl92KChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxLCAxOCk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2RlZmluZSBfX25vc3dhcF92cnNocm5fbl91NjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDMyeDJfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cnNocm5fbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgMTgpOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2cnNocm5fbl91MTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDh4OF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnJzaHJuX25fdigoaW50OHgxNl90KV9fczAsIF9fcDEsIDE2KTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZyc2hybl9uX3UxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDE2eDhfdCBfX3MwID0gX19wMDsgXAotICB1aW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIHVpbnQ4eDhfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc2hybl9uX3YoKGludDh4MTZfdClfX3JldjAsIF9fcDEsIDE2KTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZGVmaW5lIF9fbm9zd2FwX3Zyc2hybl9uX3UxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDE2eDhfdCBfX3MwID0gX19wMDsgXAotICB1aW50OHg4X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cnNocm5fbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgMTYpOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2cnNocm5fbl9zMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAotICBpbnQxNng0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cnNocm5fbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgMSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2cnNocm5fbl9zMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAotICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKLSAgaW50MTZ4NF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdnJzaHJuX25fdigoaW50OHgxNl90KV9fcmV2MCwgX19wMSwgMSk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2RlZmluZSBfX25vc3dhcF92cnNocm5fbl9zMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAotICBpbnQxNng0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cnNocm5fbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgMSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZyc2hybl9uX3M2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCi0gIGludDMyeDJfdCBfX3JldDsgXAotICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3Zyc2hybl9uX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCAyKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZyc2hybl9uX3M2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCi0gIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAotICBpbnQzMngyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cnNocm5fbl92KChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxLCAyKTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZGVmaW5lIF9fbm9zd2FwX3Zyc2hybl9uX3M2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCi0gIGludDMyeDJfdCBfX3JldDsgXAotICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3Zyc2hybl9uX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCAyKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnJzaHJuX25fczE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKLSAgaW50OHg4X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc2hybl9uX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZyc2hybl9uX3MxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCi0gIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBpbnQ4eDhfdCBfX3JldDsgXAotICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnJzaHJuX25fdigoaW50OHgxNl90KV9fcmV2MCwgX19wMSwgMCk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2RlZmluZSBfX25vc3dhcF92cnNocm5fbl9zMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDE2eDhfdCBfX3MwID0gX19wMDsgXAotICBpbnQ4eDhfdCBfX3JldDsgXAotICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnJzaHJuX25fdigoaW50OHgxNl90KV9fczAsIF9fcDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MzJ4NF90IHZyc3FydGVxX3UzMih1aW50MzJ4NF90IF9fcDApIHsKLSAgdWludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdnJzcXJ0ZXFfdigoaW50OHgxNl90KV9fcDAsIDUwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDMyeDRfdCB2cnNxcnRlcV91MzIodWludDMyeDRfdCBfX3AwKSB7Ci0gIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc3FydGVxX3YoKGludDh4MTZfdClfX3JldjAsIDUwKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGZsb2F0MzJ4NF90IHZyc3FydGVxX2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7Ci0gIGZsb2F0MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDMyeDRfdCkgX19idWlsdGluX25lb25fdnJzcXJ0ZXFfdigoaW50OHgxNl90KV9fcDAsIDQxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgZmxvYXQzMng0X3QgdnJzcXJ0ZXFfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKLSAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIGZsb2F0MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDMyeDRfdCkgX19idWlsdGluX25lb25fdnJzcXJ0ZXFfdigoaW50OHgxNl90KV9fcmV2MCwgNDEpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDMyeDJfdCB2cnNxcnRlX3UzMih1aW50MzJ4Ml90IF9fcDApIHsKLSAgdWludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdnJzcXJ0ZV92KChpbnQ4eDhfdClfX3AwLCAxOCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQzMngyX3QgdnJzcXJ0ZV91MzIodWludDMyeDJfdCBfX3AwKSB7Ci0gIHVpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIHVpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3Zyc3FydGVfdigoaW50OHg4X3QpX19yZXYwLCAxOCk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBmbG9hdDMyeDJfdCB2cnNxcnRlX2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7Ci0gIGZsb2F0MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDMyeDJfdCkgX19idWlsdGluX25lb25fdnJzcXJ0ZV92KChpbnQ4eDhfdClfX3AwLCA5KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgZmxvYXQzMngyX3QgdnJzcXJ0ZV9mMzIoZmxvYXQzMngyX3QgX19wMCkgewotICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgZmxvYXQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cnNxcnRlX3YoKGludDh4OF90KV9fcmV2MCwgOSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBmbG9hdDMyeDRfdCB2cnNxcnRzcV9mMzIoZmxvYXQzMng0X3QgX19wMCwgZmxvYXQzMng0X3QgX19wMSkgewotICBmbG9hdDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc3FydHNxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDQxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgZmxvYXQzMng0X3QgdnJzcXJ0c3FfZjMyKGZsb2F0MzJ4NF90IF9fcDAsIGZsb2F0MzJ4NF90IF9fcDEpIHsKLSAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIGZsb2F0MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOwotICBmbG9hdDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc3FydHNxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA0MSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBmbG9hdDMyeDJfdCB2cnNxcnRzX2YzMihmbG9hdDMyeDJfdCBfX3AwLCBmbG9hdDMyeDJfdCBfX3AxKSB7Ci0gIGZsb2F0MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDMyeDJfdCkgX19idWlsdGluX25lb25fdnJzcXJ0c192KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgOSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGZsb2F0MzJ4Ml90IHZyc3FydHNfZjMyKGZsb2F0MzJ4Ml90IF9fcDAsIGZsb2F0MzJ4Ml90IF9fcDEpIHsKLSAgZmxvYXQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIGZsb2F0MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOwotICBmbG9hdDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3Zyc3FydHNfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCA5KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZyc3JhcV9uX3U4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50OHgxNl90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQ4eDE2X3QgX19zMSA9IF9fcDE7IFwKLSAgdWludDh4MTZfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cnNyYXFfbl92KChpbnQ4eDE2X3QpX19zMCwgKGludDh4MTZfdClfX3MxLCBfX3AyLCA0OCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2cnNyYXFfbl91OChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDh4MTZfdCBfX3MwID0gX19wMDsgXAotICB1aW50OHgxNl90IF9fczEgPSBfX3AxOyBcCi0gIHVpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgdWludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICB1aW50OHgxNl90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc3JhcV9uX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCBfX3AyLCA0OCk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2cnNyYXFfbl91MzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDMyeDRfdCBfX3MxID0gX19wMTsgXAotICB1aW50MzJ4NF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc3JhcV9uX3YoKGludDh4MTZfdClfX3MwLCAoaW50OHgxNl90KV9fczEsIF9fcDIsIDUwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZyc3JhcV9uX3UzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDMyeDRfdCBfX3MwID0gX19wMDsgXAotICB1aW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCi0gIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKLSAgdWludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAotICB1aW50MzJ4NF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc3JhcV9uX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCBfX3AyLCA1MCk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2cnNyYXFfbl91NjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDY0eDJfdCBfX3MxID0gX19wMTsgXAotICB1aW50NjR4Ml90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3Zyc3JhcV9uX3YoKGludDh4MTZfdClfX3MwLCAoaW50OHgxNl90KV9fczEsIF9fcDIsIDUxKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZyc3JhcV9uX3U2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDY0eDJfdCBfX3MwID0gX19wMDsgXAotICB1aW50NjR4Ml90IF9fczEgPSBfX3AxOyBcCi0gIHVpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKLSAgdWludDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxLCAwKTsgXAotICB1aW50NjR4Ml90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3Zyc3JhcV9uX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCBfX3AyLCA1MSk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2cnNyYXFfbl91MTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDE2eDhfdCBfX3MxID0gX19wMTsgXAotICB1aW50MTZ4OF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc3JhcV9uX3YoKGludDh4MTZfdClfX3MwLCAoaW50OHgxNl90KV9fczEsIF9fcDIsIDQ5KTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZyc3JhcV9uX3UxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDE2eDhfdCBfX3MwID0gX19wMDsgXAotICB1aW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCi0gIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgdWludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICB1aW50MTZ4OF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc3JhcV9uX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCBfX3AyLCA0OSk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2cnNyYXFfbl9zOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50OHgxNl90IF9fczAgPSBfX3AwOyBcCi0gIGludDh4MTZfdCBfX3MxID0gX19wMTsgXAotICBpbnQ4eDE2X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cnNyYXFfbl92KChpbnQ4eDE2X3QpX19zMCwgKGludDh4MTZfdClfX3MxLCBfX3AyLCAzMik7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2cnNyYXFfbl9zOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50OHgxNl90IF9fczAgPSBfX3AwOyBcCi0gIGludDh4MTZfdCBfX3MxID0gX19wMTsgXAotICBpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgaW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIGludDh4MTZfdCBfX3JldDsgXAotICBfX3JldCA9IChpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc3JhcV9uX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCBfX3AyLCAzMik7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2cnNyYXFfbl9zMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAotICBpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKLSAgaW50MzJ4NF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdnJzcmFxX25fdigoaW50OHgxNl90KV9fczAsIChpbnQ4eDE2X3QpX19zMSwgX19wMiwgMzQpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnJzcmFxX25fczMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCi0gIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAotICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKLSAgaW50MzJ4NF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdnJzcmFxX25fdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIF9fcDIsIDM0KTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZyc3JhcV9uX3M2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCi0gIGludDY0eDJfdCBfX3MxID0gX19wMTsgXAotICBpbnQ2NHgyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoaW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92cnNyYXFfbl92KChpbnQ4eDE2X3QpX19zMCwgKGludDh4MTZfdClfX3MxLCBfX3AyLCAzNSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2cnNyYXFfbl9zNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDY0eDJfdCBfX3MwID0gX19wMDsgXAotICBpbnQ2NHgyX3QgX19zMSA9IF9fcDE7IFwKLSAgaW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCi0gIGludDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxLCAwKTsgXAotICBpbnQ2NHgyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoaW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92cnNyYXFfbl92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgX19wMiwgMzUpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnJzcmFxX25fczE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCi0gIGludDE2eDhfdCBfX3JldDsgXAotICBfX3JldCA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc3JhcV9uX3YoKGludDh4MTZfdClfX3MwLCAoaW50OHgxNl90KV9fczEsIF9fcDIsIDMzKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZyc3JhcV9uX3MxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCi0gIGludDE2eDhfdCBfX3MxID0gX19wMTsgXAotICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIGludDE2eDhfdCBfX3JldDsgXAotICBfX3JldCA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc3JhcV9uX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCBfX3AyLCAzMyk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2cnNyYV9uX3U4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50OHg4X3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDh4OF90IF9fczEgPSBfX3AxOyBcCi0gIHVpbnQ4eDhfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc3JhX25fdigoaW50OHg4X3QpX19zMCwgKGludDh4OF90KV9fczEsIF9fcDIsIDE2KTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZyc3JhX25fdTgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ4eDhfdCBfX3MwID0gX19wMDsgXAotICB1aW50OHg4X3QgX19zMSA9IF9fcDE7IFwKLSAgdWludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIHVpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICB1aW50OHg4X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cnNyYV9uX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgX19wMiwgMTYpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnJzcmFfbl91MzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDMyeDJfdCBfX3MxID0gX19wMTsgXAotICB1aW50MzJ4Ml90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3Zyc3JhX25fdigoaW50OHg4X3QpX19zMCwgKGludDh4OF90KV9fczEsIF9fcDIsIDE4KTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZyc3JhX25fdTMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKLSAgdWludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAotICB1aW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCi0gIHVpbnQzMngyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdnJzcmFfbl92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIF9fcDIsIDE4KTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZyc3JhX25fdTY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50NjR4MV90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQ2NHgxX3QgX19zMSA9IF9fcDE7IFwKLSAgdWludDY0eDFfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92cnNyYV9uX3YoKGludDh4OF90KV9fczAsIChpbnQ4eDhfdClfX3MxLCBfX3AyLCAxOSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2cnNyYV9uX3U2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDY0eDFfdCBfX3MwID0gX19wMDsgXAotICB1aW50NjR4MV90IF9fczEgPSBfX3AxOyBcCi0gIHVpbnQ2NHgxX3QgX19yZXQ7IFwKLSAgX19yZXQgPSAodWludDY0eDFfdCkgX19idWlsdGluX25lb25fdnJzcmFfbl92KChpbnQ4eDhfdClfX3MwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgMTkpOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2cnNyYV9uX3UxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDE2eDRfdCBfX3MwID0gX19wMDsgXAotICB1aW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCi0gIHVpbnQxNng0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdnJzcmFfbl92KChpbnQ4eDhfdClfX3MwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgMTcpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnJzcmFfbl91MTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDE2eDRfdCBfX3MxID0gX19wMTsgXAotICB1aW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCi0gIHVpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKLSAgdWludDE2eDRfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cnNyYV9uX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgX19wMiwgMTcpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnJzcmFfbl9zOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50OHg4X3QgX19zMCA9IF9fcDA7IFwKLSAgaW50OHg4X3QgX19zMSA9IF9fcDE7IFwKLSAgaW50OHg4X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc3JhX25fdigoaW50OHg4X3QpX19zMCwgKGludDh4OF90KV9fczEsIF9fcDIsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnJzcmFfbl9zOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50OHg4X3QgX19zMCA9IF9fcDA7IFwKLSAgaW50OHg4X3QgX19zMSA9IF9fcDE7IFwKLSAgaW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgaW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgaW50OHg4X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc3JhX25fdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCBfX3AyLCAwKTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZyc3JhX25fczMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCi0gIGludDMyeDJfdCBfX3JldDsgXAotICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3Zyc3JhX25fdigoaW50OHg4X3QpX19zMCwgKGludDh4OF90KV9fczEsIF9fcDIsIDIpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnJzcmFfbl9zMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDMyeDJfdCBfX3MwID0gX19wMDsgXAotICBpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKLSAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCi0gIGludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxLCAwKTsgXAotICBpbnQzMngyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cnNyYV9uX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgX19wMiwgMik7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2cnNyYV9uX3M2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50NjR4MV90IF9fczAgPSBfX3AwOyBcCi0gIGludDY0eDFfdCBfX3MxID0gX19wMTsgXAotICBpbnQ2NHgxX3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoaW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92cnNyYV9uX3YoKGludDh4OF90KV9fczAsIChpbnQ4eDhfdClfX3MxLCBfX3AyLCAzKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZyc3JhX25fczY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ2NHgxX3QgX19zMCA9IF9fcDA7IFwKLSAgaW50NjR4MV90IF9fczEgPSBfX3AxOyBcCi0gIGludDY0eDFfdCBfX3JldDsgXAotICBfX3JldCA9IChpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3Zyc3JhX25fdigoaW50OHg4X3QpX19zMCwgKGludDh4OF90KV9fczEsIF9fcDIsIDMpOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2cnNyYV9uX3MxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCi0gIGludDE2eDRfdCBfX3MxID0gX19wMTsgXAotICBpbnQxNng0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cnNyYV9uX3YoKGludDh4OF90KV9fczAsIChpbnQ4eDhfdClfX3MxLCBfX3AyLCAxKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZyc3JhX25fczE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCi0gIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAotICBpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKLSAgaW50MTZ4NF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdnJzcmFfbl92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIF9fcDIsIDEpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDE2eDRfdCB2cnN1YmhuX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgewotICB1aW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cnN1YmhuX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDE3KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDE2eDRfdCB2cnN1YmhuX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgewotICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICB1aW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOwotICB1aW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cnN1YmhuX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAxNyk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotX19haSB1aW50MTZ4NF90IF9fbm9zd2FwX3Zyc3ViaG5fdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7Ci0gIHVpbnQxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc3ViaG5fdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMTcpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQzMngyX3QgdnJzdWJobl91NjQodWludDY0eDJfdCBfX3AwLCB1aW50NjR4Ml90IF9fcDEpIHsKLSAgdWludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdnJzdWJobl92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAxOCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQzMngyX3QgdnJzdWJobl91NjQodWludDY0eDJfdCBfX3AwLCB1aW50NjR4Ml90IF9fcDEpIHsKLSAgdWludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgdWludDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKLSAgdWludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdnJzdWJobl92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMTgpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLV9fYWkgdWludDMyeDJfdCBfX25vc3dhcF92cnN1YmhuX3U2NCh1aW50NjR4Ml90IF9fcDAsIHVpbnQ2NHgyX3QgX19wMSkgewotICB1aW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cnN1YmhuX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDE4KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50OHg4X3QgdnJzdWJobl91MTYodWludDE2eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEpIHsKLSAgdWludDh4OF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc3ViaG5fdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMTYpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50OHg4X3QgdnJzdWJobl91MTYodWludDE2eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEpIHsKLSAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDh4OF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc3ViaG5fdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDE2KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci1fX2FpIHVpbnQ4eDhfdCBfX25vc3dhcF92cnN1YmhuX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSkgewotICB1aW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnJzdWJobl92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAxNik7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MTZ4NF90IHZyc3ViaG5fczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgewotICBpbnQxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdnJzdWJobl92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MTZ4NF90IHZyc3ViaG5fczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgewotICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKLSAgaW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc3ViaG5fdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDEpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLV9fYWkgaW50MTZ4NF90IF9fbm9zd2FwX3Zyc3ViaG5fczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgewotICBpbnQxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdnJzdWJobl92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQzMngyX3QgdnJzdWJobl9zNjQoaW50NjR4Ml90IF9fcDAsIGludDY0eDJfdCBfX3AxKSB7Ci0gIGludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cnN1YmhuX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDIpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQzMngyX3QgdnJzdWJobl9zNjQoaW50NjR4Ml90IF9fcDAsIGludDY0eDJfdCBfX3AxKSB7Ci0gIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgaW50NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOwotICBpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdnJzdWJobl92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMik7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotX19haSBpbnQzMngyX3QgX19ub3N3YXBfdnJzdWJobl9zNjQoaW50NjR4Ml90IF9fcDAsIGludDY0eDJfdCBfX3AxKSB7Ci0gIGludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cnN1YmhuX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDIpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDh4OF90IHZyc3ViaG5fczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgewotICBpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc3ViaG5fdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDh4OF90IHZyc3ViaG5fczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgewotICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cnN1YmhuX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAwKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci1fX2FpIGludDh4OF90IF9fbm9zd2FwX3Zyc3ViaG5fczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgewotICBpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc3ViaG5fdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnNldF9sYW5lX3A4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBwb2x5OF90IF9fczAgPSBfX3AwOyBcCi0gIHBvbHk4eDhfdCBfX3MxID0gX19wMTsgXAotICBwb2x5OHg4X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAocG9seTh4OF90KSBfX2J1aWx0aW5fbmVvbl92c2V0X2xhbmVfaTgoX19zMCwgKGludDh4OF90KV9fczEsIF9fcDIpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnNldF9sYW5lX3A4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBwb2x5OF90IF9fczAgPSBfX3AwOyBcCi0gIHBvbHk4eDhfdCBfX3MxID0gX19wMTsgXAotICBwb2x5OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgcG9seTh4OF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHBvbHk4eDhfdCkgX19idWlsdGluX25lb25fdnNldF9sYW5lX2k4KF9fczAsIChpbnQ4eDhfdClfX3JldjEsIF9fcDIpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNkZWZpbmUgX19ub3N3YXBfdnNldF9sYW5lX3A4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBwb2x5OF90IF9fczAgPSBfX3AwOyBcCi0gIHBvbHk4eDhfdCBfX3MxID0gX19wMTsgXAotICBwb2x5OHg4X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAocG9seTh4OF90KSBfX2J1aWx0aW5fbmVvbl92c2V0X2xhbmVfaTgoX19zMCwgKGludDh4OF90KV9fczEsIF9fcDIpOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c2V0X2xhbmVfcDE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBwb2x5MTZfdCBfX3MwID0gX19wMDsgXAotICBwb2x5MTZ4NF90IF9fczEgPSBfX3AxOyBcCi0gIHBvbHkxNng0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAocG9seTE2eDRfdCkgX19idWlsdGluX25lb25fdnNldF9sYW5lX2kxNihfX3MwLCAoaW50OHg4X3QpX19zMSwgX19wMik7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c2V0X2xhbmVfcDE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBwb2x5MTZfdCBfX3MwID0gX19wMDsgXAotICBwb2x5MTZ4NF90IF9fczEgPSBfX3AxOyBcCi0gIHBvbHkxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKLSAgcG9seTE2eDRfdCBfX3JldDsgXAotICBfX3JldCA9IChwb2x5MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92c2V0X2xhbmVfaTE2KF9fczAsIChpbnQ4eDhfdClfX3JldjEsIF9fcDIpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNkZWZpbmUgX19ub3N3YXBfdnNldF9sYW5lX3AxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTE2X3QgX19zMCA9IF9fcDA7IFwKLSAgcG9seTE2eDRfdCBfX3MxID0gX19wMTsgXAotICBwb2x5MTZ4NF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHBvbHkxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzZXRfbGFuZV9pMTYoX19zMCwgKGludDh4OF90KV9fczEsIF9fcDIpOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c2V0cV9sYW5lX3A4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBwb2x5OF90IF9fczAgPSBfX3AwOyBcCi0gIHBvbHk4eDE2X3QgX19zMSA9IF9fcDE7IFwKLSAgcG9seTh4MTZfdCBfX3JldDsgXAotICBfX3JldCA9IChwb2x5OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92c2V0cV9sYW5lX2k4KF9fczAsIChpbnQ4eDE2X3QpX19zMSwgX19wMik7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c2V0cV9sYW5lX3A4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBwb2x5OF90IF9fczAgPSBfX3AwOyBcCi0gIHBvbHk4eDE2X3QgX19zMSA9IF9fcDE7IFwKLSAgcG9seTh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBwb2x5OHgxNl90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHBvbHk4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZzZXRxX2xhbmVfaTgoX19zMCwgKGludDh4MTZfdClfX3JldjEsIF9fcDIpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNkZWZpbmUgX19ub3N3YXBfdnNldHFfbGFuZV9wOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seThfdCBfX3MwID0gX19wMDsgXAotICBwb2x5OHgxNl90IF9fczEgPSBfX3AxOyBcCi0gIHBvbHk4eDE2X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAocG9seTh4MTZfdCkgX19idWlsdGluX25lb25fdnNldHFfbGFuZV9pOChfX3MwLCAoaW50OHgxNl90KV9fczEsIF9fcDIpOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c2V0cV9sYW5lX3AxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTE2X3QgX19zMCA9IF9fcDA7IFwKLSAgcG9seTE2eDhfdCBfX3MxID0gX19wMTsgXAotICBwb2x5MTZ4OF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHBvbHkxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZzZXRxX2xhbmVfaTE2KF9fczAsIChpbnQ4eDE2X3QpX19zMSwgX19wMik7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c2V0cV9sYW5lX3AxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTE2X3QgX19zMCA9IF9fcDA7IFwKLSAgcG9seTE2eDhfdCBfX3MxID0gX19wMTsgXAotICBwb2x5MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIHBvbHkxNng4X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAocG9seTE2eDhfdCkgX19idWlsdGluX25lb25fdnNldHFfbGFuZV9pMTYoX19zMCwgKGludDh4MTZfdClfX3JldjEsIF9fcDIpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNkZWZpbmUgX19ub3N3YXBfdnNldHFfbGFuZV9wMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHkxNl90IF9fczAgPSBfX3AwOyBcCi0gIHBvbHkxNng4X3QgX19zMSA9IF9fcDE7IFwKLSAgcG9seTE2eDhfdCBfX3JldDsgXAotICBfX3JldCA9IChwb2x5MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92c2V0cV9sYW5lX2kxNihfX3MwLCAoaW50OHgxNl90KV9fczEsIF9fcDIpOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c2V0cV9sYW5lX3U4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50OF90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQ4eDE2X3QgX19zMSA9IF9fcDE7IFwKLSAgdWludDh4MTZfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92c2V0cV9sYW5lX2k4KF9fczAsIChpbnQ4eDE2X3QpX19zMSwgX19wMik7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c2V0cV9sYW5lX3U4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50OF90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQ4eDE2X3QgX19zMSA9IF9fcDE7IFwKLSAgdWludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICB1aW50OHgxNl90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZzZXRxX2xhbmVfaTgoX19zMCwgKGludDh4MTZfdClfX3JldjEsIF9fcDIpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNkZWZpbmUgX19ub3N3YXBfdnNldHFfbGFuZV91OChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDhfdCBfX3MwID0gX19wMDsgXAotICB1aW50OHgxNl90IF9fczEgPSBfX3AxOyBcCi0gIHVpbnQ4eDE2X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdnNldHFfbGFuZV9pOChfX3MwLCAoaW50OHgxNl90KV9fczEsIF9fcDIpOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c2V0cV9sYW5lX3UzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDMyX3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDMyeDRfdCBfX3MxID0gX19wMTsgXAotICB1aW50MzJ4NF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzZXRxX2xhbmVfaTMyKF9fczAsIChpbnQ4eDE2X3QpX19zMSwgX19wMik7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c2V0cV9sYW5lX3UzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDMyX3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDMyeDRfdCBfX3MxID0gX19wMTsgXAotICB1aW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCi0gIHVpbnQzMng0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdnNldHFfbGFuZV9pMzIoX19zMCwgKGludDh4MTZfdClfX3JldjEsIF9fcDIpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNkZWZpbmUgX19ub3N3YXBfdnNldHFfbGFuZV91MzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQzMl90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKLSAgdWludDMyeDRfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92c2V0cV9sYW5lX2kzMihfX3MwLCAoaW50OHgxNl90KV9fczEsIF9fcDIpOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c2V0cV9sYW5lX3U2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDY0X3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDY0eDJfdCBfX3MxID0gX19wMTsgXAotICB1aW50NjR4Ml90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZzZXRxX2xhbmVfaTY0KF9fczAsIChpbnQ4eDE2X3QpX19zMSwgX19wMik7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c2V0cV9sYW5lX3U2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDY0X3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDY0eDJfdCBfX3MxID0gX19wMTsgXAotICB1aW50NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCi0gIHVpbnQ2NHgyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdnNldHFfbGFuZV9pNjQoX19zMCwgKGludDh4MTZfdClfX3JldjEsIF9fcDIpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNkZWZpbmUgX19ub3N3YXBfdnNldHFfbGFuZV91NjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ2NF90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQ2NHgyX3QgX19zMSA9IF9fcDE7IFwKLSAgdWludDY0eDJfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92c2V0cV9sYW5lX2k2NChfX3MwLCAoaW50OHgxNl90KV9fczEsIF9fcDIpOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c2V0cV9sYW5lX3UxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDE2X3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDE2eDhfdCBfX3MxID0gX19wMTsgXAotICB1aW50MTZ4OF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZzZXRxX2xhbmVfaTE2KF9fczAsIChpbnQ4eDE2X3QpX19zMSwgX19wMik7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c2V0cV9sYW5lX3UxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDE2X3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDE2eDhfdCBfX3MxID0gX19wMTsgXAotICB1aW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIHVpbnQxNng4X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAodWludDE2eDhfdCkgX19idWlsdGluX25lb25fdnNldHFfbGFuZV9pMTYoX19zMCwgKGludDh4MTZfdClfX3JldjEsIF9fcDIpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNkZWZpbmUgX19ub3N3YXBfdnNldHFfbGFuZV91MTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQxNl90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKLSAgdWludDE2eDhfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92c2V0cV9sYW5lX2kxNihfX3MwLCAoaW50OHgxNl90KV9fczEsIF9fcDIpOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c2V0cV9sYW5lX3M4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ4X3QgX19zMCA9IF9fcDA7IFwKLSAgaW50OHgxNl90IF9fczEgPSBfX3AxOyBcCi0gIGludDh4MTZfdCBfX3JldDsgXAotICBfX3JldCA9IChpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZzZXRxX2xhbmVfaTgoX19zMCwgKGludDh4MTZfdClfX3MxLCBfX3AyKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzZXRxX2xhbmVfczgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDhfdCBfX3MwID0gX19wMDsgXAotICBpbnQ4eDE2X3QgX19zMSA9IF9fcDE7IFwKLSAgaW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIGludDh4MTZfdCBfX3JldDsgXAotICBfX3JldCA9IChpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZzZXRxX2xhbmVfaTgoX19zMCwgKGludDh4MTZfdClfX3JldjEsIF9fcDIpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNkZWZpbmUgX19ub3N3YXBfdnNldHFfbGFuZV9zOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50OF90IF9fczAgPSBfX3AwOyBcCi0gIGludDh4MTZfdCBfX3MxID0gX19wMTsgXAotICBpbnQ4eDE2X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92c2V0cV9sYW5lX2k4KF9fczAsIChpbnQ4eDE2X3QpX19zMSwgX19wMik7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzZXRxX2xhbmVfZjMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDMyX3QgX19zMCA9IF9fcDA7IFwKLSAgZmxvYXQzMng0X3QgX19zMSA9IF9fcDE7IFwKLSAgZmxvYXQzMng0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoZmxvYXQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzZXRxX2xhbmVfZjMyKF9fczAsIChpbnQ4eDE2X3QpX19zMSwgX19wMik7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c2V0cV9sYW5lX2YzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQzMl90IF9fczAgPSBfX3AwOyBcCi0gIGZsb2F0MzJ4NF90IF9fczEgPSBfX3AxOyBcCi0gIGZsb2F0MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCi0gIGZsb2F0MzJ4NF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGZsb2F0MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92c2V0cV9sYW5lX2YzMihfX3MwLCAoaW50OHgxNl90KV9fcmV2MSwgX19wMik7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2RlZmluZSBfX25vc3dhcF92c2V0cV9sYW5lX2YzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQzMl90IF9fczAgPSBfX3AwOyBcCi0gIGZsb2F0MzJ4NF90IF9fczEgPSBfX3AxOyBcCi0gIGZsb2F0MzJ4NF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGZsb2F0MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92c2V0cV9sYW5lX2YzMihfX3MwLCAoaW50OHgxNl90KV9fczEsIF9fcDIpOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c2V0cV9sYW5lX3MzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MzJfdCBfX3MwID0gX19wMDsgXAotICBpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKLSAgaW50MzJ4NF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdnNldHFfbGFuZV9pMzIoX19zMCwgKGludDh4MTZfdClfX3MxLCBfX3AyKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzZXRxX2xhbmVfczMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQzMl90IF9fczAgPSBfX3AwOyBcCi0gIGludDMyeDRfdCBfX3MxID0gX19wMTsgXAotICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKLSAgaW50MzJ4NF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdnNldHFfbGFuZV9pMzIoX19zMCwgKGludDh4MTZfdClfX3JldjEsIF9fcDIpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNkZWZpbmUgX19ub3N3YXBfdnNldHFfbGFuZV9zMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDMyX3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCi0gIGludDMyeDRfdCBfX3JldDsgXAotICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzZXRxX2xhbmVfaTMyKF9fczAsIChpbnQ4eDE2X3QpX19zMSwgX19wMik7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzZXRxX2xhbmVfczY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ2NF90IF9fczAgPSBfX3AwOyBcCi0gIGludDY0eDJfdCBfX3MxID0gX19wMTsgXAotICBpbnQ2NHgyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoaW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92c2V0cV9sYW5lX2k2NChfX3MwLCAoaW50OHgxNl90KV9fczEsIF9fcDIpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnNldHFfbGFuZV9zNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDY0X3QgX19zMCA9IF9fcDA7IFwKLSAgaW50NjR4Ml90IF9fczEgPSBfX3AxOyBcCi0gIGludDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxLCAwKTsgXAotICBpbnQ2NHgyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoaW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92c2V0cV9sYW5lX2k2NChfX3MwLCAoaW50OHgxNl90KV9fcmV2MSwgX19wMik7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2RlZmluZSBfX25vc3dhcF92c2V0cV9sYW5lX3M2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50NjRfdCBfX3MwID0gX19wMDsgXAotICBpbnQ2NHgyX3QgX19zMSA9IF9fcDE7IFwKLSAgaW50NjR4Ml90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGludDY0eDJfdCkgX19idWlsdGluX25lb25fdnNldHFfbGFuZV9pNjQoX19zMCwgKGludDh4MTZfdClfX3MxLCBfX3AyKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnNldHFfbGFuZV9zMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDE2X3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCi0gIGludDE2eDhfdCBfX3JldDsgXAotICBfX3JldCA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZzZXRxX2xhbmVfaTE2KF9fczAsIChpbnQ4eDE2X3QpX19zMSwgX19wMik7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c2V0cV9sYW5lX3MxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MTZfdCBfX3MwID0gX19wMDsgXAotICBpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKLSAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIGludDE2eDhfdCBfX3JldDsgXAotICBfX3JldCA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZzZXRxX2xhbmVfaTE2KF9fczAsIChpbnQ4eDE2X3QpX19yZXYxLCBfX3AyKTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZGVmaW5lIF9fbm9zd2FwX3ZzZXRxX2xhbmVfczE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQxNl90IF9fczAgPSBfX3AwOyBcCi0gIGludDE2eDhfdCBfX3MxID0gX19wMTsgXAotICBpbnQxNng4X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoaW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92c2V0cV9sYW5lX2kxNihfX3MwLCAoaW50OHgxNl90KV9fczEsIF9fcDIpOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c2V0X2xhbmVfdTgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ4X3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDh4OF90IF9fczEgPSBfX3AxOyBcCi0gIHVpbnQ4eDhfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZzZXRfbGFuZV9pOChfX3MwLCAoaW50OHg4X3QpX19zMSwgX19wMik7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c2V0X2xhbmVfdTgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ4X3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDh4OF90IF9fczEgPSBfX3AxOyBcCi0gIHVpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICB1aW50OHg4X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92c2V0X2xhbmVfaTgoX19zMCwgKGludDh4OF90KV9fcmV2MSwgX19wMik7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2RlZmluZSBfX25vc3dhcF92c2V0X2xhbmVfdTgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ4X3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDh4OF90IF9fczEgPSBfX3AxOyBcCi0gIHVpbnQ4eDhfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZzZXRfbGFuZV9pOChfX3MwLCAoaW50OHg4X3QpX19zMSwgX19wMik7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzZXRfbGFuZV91MzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQzMl90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKLSAgdWludDMyeDJfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92c2V0X2xhbmVfaTMyKF9fczAsIChpbnQ4eDhfdClfX3MxLCBfX3AyKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzZXRfbGFuZV91MzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQzMl90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKLSAgdWludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxLCAwKTsgXAotICB1aW50MzJ4Ml90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZzZXRfbGFuZV9pMzIoX19zMCwgKGludDh4OF90KV9fcmV2MSwgX19wMik7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2RlZmluZSBfX25vc3dhcF92c2V0X2xhbmVfdTMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MzJfdCBfX3MwID0gX19wMDsgXAotICB1aW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCi0gIHVpbnQzMngyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdnNldF9sYW5lX2kzMihfX3MwLCAoaW50OHg4X3QpX19zMSwgX19wMik7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzZXRfbGFuZV91NjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ2NF90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQ2NHgxX3QgX19zMSA9IF9fcDE7IFwKLSAgdWludDY0eDFfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92c2V0X2xhbmVfaTY0KF9fczAsIChpbnQ4eDhfdClfX3MxLCBfX3AyKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzZXRfbGFuZV91NjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ2NF90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQ2NHgxX3QgX19zMSA9IF9fcDE7IFwKLSAgdWludDY0eDFfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92c2V0X2xhbmVfaTY0KF9fczAsIChpbnQ4eDhfdClfX3MxLCBfX3AyKTsgXAotICBfX3JldDsgXAotfSkKLSNkZWZpbmUgX19ub3N3YXBfdnNldF9sYW5lX3U2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDY0X3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDY0eDFfdCBfX3MxID0gX19wMTsgXAotICB1aW50NjR4MV90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZzZXRfbGFuZV9pNjQoX19zMCwgKGludDh4OF90KV9fczEsIF9fcDIpOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c2V0X2xhbmVfdTE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MTZfdCBfX3MwID0gX19wMDsgXAotICB1aW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCi0gIHVpbnQxNng0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdnNldF9sYW5lX2kxNihfX3MwLCAoaW50OHg4X3QpX19zMSwgX19wMik7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c2V0X2xhbmVfdTE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MTZfdCBfX3MwID0gX19wMDsgXAotICB1aW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCi0gIHVpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKLSAgdWludDE2eDRfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92c2V0X2xhbmVfaTE2KF9fczAsIChpbnQ4eDhfdClfX3JldjEsIF9fcDIpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNkZWZpbmUgX19ub3N3YXBfdnNldF9sYW5lX3UxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDE2X3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDE2eDRfdCBfX3MxID0gX19wMTsgXAotICB1aW50MTZ4NF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzZXRfbGFuZV9pMTYoX19zMCwgKGludDh4OF90KV9fczEsIF9fcDIpOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c2V0X2xhbmVfczgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDhfdCBfX3MwID0gX19wMDsgXAotICBpbnQ4eDhfdCBfX3MxID0gX19wMTsgXAotICBpbnQ4eDhfdCBfX3JldDsgXAotICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnNldF9sYW5lX2k4KF9fczAsIChpbnQ4eDhfdClfX3MxLCBfX3AyKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzZXRfbGFuZV9zOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50OF90IF9fczAgPSBfX3AwOyBcCi0gIGludDh4OF90IF9fczEgPSBfX3AxOyBcCi0gIGludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIGludDh4OF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92c2V0X2xhbmVfaTgoX19zMCwgKGludDh4OF90KV9fcmV2MSwgX19wMik7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2RlZmluZSBfX25vc3dhcF92c2V0X2xhbmVfczgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDhfdCBfX3MwID0gX19wMDsgXAotICBpbnQ4eDhfdCBfX3MxID0gX19wMTsgXAotICBpbnQ4eDhfdCBfX3JldDsgXAotICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnNldF9sYW5lX2k4KF9fczAsIChpbnQ4eDhfdClfX3MxLCBfX3AyKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnNldF9sYW5lX2YzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQzMl90IF9fczAgPSBfX3AwOyBcCi0gIGZsb2F0MzJ4Ml90IF9fczEgPSBfX3AxOyBcCi0gIGZsb2F0MzJ4Ml90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92c2V0X2xhbmVfZjMyKF9fczAsIChpbnQ4eDhfdClfX3MxLCBfX3AyKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzZXRfbGFuZV9mMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0MzJfdCBfX3MwID0gX19wMDsgXAotICBmbG9hdDMyeDJfdCBfX3MxID0gX19wMTsgXAotICBmbG9hdDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxLCAwKTsgXAotICBmbG9hdDMyeDJfdCBfX3JldDsgXAotICBfX3JldCA9IChmbG9hdDMyeDJfdCkgX19idWlsdGluX25lb25fdnNldF9sYW5lX2YzMihfX3MwLCAoaW50OHg4X3QpX19yZXYxLCBfX3AyKTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZGVmaW5lIF9fbm9zd2FwX3ZzZXRfbGFuZV9mMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0MzJfdCBfX3MwID0gX19wMDsgXAotICBmbG9hdDMyeDJfdCBfX3MxID0gX19wMTsgXAotICBmbG9hdDMyeDJfdCBfX3JldDsgXAotICBfX3JldCA9IChmbG9hdDMyeDJfdCkgX19idWlsdGluX25lb25fdnNldF9sYW5lX2YzMihfX3MwLCAoaW50OHg4X3QpX19zMSwgX19wMik7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzZXRfbGFuZV9zMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDMyX3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCi0gIGludDMyeDJfdCBfX3JldDsgXAotICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZzZXRfbGFuZV9pMzIoX19zMCwgKGludDh4OF90KV9fczEsIF9fcDIpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnNldF9sYW5lX3MzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MzJfdCBfX3MwID0gX19wMDsgXAotICBpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKLSAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCi0gIGludDMyeDJfdCBfX3JldDsgXAotICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZzZXRfbGFuZV9pMzIoX19zMCwgKGludDh4OF90KV9fcmV2MSwgX19wMik7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2RlZmluZSBfX25vc3dhcF92c2V0X2xhbmVfczMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQzMl90IF9fczAgPSBfX3AwOyBcCi0gIGludDMyeDJfdCBfX3MxID0gX19wMTsgXAotICBpbnQzMngyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92c2V0X2xhbmVfaTMyKF9fczAsIChpbnQ4eDhfdClfX3MxLCBfX3AyKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnNldF9sYW5lX3M2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50NjRfdCBfX3MwID0gX19wMDsgXAotICBpbnQ2NHgxX3QgX19zMSA9IF9fcDE7IFwKLSAgaW50NjR4MV90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGludDY0eDFfdCkgX19idWlsdGluX25lb25fdnNldF9sYW5lX2k2NChfX3MwLCAoaW50OHg4X3QpX19zMSwgX19wMik7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c2V0X2xhbmVfczY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ2NF90IF9fczAgPSBfX3AwOyBcCi0gIGludDY0eDFfdCBfX3MxID0gX19wMTsgXAotICBpbnQ2NHgxX3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoaW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92c2V0X2xhbmVfaTY0KF9fczAsIChpbnQ4eDhfdClfX3MxLCBfX3AyKTsgXAotICBfX3JldDsgXAotfSkKLSNkZWZpbmUgX19ub3N3YXBfdnNldF9sYW5lX3M2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50NjRfdCBfX3MwID0gX19wMDsgXAotICBpbnQ2NHgxX3QgX19zMSA9IF9fcDE7IFwKLSAgaW50NjR4MV90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGludDY0eDFfdCkgX19idWlsdGluX25lb25fdnNldF9sYW5lX2k2NChfX3MwLCAoaW50OHg4X3QpX19zMSwgX19wMik7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzZXRfbGFuZV9zMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDE2X3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCi0gIGludDE2eDRfdCBfX3JldDsgXAotICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzZXRfbGFuZV9pMTYoX19zMCwgKGludDh4OF90KV9fczEsIF9fcDIpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnNldF9sYW5lX3MxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MTZfdCBfX3MwID0gX19wMDsgXAotICBpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKLSAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCi0gIGludDE2eDRfdCBfX3JldDsgXAotICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzZXRfbGFuZV9pMTYoX19zMCwgKGludDh4OF90KV9fcmV2MSwgX19wMik7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2RlZmluZSBfX25vc3dhcF92c2V0X2xhbmVfczE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQxNl90IF9fczAgPSBfX3AwOyBcCi0gIGludDE2eDRfdCBfX3MxID0gX19wMTsgXAotICBpbnQxNng0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92c2V0X2xhbmVfaTE2KF9fczAsIChpbnQ4eDhfdClfX3MxLCBfX3AyKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDh4MTZfdCB2c2hscV91OCh1aW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7Ci0gIHVpbnQ4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGxxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDQ4KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDh4MTZfdCB2c2hscV91OCh1aW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7Ci0gIHVpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdnNobHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDQ4KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQzMng0X3QgdnNobHFfdTMyKHVpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKLSAgdWludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdnNobHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNTApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MzJ4NF90IHZzaGxxX3UzMih1aW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7Ci0gIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKLSAgdWludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdnNobHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDUwKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ2NHgyX3QgdnNobHFfdTY0KHVpbnQ2NHgyX3QgX19wMCwgaW50NjR4Ml90IF9fcDEpIHsKLSAgdWludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdnNobHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNTEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50NjR4Ml90IHZzaGxxX3U2NCh1aW50NjR4Ml90IF9fcDAsIGludDY0eDJfdCBfX3AxKSB7Ci0gIHVpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIGludDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKLSAgdWludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdnNobHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDUxKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQxNng4X3QgdnNobHFfdTE2KHVpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKLSAgdWludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDE2eDhfdCkgX19idWlsdGluX25lb25fdnNobHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNDkpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MTZ4OF90IHZzaGxxX3UxNih1aW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7Ci0gIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDE2eDhfdCkgX19idWlsdGluX25lb25fdnNobHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDQ5KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDh4MTZfdCB2c2hscV9zOChpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEpIHsKLSAgaW50OHgxNl90IF9fcmV0OwotICBfX3JldCA9IChpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGxxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDMyKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50OHgxNl90IHZzaGxxX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgewotICBpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50OHgxNl90IF9fcmV0OwotICBfX3JldCA9IChpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGxxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAzMik7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQzMng0X3QgdnNobHFfczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgewotICBpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdnNobHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMzQpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQzMng0X3QgdnNobHFfczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgewotICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKLSAgaW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGxxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAzNCk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ2NHgyX3QgdnNobHFfczY0KGludDY0eDJfdCBfX3AwLCBpbnQ2NHgyX3QgX19wMSkgewotICBpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDY0eDJfdCkgX19idWlsdGluX25lb25fdnNobHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMzUpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQ2NHgyX3QgdnNobHFfczY0KGludDY0eDJfdCBfX3AwLCBpbnQ2NHgyX3QgX19wMSkgewotICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIGludDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKLSAgaW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGxxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAzNSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQxNng4X3QgdnNobHFfczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgewotICBpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDE2eDhfdCkgX19idWlsdGluX25lb25fdnNobHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMzMpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQxNng4X3QgdnNobHFfczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgewotICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGxxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAzMyk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50OHg4X3QgdnNobF91OCh1aW50OHg4X3QgX19wMCwgaW50OHg4X3QgX19wMSkgewotICB1aW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnNobF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTYpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50OHg4X3QgdnNobF91OCh1aW50OHg4X3QgX19wMCwgaW50OHg4X3QgX19wMSkgewotICB1aW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnNobF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDE2KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQzMngyX3QgdnNobF91MzIodWludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgewotICB1aW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92c2hsX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxOCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQzMngyX3QgdnNobF91MzIodWludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgewotICB1aW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7Ci0gIHVpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGxfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAxOCk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50NjR4MV90IHZzaGxfdTY0KHVpbnQ2NHgxX3QgX19wMCwgaW50NjR4MV90IF9fcDEpIHsKLSAgdWludDY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDY0eDFfdCkgX19idWlsdGluX25lb25fdnNobF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTkpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50NjR4MV90IHZzaGxfdTY0KHVpbnQ2NHgxX3QgX19wMCwgaW50NjR4MV90IF9fcDEpIHsKLSAgdWludDY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDY0eDFfdCkgX19idWlsdGluX25lb25fdnNobF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTkpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQxNng0X3QgdnNobF91MTYodWludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgewotICB1aW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92c2hsX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxNyk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQxNng0X3QgdnNobF91MTYodWludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgewotICB1aW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICBpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7Ci0gIHVpbnQxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGxfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAxNyk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ4eDhfdCB2c2hsX3M4KGludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKLSAgaW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92c2hsX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50OHg4X3QgdnNobF9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7Ci0gIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92c2hsX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMCk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQzMngyX3QgdnNobF9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7Ci0gIGludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92c2hsX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAyKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MzJ4Ml90IHZzaGxfczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgewotICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIGludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKLSAgaW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGxfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAyKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDY0eDFfdCB2c2hsX3M2NChpbnQ2NHgxX3QgX19wMCwgaW50NjR4MV90IF9fcDEpIHsKLSAgaW50NjR4MV90IF9fcmV0OwotICBfX3JldCA9IChpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGxfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDMpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQ2NHgxX3QgdnNobF9zNjQoaW50NjR4MV90IF9fcDAsIGludDY0eDFfdCBfX3AxKSB7Ci0gIGludDY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92c2hsX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAzKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQxNng0X3QgdnNobF9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7Ci0gIGludDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92c2hsX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MTZ4NF90IHZzaGxfczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgewotICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKLSAgaW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGxfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAxKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzaGxxX25fdTgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ4eDE2X3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDh4MTZfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92c2hscV9uX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCA0OCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c2hscV9uX3U4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50OHgxNl90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgdWludDh4MTZfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92c2hscV9uX3YoKGludDh4MTZfdClfX3JldjAsIF9fcDEsIDQ4KTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzaGxxX25fdTMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQzMng0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdnNobHFfbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgNTApOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnNobHFfbl91MzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAotICB1aW50MzJ4NF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGxxX25fdigoaW50OHgxNl90KV9fcmV2MCwgX19wMSwgNTApOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnNobHFfbl91NjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDY0eDJfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92c2hscV9uX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCA1MSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c2hscV9uX3U2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDY0eDJfdCBfX3MwID0gX19wMDsgXAotICB1aW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCi0gIHVpbnQ2NHgyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdnNobHFfbl92KChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxLCA1MSk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c2hscV9uX3UxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDE2eDhfdCBfX3MwID0gX19wMDsgXAotICB1aW50MTZ4OF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGxxX25fdigoaW50OHgxNl90KV9fczAsIF9fcDEsIDQ5KTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzaGxxX25fdTE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgdWludDE2eDhfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92c2hscV9uX3YoKGludDh4MTZfdClfX3JldjAsIF9fcDEsIDQ5KTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzaGxxX25fczgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDh4MTZfdCBfX3MwID0gX19wMDsgXAotICBpbnQ4eDE2X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92c2hscV9uX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCAzMik7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c2hscV9uX3M4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ4eDE2X3QgX19zMCA9IF9fcDA7IFwKLSAgaW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIGludDh4MTZfdCBfX3JldDsgXAotICBfX3JldCA9IChpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGxxX25fdigoaW50OHgxNl90KV9fcmV2MCwgX19wMSwgMzIpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnNobHFfbl9zMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAotICBpbnQzMng0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92c2hscV9uX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCAzNCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c2hscV9uX3MzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCi0gIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAotICBpbnQzMng0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92c2hscV9uX3YoKGludDh4MTZfdClfX3JldjAsIF9fcDEsIDM0KTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzaGxxX25fczY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKLSAgaW50NjR4Ml90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGludDY0eDJfdCkgX19idWlsdGluX25lb25fdnNobHFfbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgMzUpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnNobHFfbl9zNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDY0eDJfdCBfX3MwID0gX19wMDsgXAotICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKLSAgaW50NjR4Ml90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGludDY0eDJfdCkgX19idWlsdGluX25lb25fdnNobHFfbl92KChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxLCAzNSk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c2hscV9uX3MxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCi0gIGludDE2eDhfdCBfX3JldDsgXAotICBfX3JldCA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGxxX25fdigoaW50OHgxNl90KV9fczAsIF9fcDEsIDMzKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzaGxxX25fczE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIGludDE2eDhfdCBfX3JldDsgXAotICBfX3JldCA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGxxX25fdigoaW50OHgxNl90KV9fcmV2MCwgX19wMSwgMzMpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnNobF9uX3U4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50OHg4X3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDh4OF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnNobF9uX3YoKGludDh4OF90KV9fczAsIF9fcDEsIDE2KTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzaGxfbl91OChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDh4OF90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICB1aW50OHg4X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92c2hsX25fdigoaW50OHg4X3QpX19yZXYwLCBfX3AxLCAxNik7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c2hsX25fdTMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQzMngyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdnNobF9uX3YoKGludDh4OF90KV9fczAsIF9fcDEsIDE4KTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzaGxfbl91MzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAotICB1aW50MzJ4Ml90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGxfbl92KChpbnQ4eDhfdClfX3JldjAsIF9fcDEsIDE4KTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzaGxfbl91NjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ2NHgxX3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDY0eDFfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92c2hsX25fdigoaW50OHg4X3QpX19zMCwgX19wMSwgMTkpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnNobF9uX3U2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDY0eDFfdCBfX3MwID0gX19wMDsgXAotICB1aW50NjR4MV90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGxfbl92KChpbnQ4eDhfdClfX3MwLCBfX3AxLCAxOSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzaGxfbl91MTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDE2eDRfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92c2hsX25fdigoaW50OHg4X3QpX19zMCwgX19wMSwgMTcpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnNobF9uX3UxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDE2eDRfdCBfX3MwID0gX19wMDsgXAotICB1aW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCi0gIHVpbnQxNng0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdnNobF9uX3YoKGludDh4OF90KV9fcmV2MCwgX19wMSwgMTcpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnNobF9uX3M4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ4eDhfdCBfX3MwID0gX19wMDsgXAotICBpbnQ4eDhfdCBfX3JldDsgXAotICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnNobF9uX3YoKGludDh4OF90KV9fczAsIF9fcDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnNobF9uX3M4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ4eDhfdCBfX3MwID0gX19wMDsgXAotICBpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBpbnQ4eDhfdCBfX3JldDsgXAotICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnNobF9uX3YoKGludDh4OF90KV9fcmV2MCwgX19wMSwgMCk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c2hsX25fczMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MzJ4Ml90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdnNobF9uX3YoKGludDh4OF90KV9fczAsIF9fcDEsIDIpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnNobF9uX3MzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCi0gIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAotICBpbnQzMngyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92c2hsX25fdigoaW50OHg4X3QpX19yZXYwLCBfX3AxLCAyKTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzaGxfbl9zNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDY0eDFfdCBfX3MwID0gX19wMDsgXAotICBpbnQ2NHgxX3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoaW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92c2hsX25fdigoaW50OHg4X3QpX19zMCwgX19wMSwgMyk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c2hsX25fczY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ2NHgxX3QgX19zMCA9IF9fcDA7IFwKLSAgaW50NjR4MV90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGludDY0eDFfdCkgX19idWlsdGluX25lb25fdnNobF9uX3YoKGludDh4OF90KV9fczAsIF9fcDEsIDMpOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c2hsX25fczE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MTZ4NF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdnNobF9uX3YoKGludDh4OF90KV9fczAsIF9fcDEsIDEpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnNobF9uX3MxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCi0gIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAotICBpbnQxNng0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92c2hsX25fdigoaW50OHg4X3QpX19yZXYwLCBfX3AxLCAxKTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzaGxsX25fdTgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ4eDhfdCBfX3MwID0gX19wMDsgXAotICB1aW50MTZ4OF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGxsX25fdigoaW50OHg4X3QpX19zMCwgX19wMSwgNDkpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnNobGxfbl91OChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDh4OF90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICB1aW50MTZ4OF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGxsX25fdigoaW50OHg4X3QpX19yZXYwLCBfX3AxLCA0OSk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2RlZmluZSBfX25vc3dhcF92c2hsbF9uX3U4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50OHg4X3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDE2eDhfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92c2hsbF9uX3YoKGludDh4OF90KV9fczAsIF9fcDEsIDQ5KTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnNobGxfbl91MzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDY0eDJfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92c2hsbF9uX3YoKGludDh4OF90KV9fczAsIF9fcDEsIDUxKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzaGxsX25fdTMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKLSAgdWludDY0eDJfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92c2hsbF9uX3YoKGludDh4OF90KV9fcmV2MCwgX19wMSwgNTEpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNkZWZpbmUgX19ub3N3YXBfdnNobGxfbl91MzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDY0eDJfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92c2hsbF9uX3YoKGludDh4OF90KV9fczAsIF9fcDEsIDUxKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnNobGxfbl91MTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDMyeDRfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92c2hsbF9uX3YoKGludDh4OF90KV9fczAsIF9fcDEsIDUwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzaGxsX25fdTE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKLSAgdWludDMyeDRfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92c2hsbF9uX3YoKGludDh4OF90KV9fcmV2MCwgX19wMSwgNTApOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNkZWZpbmUgX19ub3N3YXBfdnNobGxfbl91MTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDMyeDRfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92c2hsbF9uX3YoKGludDh4OF90KV9fczAsIF9fcDEsIDUwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnNobGxfbl9zOChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50OHg4X3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MTZ4OF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGludDE2eDhfdCkgX19idWlsdGluX25lb25fdnNobGxfbl92KChpbnQ4eDhfdClfX3MwLCBfX3AxLCAzMyk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c2hsbF9uX3M4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ4eDhfdCBfX3MwID0gX19wMDsgXAotICBpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBpbnQxNng4X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoaW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92c2hsbF9uX3YoKGludDh4OF90KV9fcmV2MCwgX19wMSwgMzMpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNkZWZpbmUgX19ub3N3YXBfdnNobGxfbl9zOChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50OHg4X3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MTZ4OF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGludDE2eDhfdCkgX19idWlsdGluX25lb25fdnNobGxfbl92KChpbnQ4eDhfdClfX3MwLCBfX3AxLCAzMyk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzaGxsX25fczMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKLSAgaW50NjR4Ml90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGludDY0eDJfdCkgX19idWlsdGluX25lb25fdnNobGxfbl92KChpbnQ4eDhfdClfX3MwLCBfX3AxLCAzNSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c2hsbF9uX3MzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCi0gIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAotICBpbnQ2NHgyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoaW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92c2hsbF9uX3YoKGludDh4OF90KV9fcmV2MCwgX19wMSwgMzUpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNkZWZpbmUgX19ub3N3YXBfdnNobGxfbl9zMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDMyeDJfdCBfX3MwID0gX19wMDsgXAotICBpbnQ2NHgyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoaW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92c2hsbF9uX3YoKGludDh4OF90KV9fczAsIF9fcDEsIDM1KTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnNobGxfbl9zMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDE2eDRfdCBfX3MwID0gX19wMDsgXAotICBpbnQzMng0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92c2hsbF9uX3YoKGludDh4OF90KV9fczAsIF9fcDEsIDM0KTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzaGxsX25fczE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCi0gIGludDMyeDRfdCBfX3JldDsgXAotICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGxsX25fdigoaW50OHg4X3QpX19yZXYwLCBfX3AxLCAzNCk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2RlZmluZSBfX25vc3dhcF92c2hsbF9uX3MxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCi0gIGludDMyeDRfdCBfX3JldDsgXAotICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGxsX25fdigoaW50OHg4X3QpX19zMCwgX19wMSwgMzQpOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c2hycV9uX3U4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50OHgxNl90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQ4eDE2X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdnNocnFfbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgNDgpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnNocnFfbl91OChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDh4MTZfdCBfX3MwID0gX19wMDsgXAotICB1aW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIHVpbnQ4eDE2X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdnNocnFfbl92KChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxLCA0OCk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c2hycV9uX3UzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDMyeDRfdCBfX3MwID0gX19wMDsgXAotICB1aW50MzJ4NF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaHJxX25fdigoaW50OHgxNl90KV9fczAsIF9fcDEsIDUwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzaHJxX25fdTMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKLSAgdWludDMyeDRfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92c2hycV9uX3YoKGludDh4MTZfdClfX3JldjAsIF9fcDEsIDUwKTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzaHJxX25fdTY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQ2NHgyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdnNocnFfbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgNTEpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnNocnFfbl91NjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAotICB1aW50NjR4Ml90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZzaHJxX25fdigoaW50OHgxNl90KV9fcmV2MCwgX19wMSwgNTEpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnNocnFfbl91MTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDE2eDhfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92c2hycV9uX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCA0OSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c2hycV9uX3UxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDE2eDhfdCBfX3MwID0gX19wMDsgXAotICB1aW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIHVpbnQxNng4X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAodWludDE2eDhfdCkgX19idWlsdGluX25lb25fdnNocnFfbl92KChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxLCA0OSk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c2hycV9uX3M4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ4eDE2X3QgX19zMCA9IF9fcDA7IFwKLSAgaW50OHgxNl90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGludDh4MTZfdCkgX19idWlsdGluX25lb25fdnNocnFfbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgMzIpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnNocnFfbl9zOChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50OHgxNl90IF9fczAgPSBfX3AwOyBcCi0gIGludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBpbnQ4eDE2X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92c2hycV9uX3YoKGludDh4MTZfdClfX3JldjAsIF9fcDEsIDMyKTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzaHJxX25fczMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MzJ4NF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdnNocnFfbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgMzQpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnNocnFfbl9zMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAotICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKLSAgaW50MzJ4NF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdnNocnFfbl92KChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxLCAzNCk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c2hycV9uX3M2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCi0gIGludDY0eDJfdCBfX3JldDsgXAotICBfX3JldCA9IChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZzaHJxX25fdigoaW50OHgxNl90KV9fczAsIF9fcDEsIDM1KTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzaHJxX25fczY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKLSAgaW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCi0gIGludDY0eDJfdCBfX3JldDsgXAotICBfX3JldCA9IChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZzaHJxX25fdigoaW50OHgxNl90KV9fcmV2MCwgX19wMSwgMzUpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnNocnFfbl9zMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDE2eDhfdCBfX3MwID0gX19wMDsgXAotICBpbnQxNng4X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoaW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92c2hycV9uX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCAzMyk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c2hycV9uX3MxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCi0gIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBpbnQxNng4X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoaW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92c2hycV9uX3YoKGludDh4MTZfdClfX3JldjAsIF9fcDEsIDMzKTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzaHJfbl91OChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDh4OF90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQ4eDhfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaHJfbl92KChpbnQ4eDhfdClfX3MwLCBfX3AxLCAxNik7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c2hyX25fdTgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ4eDhfdCBfX3MwID0gX19wMDsgXAotICB1aW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgdWludDh4OF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnNocl9uX3YoKGludDh4OF90KV9fcmV2MCwgX19wMSwgMTYpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnNocl9uX3UzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDMyeDJfdCBfX3MwID0gX19wMDsgXAotICB1aW50MzJ4Ml90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZzaHJfbl92KChpbnQ4eDhfdClfX3MwLCBfX3AxLCAxOCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c2hyX25fdTMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKLSAgdWludDMyeDJfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92c2hyX25fdigoaW50OHg4X3QpX19yZXYwLCBfX3AxLCAxOCk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c2hyX25fdTY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50NjR4MV90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQ2NHgxX3QgX19yZXQ7IFwKLSAgX19yZXQgPSAodWludDY0eDFfdCkgX19idWlsdGluX25lb25fdnNocl9uX3YoKGludDh4OF90KV9fczAsIF9fcDEsIDE5KTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzaHJfbl91NjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ2NHgxX3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDY0eDFfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92c2hyX25fdigoaW50OHg4X3QpX19zMCwgX19wMSwgMTkpOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c2hyX25fdTE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQxNng0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdnNocl9uX3YoKGludDh4OF90KV9fczAsIF9fcDEsIDE3KTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzaHJfbl91MTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAotICB1aW50MTZ4NF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaHJfbl92KChpbnQ4eDhfdClfX3JldjAsIF9fcDEsIDE3KTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzaHJfbl9zOChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50OHg4X3QgX19zMCA9IF9fcDA7IFwKLSAgaW50OHg4X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaHJfbl92KChpbnQ4eDhfdClfX3MwLCBfX3AxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzaHJfbl9zOChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50OHg4X3QgX19zMCA9IF9fcDA7IFwKLSAgaW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgaW50OHg4X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaHJfbl92KChpbnQ4eDhfdClfX3JldjAsIF9fcDEsIDApOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnNocl9uX3MzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCi0gIGludDMyeDJfdCBfX3JldDsgXAotICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZzaHJfbl92KChpbnQ4eDhfdClfX3MwLCBfX3AxLCAyKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzaHJfbl9zMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDMyeDJfdCBfX3MwID0gX19wMDsgXAotICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKLSAgaW50MzJ4Ml90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdnNocl9uX3YoKGludDh4OF90KV9fcmV2MCwgX19wMSwgMik7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c2hyX25fczY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ2NHgxX3QgX19zMCA9IF9fcDA7IFwKLSAgaW50NjR4MV90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGludDY0eDFfdCkgX19idWlsdGluX25lb25fdnNocl9uX3YoKGludDh4OF90KV9fczAsIF9fcDEsIDMpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnNocl9uX3M2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50NjR4MV90IF9fczAgPSBfX3AwOyBcCi0gIGludDY0eDFfdCBfX3JldDsgXAotICBfX3JldCA9IChpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZzaHJfbl92KChpbnQ4eDhfdClfX3MwLCBfX3AxLCAzKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnNocl9uX3MxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCi0gIGludDE2eDRfdCBfX3JldDsgXAotICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaHJfbl92KChpbnQ4eDhfdClfX3MwLCBfX3AxLCAxKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzaHJfbl9zMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDE2eDRfdCBfX3MwID0gX19wMDsgXAotICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKLSAgaW50MTZ4NF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdnNocl9uX3YoKGludDh4OF90KV9fcmV2MCwgX19wMSwgMSk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c2hybl9uX3UzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDMyeDRfdCBfX3MwID0gX19wMDsgXAotICB1aW50MTZ4NF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaHJuX25fdigoaW50OHgxNl90KV9fczAsIF9fcDEsIDE3KTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzaHJuX25fdTMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKLSAgdWludDE2eDRfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92c2hybl9uX3YoKGludDh4MTZfdClfX3JldjAsIF9fcDEsIDE3KTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZGVmaW5lIF9fbm9zd2FwX3ZzaHJuX25fdTMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQxNng0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdnNocm5fbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgMTcpOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c2hybl9uX3U2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDY0eDJfdCBfX3MwID0gX19wMDsgXAotICB1aW50MzJ4Ml90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZzaHJuX25fdigoaW50OHgxNl90KV9fczAsIF9fcDEsIDE4KTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzaHJuX25fdTY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKLSAgdWludDMyeDJfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92c2hybl9uX3YoKGludDh4MTZfdClfX3JldjAsIF9fcDEsIDE4KTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZGVmaW5lIF9fbm9zd2FwX3ZzaHJuX25fdTY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQzMngyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdnNocm5fbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgMTgpOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c2hybl9uX3UxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDE2eDhfdCBfX3MwID0gX19wMDsgXAotICB1aW50OHg4X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92c2hybl9uX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCAxNik7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c2hybl9uX3UxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDE2eDhfdCBfX3MwID0gX19wMDsgXAotICB1aW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIHVpbnQ4eDhfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaHJuX25fdigoaW50OHgxNl90KV9fcmV2MCwgX19wMSwgMTYpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNkZWZpbmUgX19ub3N3YXBfdnNocm5fbl91MTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDh4OF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnNocm5fbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgMTYpOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c2hybl9uX3MzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCi0gIGludDE2eDRfdCBfX3JldDsgXAotICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaHJuX25fdigoaW50OHgxNl90KV9fczAsIF9fcDEsIDEpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnNocm5fbl9zMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAotICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKLSAgaW50MTZ4NF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdnNocm5fbl92KChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxLCAxKTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZGVmaW5lIF9fbm9zd2FwX3ZzaHJuX25fczMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MTZ4NF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdnNocm5fbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgMSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzaHJuX25fczY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MzJ4Ml90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdnNocm5fbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgMik7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c2hybl9uX3M2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCi0gIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAotICBpbnQzMngyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92c2hybl9uX3YoKGludDh4MTZfdClfX3JldjAsIF9fcDEsIDIpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNkZWZpbmUgX19ub3N3YXBfdnNocm5fbl9zNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDY0eDJfdCBfX3MwID0gX19wMDsgXAotICBpbnQzMngyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92c2hybl9uX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCAyKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnNocm5fbl9zMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDE2eDhfdCBfX3MwID0gX19wMDsgXAotICBpbnQ4eDhfdCBfX3JldDsgXAotICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnNocm5fbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c2hybl9uX3MxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCi0gIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBpbnQ4eDhfdCBfX3JldDsgXAotICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnNocm5fbl92KChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxLCAwKTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZGVmaW5lIF9fbm9zd2FwX3ZzaHJuX25fczE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKLSAgaW50OHg4X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaHJuX25fdigoaW50OHgxNl90KV9fczAsIF9fcDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c2xpX25fcDgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHk4eDhfdCBfX3MwID0gX19wMDsgXAotICBwb2x5OHg4X3QgX19zMSA9IF9fcDE7IFwKLSAgcG9seTh4OF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHBvbHk4eDhfdCkgX19idWlsdGluX25lb25fdnNsaV9uX3YoKGludDh4OF90KV9fczAsIChpbnQ4eDhfdClfX3MxLCBfX3AyLCA0KTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzbGlfbl9wOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTh4OF90IF9fczAgPSBfX3AwOyBcCi0gIHBvbHk4eDhfdCBfX3MxID0gX19wMTsgXAotICBwb2x5OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgcG9seTh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIHBvbHk4eDhfdCBfX3JldDsgXAotICBfX3JldCA9IChwb2x5OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZzbGlfbl92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIF9fcDIsIDQpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnNsaV9uX3AxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTE2eDRfdCBfX3MwID0gX19wMDsgXAotICBwb2x5MTZ4NF90IF9fczEgPSBfX3AxOyBcCi0gIHBvbHkxNng0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAocG9seTE2eDRfdCkgX19idWlsdGluX25lb25fdnNsaV9uX3YoKGludDh4OF90KV9fczAsIChpbnQ4eDhfdClfX3MxLCBfX3AyLCA1KTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzbGlfbl9wMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHkxNng0X3QgX19zMCA9IF9fcDA7IFwKLSAgcG9seTE2eDRfdCBfX3MxID0gX19wMTsgXAotICBwb2x5MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCi0gIHBvbHkxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKLSAgcG9seTE2eDRfdCBfX3JldDsgXAotICBfX3JldCA9IChwb2x5MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92c2xpX25fdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCBfX3AyLCA1KTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzbGlxX25fcDgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHk4eDE2X3QgX19zMCA9IF9fcDA7IFwKLSAgcG9seTh4MTZfdCBfX3MxID0gX19wMTsgXAotICBwb2x5OHgxNl90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHBvbHk4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZzbGlxX25fdigoaW50OHgxNl90KV9fczAsIChpbnQ4eDE2X3QpX19zMSwgX19wMiwgMzYpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnNsaXFfbl9wOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTh4MTZfdCBfX3MwID0gX19wMDsgXAotICBwb2x5OHgxNl90IF9fczEgPSBfX3AxOyBcCi0gIHBvbHk4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgcG9seTh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBwb2x5OHgxNl90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHBvbHk4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZzbGlxX25fdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIF9fcDIsIDM2KTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzbGlxX25fcDE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBwb2x5MTZ4OF90IF9fczAgPSBfX3AwOyBcCi0gIHBvbHkxNng4X3QgX19zMSA9IF9fcDE7IFwKLSAgcG9seTE2eDhfdCBfX3JldDsgXAotICBfX3JldCA9IChwb2x5MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92c2xpcV9uX3YoKGludDh4MTZfdClfX3MwLCAoaW50OHgxNl90KV9fczEsIF9fcDIsIDM3KTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzbGlxX25fcDE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBwb2x5MTZ4OF90IF9fczAgPSBfX3AwOyBcCi0gIHBvbHkxNng4X3QgX19zMSA9IF9fcDE7IFwKLSAgcG9seTE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBwb2x5MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIHBvbHkxNng4X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAocG9seTE2eDhfdCkgX19idWlsdGluX25lb25fdnNsaXFfbl92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgX19wMiwgMzcpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnNsaXFfbl91OChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDh4MTZfdCBfX3MwID0gX19wMDsgXAotICB1aW50OHgxNl90IF9fczEgPSBfX3AxOyBcCi0gIHVpbnQ4eDE2X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdnNsaXFfbl92KChpbnQ4eDE2X3QpX19zMCwgKGludDh4MTZfdClfX3MxLCBfX3AyLCA0OCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c2xpcV9uX3U4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50OHgxNl90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQ4eDE2X3QgX19zMSA9IF9fcDE7IFwKLSAgdWludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICB1aW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIHVpbnQ4eDE2X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdnNsaXFfbl92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgX19wMiwgNDgpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnNsaXFfbl91MzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDMyeDRfdCBfX3MxID0gX19wMTsgXAotICB1aW50MzJ4NF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzbGlxX25fdigoaW50OHgxNl90KV9fczAsIChpbnQ4eDE2X3QpX19zMSwgX19wMiwgNTApOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnNsaXFfbl91MzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDMyeDRfdCBfX3MxID0gX19wMTsgXAotICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCi0gIHVpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKLSAgdWludDMyeDRfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92c2xpcV9uX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCBfX3AyLCA1MCk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c2xpcV9uX3U2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDY0eDJfdCBfX3MwID0gX19wMDsgXAotICB1aW50NjR4Ml90IF9fczEgPSBfX3AxOyBcCi0gIHVpbnQ2NHgyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdnNsaXFfbl92KChpbnQ4eDE2X3QpX19zMCwgKGludDh4MTZfdClfX3MxLCBfX3AyLCA1MSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c2xpcV9uX3U2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDY0eDJfdCBfX3MwID0gX19wMDsgXAotICB1aW50NjR4Ml90IF9fczEgPSBfX3AxOyBcCi0gIHVpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKLSAgdWludDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxLCAwKTsgXAotICB1aW50NjR4Ml90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZzbGlxX25fdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIF9fcDIsIDUxKTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzbGlxX25fdTE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKLSAgdWludDE2eDhfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92c2xpcV9uX3YoKGludDh4MTZfdClfX3MwLCAoaW50OHgxNl90KV9fczEsIF9fcDIsIDQ5KTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzbGlxX25fdTE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKLSAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICB1aW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIHVpbnQxNng4X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAodWludDE2eDhfdCkgX19idWlsdGluX25lb25fdnNsaXFfbl92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgX19wMiwgNDkpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnNsaXFfbl9zOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50OHgxNl90IF9fczAgPSBfX3AwOyBcCi0gIGludDh4MTZfdCBfX3MxID0gX19wMTsgXAotICBpbnQ4eDE2X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92c2xpcV9uX3YoKGludDh4MTZfdClfX3MwLCAoaW50OHgxNl90KV9fczEsIF9fcDIsIDMyKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzbGlxX25fczgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDh4MTZfdCBfX3MwID0gX19wMDsgXAotICBpbnQ4eDE2X3QgX19zMSA9IF9fcDE7IFwKLSAgaW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIGludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBpbnQ4eDE2X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92c2xpcV9uX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCBfX3AyLCAzMik7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c2xpcV9uX3MzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCi0gIGludDMyeDRfdCBfX3MxID0gX19wMTsgXAotICBpbnQzMng0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92c2xpcV9uX3YoKGludDh4MTZfdClfX3MwLCAoaW50OHgxNl90KV9fczEsIF9fcDIsIDM0KTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzbGlxX25fczMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCi0gIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAotICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKLSAgaW50MzJ4NF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdnNsaXFfbl92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgX19wMiwgMzQpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnNsaXFfbl9zNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDY0eDJfdCBfX3MwID0gX19wMDsgXAotICBpbnQ2NHgyX3QgX19zMSA9IF9fcDE7IFwKLSAgaW50NjR4Ml90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGludDY0eDJfdCkgX19idWlsdGluX25lb25fdnNsaXFfbl92KChpbnQ4eDE2X3QpX19zMCwgKGludDh4MTZfdClfX3MxLCBfX3AyLCAzNSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c2xpcV9uX3M2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCi0gIGludDY0eDJfdCBfX3MxID0gX19wMTsgXAotICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKLSAgaW50NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCi0gIGludDY0eDJfdCBfX3JldDsgXAotICBfX3JldCA9IChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZzbGlxX25fdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIF9fcDIsIDM1KTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzbGlxX25fczE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCi0gIGludDE2eDhfdCBfX3JldDsgXAotICBfX3JldCA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZzbGlxX25fdigoaW50OHgxNl90KV9fczAsIChpbnQ4eDE2X3QpX19zMSwgX19wMiwgMzMpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnNsaXFfbl9zMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDE2eDhfdCBfX3MwID0gX19wMDsgXAotICBpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKLSAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBpbnQxNng4X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoaW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92c2xpcV9uX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCBfX3AyLCAzMyk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c2xpX25fdTgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ4eDhfdCBfX3MwID0gX19wMDsgXAotICB1aW50OHg4X3QgX19zMSA9IF9fcDE7IFwKLSAgdWludDh4OF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnNsaV9uX3YoKGludDh4OF90KV9fczAsIChpbnQ4eDhfdClfX3MxLCBfX3AyLCAxNik7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c2xpX25fdTgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ4eDhfdCBfX3MwID0gX19wMDsgXAotICB1aW50OHg4X3QgX19zMSA9IF9fcDE7IFwKLSAgdWludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIHVpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICB1aW50OHg4X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92c2xpX25fdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCBfX3AyLCAxNik7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c2xpX25fdTMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKLSAgdWludDMyeDJfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92c2xpX25fdigoaW50OHg4X3QpX19zMCwgKGludDh4OF90KV9fczEsIF9fcDIsIDE4KTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzbGlfbl91MzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDMyeDJfdCBfX3MxID0gX19wMTsgXAotICB1aW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCi0gIHVpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMSwgMCk7IFwKLSAgdWludDMyeDJfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92c2xpX25fdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCBfX3AyLCAxOCk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c2xpX25fdTY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50NjR4MV90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQ2NHgxX3QgX19zMSA9IF9fcDE7IFwKLSAgdWludDY0eDFfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92c2xpX25fdigoaW50OHg4X3QpX19zMCwgKGludDh4OF90KV9fczEsIF9fcDIsIDE5KTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzbGlfbl91NjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ2NHgxX3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDY0eDFfdCBfX3MxID0gX19wMTsgXAotICB1aW50NjR4MV90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZzbGlfbl92KChpbnQ4eDhfdClfX3MwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgMTkpOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c2xpX25fdTE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKLSAgdWludDE2eDRfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92c2xpX25fdigoaW50OHg4X3QpX19zMCwgKGludDh4OF90KV9fczEsIF9fcDIsIDE3KTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzbGlfbl91MTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDE2eDRfdCBfX3MxID0gX19wMTsgXAotICB1aW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCi0gIHVpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKLSAgdWludDE2eDRfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92c2xpX25fdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCBfX3AyLCAxNyk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c2xpX25fczgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDh4OF90IF9fczAgPSBfX3AwOyBcCi0gIGludDh4OF90IF9fczEgPSBfX3AxOyBcCi0gIGludDh4OF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92c2xpX25fdigoaW50OHg4X3QpX19zMCwgKGludDh4OF90KV9fczEsIF9fcDIsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnNsaV9uX3M4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ4eDhfdCBfX3MwID0gX19wMDsgXAotICBpbnQ4eDhfdCBfX3MxID0gX19wMTsgXAotICBpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBpbnQ4eDhfdCBfX3JldDsgXAotICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnNsaV9uX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgX19wMiwgMCk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c2xpX25fczMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCi0gIGludDMyeDJfdCBfX3JldDsgXAotICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZzbGlfbl92KChpbnQ4eDhfdClfX3MwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgMik7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c2xpX25fczMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCi0gIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAotICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMSwgMCk7IFwKLSAgaW50MzJ4Ml90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdnNsaV9uX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgX19wMiwgMik7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c2xpX25fczY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ2NHgxX3QgX19zMCA9IF9fcDA7IFwKLSAgaW50NjR4MV90IF9fczEgPSBfX3AxOyBcCi0gIGludDY0eDFfdCBfX3JldDsgXAotICBfX3JldCA9IChpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZzbGlfbl92KChpbnQ4eDhfdClfX3MwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgMyk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c2xpX25fczY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ2NHgxX3QgX19zMCA9IF9fcDA7IFwKLSAgaW50NjR4MV90IF9fczEgPSBfX3AxOyBcCi0gIGludDY0eDFfdCBfX3JldDsgXAotICBfX3JldCA9IChpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZzbGlfbl92KChpbnQ4eDhfdClfX3MwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgMyk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzbGlfbl9zMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDE2eDRfdCBfX3MwID0gX19wMDsgXAotICBpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKLSAgaW50MTZ4NF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdnNsaV9uX3YoKGludDh4OF90KV9fczAsIChpbnQ4eDhfdClfX3MxLCBfX3AyLCAxKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzbGlfbl9zMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDE2eDRfdCBfX3MwID0gX19wMDsgXAotICBpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKLSAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCi0gIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAotICBpbnQxNng0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92c2xpX25fdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCBfX3AyLCAxKTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzcmFxX25fdTgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ4eDE2X3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDh4MTZfdCBfX3MxID0gX19wMTsgXAotICB1aW50OHgxNl90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZzcmFxX25fdigoaW50OHgxNl90KV9fczAsIChpbnQ4eDE2X3QpX19zMSwgX19wMiwgNDgpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnNyYXFfbl91OChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDh4MTZfdCBfX3MwID0gX19wMDsgXAotICB1aW50OHgxNl90IF9fczEgPSBfX3AxOyBcCi0gIHVpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgdWludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICB1aW50OHgxNl90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZzcmFxX25fdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIF9fcDIsIDQ4KTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzcmFxX25fdTMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKLSAgdWludDMyeDRfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92c3JhcV9uX3YoKGludDh4MTZfdClfX3MwLCAoaW50OHgxNl90KV9fczEsIF9fcDIsIDUwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzcmFxX25fdTMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKLSAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAotICB1aW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCi0gIHVpbnQzMng0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdnNyYXFfbl92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgX19wMiwgNTApOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnNyYXFfbl91NjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDY0eDJfdCBfX3MxID0gX19wMTsgXAotICB1aW50NjR4Ml90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZzcmFxX25fdigoaW50OHgxNl90KV9fczAsIChpbnQ4eDE2X3QpX19zMSwgX19wMiwgNTEpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnNyYXFfbl91NjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDY0eDJfdCBfX3MxID0gX19wMTsgXAotICB1aW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCi0gIHVpbnQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMSwgMCk7IFwKLSAgdWludDY0eDJfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92c3JhcV9uX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCBfX3AyLCA1MSk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c3JhcV9uX3UxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDE2eDhfdCBfX3MwID0gX19wMDsgXAotICB1aW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCi0gIHVpbnQxNng4X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAodWludDE2eDhfdCkgX19idWlsdGluX25lb25fdnNyYXFfbl92KChpbnQ4eDE2X3QpX19zMCwgKGludDh4MTZfdClfX3MxLCBfX3AyLCA0OSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c3JhcV9uX3UxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDE2eDhfdCBfX3MwID0gX19wMDsgXAotICB1aW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCi0gIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgdWludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICB1aW50MTZ4OF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZzcmFxX25fdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIF9fcDIsIDQ5KTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzcmFxX25fczgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDh4MTZfdCBfX3MwID0gX19wMDsgXAotICBpbnQ4eDE2X3QgX19zMSA9IF9fcDE7IFwKLSAgaW50OHgxNl90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGludDh4MTZfdCkgX19idWlsdGluX25lb25fdnNyYXFfbl92KChpbnQ4eDE2X3QpX19zMCwgKGludDh4MTZfdClfX3MxLCBfX3AyLCAzMik7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c3JhcV9uX3M4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ4eDE2X3QgX19zMCA9IF9fcDA7IFwKLSAgaW50OHgxNl90IF9fczEgPSBfX3AxOyBcCi0gIGludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgaW50OHgxNl90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGludDh4MTZfdCkgX19idWlsdGluX25lb25fdnNyYXFfbl92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgX19wMiwgMzIpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnNyYXFfbl9zMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAotICBpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKLSAgaW50MzJ4NF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdnNyYXFfbl92KChpbnQ4eDE2X3QpX19zMCwgKGludDh4MTZfdClfX3MxLCBfX3AyLCAzNCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c3JhcV9uX3MzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCi0gIGludDMyeDRfdCBfX3MxID0gX19wMTsgXAotICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKLSAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCi0gIGludDMyeDRfdCBfX3JldDsgXAotICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzcmFxX25fdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIF9fcDIsIDM0KTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzcmFxX25fczY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKLSAgaW50NjR4Ml90IF9fczEgPSBfX3AxOyBcCi0gIGludDY0eDJfdCBfX3JldDsgXAotICBfX3JldCA9IChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZzcmFxX25fdigoaW50OHgxNl90KV9fczAsIChpbnQ4eDE2X3QpX19zMSwgX19wMiwgMzUpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnNyYXFfbl9zNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDY0eDJfdCBfX3MwID0gX19wMDsgXAotICBpbnQ2NHgyX3QgX19zMSA9IF9fcDE7IFwKLSAgaW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCi0gIGludDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxLCAwKTsgXAotICBpbnQ2NHgyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoaW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92c3JhcV9uX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCBfX3AyLCAzNSk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c3JhcV9uX3MxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCi0gIGludDE2eDhfdCBfX3MxID0gX19wMTsgXAotICBpbnQxNng4X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoaW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92c3JhcV9uX3YoKGludDh4MTZfdClfX3MwLCAoaW50OHgxNl90KV9fczEsIF9fcDIsIDMzKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzcmFxX25fczE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCi0gIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgaW50MTZ4OF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGludDE2eDhfdCkgX19idWlsdGluX25lb25fdnNyYXFfbl92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgX19wMiwgMzMpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnNyYV9uX3U4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50OHg4X3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDh4OF90IF9fczEgPSBfX3AxOyBcCi0gIHVpbnQ4eDhfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZzcmFfbl92KChpbnQ4eDhfdClfX3MwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgMTYpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnNyYV9uX3U4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50OHg4X3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDh4OF90IF9fczEgPSBfX3AxOyBcCi0gIHVpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICB1aW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgdWludDh4OF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnNyYV9uX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgX19wMiwgMTYpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnNyYV9uX3UzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDMyeDJfdCBfX3MwID0gX19wMDsgXAotICB1aW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCi0gIHVpbnQzMngyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdnNyYV9uX3YoKGludDh4OF90KV9fczAsIChpbnQ4eDhfdClfX3MxLCBfX3AyLCAxOCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c3JhX25fdTMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKLSAgdWludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAotICB1aW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCi0gIHVpbnQzMngyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdnNyYV9uX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgX19wMiwgMTgpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnNyYV9uX3U2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDY0eDFfdCBfX3MwID0gX19wMDsgXAotICB1aW50NjR4MV90IF9fczEgPSBfX3AxOyBcCi0gIHVpbnQ2NHgxX3QgX19yZXQ7IFwKLSAgX19yZXQgPSAodWludDY0eDFfdCkgX19idWlsdGluX25lb25fdnNyYV9uX3YoKGludDh4OF90KV9fczAsIChpbnQ4eDhfdClfX3MxLCBfX3AyLCAxOSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c3JhX25fdTY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50NjR4MV90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQ2NHgxX3QgX19zMSA9IF9fcDE7IFwKLSAgdWludDY0eDFfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92c3JhX25fdigoaW50OHg4X3QpX19zMCwgKGludDh4OF90KV9fczEsIF9fcDIsIDE5KTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnNyYV9uX3UxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDE2eDRfdCBfX3MwID0gX19wMDsgXAotICB1aW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCi0gIHVpbnQxNng0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdnNyYV9uX3YoKGludDh4OF90KV9fczAsIChpbnQ4eDhfdClfX3MxLCBfX3AyLCAxNyk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c3JhX25fdTE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKLSAgdWludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAotICB1aW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCi0gIHVpbnQxNng0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdnNyYV9uX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgX19wMiwgMTcpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnNyYV9uX3M4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ4eDhfdCBfX3MwID0gX19wMDsgXAotICBpbnQ4eDhfdCBfX3MxID0gX19wMTsgXAotICBpbnQ4eDhfdCBfX3JldDsgXAotICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnNyYV9uX3YoKGludDh4OF90KV9fczAsIChpbnQ4eDhfdClfX3MxLCBfX3AyLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzcmFfbl9zOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50OHg4X3QgX19zMCA9IF9fcDA7IFwKLSAgaW50OHg4X3QgX19zMSA9IF9fcDE7IFwKLSAgaW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgaW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgaW50OHg4X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZzcmFfbl92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIF9fcDIsIDApOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnNyYV9uX3MzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCi0gIGludDMyeDJfdCBfX3MxID0gX19wMTsgXAotICBpbnQzMngyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92c3JhX25fdigoaW50OHg4X3QpX19zMCwgKGludDh4OF90KV9fczEsIF9fcDIsIDIpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnNyYV9uX3MzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCi0gIGludDMyeDJfdCBfX3MxID0gX19wMTsgXAotICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKLSAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCi0gIGludDMyeDJfdCBfX3JldDsgXAotICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZzcmFfbl92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIF9fcDIsIDIpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnNyYV9uX3M2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50NjR4MV90IF9fczAgPSBfX3AwOyBcCi0gIGludDY0eDFfdCBfX3MxID0gX19wMTsgXAotICBpbnQ2NHgxX3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoaW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92c3JhX25fdigoaW50OHg4X3QpX19zMCwgKGludDh4OF90KV9fczEsIF9fcDIsIDMpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnNyYV9uX3M2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50NjR4MV90IF9fczAgPSBfX3AwOyBcCi0gIGludDY0eDFfdCBfX3MxID0gX19wMTsgXAotICBpbnQ2NHgxX3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoaW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92c3JhX25fdigoaW50OHg4X3QpX19zMCwgKGludDh4OF90KV9fczEsIF9fcDIsIDMpOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c3JhX25fczE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCi0gIGludDE2eDRfdCBfX3JldDsgXAotICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzcmFfbl92KChpbnQ4eDhfdClfX3MwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgMSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c3JhX25fczE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCi0gIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAotICBpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKLSAgaW50MTZ4NF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdnNyYV9uX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgX19wMiwgMSk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c3JpX25fcDgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHk4eDhfdCBfX3MwID0gX19wMDsgXAotICBwb2x5OHg4X3QgX19zMSA9IF9fcDE7IFwKLSAgcG9seTh4OF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHBvbHk4eDhfdCkgX19idWlsdGluX25lb25fdnNyaV9uX3YoKGludDh4OF90KV9fczAsIChpbnQ4eDhfdClfX3MxLCBfX3AyLCA0KTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzcmlfbl9wOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTh4OF90IF9fczAgPSBfX3AwOyBcCi0gIHBvbHk4eDhfdCBfX3MxID0gX19wMTsgXAotICBwb2x5OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgcG9seTh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIHBvbHk4eDhfdCBfX3JldDsgXAotICBfX3JldCA9IChwb2x5OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Zzcmlfbl92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIF9fcDIsIDQpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnNyaV9uX3AxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTE2eDRfdCBfX3MwID0gX19wMDsgXAotICBwb2x5MTZ4NF90IF9fczEgPSBfX3AxOyBcCi0gIHBvbHkxNng0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAocG9seTE2eDRfdCkgX19idWlsdGluX25lb25fdnNyaV9uX3YoKGludDh4OF90KV9fczAsIChpbnQ4eDhfdClfX3MxLCBfX3AyLCA1KTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzcmlfbl9wMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHkxNng0X3QgX19zMCA9IF9fcDA7IFwKLSAgcG9seTE2eDRfdCBfX3MxID0gX19wMTsgXAotICBwb2x5MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCi0gIHBvbHkxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKLSAgcG9seTE2eDRfdCBfX3JldDsgXAotICBfX3JldCA9IChwb2x5MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92c3JpX25fdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCBfX3AyLCA1KTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzcmlxX25fcDgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHk4eDE2X3QgX19zMCA9IF9fcDA7IFwKLSAgcG9seTh4MTZfdCBfX3MxID0gX19wMTsgXAotICBwb2x5OHgxNl90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHBvbHk4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZzcmlxX25fdigoaW50OHgxNl90KV9fczAsIChpbnQ4eDE2X3QpX19zMSwgX19wMiwgMzYpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnNyaXFfbl9wOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTh4MTZfdCBfX3MwID0gX19wMDsgXAotICBwb2x5OHgxNl90IF9fczEgPSBfX3AxOyBcCi0gIHBvbHk4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgcG9seTh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBwb2x5OHgxNl90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHBvbHk4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZzcmlxX25fdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIF9fcDIsIDM2KTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzcmlxX25fcDE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBwb2x5MTZ4OF90IF9fczAgPSBfX3AwOyBcCi0gIHBvbHkxNng4X3QgX19zMSA9IF9fcDE7IFwKLSAgcG9seTE2eDhfdCBfX3JldDsgXAotICBfX3JldCA9IChwb2x5MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92c3JpcV9uX3YoKGludDh4MTZfdClfX3MwLCAoaW50OHgxNl90KV9fczEsIF9fcDIsIDM3KTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzcmlxX25fcDE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBwb2x5MTZ4OF90IF9fczAgPSBfX3AwOyBcCi0gIHBvbHkxNng4X3QgX19zMSA9IF9fcDE7IFwKLSAgcG9seTE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBwb2x5MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIHBvbHkxNng4X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAocG9seTE2eDhfdCkgX19idWlsdGluX25lb25fdnNyaXFfbl92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgX19wMiwgMzcpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnNyaXFfbl91OChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDh4MTZfdCBfX3MwID0gX19wMDsgXAotICB1aW50OHgxNl90IF9fczEgPSBfX3AxOyBcCi0gIHVpbnQ4eDE2X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdnNyaXFfbl92KChpbnQ4eDE2X3QpX19zMCwgKGludDh4MTZfdClfX3MxLCBfX3AyLCA0OCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c3JpcV9uX3U4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50OHgxNl90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQ4eDE2X3QgX19zMSA9IF9fcDE7IFwKLSAgdWludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICB1aW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIHVpbnQ4eDE2X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdnNyaXFfbl92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgX19wMiwgNDgpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnNyaXFfbl91MzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDMyeDRfdCBfX3MxID0gX19wMTsgXAotICB1aW50MzJ4NF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzcmlxX25fdigoaW50OHgxNl90KV9fczAsIChpbnQ4eDE2X3QpX19zMSwgX19wMiwgNTApOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnNyaXFfbl91MzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDMyeDRfdCBfX3MxID0gX19wMTsgXAotICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCi0gIHVpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKLSAgdWludDMyeDRfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92c3JpcV9uX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCBfX3AyLCA1MCk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c3JpcV9uX3U2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDY0eDJfdCBfX3MwID0gX19wMDsgXAotICB1aW50NjR4Ml90IF9fczEgPSBfX3AxOyBcCi0gIHVpbnQ2NHgyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdnNyaXFfbl92KChpbnQ4eDE2X3QpX19zMCwgKGludDh4MTZfdClfX3MxLCBfX3AyLCA1MSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c3JpcV9uX3U2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDY0eDJfdCBfX3MwID0gX19wMDsgXAotICB1aW50NjR4Ml90IF9fczEgPSBfX3AxOyBcCi0gIHVpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKLSAgdWludDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxLCAwKTsgXAotICB1aW50NjR4Ml90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZzcmlxX25fdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIF9fcDIsIDUxKTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzcmlxX25fdTE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKLSAgdWludDE2eDhfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92c3JpcV9uX3YoKGludDh4MTZfdClfX3MwLCAoaW50OHgxNl90KV9fczEsIF9fcDIsIDQ5KTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzcmlxX25fdTE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKLSAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICB1aW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIHVpbnQxNng4X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAodWludDE2eDhfdCkgX19idWlsdGluX25lb25fdnNyaXFfbl92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgX19wMiwgNDkpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnNyaXFfbl9zOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50OHgxNl90IF9fczAgPSBfX3AwOyBcCi0gIGludDh4MTZfdCBfX3MxID0gX19wMTsgXAotICBpbnQ4eDE2X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92c3JpcV9uX3YoKGludDh4MTZfdClfX3MwLCAoaW50OHgxNl90KV9fczEsIF9fcDIsIDMyKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzcmlxX25fczgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDh4MTZfdCBfX3MwID0gX19wMDsgXAotICBpbnQ4eDE2X3QgX19zMSA9IF9fcDE7IFwKLSAgaW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIGludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBpbnQ4eDE2X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92c3JpcV9uX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCBfX3AyLCAzMik7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c3JpcV9uX3MzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCi0gIGludDMyeDRfdCBfX3MxID0gX19wMTsgXAotICBpbnQzMng0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92c3JpcV9uX3YoKGludDh4MTZfdClfX3MwLCAoaW50OHgxNl90KV9fczEsIF9fcDIsIDM0KTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzcmlxX25fczMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCi0gIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAotICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKLSAgaW50MzJ4NF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdnNyaXFfbl92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgX19wMiwgMzQpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnNyaXFfbl9zNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDY0eDJfdCBfX3MwID0gX19wMDsgXAotICBpbnQ2NHgyX3QgX19zMSA9IF9fcDE7IFwKLSAgaW50NjR4Ml90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGludDY0eDJfdCkgX19idWlsdGluX25lb25fdnNyaXFfbl92KChpbnQ4eDE2X3QpX19zMCwgKGludDh4MTZfdClfX3MxLCBfX3AyLCAzNSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c3JpcV9uX3M2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCi0gIGludDY0eDJfdCBfX3MxID0gX19wMTsgXAotICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKLSAgaW50NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCi0gIGludDY0eDJfdCBfX3JldDsgXAotICBfX3JldCA9IChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZzcmlxX25fdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIF9fcDIsIDM1KTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzcmlxX25fczE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCi0gIGludDE2eDhfdCBfX3JldDsgXAotICBfX3JldCA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZzcmlxX25fdigoaW50OHgxNl90KV9fczAsIChpbnQ4eDE2X3QpX19zMSwgX19wMiwgMzMpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnNyaXFfbl9zMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDE2eDhfdCBfX3MwID0gX19wMDsgXAotICBpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKLSAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBpbnQxNng4X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoaW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92c3JpcV9uX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCBfX3AyLCAzMyk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c3JpX25fdTgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ4eDhfdCBfX3MwID0gX19wMDsgXAotICB1aW50OHg4X3QgX19zMSA9IF9fcDE7IFwKLSAgdWludDh4OF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnNyaV9uX3YoKGludDh4OF90KV9fczAsIChpbnQ4eDhfdClfX3MxLCBfX3AyLCAxNik7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c3JpX25fdTgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ4eDhfdCBfX3MwID0gX19wMDsgXAotICB1aW50OHg4X3QgX19zMSA9IF9fcDE7IFwKLSAgdWludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIHVpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICB1aW50OHg4X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92c3JpX25fdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCBfX3AyLCAxNik7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c3JpX25fdTMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKLSAgdWludDMyeDJfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92c3JpX25fdigoaW50OHg4X3QpX19zMCwgKGludDh4OF90KV9fczEsIF9fcDIsIDE4KTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzcmlfbl91MzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDMyeDJfdCBfX3MxID0gX19wMTsgXAotICB1aW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCi0gIHVpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMSwgMCk7IFwKLSAgdWludDMyeDJfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92c3JpX25fdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCBfX3AyLCAxOCk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c3JpX25fdTY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50NjR4MV90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQ2NHgxX3QgX19zMSA9IF9fcDE7IFwKLSAgdWludDY0eDFfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92c3JpX25fdigoaW50OHg4X3QpX19zMCwgKGludDh4OF90KV9fczEsIF9fcDIsIDE5KTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzcmlfbl91NjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ2NHgxX3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDY0eDFfdCBfX3MxID0gX19wMTsgXAotICB1aW50NjR4MV90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3Zzcmlfbl92KChpbnQ4eDhfdClfX3MwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgMTkpOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c3JpX25fdTE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKLSAgdWludDE2eDRfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92c3JpX25fdigoaW50OHg4X3QpX19zMCwgKGludDh4OF90KV9fczEsIF9fcDIsIDE3KTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzcmlfbl91MTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDE2eDRfdCBfX3MxID0gX19wMTsgXAotICB1aW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCi0gIHVpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKLSAgdWludDE2eDRfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92c3JpX25fdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCBfX3AyLCAxNyk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c3JpX25fczgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDh4OF90IF9fczAgPSBfX3AwOyBcCi0gIGludDh4OF90IF9fczEgPSBfX3AxOyBcCi0gIGludDh4OF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92c3JpX25fdigoaW50OHg4X3QpX19zMCwgKGludDh4OF90KV9fczEsIF9fcDIsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnNyaV9uX3M4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ4eDhfdCBfX3MwID0gX19wMDsgXAotICBpbnQ4eDhfdCBfX3MxID0gX19wMTsgXAotICBpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBpbnQ4eDhfdCBfX3JldDsgXAotICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnNyaV9uX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgX19wMiwgMCk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c3JpX25fczMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCi0gIGludDMyeDJfdCBfX3JldDsgXAotICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3Zzcmlfbl92KChpbnQ4eDhfdClfX3MwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgMik7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c3JpX25fczMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCi0gIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAotICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMSwgMCk7IFwKLSAgaW50MzJ4Ml90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdnNyaV9uX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgX19wMiwgMik7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c3JpX25fczY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ2NHgxX3QgX19zMCA9IF9fcDA7IFwKLSAgaW50NjR4MV90IF9fczEgPSBfX3AxOyBcCi0gIGludDY0eDFfdCBfX3JldDsgXAotICBfX3JldCA9IChpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3Zzcmlfbl92KChpbnQ4eDhfdClfX3MwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgMyk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c3JpX25fczY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ2NHgxX3QgX19zMCA9IF9fcDA7IFwKLSAgaW50NjR4MV90IF9fczEgPSBfX3AxOyBcCi0gIGludDY0eDFfdCBfX3JldDsgXAotICBfX3JldCA9IChpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3Zzcmlfbl92KChpbnQ4eDhfdClfX3MwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgMyk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzcmlfbl9zMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDE2eDRfdCBfX3MwID0gX19wMDsgXAotICBpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKLSAgaW50MTZ4NF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdnNyaV9uX3YoKGludDh4OF90KV9fczAsIChpbnQ4eDhfdClfX3MxLCBfX3AyLCAxKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzcmlfbl9zMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDE2eDRfdCBfX3MwID0gX19wMDsgXAotICBpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKLSAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCi0gIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAotICBpbnQxNng0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92c3JpX25fdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCBfX3AyLCAxKTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzdDFfcDgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHk4eDhfdCBfX3MxID0gX19wMTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QxX3YoX19wMCwgKGludDh4OF90KV9fczEsIDQpOyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnN0MV9wOChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTh4OF90IF9fczEgPSBfX3AxOyBcCi0gIHBvbHk4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QxX3YoX19wMCwgKGludDh4OF90KV9fcmV2MSwgNCk7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzdDFfcDE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBwb2x5MTZ4NF90IF9fczEgPSBfX3AxOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDFfdihfX3AwLCAoaW50OHg4X3QpX19zMSwgNSk7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c3QxX3AxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTE2eDRfdCBfX3MxID0gX19wMTsgXAotICBwb2x5MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDFfdihfX3AwLCAoaW50OHg4X3QpX19yZXYxLCA1KTsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnN0MXFfcDgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHk4eDE2X3QgX19zMSA9IF9fcDE7IFwKLSAgX19idWlsdGluX25lb25fdnN0MXFfdihfX3AwLCAoaW50OHgxNl90KV9fczEsIDM2KTsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzdDFxX3A4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBwb2x5OHgxNl90IF9fczEgPSBfX3AxOyBcCi0gIHBvbHk4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19idWlsdGluX25lb25fdnN0MXFfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MSwgMzYpOyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c3QxcV9wMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHkxNng4X3QgX19zMSA9IF9fcDE7IFwKLSAgX19idWlsdGluX25lb25fdnN0MXFfdihfX3AwLCAoaW50OHgxNl90KV9fczEsIDM3KTsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzdDFxX3AxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTE2eDhfdCBfX3MxID0gX19wMTsgXAotICBwb2x5MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX3YoX19wMCwgKGludDh4MTZfdClfX3JldjEsIDM3KTsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnN0MXFfdTgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ4eDE2X3QgX19zMSA9IF9fcDE7IFwKLSAgX19idWlsdGluX25lb25fdnN0MXFfdihfX3AwLCAoaW50OHgxNl90KV9fczEsIDQ4KTsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzdDFxX3U4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50OHgxNl90IF9fczEgPSBfX3AxOyBcCi0gIHVpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19idWlsdGluX25lb25fdnN0MXFfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MSwgNDgpOyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c3QxcV91MzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKLSAgX19idWlsdGluX25lb25fdnN0MXFfdihfX3AwLCAoaW50OHgxNl90KV9fczEsIDUwKTsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzdDFxX3UzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDMyeDRfdCBfX3MxID0gX19wMTsgXAotICB1aW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX3YoX19wMCwgKGludDh4MTZfdClfX3JldjEsIDUwKTsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnN0MXFfdTY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50NjR4Ml90IF9fczEgPSBfX3AxOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX3YoX19wMCwgKGludDh4MTZfdClfX3MxLCA1MSk7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c3QxcV91NjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ2NHgyX3QgX19zMSA9IF9fcDE7IFwKLSAgdWludDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxLCAwKTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QxcV92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLCA1MSk7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzdDFxX3UxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDE2eDhfdCBfX3MxID0gX19wMTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QxcV92KF9fcDAsIChpbnQ4eDE2X3QpX19zMSwgNDkpOyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnN0MXFfdTE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCi0gIHVpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19idWlsdGluX25lb25fdnN0MXFfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MSwgNDkpOyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c3QxcV9zOChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50OHgxNl90IF9fczEgPSBfX3AxOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX3YoX19wMCwgKGludDh4MTZfdClfX3MxLCAzMik7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c3QxcV9zOChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50OHgxNl90IF9fczEgPSBfX3AxOyBcCi0gIGludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QxcV92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLCAzMik7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzdDFxX2YzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQzMng0X3QgX19zMSA9IF9fcDE7IFwKLSAgX19idWlsdGluX25lb25fdnN0MXFfdihfX3AwLCAoaW50OHgxNl90KV9fczEsIDQxKTsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzdDFxX2YzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQzMng0X3QgX19zMSA9IF9fcDE7IFwKLSAgZmxvYXQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKLSAgX19idWlsdGluX25lb25fdnN0MXFfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MSwgNDEpOyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c3QxcV9mMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0MTZ4OF90IF9fczEgPSBfX3AxOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX3YoX19wMCwgKGludDh4MTZfdClfX3MxLCA0MCk7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c3QxcV9mMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0MTZ4OF90IF9fczEgPSBfX3AxOyBcCi0gIGZsb2F0MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX3YoX19wMCwgKGludDh4MTZfdClfX3JldjEsIDQwKTsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnN0MXFfczMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKLSAgX19idWlsdGluX25lb25fdnN0MXFfdihfX3AwLCAoaW50OHgxNl90KV9fczEsIDM0KTsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzdDFxX3MzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCi0gIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QxcV92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLCAzNCk7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzdDFxX3M2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50NjR4Ml90IF9fczEgPSBfX3AxOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX3YoX19wMCwgKGludDh4MTZfdClfX3MxLCAzNSk7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c3QxcV9zNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDY0eDJfdCBfX3MxID0gX19wMTsgXAotICBpbnQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMSwgMCk7IFwKLSAgX19idWlsdGluX25lb25fdnN0MXFfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MSwgMzUpOyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c3QxcV9zMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDE2eDhfdCBfX3MxID0gX19wMTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QxcV92KF9fcDAsIChpbnQ4eDE2X3QpX19zMSwgMzMpOyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnN0MXFfczE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKLSAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX3YoX19wMCwgKGludDh4MTZfdClfX3JldjEsIDMzKTsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnN0MV91OChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDh4OF90IF9fczEgPSBfX3AxOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDFfdihfX3AwLCAoaW50OHg4X3QpX19zMSwgMTYpOyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnN0MV91OChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDh4OF90IF9fczEgPSBfX3AxOyBcCi0gIHVpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QxX3YoX19wMCwgKGludDh4OF90KV9fcmV2MSwgMTYpOyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c3QxX3UzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDMyeDJfdCBfX3MxID0gX19wMTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QxX3YoX19wMCwgKGludDh4OF90KV9fczEsIDE4KTsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzdDFfdTMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCi0gIHVpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMSwgMCk7IFwKLSAgX19idWlsdGluX25lb25fdnN0MV92KF9fcDAsIChpbnQ4eDhfdClfX3JldjEsIDE4KTsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnN0MV91NjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ2NHgxX3QgX19zMSA9IF9fcDE7IFwKLSAgX19idWlsdGluX25lb25fdnN0MV92KF9fcDAsIChpbnQ4eDhfdClfX3MxLCAxOSk7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c3QxX3U2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDY0eDFfdCBfX3MxID0gX19wMTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QxX3YoX19wMCwgKGludDh4OF90KV9fczEsIDE5KTsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnN0MV91MTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKLSAgX19idWlsdGluX25lb25fdnN0MV92KF9fcDAsIChpbnQ4eDhfdClfX3MxLCAxNyk7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c3QxX3UxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDE2eDRfdCBfX3MxID0gX19wMTsgXAotICB1aW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDFfdihfX3AwLCAoaW50OHg4X3QpX19yZXYxLCAxNyk7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzdDFfczgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDh4OF90IF9fczEgPSBfX3AxOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDFfdihfX3AwLCAoaW50OHg4X3QpX19zMSwgMCk7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c3QxX3M4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ4eDhfdCBfX3MxID0gX19wMTsgXAotICBpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QxX3YoX19wMCwgKGludDh4OF90KV9fcmV2MSwgMCk7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzdDFfZjMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDMyeDJfdCBfX3MxID0gX19wMTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QxX3YoX19wMCwgKGludDh4OF90KV9fczEsIDkpOyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnN0MV9mMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0MzJ4Ml90IF9fczEgPSBfX3AxOyBcCi0gIGZsb2F0MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDFfdihfX3AwLCAoaW50OHg4X3QpX19yZXYxLCA5KTsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnN0MV9mMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0MTZ4NF90IF9fczEgPSBfX3AxOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDFfdihfX3AwLCAoaW50OHg4X3QpX19zMSwgOCk7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c3QxX2YxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQxNng0X3QgX19zMSA9IF9fcDE7IFwKLSAgZmxvYXQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKLSAgX19idWlsdGluX25lb25fdnN0MV92KF9fcDAsIChpbnQ4eDhfdClfX3JldjEsIDgpOyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c3QxX3MzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDFfdihfX3AwLCAoaW50OHg4X3QpX19zMSwgMik7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c3QxX3MzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCi0gIGludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxLCAwKTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QxX3YoX19wMCwgKGludDh4OF90KV9fcmV2MSwgMik7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzdDFfczY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ2NHgxX3QgX19zMSA9IF9fcDE7IFwKLSAgX19idWlsdGluX25lb25fdnN0MV92KF9fcDAsIChpbnQ4eDhfdClfX3MxLCAzKTsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzdDFfczY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ2NHgxX3QgX19zMSA9IF9fcDE7IFwKLSAgX19idWlsdGluX25lb25fdnN0MV92KF9fcDAsIChpbnQ4eDhfdClfX3MxLCAzKTsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnN0MV9zMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDE2eDRfdCBfX3MxID0gX19wMTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QxX3YoX19wMCwgKGludDh4OF90KV9fczEsIDEpOyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnN0MV9zMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDE2eDRfdCBfX3MxID0gX19wMTsgXAotICBpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKLSAgX19idWlsdGluX25lb25fdnN0MV92KF9fcDAsIChpbnQ4eDhfdClfX3JldjEsIDEpOyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c3QxX2xhbmVfcDgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHk4eDhfdCBfX3MxID0gX19wMTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QxX2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgNCk7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c3QxX2xhbmVfcDgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHk4eDhfdCBfX3MxID0gX19wMTsgXAotICBwb2x5OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19idWlsdGluX25lb25fdnN0MV9sYW5lX3YoX19wMCwgKGludDh4OF90KV9fcmV2MSwgX19wMiwgNCk7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzdDFfbGFuZV9wMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHkxNng0X3QgX19zMSA9IF9fcDE7IFwKLSAgX19idWlsdGluX25lb25fdnN0MV9sYW5lX3YoX19wMCwgKGludDh4OF90KV9fczEsIF9fcDIsIDUpOyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnN0MV9sYW5lX3AxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTE2eDRfdCBfX3MxID0gX19wMTsgXAotICBwb2x5MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDFfbGFuZV92KF9fcDAsIChpbnQ4eDhfdClfX3JldjEsIF9fcDIsIDUpOyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c3QxcV9sYW5lX3A4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBwb2x5OHgxNl90IF9fczEgPSBfX3AxOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX2xhbmVfdihfX3AwLCAoaW50OHgxNl90KV9fczEsIF9fcDIsIDM2KTsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzdDFxX2xhbmVfcDgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHk4eDE2X3QgX19zMSA9IF9fcDE7IFwKLSAgcG9seTh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QxcV9sYW5lX3YoX19wMCwgKGludDh4MTZfdClfX3JldjEsIF9fcDIsIDM2KTsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnN0MXFfbGFuZV9wMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHkxNng4X3QgX19zMSA9IF9fcDE7IFwKLSAgX19idWlsdGluX25lb25fdnN0MXFfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19zMSwgX19wMiwgMzcpOyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnN0MXFfbGFuZV9wMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHkxNng4X3QgX19zMSA9IF9fcDE7IFwKLSAgcG9seTE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QxcV9sYW5lX3YoX19wMCwgKGludDh4MTZfdClfX3JldjEsIF9fcDIsIDM3KTsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnN0MXFfbGFuZV91OChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDh4MTZfdCBfX3MxID0gX19wMTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QxcV9sYW5lX3YoX19wMCwgKGludDh4MTZfdClfX3MxLCBfX3AyLCA0OCk7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c3QxcV9sYW5lX3U4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50OHgxNl90IF9fczEgPSBfX3AxOyBcCi0gIHVpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19idWlsdGluX25lb25fdnN0MXFfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLCBfX3AyLCA0OCk7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzdDFxX2xhbmVfdTMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX2xhbmVfdihfX3AwLCAoaW50OHgxNl90KV9fczEsIF9fcDIsIDUwKTsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzdDFxX2xhbmVfdTMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCi0gIHVpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKLSAgX19idWlsdGluX25lb25fdnN0MXFfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLCBfX3AyLCA1MCk7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzdDFxX2xhbmVfdTY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50NjR4Ml90IF9fczEgPSBfX3AxOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX2xhbmVfdihfX3AwLCAoaW50OHgxNl90KV9fczEsIF9fcDIsIDUxKTsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzdDFxX2xhbmVfdTY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50NjR4Ml90IF9fczEgPSBfX3AxOyBcCi0gIHVpbnQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMSwgMCk7IFwKLSAgX19idWlsdGluX25lb25fdnN0MXFfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLCBfX3AyLCA1MSk7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzdDFxX2xhbmVfdTE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX2xhbmVfdihfX3AwLCAoaW50OHgxNl90KV9fczEsIF9fcDIsIDQ5KTsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzdDFxX2xhbmVfdTE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCi0gIHVpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19idWlsdGluX25lb25fdnN0MXFfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLCBfX3AyLCA0OSk7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzdDFxX2xhbmVfczgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDh4MTZfdCBfX3MxID0gX19wMTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QxcV9sYW5lX3YoX19wMCwgKGludDh4MTZfdClfX3MxLCBfX3AyLCAzMik7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c3QxcV9sYW5lX3M4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ4eDE2X3QgX19zMSA9IF9fcDE7IFwKLSAgaW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX2xhbmVfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MSwgX19wMiwgMzIpOyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c3QxcV9sYW5lX2YzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQzMng0X3QgX19zMSA9IF9fcDE7IFwKLSAgX19idWlsdGluX25lb25fdnN0MXFfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19zMSwgX19wMiwgNDEpOyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnN0MXFfbGFuZV9mMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0MzJ4NF90IF9fczEgPSBfX3AxOyBcCi0gIGZsb2F0MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX2xhbmVfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MSwgX19wMiwgNDEpOyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c3QxcV9sYW5lX2YxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQxNng4X3QgX19zMSA9IF9fcDE7IFwKLSAgX19idWlsdGluX25lb25fdnN0MXFfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19zMSwgX19wMiwgNDApOyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnN0MXFfbGFuZV9mMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0MTZ4OF90IF9fczEgPSBfX3AxOyBcCi0gIGZsb2F0MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX2xhbmVfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MSwgX19wMiwgNDApOyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c3QxcV9sYW5lX3MzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX2xhbmVfdihfX3AwLCAoaW50OHgxNl90KV9fczEsIF9fcDIsIDM0KTsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzdDFxX2xhbmVfczMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKLSAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX2xhbmVfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MSwgX19wMiwgMzQpOyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c3QxcV9sYW5lX3M2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50NjR4Ml90IF9fczEgPSBfX3AxOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX2xhbmVfdihfX3AwLCAoaW50OHgxNl90KV9fczEsIF9fcDIsIDM1KTsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzdDFxX2xhbmVfczY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ2NHgyX3QgX19zMSA9IF9fcDE7IFwKLSAgaW50NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX2xhbmVfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MSwgX19wMiwgMzUpOyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c3QxcV9sYW5lX3MxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX2xhbmVfdihfX3AwLCAoaW50OHgxNl90KV9fczEsIF9fcDIsIDMzKTsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzdDFxX2xhbmVfczE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKLSAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX2xhbmVfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MSwgX19wMiwgMzMpOyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c3QxX2xhbmVfdTgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ4eDhfdCBfX3MxID0gX19wMTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QxX2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgMTYpOyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnN0MV9sYW5lX3U4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50OHg4X3QgX19zMSA9IF9fcDE7IFwKLSAgdWludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDFfbGFuZV92KF9fcDAsIChpbnQ4eDhfdClfX3JldjEsIF9fcDIsIDE2KTsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnN0MV9sYW5lX3UzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDMyeDJfdCBfX3MxID0gX19wMTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QxX2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgMTgpOyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnN0MV9sYW5lX3UzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDMyeDJfdCBfX3MxID0gX19wMTsgXAotICB1aW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDFfbGFuZV92KF9fcDAsIChpbnQ4eDhfdClfX3JldjEsIF9fcDIsIDE4KTsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnN0MV9sYW5lX3U2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDY0eDFfdCBfX3MxID0gX19wMTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QxX2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgMTkpOyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnN0MV9sYW5lX3U2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDY0eDFfdCBfX3MxID0gX19wMTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QxX2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgMTkpOyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c3QxX2xhbmVfdTE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDFfbGFuZV92KF9fcDAsIChpbnQ4eDhfdClfX3MxLCBfX3AyLCAxNyk7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c3QxX2xhbmVfdTE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCi0gIHVpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKLSAgX19idWlsdGluX25lb25fdnN0MV9sYW5lX3YoX19wMCwgKGludDh4OF90KV9fcmV2MSwgX19wMiwgMTcpOyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c3QxX2xhbmVfczgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDh4OF90IF9fczEgPSBfX3AxOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDFfbGFuZV92KF9fcDAsIChpbnQ4eDhfdClfX3MxLCBfX3AyLCAwKTsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzdDFfbGFuZV9zOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50OHg4X3QgX19zMSA9IF9fcDE7IFwKLSAgaW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19idWlsdGluX25lb25fdnN0MV9sYW5lX3YoX19wMCwgKGludDh4OF90KV9fcmV2MSwgX19wMiwgMCk7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzdDFfbGFuZV9mMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0MzJ4Ml90IF9fczEgPSBfX3AxOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDFfbGFuZV92KF9fcDAsIChpbnQ4eDhfdClfX3MxLCBfX3AyLCA5KTsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzdDFfbGFuZV9mMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0MzJ4Ml90IF9fczEgPSBfX3AxOyBcCi0gIGZsb2F0MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDFfbGFuZV92KF9fcDAsIChpbnQ4eDhfdClfX3JldjEsIF9fcDIsIDkpOyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c3QxX2xhbmVfZjE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDE2eDRfdCBfX3MxID0gX19wMTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QxX2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgOCk7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c3QxX2xhbmVfZjE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDE2eDRfdCBfX3MxID0gX19wMTsgXAotICBmbG9hdDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QxX2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19yZXYxLCBfX3AyLCA4KTsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnN0MV9sYW5lX3MzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDFfbGFuZV92KF9fcDAsIChpbnQ4eDhfdClfX3MxLCBfX3AyLCAyKTsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzdDFfbGFuZV9zMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDMyeDJfdCBfX3MxID0gX19wMTsgXAotICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMSwgMCk7IFwKLSAgX19idWlsdGluX25lb25fdnN0MV9sYW5lX3YoX19wMCwgKGludDh4OF90KV9fcmV2MSwgX19wMiwgMik7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzdDFfbGFuZV9zNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDY0eDFfdCBfX3MxID0gX19wMTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QxX2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgMyk7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c3QxX2xhbmVfczY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ2NHgxX3QgX19zMSA9IF9fcDE7IFwKLSAgX19idWlsdGluX25lb25fdnN0MV9sYW5lX3YoX19wMCwgKGludDh4OF90KV9fczEsIF9fcDIsIDMpOyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c3QxX2xhbmVfczE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKLSAgX19idWlsdGluX25lb25fdnN0MV9sYW5lX3YoX19wMCwgKGludDh4OF90KV9fczEsIF9fcDIsIDEpOyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnN0MV9sYW5lX3MxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCi0gIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QxX2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19yZXYxLCBfX3AyLCAxKTsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnN0Ml9wOChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTh4OHgyX3QgX19zMSA9IF9fcDE7IFwKLSAgX19idWlsdGluX25lb25fdnN0Ml92KF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCA0KTsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzdDJfcDgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHk4eDh4Ml90IF9fczEgPSBfX3AxOyBcCi0gIHBvbHk4eDh4Ml90IF9fcmV2MTsgXAotICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QyX3YoX19wMCwgKGludDh4OF90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDhfdClfX3JldjEudmFsWzFdLCA0KTsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnN0Ml9wMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHkxNng0eDJfdCBfX3MxID0gX19wMTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QyX3YoX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIDUpOyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnN0Ml9wMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHkxNng0eDJfdCBfX3MxID0gX19wMTsgXAotICBwb2x5MTZ4NHgyX3QgX19yZXYxOyBcCi0gIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDMsIDIsIDEsIDApOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDJfdihfX3AwLCAoaW50OHg4X3QpX19yZXYxLnZhbFswXSwgKGludDh4OF90KV9fcmV2MS52YWxbMV0sIDUpOyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c3QycV9wOChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTh4MTZ4Ml90IF9fczEgPSBfX3AxOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDJxX3YoX19wMCwgKGludDh4MTZfdClfX3MxLnZhbFswXSwgKGludDh4MTZfdClfX3MxLnZhbFsxXSwgMzYpOyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnN0MnFfcDgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHk4eDE2eDJfdCBfX3MxID0gX19wMTsgXAotICBwb2x5OHgxNngyX3QgX19yZXYxOyBcCi0gIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDJxX3YoX19wMCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIDM2KTsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnN0MnFfcDE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBwb2x5MTZ4OHgyX3QgX19zMSA9IF9fcDE7IFwKLSAgX19idWlsdGluX25lb25fdnN0MnFfdihfX3AwLCAoaW50OHgxNl90KV9fczEudmFsWzBdLCAoaW50OHgxNl90KV9fczEudmFsWzFdLCAzNyk7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c3QycV9wMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHkxNng4eDJfdCBfX3MxID0gX19wMTsgXAotICBwb2x5MTZ4OHgyX3QgX19yZXYxOyBcCi0gIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDJxX3YoX19wMCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIDM3KTsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnN0MnFfdTgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ4eDE2eDJfdCBfX3MxID0gX19wMTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QycV92KF9fcDAsIChpbnQ4eDE2X3QpX19zMS52YWxbMF0sIChpbnQ4eDE2X3QpX19zMS52YWxbMV0sIDQ4KTsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzdDJxX3U4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50OHgxNngyX3QgX19zMSA9IF9fcDE7IFwKLSAgdWludDh4MTZ4Ml90IF9fcmV2MTsgXAotICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QycV92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCA0OCk7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzdDJxX3UzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDMyeDR4Ml90IF9fczEgPSBfX3AxOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDJxX3YoX19wMCwgKGludDh4MTZfdClfX3MxLnZhbFswXSwgKGludDh4MTZfdClfX3MxLnZhbFsxXSwgNTApOyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnN0MnFfdTMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MzJ4NHgyX3QgX19zMSA9IF9fcDE7IFwKLSAgdWludDMyeDR4Ml90IF9fcmV2MTsgXAotICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QycV92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCA1MCk7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzdDJxX3UxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDE2eDh4Ml90IF9fczEgPSBfX3AxOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDJxX3YoX19wMCwgKGludDh4MTZfdClfX3MxLnZhbFswXSwgKGludDh4MTZfdClfX3MxLnZhbFsxXSwgNDkpOyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnN0MnFfdTE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MTZ4OHgyX3QgX19zMSA9IF9fcDE7IFwKLSAgdWludDE2eDh4Ml90IF9fcmV2MTsgXAotICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QycV92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCA0OSk7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzdDJxX3M4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ4eDE2eDJfdCBfX3MxID0gX19wMTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QycV92KF9fcDAsIChpbnQ4eDE2X3QpX19zMS52YWxbMF0sIChpbnQ4eDE2X3QpX19zMS52YWxbMV0sIDMyKTsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzdDJxX3M4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ4eDE2eDJfdCBfX3MxID0gX19wMTsgXAotICBpbnQ4eDE2eDJfdCBfX3JldjE7IFwKLSAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19idWlsdGluX25lb25fdnN0MnFfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgMzIpOyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c3QycV9mMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0MzJ4NHgyX3QgX19zMSA9IF9fcDE7IFwKLSAgX19idWlsdGluX25lb25fdnN0MnFfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIDQxKTsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzdDJxX2YzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQzMng0eDJfdCBfX3MxID0gX19wMTsgXAotICBmbG9hdDMyeDR4Ml90IF9fcmV2MTsgXAotICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QycV92KF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIDQxKTsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnN0MnFfZjE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDE2eDh4Ml90IF9fczEgPSBfX3AxOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDJxX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCA0MCk7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c3QycV9mMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0MTZ4OHgyX3QgX19zMSA9IF9fcDE7IFwKLSAgZmxvYXQxNng4eDJfdCBfX3JldjE7IFwKLSAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19idWlsdGluX25lb25fdnN0MnFfdihfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCA0MCk7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzdDJxX3MzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MzJ4NHgyX3QgX19zMSA9IF9fcDE7IFwKLSAgX19idWlsdGluX25lb25fdnN0MnFfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIDM0KTsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzdDJxX3MzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MzJ4NHgyX3QgX19zMSA9IF9fcDE7IFwKLSAgaW50MzJ4NHgyX3QgX19yZXYxOyBcCi0gIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDMsIDIsIDEsIDApOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDJxX3YoX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgMzQpOyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c3QycV9zMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDE2eDh4Ml90IF9fczEgPSBfX3AxOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDJxX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCAzMyk7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c3QycV9zMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDE2eDh4Ml90IF9fczEgPSBfX3AxOyBcCi0gIGludDE2eDh4Ml90IF9fcmV2MTsgXAotICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QycV92KF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIDMzKTsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnN0Ml91OChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDh4OHgyX3QgX19zMSA9IF9fcDE7IFwKLSAgX19idWlsdGluX25lb25fdnN0Ml92KF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCAxNik7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c3QyX3U4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50OHg4eDJfdCBfX3MxID0gX19wMTsgXAotICB1aW50OHg4eDJfdCBfX3JldjE7IFwKLSAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19idWlsdGluX25lb25fdnN0Ml92KF9fcDAsIChpbnQ4eDhfdClfX3JldjEudmFsWzBdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsxXSwgMTYpOyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c3QyX3UzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDMyeDJ4Ml90IF9fczEgPSBfX3AxOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDJfdihfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgMTgpOyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnN0Ml91MzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQzMngyeDJfdCBfX3MxID0gX19wMTsgXAotICB1aW50MzJ4MngyX3QgX19yZXYxOyBcCi0gIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDEsIDApOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDJfdihfX3AwLCAoaW50OHg4X3QpX19yZXYxLnZhbFswXSwgKGludDh4OF90KV9fcmV2MS52YWxbMV0sIDE4KTsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnN0Ml91NjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ2NHgxeDJfdCBfX3MxID0gX19wMTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QyX3YoX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIDE5KTsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzdDJfdTY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50NjR4MXgyX3QgX19zMSA9IF9fcDE7IFwKLSAgX19idWlsdGluX25lb25fdnN0Ml92KF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCAxOSk7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzdDJfdTE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MTZ4NHgyX3QgX19zMSA9IF9fcDE7IFwKLSAgX19idWlsdGluX25lb25fdnN0Ml92KF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCAxNyk7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c3QyX3UxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDE2eDR4Ml90IF9fczEgPSBfX3AxOyBcCi0gIHVpbnQxNng0eDJfdCBfX3JldjE7IFwKLSAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKLSAgX19idWlsdGluX25lb25fdnN0Ml92KF9fcDAsIChpbnQ4eDhfdClfX3JldjEudmFsWzBdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsxXSwgMTcpOyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c3QyX3M4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ4eDh4Ml90IF9fczEgPSBfX3AxOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDJfdihfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgMCk7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c3QyX3M4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ4eDh4Ml90IF9fczEgPSBfX3AxOyBcCi0gIGludDh4OHgyX3QgX19yZXYxOyBcCi0gIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDJfdihfX3AwLCAoaW50OHg4X3QpX19yZXYxLnZhbFswXSwgKGludDh4OF90KV9fcmV2MS52YWxbMV0sIDApOyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c3QyX2YzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQzMngyeDJfdCBfX3MxID0gX19wMTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QyX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCA5KTsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzdDJfZjMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDMyeDJ4Ml90IF9fczEgPSBfX3AxOyBcCi0gIGZsb2F0MzJ4MngyX3QgX19yZXYxOyBcCi0gIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDEsIDApOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDJfdihfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCA5KTsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnN0Ml9mMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0MTZ4NHgyX3QgX19zMSA9IF9fcDE7IFwKLSAgX19idWlsdGluX25lb25fdnN0Ml92KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgOCk7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c3QyX2YxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQxNng0eDJfdCBfX3MxID0gX19wMTsgXAotICBmbG9hdDE2eDR4Ml90IF9fcmV2MTsgXAotICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QyX3YoX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgOCk7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzdDJfczMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQzMngyeDJfdCBfX3MxID0gX19wMTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QyX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCAyKTsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzdDJfczMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQzMngyeDJfdCBfX3MxID0gX19wMTsgXAotICBpbnQzMngyeDJfdCBfX3JldjE7IFwKLSAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMSwgMCk7IFwKLSAgX19idWlsdGluX25lb25fdnN0Ml92KF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIDIpOyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c3QyX3M2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50NjR4MXgyX3QgX19zMSA9IF9fcDE7IFwKLSAgX19idWlsdGluX25lb25fdnN0Ml92KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgMyk7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c3QyX3M2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50NjR4MXgyX3QgX19zMSA9IF9fcDE7IFwKLSAgX19idWlsdGluX25lb25fdnN0Ml92KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgMyk7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzdDJfczE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQxNng0eDJfdCBfX3MxID0gX19wMTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QyX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCAxKTsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzdDJfczE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQxNng0eDJfdCBfX3MxID0gX19wMTsgXAotICBpbnQxNng0eDJfdCBfX3JldjE7IFwKLSAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKLSAgX19idWlsdGluX25lb25fdnN0Ml92KF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIDEpOyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c3QyX2xhbmVfcDgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHk4eDh4Ml90IF9fczEgPSBfX3AxOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDJfbGFuZV92KF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCBfX3AyLCA0KTsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzdDJfbGFuZV9wOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTh4OHgyX3QgX19zMSA9IF9fcDE7IFwKLSAgcG9seTh4OHgyX3QgX19yZXYxOyBcCi0gIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDJfbGFuZV92KF9fcDAsIChpbnQ4eDhfdClfX3JldjEudmFsWzBdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsxXSwgX19wMiwgNCk7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzdDJfbGFuZV9wMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHkxNng0eDJfdCBfX3MxID0gX19wMTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QyX2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgX19wMiwgNSk7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c3QyX2xhbmVfcDE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBwb2x5MTZ4NHgyX3QgX19zMSA9IF9fcDE7IFwKLSAgcG9seTE2eDR4Ml90IF9fcmV2MTsgXAotICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QyX2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19yZXYxLnZhbFswXSwgKGludDh4OF90KV9fcmV2MS52YWxbMV0sIF9fcDIsIDUpOyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c3QycV9sYW5lX3AxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTE2eDh4Ml90IF9fczEgPSBfX3AxOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDJxX2xhbmVfdihfX3AwLCAoaW50OHgxNl90KV9fczEudmFsWzBdLCAoaW50OHgxNl90KV9fczEudmFsWzFdLCBfX3AyLCAzNyk7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c3QycV9sYW5lX3AxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTE2eDh4Ml90IF9fczEgPSBfX3AxOyBcCi0gIHBvbHkxNng4eDJfdCBfX3JldjE7IFwKLSAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19idWlsdGluX25lb25fdnN0MnFfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCBfX3AyLCAzNyk7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzdDJxX2xhbmVfdTMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MzJ4NHgyX3QgX19zMSA9IF9fcDE7IFwKLSAgX19idWlsdGluX25lb25fdnN0MnFfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19zMS52YWxbMF0sIChpbnQ4eDE2X3QpX19zMS52YWxbMV0sIF9fcDIsIDUwKTsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzdDJxX2xhbmVfdTMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MzJ4NHgyX3QgX19zMSA9IF9fcDE7IFwKLSAgdWludDMyeDR4Ml90IF9fcmV2MTsgXAotICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QycV9sYW5lX3YoX19wMCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIF9fcDIsIDUwKTsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnN0MnFfbGFuZV91MTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQxNng4eDJfdCBfX3MxID0gX19wMTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QycV9sYW5lX3YoX19wMCwgKGludDh4MTZfdClfX3MxLnZhbFswXSwgKGludDh4MTZfdClfX3MxLnZhbFsxXSwgX19wMiwgNDkpOyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnN0MnFfbGFuZV91MTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQxNng4eDJfdCBfX3MxID0gX19wMTsgXAotICB1aW50MTZ4OHgyX3QgX19yZXYxOyBcCi0gIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDJxX2xhbmVfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgX19wMiwgNDkpOyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c3QycV9sYW5lX2YzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQzMng0eDJfdCBfX3MxID0gX19wMTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QycV9sYW5lX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3AyLCA0MSk7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c3QycV9sYW5lX2YzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQzMng0eDJfdCBfX3MxID0gX19wMTsgXAotICBmbG9hdDMyeDR4Ml90IF9fcmV2MTsgXAotICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QycV9sYW5lX3YoX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgX19wMiwgNDEpOyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c3QycV9sYW5lX2YxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQxNng4eDJfdCBfX3MxID0gX19wMTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QycV9sYW5lX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3AyLCA0MCk7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c3QycV9sYW5lX2YxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQxNng4eDJfdCBfX3MxID0gX19wMTsgXAotICBmbG9hdDE2eDh4Ml90IF9fcmV2MTsgXAotICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QycV9sYW5lX3YoX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgX19wMiwgNDApOyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c3QycV9sYW5lX3MzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MzJ4NHgyX3QgX19zMSA9IF9fcDE7IFwKLSAgX19idWlsdGluX25lb25fdnN0MnFfbGFuZV92KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19wMiwgMzQpOyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnN0MnFfbGFuZV9zMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDMyeDR4Ml90IF9fczEgPSBfX3AxOyBcCi0gIGludDMyeDR4Ml90IF9fcmV2MTsgXAotICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QycV9sYW5lX3YoX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgX19wMiwgMzQpOyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c3QycV9sYW5lX3MxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MTZ4OHgyX3QgX19zMSA9IF9fcDE7IFwKLSAgX19idWlsdGluX25lb25fdnN0MnFfbGFuZV92KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19wMiwgMzMpOyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnN0MnFfbGFuZV9zMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDE2eDh4Ml90IF9fczEgPSBfX3AxOyBcCi0gIGludDE2eDh4Ml90IF9fcmV2MTsgXAotICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QycV9sYW5lX3YoX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgX19wMiwgMzMpOyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c3QyX2xhbmVfdTgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ4eDh4Ml90IF9fczEgPSBfX3AxOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDJfbGFuZV92KF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCBfX3AyLCAxNik7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c3QyX2xhbmVfdTgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ4eDh4Ml90IF9fczEgPSBfX3AxOyBcCi0gIHVpbnQ4eDh4Ml90IF9fcmV2MTsgXAotICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QyX2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19yZXYxLnZhbFswXSwgKGludDh4OF90KV9fcmV2MS52YWxbMV0sIF9fcDIsIDE2KTsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnN0Ml9sYW5lX3UzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDMyeDJ4Ml90IF9fczEgPSBfX3AxOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDJfbGFuZV92KF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCBfX3AyLCAxOCk7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c3QyX2xhbmVfdTMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MzJ4MngyX3QgX19zMSA9IF9fcDE7IFwKLSAgdWludDMyeDJ4Ml90IF9fcmV2MTsgXAotICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxLCAwKTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QyX2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19yZXYxLnZhbFswXSwgKGludDh4OF90KV9fcmV2MS52YWxbMV0sIF9fcDIsIDE4KTsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnN0Ml9sYW5lX3UxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDE2eDR4Ml90IF9fczEgPSBfX3AxOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDJfbGFuZV92KF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCBfX3AyLCAxNyk7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c3QyX2xhbmVfdTE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MTZ4NHgyX3QgX19zMSA9IF9fcDE7IFwKLSAgdWludDE2eDR4Ml90IF9fcmV2MTsgXAotICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QyX2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19yZXYxLnZhbFswXSwgKGludDh4OF90KV9fcmV2MS52YWxbMV0sIF9fcDIsIDE3KTsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnN0Ml9sYW5lX3M4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ4eDh4Ml90IF9fczEgPSBfX3AxOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDJfbGFuZV92KF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCBfX3AyLCAwKTsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzdDJfbGFuZV9zOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50OHg4eDJfdCBfX3MxID0gX19wMTsgXAotICBpbnQ4eDh4Ml90IF9fcmV2MTsgXAotICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QyX2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19yZXYxLnZhbFswXSwgKGludDh4OF90KV9fcmV2MS52YWxbMV0sIF9fcDIsIDApOyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c3QyX2xhbmVfZjMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDMyeDJ4Ml90IF9fczEgPSBfX3AxOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDJfbGFuZV92KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19wMiwgOSk7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c3QyX2xhbmVfZjMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDMyeDJ4Ml90IF9fczEgPSBfX3AxOyBcCi0gIGZsb2F0MzJ4MngyX3QgX19yZXYxOyBcCi0gIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDEsIDApOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDJfbGFuZV92KF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcDIsIDkpOyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c3QyX2xhbmVfZjE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDE2eDR4Ml90IF9fczEgPSBfX3AxOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDJfbGFuZV92KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19wMiwgOCk7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c3QyX2xhbmVfZjE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDE2eDR4Ml90IF9fczEgPSBfX3AxOyBcCi0gIGZsb2F0MTZ4NHgyX3QgX19yZXYxOyBcCi0gIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDMsIDIsIDEsIDApOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDJfbGFuZV92KF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcDIsIDgpOyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c3QyX2xhbmVfczMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQzMngyeDJfdCBfX3MxID0gX19wMTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QyX2xhbmVfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fcDIsIDIpOyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnN0Ml9sYW5lX3MzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MzJ4MngyX3QgX19zMSA9IF9fcDE7IFwKLSAgaW50MzJ4MngyX3QgX19yZXYxOyBcCi0gIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDEsIDApOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDJfbGFuZV92KF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcDIsIDIpOyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c3QyX2xhbmVfczE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQxNng0eDJfdCBfX3MxID0gX19wMTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QyX2xhbmVfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fcDIsIDEpOyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnN0Ml9sYW5lX3MxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MTZ4NHgyX3QgX19zMSA9IF9fcDE7IFwKLSAgaW50MTZ4NHgyX3QgX19yZXYxOyBcCi0gIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDMsIDIsIDEsIDApOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDJfbGFuZV92KF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcDIsIDEpOyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c3QzX3A4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBwb2x5OHg4eDNfdCBfX3MxID0gX19wMTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QzX3YoX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIChpbnQ4eDhfdClfX3MxLnZhbFsyXSwgNCk7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c3QzX3A4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBwb2x5OHg4eDNfdCBfX3MxID0gX19wMTsgXAotICBwb2x5OHg4eDNfdCBfX3JldjE7IFwKLSAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19idWlsdGluX25lb25fdnN0M192KF9fcDAsIChpbnQ4eDhfdClfX3JldjEudmFsWzBdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsxXSwgKGludDh4OF90KV9fcmV2MS52YWxbMl0sIDQpOyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c3QzX3AxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTE2eDR4M190IF9fczEgPSBfX3AxOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDNfdihfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgKGludDh4OF90KV9fczEudmFsWzJdLCA1KTsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzdDNfcDE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBwb2x5MTZ4NHgzX3QgX19zMSA9IF9fcDE7IFwKLSAgcG9seTE2eDR4M190IF9fcmV2MTsgXAotICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QzX3YoX19wMCwgKGludDh4OF90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDhfdClfX3JldjEudmFsWzFdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsyXSwgNSk7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzdDNxX3A4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBwb2x5OHgxNngzX3QgX19zMSA9IF9fcDE7IFwKLSAgX19idWlsdGluX25lb25fdnN0M3FfdihfX3AwLCAoaW50OHgxNl90KV9fczEudmFsWzBdLCAoaW50OHgxNl90KV9fczEudmFsWzFdLCAoaW50OHgxNl90KV9fczEudmFsWzJdLCAzNik7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c3QzcV9wOChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTh4MTZ4M190IF9fczEgPSBfX3AxOyBcCi0gIHBvbHk4eDE2eDNfdCBfX3JldjE7IFwKLSAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19idWlsdGluX25lb25fdnN0M3FfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgKGludDh4MTZfdClfX3JldjEudmFsWzJdLCAzNik7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzdDNxX3AxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTE2eDh4M190IF9fczEgPSBfX3AxOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDNxX3YoX19wMCwgKGludDh4MTZfdClfX3MxLnZhbFswXSwgKGludDh4MTZfdClfX3MxLnZhbFsxXSwgKGludDh4MTZfdClfX3MxLnZhbFsyXSwgMzcpOyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnN0M3FfcDE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBwb2x5MTZ4OHgzX3QgX19zMSA9IF9fcDE7IFwKLSAgcG9seTE2eDh4M190IF9fcmV2MTsgXAotICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QzcV92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMl0sIDM3KTsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnN0M3FfdTgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ4eDE2eDNfdCBfX3MxID0gX19wMTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QzcV92KF9fcDAsIChpbnQ4eDE2X3QpX19zMS52YWxbMF0sIChpbnQ4eDE2X3QpX19zMS52YWxbMV0sIChpbnQ4eDE2X3QpX19zMS52YWxbMl0sIDQ4KTsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzdDNxX3U4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50OHgxNngzX3QgX19zMSA9IF9fcDE7IFwKLSAgdWludDh4MTZ4M190IF9fcmV2MTsgXAotICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QzcV92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMl0sIDQ4KTsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnN0M3FfdTMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MzJ4NHgzX3QgX19zMSA9IF9fcDE7IFwKLSAgX19idWlsdGluX25lb25fdnN0M3FfdihfX3AwLCAoaW50OHgxNl90KV9fczEudmFsWzBdLCAoaW50OHgxNl90KV9fczEudmFsWzFdLCAoaW50OHgxNl90KV9fczEudmFsWzJdLCA1MCk7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c3QzcV91MzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQzMng0eDNfdCBfX3MxID0gX19wMTsgXAotICB1aW50MzJ4NHgzX3QgX19yZXYxOyBcCi0gIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDMsIDIsIDEsIDApOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDNxX3YoX19wMCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsyXSwgNTApOyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c3QzcV91MTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQxNng4eDNfdCBfX3MxID0gX19wMTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QzcV92KF9fcDAsIChpbnQ4eDE2X3QpX19zMS52YWxbMF0sIChpbnQ4eDE2X3QpX19zMS52YWxbMV0sIChpbnQ4eDE2X3QpX19zMS52YWxbMl0sIDQ5KTsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzdDNxX3UxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDE2eDh4M190IF9fczEgPSBfX3AxOyBcCi0gIHVpbnQxNng4eDNfdCBfX3JldjE7IFwKLSAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19idWlsdGluX25lb25fdnN0M3FfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgKGludDh4MTZfdClfX3JldjEudmFsWzJdLCA0OSk7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzdDNxX3M4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ4eDE2eDNfdCBfX3MxID0gX19wMTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QzcV92KF9fcDAsIChpbnQ4eDE2X3QpX19zMS52YWxbMF0sIChpbnQ4eDE2X3QpX19zMS52YWxbMV0sIChpbnQ4eDE2X3QpX19zMS52YWxbMl0sIDMyKTsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzdDNxX3M4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ4eDE2eDNfdCBfX3MxID0gX19wMTsgXAotICBpbnQ4eDE2eDNfdCBfX3JldjE7IFwKLSAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19idWlsdGluX25lb25fdnN0M3FfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgKGludDh4MTZfdClfX3JldjEudmFsWzJdLCAzMik7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzdDNxX2YzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQzMng0eDNfdCBfX3MxID0gX19wMTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QzcV92KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIDQxKTsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzdDNxX2YzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQzMng0eDNfdCBfX3MxID0gX19wMTsgXAotICBmbG9hdDMyeDR4M190IF9fcmV2MTsgXAotICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QzcV92KF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcmV2MS52YWxbMl0sIDQxKTsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnN0M3FfZjE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDE2eDh4M190IF9fczEgPSBfX3AxOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDNxX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgNDApOyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnN0M3FfZjE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDE2eDh4M190IF9fczEgPSBfX3AxOyBcCi0gIGZsb2F0MTZ4OHgzX3QgX19yZXYxOyBcCi0gIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDNxX3YoX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgX19yZXYxLnZhbFsyXSwgNDApOyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c3QzcV9zMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDMyeDR4M190IF9fczEgPSBfX3AxOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDNxX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgMzQpOyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnN0M3FfczMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQzMng0eDNfdCBfX3MxID0gX19wMTsgXAotICBpbnQzMng0eDNfdCBfX3JldjE7IFwKLSAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKLSAgX19idWlsdGluX25lb25fdnN0M3FfdihfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCBfX3JldjEudmFsWzJdLCAzNCk7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzdDNxX3MxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MTZ4OHgzX3QgX19zMSA9IF9fcDE7IFwKLSAgX19idWlsdGluX25lb25fdnN0M3FfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCAzMyk7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c3QzcV9zMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDE2eDh4M190IF9fczEgPSBfX3AxOyBcCi0gIGludDE2eDh4M190IF9fcmV2MTsgXAotICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QzcV92KF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcmV2MS52YWxbMl0sIDMzKTsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnN0M191OChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDh4OHgzX3QgX19zMSA9IF9fcDE7IFwKLSAgX19idWlsdGluX25lb25fdnN0M192KF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCAoaW50OHg4X3QpX19zMS52YWxbMl0sIDE2KTsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzdDNfdTgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ4eDh4M190IF9fczEgPSBfX3AxOyBcCi0gIHVpbnQ4eDh4M190IF9fcmV2MTsgXAotICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QzX3YoX19wMCwgKGludDh4OF90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDhfdClfX3JldjEudmFsWzFdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsyXSwgMTYpOyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c3QzX3UzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDMyeDJ4M190IF9fczEgPSBfX3AxOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDNfdihfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgKGludDh4OF90KV9fczEudmFsWzJdLCAxOCk7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c3QzX3UzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDMyeDJ4M190IF9fczEgPSBfX3AxOyBcCi0gIHVpbnQzMngyeDNfdCBfX3JldjE7IFwKLSAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMSwgMCk7IFwKLSAgX19idWlsdGluX25lb25fdnN0M192KF9fcDAsIChpbnQ4eDhfdClfX3JldjEudmFsWzBdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsxXSwgKGludDh4OF90KV9fcmV2MS52YWxbMl0sIDE4KTsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnN0M191NjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ2NHgxeDNfdCBfX3MxID0gX19wMTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QzX3YoX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIChpbnQ4eDhfdClfX3MxLnZhbFsyXSwgMTkpOyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnN0M191NjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ2NHgxeDNfdCBfX3MxID0gX19wMTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QzX3YoX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIChpbnQ4eDhfdClfX3MxLnZhbFsyXSwgMTkpOyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c3QzX3UxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDE2eDR4M190IF9fczEgPSBfX3AxOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDNfdihfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgKGludDh4OF90KV9fczEudmFsWzJdLCAxNyk7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c3QzX3UxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDE2eDR4M190IF9fczEgPSBfX3AxOyBcCi0gIHVpbnQxNng0eDNfdCBfX3JldjE7IFwKLSAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKLSAgX19idWlsdGluX25lb25fdnN0M192KF9fcDAsIChpbnQ4eDhfdClfX3JldjEudmFsWzBdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsxXSwgKGludDh4OF90KV9fcmV2MS52YWxbMl0sIDE3KTsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnN0M19zOChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50OHg4eDNfdCBfX3MxID0gX19wMTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QzX3YoX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIChpbnQ4eDhfdClfX3MxLnZhbFsyXSwgMCk7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c3QzX3M4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ4eDh4M190IF9fczEgPSBfX3AxOyBcCi0gIGludDh4OHgzX3QgX19yZXYxOyBcCi0gIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDNfdihfX3AwLCAoaW50OHg4X3QpX19yZXYxLnZhbFswXSwgKGludDh4OF90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDhfdClfX3JldjEudmFsWzJdLCAwKTsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnN0M19mMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0MzJ4MngzX3QgX19zMSA9IF9fcDE7IFwKLSAgX19idWlsdGluX25lb25fdnN0M192KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIDkpOyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnN0M19mMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0MzJ4MngzX3QgX19zMSA9IF9fcDE7IFwKLSAgZmxvYXQzMngyeDNfdCBfX3JldjE7IFwKLSAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMSwgMCk7IFwKLSAgX19idWlsdGluX25lb25fdnN0M192KF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcmV2MS52YWxbMl0sIDkpOyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c3QzX2YxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQxNng0eDNfdCBfX3MxID0gX19wMTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QzX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgOCk7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c3QzX2YxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQxNng0eDNfdCBfX3MxID0gX19wMTsgXAotICBmbG9hdDE2eDR4M190IF9fcmV2MTsgXAotICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QzX3YoX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgX19yZXYxLnZhbFsyXSwgOCk7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzdDNfczMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQzMngyeDNfdCBfX3MxID0gX19wMTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QzX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgMik7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c3QzX3MzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MzJ4MngzX3QgX19zMSA9IF9fcDE7IFwKLSAgaW50MzJ4MngzX3QgX19yZXYxOyBcCi0gIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDEsIDApOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDNfdihfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCBfX3JldjEudmFsWzJdLCAyKTsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnN0M19zNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDY0eDF4M190IF9fczEgPSBfX3AxOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDNfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCAzKTsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzdDNfczY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ2NHgxeDNfdCBfX3MxID0gX19wMTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QzX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgMyk7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzdDNfczE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQxNng0eDNfdCBfX3MxID0gX19wMTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QzX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgMSk7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c3QzX3MxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MTZ4NHgzX3QgX19zMSA9IF9fcDE7IFwKLSAgaW50MTZ4NHgzX3QgX19yZXYxOyBcCi0gIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDMsIDIsIDEsIDApOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDNfdihfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCBfX3JldjEudmFsWzJdLCAxKTsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnN0M19sYW5lX3A4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBwb2x5OHg4eDNfdCBfX3MxID0gX19wMTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QzX2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgKGludDh4OF90KV9fczEudmFsWzJdLCBfX3AyLCA0KTsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzdDNfbGFuZV9wOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTh4OHgzX3QgX19zMSA9IF9fcDE7IFwKLSAgcG9seTh4OHgzX3QgX19yZXYxOyBcCi0gIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDNfbGFuZV92KF9fcDAsIChpbnQ4eDhfdClfX3JldjEudmFsWzBdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsxXSwgKGludDh4OF90KV9fcmV2MS52YWxbMl0sIF9fcDIsIDQpOyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c3QzX2xhbmVfcDE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBwb2x5MTZ4NHgzX3QgX19zMSA9IF9fcDE7IFwKLSAgX19idWlsdGluX25lb25fdnN0M19sYW5lX3YoX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIChpbnQ4eDhfdClfX3MxLnZhbFsyXSwgX19wMiwgNSk7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c3QzX2xhbmVfcDE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBwb2x5MTZ4NHgzX3QgX19zMSA9IF9fcDE7IFwKLSAgcG9seTE2eDR4M190IF9fcmV2MTsgXAotICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QzX2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19yZXYxLnZhbFswXSwgKGludDh4OF90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDhfdClfX3JldjEudmFsWzJdLCBfX3AyLCA1KTsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnN0M3FfbGFuZV9wMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHkxNng4eDNfdCBfX3MxID0gX19wMTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QzcV9sYW5lX3YoX19wMCwgKGludDh4MTZfdClfX3MxLnZhbFswXSwgKGludDh4MTZfdClfX3MxLnZhbFsxXSwgKGludDh4MTZfdClfX3MxLnZhbFsyXSwgX19wMiwgMzcpOyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnN0M3FfbGFuZV9wMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHkxNng4eDNfdCBfX3MxID0gX19wMTsgXAotICBwb2x5MTZ4OHgzX3QgX19yZXYxOyBcCi0gIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDNxX2xhbmVfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgKGludDh4MTZfdClfX3JldjEudmFsWzJdLCBfX3AyLCAzNyk7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzdDNxX2xhbmVfdTMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MzJ4NHgzX3QgX19zMSA9IF9fcDE7IFwKLSAgX19idWlsdGluX25lb25fdnN0M3FfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19zMS52YWxbMF0sIChpbnQ4eDE2X3QpX19zMS52YWxbMV0sIChpbnQ4eDE2X3QpX19zMS52YWxbMl0sIF9fcDIsIDUwKTsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzdDNxX2xhbmVfdTMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MzJ4NHgzX3QgX19zMSA9IF9fcDE7IFwKLSAgdWludDMyeDR4M190IF9fcmV2MTsgXAotICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QzcV9sYW5lX3YoX19wMCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsyXSwgX19wMiwgNTApOyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c3QzcV9sYW5lX3UxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDE2eDh4M190IF9fczEgPSBfX3AxOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDNxX2xhbmVfdihfX3AwLCAoaW50OHgxNl90KV9fczEudmFsWzBdLCAoaW50OHgxNl90KV9fczEudmFsWzFdLCAoaW50OHgxNl90KV9fczEudmFsWzJdLCBfX3AyLCA0OSk7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c3QzcV9sYW5lX3UxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDE2eDh4M190IF9fczEgPSBfX3AxOyBcCi0gIHVpbnQxNng4eDNfdCBfX3JldjE7IFwKLSAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19idWlsdGluX25lb25fdnN0M3FfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMl0sIF9fcDIsIDQ5KTsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnN0M3FfbGFuZV9mMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0MzJ4NHgzX3QgX19zMSA9IF9fcDE7IFwKLSAgX19idWlsdGluX25lb25fdnN0M3FfbGFuZV92KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIF9fcDIsIDQxKTsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzdDNxX2xhbmVfZjMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDMyeDR4M190IF9fczEgPSBfX3AxOyBcCi0gIGZsb2F0MzJ4NHgzX3QgX19yZXYxOyBcCi0gIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDMsIDIsIDEsIDApOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDNxX2xhbmVfdihfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCBfX3JldjEudmFsWzJdLCBfX3AyLCA0MSk7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzdDNxX2xhbmVfZjE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDE2eDh4M190IF9fczEgPSBfX3AxOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDNxX2xhbmVfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCBfX3AyLCA0MCk7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c3QzcV9sYW5lX2YxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQxNng4eDNfdCBfX3MxID0gX19wMTsgXAotICBmbG9hdDE2eDh4M190IF9fcmV2MTsgXAotICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QzcV9sYW5lX3YoX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgX19yZXYxLnZhbFsyXSwgX19wMiwgNDApOyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c3QzcV9sYW5lX3MzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MzJ4NHgzX3QgX19zMSA9IF9fcDE7IFwKLSAgX19idWlsdGluX25lb25fdnN0M3FfbGFuZV92KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIF9fcDIsIDM0KTsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzdDNxX2xhbmVfczMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQzMng0eDNfdCBfX3MxID0gX19wMTsgXAotICBpbnQzMng0eDNfdCBfX3JldjE7IFwKLSAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKLSAgX19idWlsdGluX25lb25fdnN0M3FfbGFuZV92KF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcmV2MS52YWxbMl0sIF9fcDIsIDM0KTsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnN0M3FfbGFuZV9zMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDE2eDh4M190IF9fczEgPSBfX3AxOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDNxX2xhbmVfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCBfX3AyLCAzMyk7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c3QzcV9sYW5lX3MxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MTZ4OHgzX3QgX19zMSA9IF9fcDE7IFwKLSAgaW50MTZ4OHgzX3QgX19yZXYxOyBcCi0gIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDNxX2xhbmVfdihfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCBfX3JldjEudmFsWzJdLCBfX3AyLCAzMyk7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzdDNfbGFuZV91OChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDh4OHgzX3QgX19zMSA9IF9fcDE7IFwKLSAgX19idWlsdGluX25lb25fdnN0M19sYW5lX3YoX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIChpbnQ4eDhfdClfX3MxLnZhbFsyXSwgX19wMiwgMTYpOyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnN0M19sYW5lX3U4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50OHg4eDNfdCBfX3MxID0gX19wMTsgXAotICB1aW50OHg4eDNfdCBfX3JldjE7IFwKLSAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19idWlsdGluX25lb25fdnN0M19sYW5lX3YoX19wMCwgKGludDh4OF90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDhfdClfX3JldjEudmFsWzFdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsyXSwgX19wMiwgMTYpOyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c3QzX2xhbmVfdTMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MzJ4MngzX3QgX19zMSA9IF9fcDE7IFwKLSAgX19idWlsdGluX25lb25fdnN0M19sYW5lX3YoX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIChpbnQ4eDhfdClfX3MxLnZhbFsyXSwgX19wMiwgMTgpOyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnN0M19sYW5lX3UzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDMyeDJ4M190IF9fczEgPSBfX3AxOyBcCi0gIHVpbnQzMngyeDNfdCBfX3JldjE7IFwKLSAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMSwgMCk7IFwKLSAgX19idWlsdGluX25lb25fdnN0M19sYW5lX3YoX19wMCwgKGludDh4OF90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDhfdClfX3JldjEudmFsWzFdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsyXSwgX19wMiwgMTgpOyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c3QzX2xhbmVfdTE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MTZ4NHgzX3QgX19zMSA9IF9fcDE7IFwKLSAgX19idWlsdGluX25lb25fdnN0M19sYW5lX3YoX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIChpbnQ4eDhfdClfX3MxLnZhbFsyXSwgX19wMiwgMTcpOyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnN0M19sYW5lX3UxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDE2eDR4M190IF9fczEgPSBfX3AxOyBcCi0gIHVpbnQxNng0eDNfdCBfX3JldjE7IFwKLSAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKLSAgX19idWlsdGluX25lb25fdnN0M19sYW5lX3YoX19wMCwgKGludDh4OF90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDhfdClfX3JldjEudmFsWzFdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsyXSwgX19wMiwgMTcpOyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c3QzX2xhbmVfczgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDh4OHgzX3QgX19zMSA9IF9fcDE7IFwKLSAgX19idWlsdGluX25lb25fdnN0M19sYW5lX3YoX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIChpbnQ4eDhfdClfX3MxLnZhbFsyXSwgX19wMiwgMCk7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c3QzX2xhbmVfczgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDh4OHgzX3QgX19zMSA9IF9fcDE7IFwKLSAgaW50OHg4eDNfdCBfX3JldjE7IFwKLSAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19idWlsdGluX25lb25fdnN0M19sYW5lX3YoX19wMCwgKGludDh4OF90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDhfdClfX3JldjEudmFsWzFdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsyXSwgX19wMiwgMCk7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzdDNfbGFuZV9mMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0MzJ4MngzX3QgX19zMSA9IF9fcDE7IFwKLSAgX19idWlsdGluX25lb25fdnN0M19sYW5lX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgX19wMiwgOSk7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c3QzX2xhbmVfZjMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDMyeDJ4M190IF9fczEgPSBfX3AxOyBcCi0gIGZsb2F0MzJ4MngzX3QgX19yZXYxOyBcCi0gIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDEsIDApOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDNfbGFuZV92KF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcmV2MS52YWxbMl0sIF9fcDIsIDkpOyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c3QzX2xhbmVfZjE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDE2eDR4M190IF9fczEgPSBfX3AxOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDNfbGFuZV92KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIF9fcDIsIDgpOyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnN0M19sYW5lX2YxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQxNng0eDNfdCBfX3MxID0gX19wMTsgXAotICBmbG9hdDE2eDR4M190IF9fcmV2MTsgXAotICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QzX2xhbmVfdihfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCBfX3JldjEudmFsWzJdLCBfX3AyLCA4KTsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnN0M19sYW5lX3MzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MzJ4MngzX3QgX19zMSA9IF9fcDE7IFwKLSAgX19idWlsdGluX25lb25fdnN0M19sYW5lX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgX19wMiwgMik7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c3QzX2xhbmVfczMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQzMngyeDNfdCBfX3MxID0gX19wMTsgXAotICBpbnQzMngyeDNfdCBfX3JldjE7IFwKLSAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMSwgMCk7IFwKLSAgX19idWlsdGluX25lb25fdnN0M19sYW5lX3YoX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgX19yZXYxLnZhbFsyXSwgX19wMiwgMik7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzdDNfbGFuZV9zMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDE2eDR4M190IF9fczEgPSBfX3AxOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDNfbGFuZV92KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIF9fcDIsIDEpOyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnN0M19sYW5lX3MxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MTZ4NHgzX3QgX19zMSA9IF9fcDE7IFwKLSAgaW50MTZ4NHgzX3QgX19yZXYxOyBcCi0gIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDMsIDIsIDEsIDApOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDNfbGFuZV92KF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcmV2MS52YWxbMl0sIF9fcDIsIDEpOyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c3Q0X3A4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBwb2x5OHg4eDRfdCBfX3MxID0gX19wMTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3Q0X3YoX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIChpbnQ4eDhfdClfX3MxLnZhbFsyXSwgKGludDh4OF90KV9fczEudmFsWzNdLCA0KTsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzdDRfcDgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHk4eDh4NF90IF9fczEgPSBfX3AxOyBcCi0gIHBvbHk4eDh4NF90IF9fcmV2MTsgXAotICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbM10sIF9fczEudmFsWzNdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3Q0X3YoX19wMCwgKGludDh4OF90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDhfdClfX3JldjEudmFsWzFdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsyXSwgKGludDh4OF90KV9fcmV2MS52YWxbM10sIDQpOyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c3Q0X3AxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTE2eDR4NF90IF9fczEgPSBfX3AxOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDRfdihfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgKGludDh4OF90KV9fczEudmFsWzJdLCAoaW50OHg4X3QpX19zMS52YWxbM10sIDUpOyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnN0NF9wMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHkxNng0eDRfdCBfX3MxID0gX19wMTsgXAotICBwb2x5MTZ4NHg0X3QgX19yZXYxOyBcCi0gIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFszXSwgX19zMS52YWxbM10sIDMsIDIsIDEsIDApOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDRfdihfX3AwLCAoaW50OHg4X3QpX19yZXYxLnZhbFswXSwgKGludDh4OF90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDhfdClfX3JldjEudmFsWzJdLCAoaW50OHg4X3QpX19yZXYxLnZhbFszXSwgNSk7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzdDRxX3A4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBwb2x5OHgxNng0X3QgX19zMSA9IF9fcDE7IFwKLSAgX19idWlsdGluX25lb25fdnN0NHFfdihfX3AwLCAoaW50OHgxNl90KV9fczEudmFsWzBdLCAoaW50OHgxNl90KV9fczEudmFsWzFdLCAoaW50OHgxNl90KV9fczEudmFsWzJdLCAoaW50OHgxNl90KV9fczEudmFsWzNdLCAzNik7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c3Q0cV9wOChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTh4MTZ4NF90IF9fczEgPSBfX3AxOyBcCi0gIHBvbHk4eDE2eDRfdCBfX3JldjE7IFwKLSAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzNdLCBfX3MxLnZhbFszXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19idWlsdGluX25lb25fdnN0NHFfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgKGludDh4MTZfdClfX3JldjEudmFsWzJdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbM10sIDM2KTsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnN0NHFfcDE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBwb2x5MTZ4OHg0X3QgX19zMSA9IF9fcDE7IFwKLSAgX19idWlsdGluX25lb25fdnN0NHFfdihfX3AwLCAoaW50OHgxNl90KV9fczEudmFsWzBdLCAoaW50OHgxNl90KV9fczEudmFsWzFdLCAoaW50OHgxNl90KV9fczEudmFsWzJdLCAoaW50OHgxNl90KV9fczEudmFsWzNdLCAzNyk7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c3Q0cV9wMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHkxNng4eDRfdCBfX3MxID0gX19wMTsgXAotICBwb2x5MTZ4OHg0X3QgX19yZXYxOyBcCi0gIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFszXSwgX19zMS52YWxbM10sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDRxX3YoX19wMCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsyXSwgKGludDh4MTZfdClfX3JldjEudmFsWzNdLCAzNyk7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzdDRxX3U4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50OHgxNng0X3QgX19zMSA9IF9fcDE7IFwKLSAgX19idWlsdGluX25lb25fdnN0NHFfdihfX3AwLCAoaW50OHgxNl90KV9fczEudmFsWzBdLCAoaW50OHgxNl90KV9fczEudmFsWzFdLCAoaW50OHgxNl90KV9fczEudmFsWzJdLCAoaW50OHgxNl90KV9fczEudmFsWzNdLCA0OCk7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c3Q0cV91OChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDh4MTZ4NF90IF9fczEgPSBfX3AxOyBcCi0gIHVpbnQ4eDE2eDRfdCBfX3JldjE7IFwKLSAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzNdLCBfX3MxLnZhbFszXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19idWlsdGluX25lb25fdnN0NHFfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgKGludDh4MTZfdClfX3JldjEudmFsWzJdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbM10sIDQ4KTsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnN0NHFfdTMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MzJ4NHg0X3QgX19zMSA9IF9fcDE7IFwKLSAgX19idWlsdGluX25lb25fdnN0NHFfdihfX3AwLCAoaW50OHgxNl90KV9fczEudmFsWzBdLCAoaW50OHgxNl90KV9fczEudmFsWzFdLCAoaW50OHgxNl90KV9fczEudmFsWzJdLCAoaW50OHgxNl90KV9fczEudmFsWzNdLCA1MCk7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c3Q0cV91MzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQzMng0eDRfdCBfX3MxID0gX19wMTsgXAotICB1aW50MzJ4NHg0X3QgX19yZXYxOyBcCi0gIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFszXSwgX19zMS52YWxbM10sIDMsIDIsIDEsIDApOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDRxX3YoX19wMCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsyXSwgKGludDh4MTZfdClfX3JldjEudmFsWzNdLCA1MCk7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzdDRxX3UxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDE2eDh4NF90IF9fczEgPSBfX3AxOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDRxX3YoX19wMCwgKGludDh4MTZfdClfX3MxLnZhbFswXSwgKGludDh4MTZfdClfX3MxLnZhbFsxXSwgKGludDh4MTZfdClfX3MxLnZhbFsyXSwgKGludDh4MTZfdClfX3MxLnZhbFszXSwgNDkpOyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnN0NHFfdTE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MTZ4OHg0X3QgX19zMSA9IF9fcDE7IFwKLSAgdWludDE2eDh4NF90IF9fcmV2MTsgXAotICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbM10sIF9fczEudmFsWzNdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3Q0cV92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMl0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFszXSwgNDkpOyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c3Q0cV9zOChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50OHgxNng0X3QgX19zMSA9IF9fcDE7IFwKLSAgX19idWlsdGluX25lb25fdnN0NHFfdihfX3AwLCAoaW50OHgxNl90KV9fczEudmFsWzBdLCAoaW50OHgxNl90KV9fczEudmFsWzFdLCAoaW50OHgxNl90KV9fczEudmFsWzJdLCAoaW50OHgxNl90KV9fczEudmFsWzNdLCAzMik7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c3Q0cV9zOChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50OHgxNng0X3QgX19zMSA9IF9fcDE7IFwKLSAgaW50OHgxNng0X3QgX19yZXYxOyBcCi0gIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFszXSwgX19zMS52YWxbM10sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDRxX3YoX19wMCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsyXSwgKGludDh4MTZfdClfX3JldjEudmFsWzNdLCAzMik7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzdDRxX2YzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQzMng0eDRfdCBfX3MxID0gX19wMTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3Q0cV92KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIF9fczEudmFsWzNdLCA0MSk7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c3Q0cV9mMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0MzJ4NHg0X3QgX19zMSA9IF9fcDE7IFwKLSAgZmxvYXQzMng0eDRfdCBfX3JldjE7IFwKLSAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzNdLCBfX3MxLnZhbFszXSwgMywgMiwgMSwgMCk7IFwKLSAgX19idWlsdGluX25lb25fdnN0NHFfdihfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCBfX3JldjEudmFsWzJdLCBfX3JldjEudmFsWzNdLCA0MSk7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzdDRxX2YxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQxNng4eDRfdCBfX3MxID0gX19wMTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3Q0cV92KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIF9fczEudmFsWzNdLCA0MCk7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c3Q0cV9mMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0MTZ4OHg0X3QgX19zMSA9IF9fcDE7IFwKLSAgZmxvYXQxNng4eDRfdCBfX3JldjE7IFwKLSAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzNdLCBfX3MxLnZhbFszXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19idWlsdGluX25lb25fdnN0NHFfdihfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCBfX3JldjEudmFsWzJdLCBfX3JldjEudmFsWzNdLCA0MCk7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzdDRxX3MzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MzJ4NHg0X3QgX19zMSA9IF9fcDE7IFwKLSAgX19idWlsdGluX25lb25fdnN0NHFfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCBfX3MxLnZhbFszXSwgMzQpOyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnN0NHFfczMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQzMng0eDRfdCBfX3MxID0gX19wMTsgXAotICBpbnQzMng0eDRfdCBfX3JldjE7IFwKLSAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzNdLCBfX3MxLnZhbFszXSwgMywgMiwgMSwgMCk7IFwKLSAgX19idWlsdGluX25lb25fdnN0NHFfdihfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCBfX3JldjEudmFsWzJdLCBfX3JldjEudmFsWzNdLCAzNCk7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzdDRxX3MxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MTZ4OHg0X3QgX19zMSA9IF9fcDE7IFwKLSAgX19idWlsdGluX25lb25fdnN0NHFfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCBfX3MxLnZhbFszXSwgMzMpOyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnN0NHFfczE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQxNng4eDRfdCBfX3MxID0gX19wMTsgXAotICBpbnQxNng4eDRfdCBfX3JldjE7IFwKLSAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzNdLCBfX3MxLnZhbFszXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19idWlsdGluX25lb25fdnN0NHFfdihfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCBfX3JldjEudmFsWzJdLCBfX3JldjEudmFsWzNdLCAzMyk7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzdDRfdTgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ4eDh4NF90IF9fczEgPSBfX3AxOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDRfdihfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgKGludDh4OF90KV9fczEudmFsWzJdLCAoaW50OHg4X3QpX19zMS52YWxbM10sIDE2KTsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzdDRfdTgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ4eDh4NF90IF9fczEgPSBfX3AxOyBcCi0gIHVpbnQ4eDh4NF90IF9fcmV2MTsgXAotICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbM10sIF9fczEudmFsWzNdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3Q0X3YoX19wMCwgKGludDh4OF90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDhfdClfX3JldjEudmFsWzFdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsyXSwgKGludDh4OF90KV9fcmV2MS52YWxbM10sIDE2KTsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnN0NF91MzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQzMngyeDRfdCBfX3MxID0gX19wMTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3Q0X3YoX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIChpbnQ4eDhfdClfX3MxLnZhbFsyXSwgKGludDh4OF90KV9fczEudmFsWzNdLCAxOCk7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c3Q0X3UzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDMyeDJ4NF90IF9fczEgPSBfX3AxOyBcCi0gIHVpbnQzMngyeDRfdCBfX3JldjE7IFwKLSAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzNdLCBfX3MxLnZhbFszXSwgMSwgMCk7IFwKLSAgX19idWlsdGluX25lb25fdnN0NF92KF9fcDAsIChpbnQ4eDhfdClfX3JldjEudmFsWzBdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsxXSwgKGludDh4OF90KV9fcmV2MS52YWxbMl0sIChpbnQ4eDhfdClfX3JldjEudmFsWzNdLCAxOCk7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzdDRfdTY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50NjR4MXg0X3QgX19zMSA9IF9fcDE7IFwKLSAgX19idWlsdGluX25lb25fdnN0NF92KF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCAoaW50OHg4X3QpX19zMS52YWxbMl0sIChpbnQ4eDhfdClfX3MxLnZhbFszXSwgMTkpOyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnN0NF91NjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ2NHgxeDRfdCBfX3MxID0gX19wMTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3Q0X3YoX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIChpbnQ4eDhfdClfX3MxLnZhbFsyXSwgKGludDh4OF90KV9fczEudmFsWzNdLCAxOSk7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzdDRfdTE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MTZ4NHg0X3QgX19zMSA9IF9fcDE7IFwKLSAgX19idWlsdGluX25lb25fdnN0NF92KF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCAoaW50OHg4X3QpX19zMS52YWxbMl0sIChpbnQ4eDhfdClfX3MxLnZhbFszXSwgMTcpOyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnN0NF91MTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQxNng0eDRfdCBfX3MxID0gX19wMTsgXAotICB1aW50MTZ4NHg0X3QgX19yZXYxOyBcCi0gIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFszXSwgX19zMS52YWxbM10sIDMsIDIsIDEsIDApOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDRfdihfX3AwLCAoaW50OHg4X3QpX19yZXYxLnZhbFswXSwgKGludDh4OF90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDhfdClfX3JldjEudmFsWzJdLCAoaW50OHg4X3QpX19yZXYxLnZhbFszXSwgMTcpOyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c3Q0X3M4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ4eDh4NF90IF9fczEgPSBfX3AxOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDRfdihfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgKGludDh4OF90KV9fczEudmFsWzJdLCAoaW50OHg4X3QpX19zMS52YWxbM10sIDApOyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnN0NF9zOChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50OHg4eDRfdCBfX3MxID0gX19wMTsgXAotICBpbnQ4eDh4NF90IF9fcmV2MTsgXAotICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbM10sIF9fczEudmFsWzNdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3Q0X3YoX19wMCwgKGludDh4OF90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDhfdClfX3JldjEudmFsWzFdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsyXSwgKGludDh4OF90KV9fcmV2MS52YWxbM10sIDApOyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c3Q0X2YzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQzMngyeDRfdCBfX3MxID0gX19wMTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3Q0X3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgX19zMS52YWxbM10sIDkpOyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnN0NF9mMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0MzJ4Mng0X3QgX19zMSA9IF9fcDE7IFwKLSAgZmxvYXQzMngyeDRfdCBfX3JldjE7IFwKLSAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzNdLCBfX3MxLnZhbFszXSwgMSwgMCk7IFwKLSAgX19idWlsdGluX25lb25fdnN0NF92KF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcmV2MS52YWxbMl0sIF9fcmV2MS52YWxbM10sIDkpOyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c3Q0X2YxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQxNng0eDRfdCBfX3MxID0gX19wMTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3Q0X3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgX19zMS52YWxbM10sIDgpOyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnN0NF9mMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0MTZ4NHg0X3QgX19zMSA9IF9fcDE7IFwKLSAgZmxvYXQxNng0eDRfdCBfX3JldjE7IFwKLSAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzNdLCBfX3MxLnZhbFszXSwgMywgMiwgMSwgMCk7IFwKLSAgX19idWlsdGluX25lb25fdnN0NF92KF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcmV2MS52YWxbMl0sIF9fcmV2MS52YWxbM10sIDgpOyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c3Q0X3MzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MzJ4Mng0X3QgX19zMSA9IF9fcDE7IFwKLSAgX19idWlsdGluX25lb25fdnN0NF92KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIF9fczEudmFsWzNdLCAyKTsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzdDRfczMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQzMngyeDRfdCBfX3MxID0gX19wMTsgXAotICBpbnQzMngyeDRfdCBfX3JldjE7IFwKLSAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzNdLCBfX3MxLnZhbFszXSwgMSwgMCk7IFwKLSAgX19idWlsdGluX25lb25fdnN0NF92KF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcmV2MS52YWxbMl0sIF9fcmV2MS52YWxbM10sIDIpOyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c3Q0X3M2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50NjR4MXg0X3QgX19zMSA9IF9fcDE7IFwKLSAgX19idWlsdGluX25lb25fdnN0NF92KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIF9fczEudmFsWzNdLCAzKTsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzdDRfczY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ2NHgxeDRfdCBfX3MxID0gX19wMTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3Q0X3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgX19zMS52YWxbM10sIDMpOyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c3Q0X3MxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MTZ4NHg0X3QgX19zMSA9IF9fcDE7IFwKLSAgX19idWlsdGluX25lb25fdnN0NF92KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIF9fczEudmFsWzNdLCAxKTsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzdDRfczE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQxNng0eDRfdCBfX3MxID0gX19wMTsgXAotICBpbnQxNng0eDRfdCBfX3JldjE7IFwKLSAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzNdLCBfX3MxLnZhbFszXSwgMywgMiwgMSwgMCk7IFwKLSAgX19idWlsdGluX25lb25fdnN0NF92KF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcmV2MS52YWxbMl0sIF9fcmV2MS52YWxbM10sIDEpOyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c3Q0X2xhbmVfcDgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHk4eDh4NF90IF9fczEgPSBfX3AxOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDRfbGFuZV92KF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCAoaW50OHg4X3QpX19zMS52YWxbMl0sIChpbnQ4eDhfdClfX3MxLnZhbFszXSwgX19wMiwgNCk7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c3Q0X2xhbmVfcDgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHk4eDh4NF90IF9fczEgPSBfX3AxOyBcCi0gIHBvbHk4eDh4NF90IF9fcmV2MTsgXAotICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbM10sIF9fczEudmFsWzNdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3Q0X2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19yZXYxLnZhbFswXSwgKGludDh4OF90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDhfdClfX3JldjEudmFsWzJdLCAoaW50OHg4X3QpX19yZXYxLnZhbFszXSwgX19wMiwgNCk7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzdDRfbGFuZV9wMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHkxNng0eDRfdCBfX3MxID0gX19wMTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3Q0X2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgKGludDh4OF90KV9fczEudmFsWzJdLCAoaW50OHg4X3QpX19zMS52YWxbM10sIF9fcDIsIDUpOyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnN0NF9sYW5lX3AxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTE2eDR4NF90IF9fczEgPSBfX3AxOyBcCi0gIHBvbHkxNng0eDRfdCBfX3JldjE7IFwKLSAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzNdLCBfX3MxLnZhbFszXSwgMywgMiwgMSwgMCk7IFwKLSAgX19idWlsdGluX25lb25fdnN0NF9sYW5lX3YoX19wMCwgKGludDh4OF90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDhfdClfX3JldjEudmFsWzFdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsyXSwgKGludDh4OF90KV9fcmV2MS52YWxbM10sIF9fcDIsIDUpOyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c3Q0cV9sYW5lX3AxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTE2eDh4NF90IF9fczEgPSBfX3AxOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDRxX2xhbmVfdihfX3AwLCAoaW50OHgxNl90KV9fczEudmFsWzBdLCAoaW50OHgxNl90KV9fczEudmFsWzFdLCAoaW50OHgxNl90KV9fczEudmFsWzJdLCAoaW50OHgxNl90KV9fczEudmFsWzNdLCBfX3AyLCAzNyk7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c3Q0cV9sYW5lX3AxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTE2eDh4NF90IF9fczEgPSBfX3AxOyBcCi0gIHBvbHkxNng4eDRfdCBfX3JldjE7IFwKLSAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzNdLCBfX3MxLnZhbFszXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19idWlsdGluX25lb25fdnN0NHFfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMl0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFszXSwgX19wMiwgMzcpOyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c3Q0cV9sYW5lX3UzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDMyeDR4NF90IF9fczEgPSBfX3AxOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDRxX2xhbmVfdihfX3AwLCAoaW50OHgxNl90KV9fczEudmFsWzBdLCAoaW50OHgxNl90KV9fczEudmFsWzFdLCAoaW50OHgxNl90KV9fczEudmFsWzJdLCAoaW50OHgxNl90KV9fczEudmFsWzNdLCBfX3AyLCA1MCk7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c3Q0cV9sYW5lX3UzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDMyeDR4NF90IF9fczEgPSBfX3AxOyBcCi0gIHVpbnQzMng0eDRfdCBfX3JldjE7IFwKLSAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzNdLCBfX3MxLnZhbFszXSwgMywgMiwgMSwgMCk7IFwKLSAgX19idWlsdGluX25lb25fdnN0NHFfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMl0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFszXSwgX19wMiwgNTApOyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c3Q0cV9sYW5lX3UxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDE2eDh4NF90IF9fczEgPSBfX3AxOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDRxX2xhbmVfdihfX3AwLCAoaW50OHgxNl90KV9fczEudmFsWzBdLCAoaW50OHgxNl90KV9fczEudmFsWzFdLCAoaW50OHgxNl90KV9fczEudmFsWzJdLCAoaW50OHgxNl90KV9fczEudmFsWzNdLCBfX3AyLCA0OSk7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c3Q0cV9sYW5lX3UxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDE2eDh4NF90IF9fczEgPSBfX3AxOyBcCi0gIHVpbnQxNng4eDRfdCBfX3JldjE7IFwKLSAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzNdLCBfX3MxLnZhbFszXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19idWlsdGluX25lb25fdnN0NHFfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMl0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFszXSwgX19wMiwgNDkpOyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c3Q0cV9sYW5lX2YzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQzMng0eDRfdCBfX3MxID0gX19wMTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3Q0cV9sYW5lX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgX19zMS52YWxbM10sIF9fcDIsIDQxKTsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzdDRxX2xhbmVfZjMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDMyeDR4NF90IF9fczEgPSBfX3AxOyBcCi0gIGZsb2F0MzJ4NHg0X3QgX19yZXYxOyBcCi0gIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFszXSwgX19zMS52YWxbM10sIDMsIDIsIDEsIDApOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDRxX2xhbmVfdihfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCBfX3JldjEudmFsWzJdLCBfX3JldjEudmFsWzNdLCBfX3AyLCA0MSk7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzdDRxX2xhbmVfZjE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDE2eDh4NF90IF9fczEgPSBfX3AxOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDRxX2xhbmVfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCBfX3MxLnZhbFszXSwgX19wMiwgNDApOyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnN0NHFfbGFuZV9mMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0MTZ4OHg0X3QgX19zMSA9IF9fcDE7IFwKLSAgZmxvYXQxNng4eDRfdCBfX3JldjE7IFwKLSAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzNdLCBfX3MxLnZhbFszXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19idWlsdGluX25lb25fdnN0NHFfbGFuZV92KF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcmV2MS52YWxbMl0sIF9fcmV2MS52YWxbM10sIF9fcDIsIDQwKTsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnN0NHFfbGFuZV9zMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDMyeDR4NF90IF9fczEgPSBfX3AxOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDRxX2xhbmVfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCBfX3MxLnZhbFszXSwgX19wMiwgMzQpOyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnN0NHFfbGFuZV9zMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDMyeDR4NF90IF9fczEgPSBfX3AxOyBcCi0gIGludDMyeDR4NF90IF9fcmV2MTsgXAotICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbM10sIF9fczEudmFsWzNdLCAzLCAyLCAxLCAwKTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3Q0cV9sYW5lX3YoX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgX19yZXYxLnZhbFsyXSwgX19yZXYxLnZhbFszXSwgX19wMiwgMzQpOyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c3Q0cV9sYW5lX3MxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MTZ4OHg0X3QgX19zMSA9IF9fcDE7IFwKLSAgX19idWlsdGluX25lb25fdnN0NHFfbGFuZV92KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIF9fczEudmFsWzNdLCBfX3AyLCAzMyk7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c3Q0cV9sYW5lX3MxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MTZ4OHg0X3QgX19zMSA9IF9fcDE7IFwKLSAgaW50MTZ4OHg0X3QgX19yZXYxOyBcCi0gIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFszXSwgX19zMS52YWxbM10sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDRxX2xhbmVfdihfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCBfX3JldjEudmFsWzJdLCBfX3JldjEudmFsWzNdLCBfX3AyLCAzMyk7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzdDRfbGFuZV91OChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDh4OHg0X3QgX19zMSA9IF9fcDE7IFwKLSAgX19idWlsdGluX25lb25fdnN0NF9sYW5lX3YoX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIChpbnQ4eDhfdClfX3MxLnZhbFsyXSwgKGludDh4OF90KV9fczEudmFsWzNdLCBfX3AyLCAxNik7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c3Q0X2xhbmVfdTgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ4eDh4NF90IF9fczEgPSBfX3AxOyBcCi0gIHVpbnQ4eDh4NF90IF9fcmV2MTsgXAotICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbM10sIF9fczEudmFsWzNdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3Q0X2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19yZXYxLnZhbFswXSwgKGludDh4OF90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDhfdClfX3JldjEudmFsWzJdLCAoaW50OHg4X3QpX19yZXYxLnZhbFszXSwgX19wMiwgMTYpOyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c3Q0X2xhbmVfdTMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MzJ4Mng0X3QgX19zMSA9IF9fcDE7IFwKLSAgX19idWlsdGluX25lb25fdnN0NF9sYW5lX3YoX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIChpbnQ4eDhfdClfX3MxLnZhbFsyXSwgKGludDh4OF90KV9fczEudmFsWzNdLCBfX3AyLCAxOCk7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c3Q0X2xhbmVfdTMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MzJ4Mng0X3QgX19zMSA9IF9fcDE7IFwKLSAgdWludDMyeDJ4NF90IF9fcmV2MTsgXAotICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbM10sIF9fczEudmFsWzNdLCAxLCAwKTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3Q0X2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19yZXYxLnZhbFswXSwgKGludDh4OF90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDhfdClfX3JldjEudmFsWzJdLCAoaW50OHg4X3QpX19yZXYxLnZhbFszXSwgX19wMiwgMTgpOyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c3Q0X2xhbmVfdTE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MTZ4NHg0X3QgX19zMSA9IF9fcDE7IFwKLSAgX19idWlsdGluX25lb25fdnN0NF9sYW5lX3YoX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIChpbnQ4eDhfdClfX3MxLnZhbFsyXSwgKGludDh4OF90KV9fczEudmFsWzNdLCBfX3AyLCAxNyk7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c3Q0X2xhbmVfdTE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MTZ4NHg0X3QgX19zMSA9IF9fcDE7IFwKLSAgdWludDE2eDR4NF90IF9fcmV2MTsgXAotICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbM10sIF9fczEudmFsWzNdLCAzLCAyLCAxLCAwKTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3Q0X2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19yZXYxLnZhbFswXSwgKGludDh4OF90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDhfdClfX3JldjEudmFsWzJdLCAoaW50OHg4X3QpX19yZXYxLnZhbFszXSwgX19wMiwgMTcpOyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c3Q0X2xhbmVfczgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDh4OHg0X3QgX19zMSA9IF9fcDE7IFwKLSAgX19idWlsdGluX25lb25fdnN0NF9sYW5lX3YoX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIChpbnQ4eDhfdClfX3MxLnZhbFsyXSwgKGludDh4OF90KV9fczEudmFsWzNdLCBfX3AyLCAwKTsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzdDRfbGFuZV9zOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50OHg4eDRfdCBfX3MxID0gX19wMTsgXAotICBpbnQ4eDh4NF90IF9fcmV2MTsgXAotICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbM10sIF9fczEudmFsWzNdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3Q0X2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19yZXYxLnZhbFswXSwgKGludDh4OF90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDhfdClfX3JldjEudmFsWzJdLCAoaW50OHg4X3QpX19yZXYxLnZhbFszXSwgX19wMiwgMCk7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzdDRfbGFuZV9mMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0MzJ4Mng0X3QgX19zMSA9IF9fcDE7IFwKLSAgX19idWlsdGluX25lb25fdnN0NF9sYW5lX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgX19zMS52YWxbM10sIF9fcDIsIDkpOyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnN0NF9sYW5lX2YzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQzMngyeDRfdCBfX3MxID0gX19wMTsgXAotICBmbG9hdDMyeDJ4NF90IF9fcmV2MTsgXAotICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbM10sIF9fczEudmFsWzNdLCAxLCAwKTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3Q0X2xhbmVfdihfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCBfX3JldjEudmFsWzJdLCBfX3JldjEudmFsWzNdLCBfX3AyLCA5KTsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnN0NF9sYW5lX2YxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQxNng0eDRfdCBfX3MxID0gX19wMTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3Q0X2xhbmVfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCBfX3MxLnZhbFszXSwgX19wMiwgOCk7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c3Q0X2xhbmVfZjE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDE2eDR4NF90IF9fczEgPSBfX3AxOyBcCi0gIGZsb2F0MTZ4NHg0X3QgX19yZXYxOyBcCi0gIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFszXSwgX19zMS52YWxbM10sIDMsIDIsIDEsIDApOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDRfbGFuZV92KF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcmV2MS52YWxbMl0sIF9fcmV2MS52YWxbM10sIF9fcDIsIDgpOyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c3Q0X2xhbmVfczMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQzMngyeDRfdCBfX3MxID0gX19wMTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3Q0X2xhbmVfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCBfX3MxLnZhbFszXSwgX19wMiwgMik7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c3Q0X2xhbmVfczMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQzMngyeDRfdCBfX3MxID0gX19wMTsgXAotICBpbnQzMngyeDRfdCBfX3JldjE7IFwKLSAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzNdLCBfX3MxLnZhbFszXSwgMSwgMCk7IFwKLSAgX19idWlsdGluX25lb25fdnN0NF9sYW5lX3YoX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgX19yZXYxLnZhbFsyXSwgX19yZXYxLnZhbFszXSwgX19wMiwgMik7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzdDRfbGFuZV9zMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDE2eDR4NF90IF9fczEgPSBfX3AxOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDRfbGFuZV92KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIF9fczEudmFsWzNdLCBfX3AyLCAxKTsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzdDRfbGFuZV9zMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDE2eDR4NF90IF9fczEgPSBfX3AxOyBcCi0gIGludDE2eDR4NF90IF9fcmV2MTsgXAotICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbM10sIF9fczEudmFsWzNdLCAzLCAyLCAxLCAwKTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3Q0X2xhbmVfdihfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCBfX3JldjEudmFsWzJdLCBfX3JldjEudmFsWzNdLCBfX3AyLCAxKTsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDh4MTZfdCB2c3VicV91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgewotICB1aW50OHgxNl90IF9fcmV0OwotICBfX3JldCA9IF9fcDAgLSBfX3AxOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50OHgxNl90IHZzdWJxX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7Ci0gIHVpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQ4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19yZXYwIC0gX19yZXYxOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDMyeDRfdCB2c3VicV91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEpIHsKLSAgdWludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSBfX3AwIC0gX19wMTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDMyeDRfdCB2c3VicV91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEpIHsKLSAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgdWludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKLSAgdWludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSBfX3JldjAgLSBfX3JldjE7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50NjR4Ml90IHZzdWJxX3U2NCh1aW50NjR4Ml90IF9fcDAsIHVpbnQ2NHgyX3QgX19wMSkgewotICB1aW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IF9fcDAgLSBfX3AxOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50NjR4Ml90IHZzdWJxX3U2NCh1aW50NjR4Ml90IF9fcDAsIHVpbnQ2NHgyX3QgX19wMSkgewotICB1aW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICB1aW50NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOwotICB1aW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IF9fcmV2MCAtIF9fcmV2MTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQxNng4X3QgdnN1YnFfdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxKSB7Ci0gIHVpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19wMCAtIF9fcDE7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQxNng4X3QgdnN1YnFfdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxKSB7Ci0gIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19yZXYwIC0gX19yZXYxOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50OHgxNl90IHZzdWJxX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgewotICBpbnQ4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19wMCAtIF9fcDE7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDh4MTZfdCB2c3VicV9zOChpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEpIHsKLSAgaW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSBfX3JldjAgLSBfX3JldjE7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBmbG9hdDMyeDRfdCB2c3VicV9mMzIoZmxvYXQzMng0X3QgX19wMCwgZmxvYXQzMng0X3QgX19wMSkgewotICBmbG9hdDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSBfX3AwIC0gX19wMTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgZmxvYXQzMng0X3QgdnN1YnFfZjMyKGZsb2F0MzJ4NF90IF9fcDAsIGZsb2F0MzJ4NF90IF9fcDEpIHsKLSAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIGZsb2F0MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOwotICBmbG9hdDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSBfX3JldjAgLSBfX3JldjE7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQzMng0X3QgdnN1YnFfczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgewotICBpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19wMCAtIF9fcDE7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDMyeDRfdCB2c3VicV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7Ci0gIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOwotICBpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19yZXYwIC0gX19yZXYxOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50NjR4Ml90IHZzdWJxX3M2NChpbnQ2NHgyX3QgX19wMCwgaW50NjR4Ml90IF9fcDEpIHsKLSAgaW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IF9fcDAgLSBfX3AxOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQ2NHgyX3QgdnN1YnFfczY0KGludDY0eDJfdCBfX3AwLCBpbnQ2NHgyX3QgX19wMSkgewotICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIGludDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKLSAgaW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IF9fcmV2MCAtIF9fcmV2MTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDE2eDhfdCB2c3VicV9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7Ci0gIGludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSBfX3AwIC0gX19wMTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MTZ4OF90IHZzdWJxX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKLSAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSBfX3JldjAgLSBfX3JldjE7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50OHg4X3QgdnN1Yl91OCh1aW50OHg4X3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKLSAgdWludDh4OF90IF9fcmV0OwotICBfX3JldCA9IF9fcDAgLSBfX3AxOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50OHg4X3QgdnN1Yl91OCh1aW50OHg4X3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKLSAgdWludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSBfX3JldjAgLSBfX3JldjE7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MzJ4Ml90IHZzdWJfdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxKSB7Ci0gIHVpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19wMCAtIF9fcDE7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQzMngyX3QgdnN1Yl91MzIodWludDMyeDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEpIHsKLSAgdWludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgdWludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKLSAgdWludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSBfX3JldjAgLSBfX3JldjE7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50NjR4MV90IHZzdWJfdTY0KHVpbnQ2NHgxX3QgX19wMCwgdWludDY0eDFfdCBfX3AxKSB7Ci0gIHVpbnQ2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19wMCAtIF9fcDE7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ2NHgxX3QgdnN1Yl91NjQodWludDY0eDFfdCBfX3AwLCB1aW50NjR4MV90IF9fcDEpIHsKLSAgdWludDY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSBfX3AwIC0gX19wMTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MTZ4NF90IHZzdWJfdTE2KHVpbnQxNng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxKSB7Ci0gIHVpbnQxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19wMCAtIF9fcDE7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQxNng0X3QgdnN1Yl91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEpIHsKLSAgdWludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgdWludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKLSAgdWludDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSBfX3JldjAgLSBfX3JldjE7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ4eDhfdCB2c3ViX3M4KGludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKLSAgaW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19wMCAtIF9fcDE7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDh4OF90IHZzdWJfczgoaW50OHg4X3QgX19wMCwgaW50OHg4X3QgX19wMSkgewotICBpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDh4OF90IF9fcmV0OwotICBfX3JldCA9IF9fcmV2MCAtIF9fcmV2MTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGZsb2F0MzJ4Ml90IHZzdWJfZjMyKGZsb2F0MzJ4Ml90IF9fcDAsIGZsb2F0MzJ4Ml90IF9fcDEpIHsKLSAgZmxvYXQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19wMCAtIF9fcDE7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGZsb2F0MzJ4Ml90IHZzdWJfZjMyKGZsb2F0MzJ4Ml90IF9fcDAsIGZsb2F0MzJ4Ml90IF9fcDEpIHsKLSAgZmxvYXQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIGZsb2F0MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOwotICBmbG9hdDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSBfX3JldjAgLSBfX3JldjE7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQzMngyX3QgdnN1Yl9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7Ci0gIGludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSBfX3AwIC0gX19wMTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MzJ4Ml90IHZzdWJfczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgewotICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIGludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKLSAgaW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IF9fcmV2MCAtIF9fcmV2MTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDY0eDFfdCB2c3ViX3M2NChpbnQ2NHgxX3QgX19wMCwgaW50NjR4MV90IF9fcDEpIHsKLSAgaW50NjR4MV90IF9fcmV0OwotICBfX3JldCA9IF9fcDAgLSBfX3AxOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQ2NHgxX3QgdnN1Yl9zNjQoaW50NjR4MV90IF9fcDAsIGludDY0eDFfdCBfX3AxKSB7Ci0gIGludDY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSBfX3AwIC0gX19wMTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQxNng0X3QgdnN1Yl9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7Ci0gIGludDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSBfX3AwIC0gX19wMTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MTZ4NF90IHZzdWJfczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgewotICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKLSAgaW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9IF9fcmV2MCAtIF9fcmV2MTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQxNng0X3QgdnN1YmhuX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgewotICB1aW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92c3ViaG5fdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMTcpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MTZ4NF90IHZzdWJobl91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEpIHsKLSAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgdWludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKLSAgdWludDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdnN1YmhuX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAxNyk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotX19haSB1aW50MTZ4NF90IF9fbm9zd2FwX3ZzdWJobl91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEpIHsKLSAgdWludDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdnN1YmhuX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDE3KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MzJ4Ml90IHZzdWJobl91NjQodWludDY0eDJfdCBfX3AwLCB1aW50NjR4Ml90IF9fcDEpIHsKLSAgdWludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdnN1YmhuX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDE4KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDMyeDJfdCB2c3ViaG5fdTY0KHVpbnQ2NHgyX3QgX19wMCwgdWludDY0eDJfdCBfX3AxKSB7Ci0gIHVpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIHVpbnQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7Ci0gIHVpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZzdWJobl92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMTgpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLV9fYWkgdWludDMyeDJfdCBfX25vc3dhcF92c3ViaG5fdTY0KHVpbnQ2NHgyX3QgX19wMCwgdWludDY0eDJfdCBfX3AxKSB7Ci0gIHVpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZzdWJobl92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAxOCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDh4OF90IHZzdWJobl91MTYodWludDE2eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEpIHsKLSAgdWludDh4OF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZzdWJobl92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAxNik7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ4eDhfdCB2c3ViaG5fdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxKSB7Ci0gIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92c3ViaG5fdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDE2KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci1fX2FpIHVpbnQ4eDhfdCBfX25vc3dhcF92c3ViaG5fdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxKSB7Ci0gIHVpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92c3ViaG5fdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMTYpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDE2eDRfdCB2c3ViaG5fczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgewotICBpbnQxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdnN1YmhuX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQxNng0X3QgdnN1YmhuX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKLSAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7Ci0gIGludDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92c3ViaG5fdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDEpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLV9fYWkgaW50MTZ4NF90IF9fbm9zd2FwX3ZzdWJobl9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7Ci0gIGludDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92c3ViaG5fdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MzJ4Ml90IHZzdWJobl9zNjQoaW50NjR4Ml90IF9fcDAsIGludDY0eDJfdCBfX3AxKSB7Ci0gIGludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92c3ViaG5fdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMik7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDMyeDJfdCB2c3ViaG5fczY0KGludDY0eDJfdCBfX3AwLCBpbnQ2NHgyX3QgX19wMSkgewotICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIGludDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKLSAgaW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZzdWJobl92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMik7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotX19haSBpbnQzMngyX3QgX19ub3N3YXBfdnN1YmhuX3M2NChpbnQ2NHgyX3QgX19wMCwgaW50NjR4Ml90IF9fcDEpIHsKLSAgaW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZzdWJobl92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAyKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ4eDhfdCB2c3ViaG5fczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgewotICBpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZzdWJobl92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50OHg4X3QgdnN1YmhuX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKLSAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDh4OF90IF9fcmV0OwotICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnN1YmhuX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAwKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci1fX2FpIGludDh4OF90IF9fbm9zd2FwX3ZzdWJobl9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7Ci0gIGludDh4OF90IF9fcmV0OwotICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnN1YmhuX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQxNng4X3QgdnN1YmxfdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7Ci0gIHVpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gdm1vdmxfdTgoX19wMCkgLSB2bW92bF91OChfX3AxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDE2eDhfdCB2c3VibF91OCh1aW50OHg4X3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKLSAgdWludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19ub3N3YXBfdm1vdmxfdTgoX19yZXYwKSAtIF9fbm9zd2FwX3Ztb3ZsX3U4KF9fcmV2MSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50NjR4Ml90IHZzdWJsX3UzMih1aW50MzJ4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSkgewotICB1aW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IHZtb3ZsX3UzMihfX3AwKSAtIHZtb3ZsX3UzMihfX3AxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDY0eDJfdCB2c3VibF91MzIodWludDMyeDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEpIHsKLSAgdWludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgdWludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKLSAgdWludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSBfX25vc3dhcF92bW92bF91MzIoX19yZXYwKSAtIF9fbm9zd2FwX3Ztb3ZsX3UzMihfX3JldjEpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDMyeDRfdCB2c3VibF91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEpIHsKLSAgdWludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSB2bW92bF91MTYoX19wMCkgLSB2bW92bF91MTYoX19wMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQzMng0X3QgdnN1YmxfdTE2KHVpbnQxNng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxKSB7Ci0gIHVpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7Ci0gIHVpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19ub3N3YXBfdm1vdmxfdTE2KF9fcmV2MCkgLSBfX25vc3dhcF92bW92bF91MTYoX19yZXYxKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDE2eDhfdCB2c3VibF9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7Ci0gIGludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSB2bW92bF9zOChfX3AwKSAtIHZtb3ZsX3M4KF9fcDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQxNng4X3QgdnN1YmxfczgoaW50OHg4X3QgX19wMCwgaW50OHg4X3QgX19wMSkgewotICBpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSBfX25vc3dhcF92bW92bF9zOChfX3JldjApIC0gX19ub3N3YXBfdm1vdmxfczgoX19yZXYxKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDY0eDJfdCB2c3VibF9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7Ci0gIGludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSB2bW92bF9zMzIoX19wMCkgLSB2bW92bF9zMzIoX19wMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDY0eDJfdCB2c3VibF9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7Ci0gIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOwotICBpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19ub3N3YXBfdm1vdmxfczMyKF9fcmV2MCkgLSBfX25vc3dhcF92bW92bF9zMzIoX19yZXYxKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDMyeDRfdCB2c3VibF9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7Ci0gIGludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSB2bW92bF9zMTYoX19wMCkgLSB2bW92bF9zMTYoX19wMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDMyeDRfdCB2c3VibF9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7Ci0gIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOwotICBpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19ub3N3YXBfdm1vdmxfczE2KF9fcmV2MCkgLSBfX25vc3dhcF92bW92bF9zMTYoX19yZXYxKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQxNng4X3QgdnN1YndfdTgodWludDE2eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgewotICB1aW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IF9fcDAgLSB2bW92bF91OChfX3AxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDE2eDhfdCB2c3Vid191OCh1aW50MTZ4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7Ci0gIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSBfX3JldjAgLSBfX25vc3dhcF92bW92bF91OChfX3JldjEpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDY0eDJfdCB2c3Vid191MzIodWludDY0eDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEpIHsKLSAgdWludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSBfX3AwIC0gdm1vdmxfdTMyKF9fcDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50NjR4Ml90IHZzdWJ3X3UzMih1aW50NjR4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSkgewotICB1aW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICB1aW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOwotICB1aW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IF9fcmV2MCAtIF9fbm9zd2FwX3Ztb3ZsX3UzMihfX3JldjEpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDMyeDRfdCB2c3Vid191MTYodWludDMyeDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEpIHsKLSAgdWludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSBfX3AwIC0gdm1vdmxfdTE2KF9fcDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MzJ4NF90IHZzdWJ3X3UxNih1aW50MzJ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSkgewotICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICB1aW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOwotICB1aW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IF9fcmV2MCAtIF9fbm9zd2FwX3Ztb3ZsX3UxNihfX3JldjEpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MTZ4OF90IHZzdWJ3X3M4KGludDE2eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7Ci0gIGludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSBfX3AwIC0gdm1vdmxfczgoX19wMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDE2eDhfdCB2c3Vid19zOChpbnQxNng4X3QgX19wMCwgaW50OHg4X3QgX19wMSkgewotICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19yZXYwIC0gX19ub3N3YXBfdm1vdmxfczgoX19yZXYxKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDY0eDJfdCB2c3Vid19zMzIoaW50NjR4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7Ci0gIGludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSBfX3AwIC0gdm1vdmxfczMyKF9fcDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQ2NHgyX3QgdnN1YndfczMyKGludDY0eDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgewotICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIGludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKLSAgaW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IF9fcmV2MCAtIF9fbm9zd2FwX3Ztb3ZsX3MzMihfX3JldjEpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MzJ4NF90IHZzdWJ3X3MxNihpbnQzMng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKLSAgaW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IF9fcDAgLSB2bW92bF9zMTYoX19wMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDMyeDRfdCB2c3Vid19zMTYoaW50MzJ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7Ci0gIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOwotICBpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19yZXYwIC0gX19ub3N3YXBfdm1vdmxfczE2KF9fcmV2MSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBwb2x5OHg4X3QgdnRibDFfcDgocG9seTh4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7Ci0gIHBvbHk4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAocG9seTh4OF90KSBfX2J1aWx0aW5fbmVvbl92dGJsMV92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgNCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHBvbHk4eDhfdCB2dGJsMV9wOChwb2x5OHg4X3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKLSAgcG9seTh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHBvbHk4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAocG9seTh4OF90KSBfX2J1aWx0aW5fbmVvbl92dGJsMV92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDQpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDh4OF90IHZ0YmwxX3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgewotICB1aW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnRibDFfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDE2KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDh4OF90IHZ0YmwxX3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgewotICB1aW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDh4OF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Z0YmwxX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMTYpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50OHg4X3QgdnRibDFfczgoaW50OHg4X3QgX19wMCwgaW50OHg4X3QgX19wMSkgewotICBpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Z0YmwxX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50OHg4X3QgdnRibDFfczgoaW50OHg4X3QgX19wMCwgaW50OHg4X3QgX19wMSkgewotICBpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDh4OF90IF9fcmV0OwotICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnRibDFfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAwKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHBvbHk4eDhfdCB2dGJsMl9wOChwb2x5OHg4eDJfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgewotICBwb2x5OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHBvbHk4eDhfdCkgX19idWlsdGluX25lb25fdnRibDJfdigoaW50OHg4X3QpX19wMC52YWxbMF0sIChpbnQ4eDhfdClfX3AwLnZhbFsxXSwgKGludDh4OF90KV9fcDEsIDQpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBwb2x5OHg4X3QgdnRibDJfcDgocG9seTh4OHgyX3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKLSAgcG9seTh4OHgyX3QgX19yZXYwOwotICBfX3JldjAudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMC52YWxbMF0sIF9fcDAudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgX19yZXYwLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAudmFsWzFdLCBfX3AwLnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcG9seTh4OF90IF9fcmV0OwotICBfX3JldCA9IChwb2x5OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Z0YmwyX3YoKGludDh4OF90KV9fcmV2MC52YWxbMF0sIChpbnQ4eDhfdClfX3JldjAudmFsWzFdLCAoaW50OHg4X3QpX19yZXYxLCA0KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ4eDhfdCB2dGJsMl91OCh1aW50OHg4eDJfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgewotICB1aW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnRibDJfdigoaW50OHg4X3QpX19wMC52YWxbMF0sIChpbnQ4eDhfdClfX3AwLnZhbFsxXSwgKGludDh4OF90KV9fcDEsIDE2KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDh4OF90IHZ0YmwyX3U4KHVpbnQ4eDh4Ml90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7Ci0gIHVpbnQ4eDh4Ml90IF9fcmV2MDsKLSAgX19yZXYwLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAudmFsWzBdLCBfX3AwLnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIF9fcmV2MC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLnZhbFsxXSwgX19wMC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92dGJsMl92KChpbnQ4eDhfdClfX3JldjAudmFsWzBdLCAoaW50OHg4X3QpX19yZXYwLnZhbFsxXSwgKGludDh4OF90KV9fcmV2MSwgMTYpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50OHg4X3QgdnRibDJfczgoaW50OHg4eDJfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7Ci0gIGludDh4OF90IF9fcmV0OwotICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnRibDJfdigoaW50OHg4X3QpX19wMC52YWxbMF0sIChpbnQ4eDhfdClfX3AwLnZhbFsxXSwgKGludDh4OF90KV9fcDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQ4eDhfdCB2dGJsMl9zOChpbnQ4eDh4Ml90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKLSAgaW50OHg4eDJfdCBfX3JldjA7Ci0gIF9fcmV2MC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLnZhbFswXSwgX19wMC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBfX3JldjAudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMC52YWxbMV0sIF9fcDAudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDh4OF90IF9fcmV0OwotICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnRibDJfdigoaW50OHg4X3QpX19yZXYwLnZhbFswXSwgKGludDh4OF90KV9fcmV2MC52YWxbMV0sIChpbnQ4eDhfdClfX3JldjEsIDApOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgcG9seTh4OF90IHZ0YmwzX3A4KHBvbHk4eDh4M190IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7Ci0gIHBvbHk4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAocG9seTh4OF90KSBfX2J1aWx0aW5fbmVvbl92dGJsM192KChpbnQ4eDhfdClfX3AwLnZhbFswXSwgKGludDh4OF90KV9fcDAudmFsWzFdLCAoaW50OHg4X3QpX19wMC52YWxbMl0sIChpbnQ4eDhfdClfX3AxLCA0KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgcG9seTh4OF90IHZ0YmwzX3A4KHBvbHk4eDh4M190IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7Ci0gIHBvbHk4eDh4M190IF9fcmV2MDsKLSAgX19yZXYwLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAudmFsWzBdLCBfX3AwLnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIF9fcmV2MC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLnZhbFsxXSwgX19wMC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBfX3JldjAudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMC52YWxbMl0sIF9fcDAudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBwb2x5OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHBvbHk4eDhfdCkgX19idWlsdGluX25lb25fdnRibDNfdigoaW50OHg4X3QpX19yZXYwLnZhbFswXSwgKGludDh4OF90KV9fcmV2MC52YWxbMV0sIChpbnQ4eDhfdClfX3JldjAudmFsWzJdLCAoaW50OHg4X3QpX19yZXYxLCA0KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ4eDhfdCB2dGJsM191OCh1aW50OHg4eDNfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgewotICB1aW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnRibDNfdigoaW50OHg4X3QpX19wMC52YWxbMF0sIChpbnQ4eDhfdClfX3AwLnZhbFsxXSwgKGludDh4OF90KV9fcDAudmFsWzJdLCAoaW50OHg4X3QpX19wMSwgMTYpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50OHg4X3QgdnRibDNfdTgodWludDh4OHgzX3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKLSAgdWludDh4OHgzX3QgX19yZXYwOwotICBfX3JldjAudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMC52YWxbMF0sIF9fcDAudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgX19yZXYwLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAudmFsWzFdLCBfX3AwLnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIF9fcmV2MC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLnZhbFsyXSwgX19wMC52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92dGJsM192KChpbnQ4eDhfdClfX3JldjAudmFsWzBdLCAoaW50OHg4X3QpX19yZXYwLnZhbFsxXSwgKGludDh4OF90KV9fcmV2MC52YWxbMl0sIChpbnQ4eDhfdClfX3JldjEsIDE2KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDh4OF90IHZ0YmwzX3M4KGludDh4OHgzX3QgX19wMCwgaW50OHg4X3QgX19wMSkgewotICBpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Z0YmwzX3YoKGludDh4OF90KV9fcDAudmFsWzBdLCAoaW50OHg4X3QpX19wMC52YWxbMV0sIChpbnQ4eDhfdClfX3AwLnZhbFsyXSwgKGludDh4OF90KV9fcDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQ4eDhfdCB2dGJsM19zOChpbnQ4eDh4M190IF9fcDAsIGludDh4OF90IF9fcDEpIHsKLSAgaW50OHg4eDNfdCBfX3JldjA7Ci0gIF9fcmV2MC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLnZhbFswXSwgX19wMC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBfX3JldjAudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMC52YWxbMV0sIF9fcDAudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgX19yZXYwLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAudmFsWzJdLCBfX3AwLnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Z0YmwzX3YoKGludDh4OF90KV9fcmV2MC52YWxbMF0sIChpbnQ4eDhfdClfX3JldjAudmFsWzFdLCAoaW50OHg4X3QpX19yZXYwLnZhbFsyXSwgKGludDh4OF90KV9fcmV2MSwgMCk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBwb2x5OHg4X3QgdnRibDRfcDgocG9seTh4OHg0X3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKLSAgcG9seTh4OF90IF9fcmV0OwotICBfX3JldCA9IChwb2x5OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Z0Ymw0X3YoKGludDh4OF90KV9fcDAudmFsWzBdLCAoaW50OHg4X3QpX19wMC52YWxbMV0sIChpbnQ4eDhfdClfX3AwLnZhbFsyXSwgKGludDh4OF90KV9fcDAudmFsWzNdLCAoaW50OHg4X3QpX19wMSwgNCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHBvbHk4eDhfdCB2dGJsNF9wOChwb2x5OHg4eDRfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgewotICBwb2x5OHg4eDRfdCBfX3JldjA7Ci0gIF9fcmV2MC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLnZhbFswXSwgX19wMC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBfX3JldjAudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMC52YWxbMV0sIF9fcDAudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgX19yZXYwLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAudmFsWzJdLCBfX3AwLnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIF9fcmV2MC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLnZhbFszXSwgX19wMC52YWxbM10sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHBvbHk4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAocG9seTh4OF90KSBfX2J1aWx0aW5fbmVvbl92dGJsNF92KChpbnQ4eDhfdClfX3JldjAudmFsWzBdLCAoaW50OHg4X3QpX19yZXYwLnZhbFsxXSwgKGludDh4OF90KV9fcmV2MC52YWxbMl0sIChpbnQ4eDhfdClfX3JldjAudmFsWzNdLCAoaW50OHg4X3QpX19yZXYxLCA0KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ4eDhfdCB2dGJsNF91OCh1aW50OHg4eDRfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgewotICB1aW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnRibDRfdigoaW50OHg4X3QpX19wMC52YWxbMF0sIChpbnQ4eDhfdClfX3AwLnZhbFsxXSwgKGludDh4OF90KV9fcDAudmFsWzJdLCAoaW50OHg4X3QpX19wMC52YWxbM10sIChpbnQ4eDhfdClfX3AxLCAxNik7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ4eDhfdCB2dGJsNF91OCh1aW50OHg4eDRfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgewotICB1aW50OHg4eDRfdCBfX3JldjA7Ci0gIF9fcmV2MC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLnZhbFswXSwgX19wMC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBfX3JldjAudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMC52YWxbMV0sIF9fcDAudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgX19yZXYwLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAudmFsWzJdLCBfX3AwLnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIF9fcmV2MC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLnZhbFszXSwgX19wMC52YWxbM10sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92dGJsNF92KChpbnQ4eDhfdClfX3JldjAudmFsWzBdLCAoaW50OHg4X3QpX19yZXYwLnZhbFsxXSwgKGludDh4OF90KV9fcmV2MC52YWxbMl0sIChpbnQ4eDhfdClfX3JldjAudmFsWzNdLCAoaW50OHg4X3QpX19yZXYxLCAxNik7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ4eDhfdCB2dGJsNF9zOChpbnQ4eDh4NF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKLSAgaW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92dGJsNF92KChpbnQ4eDhfdClfX3AwLnZhbFswXSwgKGludDh4OF90KV9fcDAudmFsWzFdLCAoaW50OHg4X3QpX19wMC52YWxbMl0sIChpbnQ4eDhfdClfX3AwLnZhbFszXSwgKGludDh4OF90KV9fcDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQ4eDhfdCB2dGJsNF9zOChpbnQ4eDh4NF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKLSAgaW50OHg4eDRfdCBfX3JldjA7Ci0gIF9fcmV2MC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLnZhbFswXSwgX19wMC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBfX3JldjAudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMC52YWxbMV0sIF9fcDAudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgX19yZXYwLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAudmFsWzJdLCBfX3AwLnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIF9fcmV2MC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLnZhbFszXSwgX19wMC52YWxbM10sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92dGJsNF92KChpbnQ4eDhfdClfX3JldjAudmFsWzBdLCAoaW50OHg4X3QpX19yZXYwLnZhbFsxXSwgKGludDh4OF90KV9fcmV2MC52YWxbMl0sIChpbnQ4eDhfdClfX3JldjAudmFsWzNdLCAoaW50OHg4X3QpX19yZXYxLCAwKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHBvbHk4eDhfdCB2dGJ4MV9wOChwb2x5OHg4X3QgX19wMCwgcG9seTh4OF90IF9fcDEsIHVpbnQ4eDhfdCBfX3AyKSB7Ci0gIHBvbHk4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAocG9seTh4OF90KSBfX2J1aWx0aW5fbmVvbl92dGJ4MV92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgKGludDh4OF90KV9fcDIsIDQpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBwb2x5OHg4X3QgdnRieDFfcDgocG9seTh4OF90IF9fcDAsIHBvbHk4eDhfdCBfX3AxLCB1aW50OHg4X3QgX19wMikgewotICBwb2x5OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHBvbHk4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDh4OF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBwb2x5OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHBvbHk4eDhfdCkgX19idWlsdGluX25lb25fdnRieDFfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAoaW50OHg4X3QpX19yZXYyLCA0KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ4eDhfdCB2dGJ4MV91OCh1aW50OHg4X3QgX19wMCwgdWludDh4OF90IF9fcDEsIHVpbnQ4eDhfdCBfX3AyKSB7Ci0gIHVpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92dGJ4MV92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgKGludDh4OF90KV9fcDIsIDE2KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDh4OF90IHZ0YngxX3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSwgdWludDh4OF90IF9fcDIpIHsKLSAgdWludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQ4eDhfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDh4OF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Z0YngxX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgKGludDh4OF90KV9fcmV2MiwgMTYpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50OHg4X3QgdnRieDFfczgoaW50OHg4X3QgX19wMCwgaW50OHg4X3QgX19wMSwgaW50OHg4X3QgX19wMikgewotICBpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Z0YngxX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAoaW50OHg4X3QpX19wMiwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDh4OF90IHZ0YngxX3M4KGludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEsIGludDh4OF90IF9fcDIpIHsKLSAgaW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQ4eDhfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92dGJ4MV92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIChpbnQ4eDhfdClfX3JldjIsIDApOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgcG9seTh4OF90IHZ0YngyX3A4KHBvbHk4eDhfdCBfX3AwLCBwb2x5OHg4eDJfdCBfX3AxLCB1aW50OHg4X3QgX19wMikgewotICBwb2x5OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHBvbHk4eDhfdCkgX19idWlsdGluX25lb25fdnRieDJfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEudmFsWzBdLCAoaW50OHg4X3QpX19wMS52YWxbMV0sIChpbnQ4eDhfdClfX3AyLCA0KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgcG9seTh4OF90IHZ0YngyX3A4KHBvbHk4eDhfdCBfX3AwLCBwb2x5OHg4eDJfdCBfX3AxLCB1aW50OHg4X3QgX19wMikgewotICBwb2x5OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHBvbHk4eDh4Ml90IF9fcmV2MTsKLSAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEudmFsWzBdLCBfX3AxLnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLnZhbFsxXSwgX19wMS52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50OHg4X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHBvbHk4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAocG9seTh4OF90KSBfX2J1aWx0aW5fbmVvbl92dGJ4Ml92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEudmFsWzBdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsxXSwgKGludDh4OF90KV9fcmV2MiwgNCk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50OHg4X3QgdnRieDJfdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDh4Ml90IF9fcDEsIHVpbnQ4eDhfdCBfX3AyKSB7Ci0gIHVpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92dGJ4Ml92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMS52YWxbMF0sIChpbnQ4eDhfdClfX3AxLnZhbFsxXSwgKGludDh4OF90KV9fcDIsIDE2KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDh4OF90IHZ0YngyX3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4eDJfdCBfX3AxLCB1aW50OHg4X3QgX19wMikgewotICB1aW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQ4eDh4Ml90IF9fcmV2MTsKLSAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEudmFsWzBdLCBfX3AxLnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLnZhbFsxXSwgX19wMS52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50OHg4X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92dGJ4Ml92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEudmFsWzBdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsxXSwgKGludDh4OF90KV9fcmV2MiwgMTYpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50OHg4X3QgdnRieDJfczgoaW50OHg4X3QgX19wMCwgaW50OHg4eDJfdCBfX3AxLCBpbnQ4eDhfdCBfX3AyKSB7Ci0gIGludDh4OF90IF9fcmV0OwotICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnRieDJfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEudmFsWzBdLCAoaW50OHg4X3QpX19wMS52YWxbMV0sIChpbnQ4eDhfdClfX3AyLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50OHg4X3QgdnRieDJfczgoaW50OHg4X3QgX19wMCwgaW50OHg4eDJfdCBfX3AxLCBpbnQ4eDhfdCBfX3AyKSB7Ci0gIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQ4eDh4Ml90IF9fcmV2MTsKLSAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEudmFsWzBdLCBfX3AxLnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLnZhbFsxXSwgX19wMS52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQ4eDhfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92dGJ4Ml92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEudmFsWzBdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsxXSwgKGludDh4OF90KV9fcmV2MiwgMCk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBwb2x5OHg4X3QgdnRieDNfcDgocG9seTh4OF90IF9fcDAsIHBvbHk4eDh4M190IF9fcDEsIHVpbnQ4eDhfdCBfX3AyKSB7Ci0gIHBvbHk4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAocG9seTh4OF90KSBfX2J1aWx0aW5fbmVvbl92dGJ4M192KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMS52YWxbMF0sIChpbnQ4eDhfdClfX3AxLnZhbFsxXSwgKGludDh4OF90KV9fcDEudmFsWzJdLCAoaW50OHg4X3QpX19wMiwgNCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHBvbHk4eDhfdCB2dGJ4M19wOChwb2x5OHg4X3QgX19wMCwgcG9seTh4OHgzX3QgX19wMSwgdWludDh4OF90IF9fcDIpIHsKLSAgcG9seTh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBwb2x5OHg4eDNfdCBfX3JldjE7Ci0gIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLnZhbFswXSwgX19wMS52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMS52YWxbMV0sIF9fcDEudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEudmFsWzJdLCBfX3AxLnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQ4eDhfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcG9seTh4OF90IF9fcmV0OwotICBfX3JldCA9IChwb2x5OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Z0YngzX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDhfdClfX3JldjEudmFsWzFdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsyXSwgKGludDh4OF90KV9fcmV2MiwgNCk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50OHg4X3QgdnRieDNfdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDh4M190IF9fcDEsIHVpbnQ4eDhfdCBfX3AyKSB7Ci0gIHVpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92dGJ4M192KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMS52YWxbMF0sIChpbnQ4eDhfdClfX3AxLnZhbFsxXSwgKGludDh4OF90KV9fcDEudmFsWzJdLCAoaW50OHg4X3QpX19wMiwgMTYpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50OHg4X3QgdnRieDNfdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDh4M190IF9fcDEsIHVpbnQ4eDhfdCBfX3AyKSB7Ci0gIHVpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDh4OHgzX3QgX19yZXYxOwotICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMS52YWxbMF0sIF9fcDEudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEudmFsWzFdLCBfX3AxLnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLnZhbFsyXSwgX19wMS52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50OHg4X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92dGJ4M192KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEudmFsWzBdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsxXSwgKGludDh4OF90KV9fcmV2MS52YWxbMl0sIChpbnQ4eDhfdClfX3JldjIsIDE2KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDh4OF90IHZ0YngzX3M4KGludDh4OF90IF9fcDAsIGludDh4OHgzX3QgX19wMSwgaW50OHg4X3QgX19wMikgewotICBpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Z0YngzX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLnZhbFswXSwgKGludDh4OF90KV9fcDEudmFsWzFdLCAoaW50OHg4X3QpX19wMS52YWxbMl0sIChpbnQ4eDhfdClfX3AyLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50OHg4X3QgdnRieDNfczgoaW50OHg4X3QgX19wMCwgaW50OHg4eDNfdCBfX3AxLCBpbnQ4eDhfdCBfX3AyKSB7Ci0gIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQ4eDh4M190IF9fcmV2MTsKLSAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEudmFsWzBdLCBfX3AxLnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLnZhbFsxXSwgX19wMS52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMS52YWxbMl0sIF9fcDEudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50OHg4X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDh4OF90IF9fcmV0OwotICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnRieDNfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLnZhbFswXSwgKGludDh4OF90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDhfdClfX3JldjEudmFsWzJdLCAoaW50OHg4X3QpX19yZXYyLCAwKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHBvbHk4eDhfdCB2dGJ4NF9wOChwb2x5OHg4X3QgX19wMCwgcG9seTh4OHg0X3QgX19wMSwgdWludDh4OF90IF9fcDIpIHsKLSAgcG9seTh4OF90IF9fcmV0OwotICBfX3JldCA9IChwb2x5OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Z0Yng0X3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLnZhbFswXSwgKGludDh4OF90KV9fcDEudmFsWzFdLCAoaW50OHg4X3QpX19wMS52YWxbMl0sIChpbnQ4eDhfdClfX3AxLnZhbFszXSwgKGludDh4OF90KV9fcDIsIDQpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBwb2x5OHg4X3QgdnRieDRfcDgocG9seTh4OF90IF9fcDAsIHBvbHk4eDh4NF90IF9fcDEsIHVpbnQ4eDhfdCBfX3AyKSB7Ci0gIHBvbHk4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcG9seTh4OHg0X3QgX19yZXYxOwotICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMS52YWxbMF0sIF9fcDEudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEudmFsWzFdLCBfX3AxLnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLnZhbFsyXSwgX19wMS52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMS52YWxbM10sIF9fcDEudmFsWzNdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDh4OF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBwb2x5OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHBvbHk4eDhfdCkgX19idWlsdGluX25lb25fdnRieDRfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLnZhbFswXSwgKGludDh4OF90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDhfdClfX3JldjEudmFsWzJdLCAoaW50OHg4X3QpX19yZXYxLnZhbFszXSwgKGludDh4OF90KV9fcmV2MiwgNCk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50OHg4X3QgdnRieDRfdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDh4NF90IF9fcDEsIHVpbnQ4eDhfdCBfX3AyKSB7Ci0gIHVpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92dGJ4NF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMS52YWxbMF0sIChpbnQ4eDhfdClfX3AxLnZhbFsxXSwgKGludDh4OF90KV9fcDEudmFsWzJdLCAoaW50OHg4X3QpX19wMS52YWxbM10sIChpbnQ4eDhfdClfX3AyLCAxNik7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ4eDhfdCB2dGJ4NF91OCh1aW50OHg4X3QgX19wMCwgdWludDh4OHg0X3QgX19wMSwgdWludDh4OF90IF9fcDIpIHsKLSAgdWludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50OHg4eDRfdCBfX3JldjE7Ci0gIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLnZhbFswXSwgX19wMS52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMS52YWxbMV0sIF9fcDEudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEudmFsWzJdLCBfX3AxLnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIF9fcmV2MS52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLnZhbFszXSwgX19wMS52YWxbM10sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50OHg4X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92dGJ4NF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEudmFsWzBdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsxXSwgKGludDh4OF90KV9fcmV2MS52YWxbMl0sIChpbnQ4eDhfdClfX3JldjEudmFsWzNdLCAoaW50OHg4X3QpX19yZXYyLCAxNik7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ4eDhfdCB2dGJ4NF9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDh4NF90IF9fcDEsIGludDh4OF90IF9fcDIpIHsKLSAgaW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92dGJ4NF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMS52YWxbMF0sIChpbnQ4eDhfdClfX3AxLnZhbFsxXSwgKGludDh4OF90KV9fcDEudmFsWzJdLCAoaW50OHg4X3QpX19wMS52YWxbM10sIChpbnQ4eDhfdClfX3AyLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50OHg4X3QgdnRieDRfczgoaW50OHg4X3QgX19wMCwgaW50OHg4eDRfdCBfX3AxLCBpbnQ4eDhfdCBfX3AyKSB7Ci0gIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQ4eDh4NF90IF9fcmV2MTsKLSAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEudmFsWzBdLCBfX3AxLnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLnZhbFsxXSwgX19wMS52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMS52YWxbMl0sIF9fcDEudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEudmFsWzNdLCBfX3AxLnZhbFszXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDh4OF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Z0Yng0X3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDhfdClfX3JldjEudmFsWzFdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsyXSwgKGludDh4OF90KV9fcmV2MS52YWxbM10sIChpbnQ4eDhfdClfX3JldjIsIDApOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgcG9seTh4OHgyX3QgdnRybl9wOChwb2x5OHg4X3QgX19wMCwgcG9seTh4OF90IF9fcDEpIHsKLSAgcG9seTh4OHgyX3QgX19yZXQ7Ci0gIF9fYnVpbHRpbl9uZW9uX3Z0cm5fdigmX19yZXQsIChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgNCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHBvbHk4eDh4Ml90IHZ0cm5fcDgocG9seTh4OF90IF9fcDAsIHBvbHk4eDhfdCBfX3AxKSB7Ci0gIHBvbHk4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcG9seTh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBwb2x5OHg4eDJfdCBfX3JldDsKLSAgX19idWlsdGluX25lb25fdnRybl92KCZfX3JldCwgKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgNCk7Ci0KLSAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgcG9seTE2eDR4Ml90IHZ0cm5fcDE2KHBvbHkxNng0X3QgX19wMCwgcG9seTE2eDRfdCBfX3AxKSB7Ci0gIHBvbHkxNng0eDJfdCBfX3JldDsKLSAgX19idWlsdGluX25lb25fdnRybl92KCZfX3JldCwgKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCA1KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgcG9seTE2eDR4Ml90IHZ0cm5fcDE2KHBvbHkxNng0X3QgX19wMCwgcG9seTE2eDRfdCBfX3AxKSB7Ci0gIHBvbHkxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIHBvbHkxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7Ci0gIHBvbHkxNng0eDJfdCBfX3JldDsKLSAgX19idWlsdGluX25lb25fdnRybl92KCZfX3JldCwgKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgNSk7Ci0KLSAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDMsIDIsIDEsIDApOwotICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgcG9seTh4MTZ4Ml90IHZ0cm5xX3A4KHBvbHk4eDE2X3QgX19wMCwgcG9seTh4MTZfdCBfX3AxKSB7Ci0gIHBvbHk4eDE2eDJfdCBfX3JldDsKLSAgX19idWlsdGluX25lb25fdnRybnFfdigmX19yZXQsIChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAzNik7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHBvbHk4eDE2eDJfdCB2dHJucV9wOChwb2x5OHgxNl90IF9fcDAsIHBvbHk4eDE2X3QgX19wMSkgewotICBwb2x5OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBwb2x5OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBwb2x5OHgxNngyX3QgX19yZXQ7Ci0gIF9fYnVpbHRpbl9uZW9uX3Z0cm5xX3YoJl9fcmV0LCAoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDM2KTsKLQotICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBwb2x5MTZ4OHgyX3QgdnRybnFfcDE2KHBvbHkxNng4X3QgX19wMCwgcG9seTE2eDhfdCBfX3AxKSB7Ci0gIHBvbHkxNng4eDJfdCBfX3JldDsKLSAgX19idWlsdGluX25lb25fdnRybnFfdigmX19yZXQsIChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAzNyk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHBvbHkxNng4eDJfdCB2dHJucV9wMTYocG9seTE2eDhfdCBfX3AwLCBwb2x5MTZ4OF90IF9fcDEpIHsKLSAgcG9seTE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcG9seTE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcG9seTE2eDh4Ml90IF9fcmV0OwotICBfX2J1aWx0aW5fbmVvbl92dHJucV92KCZfX3JldCwgKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAzNyk7Ci0KLSAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDh4MTZ4Ml90IHZ0cm5xX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7Ci0gIHVpbnQ4eDE2eDJfdCBfX3JldDsKLSAgX19idWlsdGluX25lb25fdnRybnFfdigmX19yZXQsIChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA0OCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ4eDE2eDJfdCB2dHJucV91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgewotICB1aW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50OHgxNngyX3QgX19yZXQ7Ci0gIF9fYnVpbHRpbl9uZW9uX3Z0cm5xX3YoJl9fcmV0LCAoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDQ4KTsKLQotICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MzJ4NHgyX3QgdnRybnFfdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7Ci0gIHVpbnQzMng0eDJfdCBfX3JldDsKLSAgX19idWlsdGluX25lb25fdnRybnFfdigmX19yZXQsIChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA1MCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQzMng0eDJfdCB2dHJucV91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEpIHsKLSAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgdWludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKLSAgdWludDMyeDR4Ml90IF9fcmV0OwotICBfX2J1aWx0aW5fbmVvbl92dHJucV92KCZfX3JldCwgKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA1MCk7Ci0KLSAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDMsIDIsIDEsIDApOwotICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDE2eDh4Ml90IHZ0cm5xX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSkgewotICB1aW50MTZ4OHgyX3QgX19yZXQ7Ci0gIF9fYnVpbHRpbl9uZW9uX3Z0cm5xX3YoJl9fcmV0LCAoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNDkpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MTZ4OHgyX3QgdnRybnFfdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxKSB7Ci0gIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQxNng4eDJfdCBfX3JldDsKLSAgX19idWlsdGluX25lb25fdnRybnFfdigmX19yZXQsIChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNDkpOwotCi0gIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDh4MTZ4Ml90IHZ0cm5xX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgewotICBpbnQ4eDE2eDJfdCBfX3JldDsKLSAgX19idWlsdGluX25lb25fdnRybnFfdigmX19yZXQsIChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAzMik7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDh4MTZ4Ml90IHZ0cm5xX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgewotICBpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50OHgxNngyX3QgX19yZXQ7Ci0gIF9fYnVpbHRpbl9uZW9uX3Z0cm5xX3YoJl9fcmV0LCAoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDMyKTsKLQotICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBmbG9hdDMyeDR4Ml90IHZ0cm5xX2YzMihmbG9hdDMyeDRfdCBfX3AwLCBmbG9hdDMyeDRfdCBfX3AxKSB7Ci0gIGZsb2F0MzJ4NHgyX3QgX19yZXQ7Ci0gIF9fYnVpbHRpbl9uZW9uX3Z0cm5xX3YoJl9fcmV0LCAoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBmbG9hdDMyeDR4Ml90IHZ0cm5xX2YzMihmbG9hdDMyeDRfdCBfX3AwLCBmbG9hdDMyeDRfdCBfX3AxKSB7Ci0gIGZsb2F0MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICBmbG9hdDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKLSAgZmxvYXQzMng0eDJfdCBfX3JldDsKLSAgX19idWlsdGluX25lb25fdnRybnFfdigmX19yZXQsIChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNDEpOwotCi0gIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAzLCAyLCAxLCAwKTsKLSAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDMyeDR4Ml90IHZ0cm5xX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKLSAgaW50MzJ4NHgyX3QgX19yZXQ7Ci0gIF9fYnVpbHRpbl9uZW9uX3Z0cm5xX3YoJl9fcmV0LCAoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMzQpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQzMng0eDJfdCB2dHJucV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7Ci0gIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOwotICBpbnQzMng0eDJfdCBfX3JldDsKLSAgX19idWlsdGluX25lb25fdnRybnFfdigmX19yZXQsIChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMzQpOwotCi0gIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAzLCAyLCAxLCAwKTsKLSAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDE2eDh4Ml90IHZ0cm5xX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKLSAgaW50MTZ4OHgyX3QgX19yZXQ7Ci0gIF9fYnVpbHRpbl9uZW9uX3Z0cm5xX3YoJl9fcmV0LCAoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMzMpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQxNng4eDJfdCB2dHJucV9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7Ci0gIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQxNng4eDJfdCBfX3JldDsKLSAgX19idWlsdGluX25lb25fdnRybnFfdigmX19yZXQsIChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMzMpOwotCi0gIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ4eDh4Ml90IHZ0cm5fdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7Ci0gIHVpbnQ4eDh4Ml90IF9fcmV0OwotICBfX2J1aWx0aW5fbmVvbl92dHJuX3YoJl9fcmV0LCAoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDE2KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDh4OHgyX3QgdnRybl91OCh1aW50OHg4X3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKLSAgdWludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQ4eDh4Ml90IF9fcmV0OwotICBfX2J1aWx0aW5fbmVvbl92dHJuX3YoJl9fcmV0LCAoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAxNik7Ci0KLSAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDMyeDJ4Ml90IHZ0cm5fdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxKSB7Ci0gIHVpbnQzMngyeDJfdCBfX3JldDsKLSAgX19idWlsdGluX25lb25fdnRybl92KCZfX3JldCwgKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxOCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQzMngyeDJfdCB2dHJuX3UzMih1aW50MzJ4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSkgewotICB1aW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICB1aW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOwotICB1aW50MzJ4MngyX3QgX19yZXQ7Ci0gIF9fYnVpbHRpbl9uZW9uX3Z0cm5fdigmX19yZXQsIChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDE4KTsKLQotICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMSwgMCk7Ci0gIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MTZ4NHgyX3QgdnRybl91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEpIHsKLSAgdWludDE2eDR4Ml90IF9fcmV0OwotICBfX2J1aWx0aW5fbmVvbl92dHJuX3YoJl9fcmV0LCAoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDE3KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDE2eDR4Ml90IHZ0cm5fdTE2KHVpbnQxNng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxKSB7Ci0gIHVpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7Ci0gIHVpbnQxNng0eDJfdCBfX3JldDsKLSAgX19idWlsdGluX25lb25fdnRybl92KCZfX3JldCwgKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMTcpOwotCi0gIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAzLCAyLCAxLCAwKTsKLSAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDh4OHgyX3QgdnRybl9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7Ci0gIGludDh4OHgyX3QgX19yZXQ7Ci0gIF9fYnVpbHRpbl9uZW9uX3Z0cm5fdigmX19yZXQsIChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDh4OHgyX3QgdnRybl9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7Ci0gIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50OHg4eDJfdCBfX3JldDsKLSAgX19idWlsdGluX25lb25fdnRybl92KCZfX3JldCwgKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMCk7Ci0KLSAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgZmxvYXQzMngyeDJfdCB2dHJuX2YzMihmbG9hdDMyeDJfdCBfX3AwLCBmbG9hdDMyeDJfdCBfX3AxKSB7Ci0gIGZsb2F0MzJ4MngyX3QgX19yZXQ7Ci0gIF9fYnVpbHRpbl9uZW9uX3Z0cm5fdigmX19yZXQsIChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgOSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGZsb2F0MzJ4MngyX3QgdnRybl9mMzIoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSkgewotICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgZmxvYXQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7Ci0gIGZsb2F0MzJ4MngyX3QgX19yZXQ7Ci0gIF9fYnVpbHRpbl9uZW9uX3Z0cm5fdigmX19yZXQsIChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDkpOwotCi0gIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxLCAwKTsKLSAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDMyeDJ4Ml90IHZ0cm5fczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgewotICBpbnQzMngyeDJfdCBfX3JldDsKLSAgX19idWlsdGluX25lb25fdnRybl92KCZfX3JldCwgKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAyKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MzJ4MngyX3QgdnRybl9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7Ci0gIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOwotICBpbnQzMngyeDJfdCBfX3JldDsKLSAgX19idWlsdGluX25lb25fdnRybl92KCZfX3JldCwgKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMik7Ci0KLSAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDEsIDApOwotICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MTZ4NHgyX3QgdnRybl9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7Ci0gIGludDE2eDR4Ml90IF9fcmV0OwotICBfX2J1aWx0aW5fbmVvbl92dHJuX3YoJl9fcmV0LCAoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQxNng0eDJfdCB2dHJuX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKLSAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICBpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7Ci0gIGludDE2eDR4Ml90IF9fcmV0OwotICBfX2J1aWx0aW5fbmVvbl92dHJuX3YoJl9fcmV0LCAoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAxKTsKLQotICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMywgMiwgMSwgMCk7Ci0gIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50OHg4X3QgdnRzdF9wOChwb2x5OHg4X3QgX19wMCwgcG9seTh4OF90IF9fcDEpIHsKLSAgdWludDh4OF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Z0c3RfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDE2KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDh4OF90IHZ0c3RfcDgocG9seTh4OF90IF9fcDAsIHBvbHk4eDhfdCBfX3AxKSB7Ci0gIHBvbHk4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcG9seTh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnRzdF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDE2KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQxNng0X3QgdnRzdF9wMTYocG9seTE2eDRfdCBfX3AwLCBwb2x5MTZ4NF90IF9fcDEpIHsKLSAgdWludDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdnRzdF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTcpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MTZ4NF90IHZ0c3RfcDE2KHBvbHkxNng0X3QgX19wMCwgcG9seTE2eDRfdCBfX3AxKSB7Ci0gIHBvbHkxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIHBvbHkxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7Ci0gIHVpbnQxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3Z0c3RfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAxNyk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50OHgxNl90IHZ0c3RxX3A4KHBvbHk4eDE2X3QgX19wMCwgcG9seTh4MTZfdCBfX3AxKSB7Ci0gIHVpbnQ4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3Z0c3RxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDQ4KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDh4MTZfdCB2dHN0cV9wOChwb2x5OHgxNl90IF9fcDAsIHBvbHk4eDE2X3QgX19wMSkgewotICBwb2x5OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBwb2x5OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50OHgxNl90IF9fcmV0OwotICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92dHN0cV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNDgpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDE2eDhfdCB2dHN0cV9wMTYocG9seTE2eDhfdCBfX3AwLCBwb2x5MTZ4OF90IF9fcDEpIHsKLSAgdWludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDE2eDhfdCkgX19idWlsdGluX25lb25fdnRzdHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNDkpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MTZ4OF90IHZ0c3RxX3AxNihwb2x5MTZ4OF90IF9fcDAsIHBvbHkxNng4X3QgX19wMSkgewotICBwb2x5MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBwb2x5MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92dHN0cV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNDkpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDh4MTZfdCB2dHN0cV91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgewotICB1aW50OHgxNl90IF9fcmV0OwotICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92dHN0cV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA0OCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ4eDE2X3QgdnRzdHFfdTgodWludDh4MTZfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEpIHsKLSAgdWludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdnRzdHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDQ4KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQzMng0X3QgdnRzdHFfdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7Ci0gIHVpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3Z0c3RxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDUwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDMyeDRfdCB2dHN0cV91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEpIHsKLSAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgdWludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKLSAgdWludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdnRzdHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDUwKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQxNng4X3QgdnRzdHFfdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxKSB7Ci0gIHVpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3Z0c3RxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDQ5KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDE2eDhfdCB2dHN0cV91MTYodWludDE2eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEpIHsKLSAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDE2eDhfdCkgX19idWlsdGluX25lb25fdnRzdHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDQ5KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ4eDE2X3QgdnRzdHFfczgoaW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7Ci0gIHVpbnQ4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3Z0c3RxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDQ4KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDh4MTZfdCB2dHN0cV9zOChpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEpIHsKLSAgaW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQ4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3Z0c3RxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA0OCk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MzJ4NF90IHZ0c3RxX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKLSAgdWludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdnRzdHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNTApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MzJ4NF90IHZ0c3RxX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKLSAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7Ci0gIHVpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3Z0c3RxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA1MCk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MTZ4OF90IHZ0c3RxX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKLSAgdWludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDE2eDhfdCkgX19idWlsdGluX25lb25fdnRzdHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNDkpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MTZ4OF90IHZ0c3RxX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKLSAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3Z0c3RxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA0OSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50OHg4X3QgdnRzdF91OCh1aW50OHg4X3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKLSAgdWludDh4OF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Z0c3RfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDE2KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDh4OF90IHZ0c3RfdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7Ci0gIHVpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnRzdF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDE2KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQzMngyX3QgdnRzdF91MzIodWludDMyeDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEpIHsKLSAgdWludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdnRzdF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTgpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MzJ4Ml90IHZ0c3RfdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxKSB7Ci0gIHVpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIHVpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7Ci0gIHVpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3Z0c3RfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAxOCk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MTZ4NF90IHZ0c3RfdTE2KHVpbnQxNng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxKSB7Ci0gIHVpbnQxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3Z0c3RfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDE3KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDE2eDRfdCB2dHN0X3UxNih1aW50MTZ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSkgewotICB1aW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICB1aW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOwotICB1aW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92dHN0X3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMTcpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDh4OF90IHZ0c3RfczgoaW50OHg4X3QgX19wMCwgaW50OHg4X3QgX19wMSkgewotICB1aW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnRzdF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTYpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50OHg4X3QgdnRzdF9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7Ci0gIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDh4OF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Z0c3RfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAxNik7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MzJ4Ml90IHZ0c3RfczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgewotICB1aW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92dHN0X3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxOCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQzMngyX3QgdnRzdF9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7Ci0gIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOwotICB1aW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92dHN0X3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMTgpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDE2eDRfdCB2dHN0X3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKLSAgdWludDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdnRzdF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTcpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MTZ4NF90IHZ0c3RfczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgewotICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKLSAgdWludDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdnRzdF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDE3KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHBvbHk4eDh4Ml90IHZ1enBfcDgocG9seTh4OF90IF9fcDAsIHBvbHk4eDhfdCBfX3AxKSB7Ci0gIHBvbHk4eDh4Ml90IF9fcmV0OwotICBfX2J1aWx0aW5fbmVvbl92dXpwX3YoJl9fcmV0LCAoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDQpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBwb2x5OHg4eDJfdCB2dXpwX3A4KHBvbHk4eDhfdCBfX3AwLCBwb2x5OHg4X3QgX19wMSkgewotICBwb2x5OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHBvbHk4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcG9seTh4OHgyX3QgX19yZXQ7Ci0gIF9fYnVpbHRpbl9uZW9uX3Z1enBfdigmX19yZXQsIChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDQpOwotCi0gIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHBvbHkxNng0eDJfdCB2dXpwX3AxNihwb2x5MTZ4NF90IF9fcDAsIHBvbHkxNng0X3QgX19wMSkgewotICBwb2x5MTZ4NHgyX3QgX19yZXQ7Ci0gIF9fYnVpbHRpbl9uZW9uX3Z1enBfdigmX19yZXQsIChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgNSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHBvbHkxNng0eDJfdCB2dXpwX3AxNihwb2x5MTZ4NF90IF9fcDAsIHBvbHkxNng0X3QgX19wMSkgewotICBwb2x5MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICBwb2x5MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOwotICBwb2x5MTZ4NHgyX3QgX19yZXQ7Ci0gIF9fYnVpbHRpbl9uZW9uX3Z1enBfdigmX19yZXQsIChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDUpOwotCi0gIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAzLCAyLCAxLCAwKTsKLSAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHBvbHk4eDE2eDJfdCB2dXpwcV9wOChwb2x5OHgxNl90IF9fcDAsIHBvbHk4eDE2X3QgX19wMSkgewotICBwb2x5OHgxNngyX3QgX19yZXQ7Ci0gIF9fYnVpbHRpbl9uZW9uX3Z1enBxX3YoJl9fcmV0LCAoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMzYpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBwb2x5OHgxNngyX3QgdnV6cHFfcDgocG9seTh4MTZfdCBfX3AwLCBwb2x5OHgxNl90IF9fcDEpIHsKLSAgcG9seTh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcG9seTh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcG9seTh4MTZ4Ml90IF9fcmV0OwotICBfX2J1aWx0aW5fbmVvbl92dXpwcV92KCZfX3JldCwgKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAzNik7Ci0KLSAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgcG9seTE2eDh4Ml90IHZ1enBxX3AxNihwb2x5MTZ4OF90IF9fcDAsIHBvbHkxNng4X3QgX19wMSkgewotICBwb2x5MTZ4OHgyX3QgX19yZXQ7Ci0gIF9fYnVpbHRpbl9uZW9uX3Z1enBxX3YoJl9fcmV0LCAoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMzcpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBwb2x5MTZ4OHgyX3QgdnV6cHFfcDE2KHBvbHkxNng4X3QgX19wMCwgcG9seTE2eDhfdCBfX3AxKSB7Ci0gIHBvbHkxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHBvbHkxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHBvbHkxNng4eDJfdCBfX3JldDsKLSAgX19idWlsdGluX25lb25fdnV6cHFfdigmX19yZXQsIChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMzcpOwotCi0gIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ4eDE2eDJfdCB2dXpwcV91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgewotICB1aW50OHgxNngyX3QgX19yZXQ7Ci0gIF9fYnVpbHRpbl9uZW9uX3Z1enBxX3YoJl9fcmV0LCAoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNDgpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50OHgxNngyX3QgdnV6cHFfdTgodWludDh4MTZfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEpIHsKLSAgdWludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDh4MTZ4Ml90IF9fcmV0OwotICBfX2J1aWx0aW5fbmVvbl92dXpwcV92KCZfX3JldCwgKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA0OCk7Ci0KLSAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDMyeDR4Ml90IHZ1enBxX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgewotICB1aW50MzJ4NHgyX3QgX19yZXQ7Ci0gIF9fYnVpbHRpbl9uZW9uX3Z1enBxX3YoJl9fcmV0LCAoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNTApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MzJ4NHgyX3QgdnV6cHFfdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7Ci0gIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7Ci0gIHVpbnQzMng0eDJfdCBfX3JldDsKLSAgX19idWlsdGluX25lb25fdnV6cHFfdigmX19yZXQsIChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNTApOwotCi0gIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAzLCAyLCAxLCAwKTsKLSAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQxNng4eDJfdCB2dXpwcV91MTYodWludDE2eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEpIHsKLSAgdWludDE2eDh4Ml90IF9fcmV0OwotICBfX2J1aWx0aW5fbmVvbl92dXpwcV92KCZfX3JldCwgKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDQ5KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDE2eDh4Ml90IHZ1enBxX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSkgewotICB1aW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50MTZ4OHgyX3QgX19yZXQ7Ci0gIF9fYnVpbHRpbl9uZW9uX3Z1enBxX3YoJl9fcmV0LCAoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDQ5KTsKLQotICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ4eDE2eDJfdCB2dXpwcV9zOChpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEpIHsKLSAgaW50OHgxNngyX3QgX19yZXQ7Ci0gIF9fYnVpbHRpbl9uZW9uX3Z1enBxX3YoJl9fcmV0LCAoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMzIpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQ4eDE2eDJfdCB2dXpwcV9zOChpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEpIHsKLSAgaW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDh4MTZ4Ml90IF9fcmV0OwotICBfX2J1aWx0aW5fbmVvbl92dXpwcV92KCZfX3JldCwgKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAzMik7Ci0KLSAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgZmxvYXQzMng0eDJfdCB2dXpwcV9mMzIoZmxvYXQzMng0X3QgX19wMCwgZmxvYXQzMng0X3QgX19wMSkgewotICBmbG9hdDMyeDR4Ml90IF9fcmV0OwotICBfX2J1aWx0aW5fbmVvbl92dXpwcV92KCZfX3JldCwgKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDQxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgZmxvYXQzMng0eDJfdCB2dXpwcV9mMzIoZmxvYXQzMng0X3QgX19wMCwgZmxvYXQzMng0X3QgX19wMSkgewotICBmbG9hdDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgZmxvYXQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7Ci0gIGZsb2F0MzJ4NHgyX3QgX19yZXQ7Ci0gIF9fYnVpbHRpbl9uZW9uX3Z1enBxX3YoJl9fcmV0LCAoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDQxKTsKLQotICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMywgMiwgMSwgMCk7Ci0gIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQzMng0eDJfdCB2dXpwcV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7Ci0gIGludDMyeDR4Ml90IF9fcmV0OwotICBfX2J1aWx0aW5fbmVvbl92dXpwcV92KCZfX3JldCwgKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDM0KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MzJ4NHgyX3QgdnV6cHFfczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgewotICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKLSAgaW50MzJ4NHgyX3QgX19yZXQ7Ci0gIF9fYnVpbHRpbl9uZW9uX3Z1enBxX3YoJl9fcmV0LCAoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDM0KTsKLQotICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMywgMiwgMSwgMCk7Ci0gIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQxNng4eDJfdCB2dXpwcV9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7Ci0gIGludDE2eDh4Ml90IF9fcmV0OwotICBfX2J1aWx0aW5fbmVvbl92dXpwcV92KCZfX3JldCwgKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDMzKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MTZ4OHgyX3QgdnV6cHFfczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgewotICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50MTZ4OHgyX3QgX19yZXQ7Ci0gIF9fYnVpbHRpbl9uZW9uX3Z1enBxX3YoJl9fcmV0LCAoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDMzKTsKLQotICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50OHg4eDJfdCB2dXpwX3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgewotICB1aW50OHg4eDJfdCBfX3JldDsKLSAgX19idWlsdGluX25lb25fdnV6cF92KCZfX3JldCwgKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxNik7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ4eDh4Ml90IHZ1enBfdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7Ci0gIHVpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50OHg4eDJfdCBfX3JldDsKLSAgX19idWlsdGluX25lb25fdnV6cF92KCZfX3JldCwgKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMTYpOwotCi0gIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQzMngyeDJfdCB2dXpwX3UzMih1aW50MzJ4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSkgewotICB1aW50MzJ4MngyX3QgX19yZXQ7Ci0gIF9fYnVpbHRpbl9uZW9uX3Z1enBfdigmX19yZXQsIChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTgpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MzJ4MngyX3QgdnV6cF91MzIodWludDMyeDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEpIHsKLSAgdWludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgdWludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKLSAgdWludDMyeDJ4Ml90IF9fcmV0OwotICBfX2J1aWx0aW5fbmVvbl92dXpwX3YoJl9fcmV0LCAoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAxOCk7Ci0KLSAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDEsIDApOwotICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDE2eDR4Ml90IHZ1enBfdTE2KHVpbnQxNng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxKSB7Ci0gIHVpbnQxNng0eDJfdCBfX3JldDsKLSAgX19idWlsdGluX25lb25fdnV6cF92KCZfX3JldCwgKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxNyk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQxNng0eDJfdCB2dXpwX3UxNih1aW50MTZ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSkgewotICB1aW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICB1aW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOwotICB1aW50MTZ4NHgyX3QgX19yZXQ7Ci0gIF9fYnVpbHRpbl9uZW9uX3Z1enBfdigmX19yZXQsIChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDE3KTsKLQotICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMywgMiwgMSwgMCk7Ci0gIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ4eDh4Ml90IHZ1enBfczgoaW50OHg4X3QgX19wMCwgaW50OHg4X3QgX19wMSkgewotICBpbnQ4eDh4Ml90IF9fcmV0OwotICBfX2J1aWx0aW5fbmVvbl92dXpwX3YoJl9fcmV0LCAoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQ4eDh4Ml90IHZ1enBfczgoaW50OHg4X3QgX19wMCwgaW50OHg4X3QgX19wMSkgewotICBpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDh4OHgyX3QgX19yZXQ7Ci0gIF9fYnVpbHRpbl9uZW9uX3Z1enBfdigmX19yZXQsIChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDApOwotCi0gIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGZsb2F0MzJ4MngyX3QgdnV6cF9mMzIoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSkgewotICBmbG9hdDMyeDJ4Ml90IF9fcmV0OwotICBfX2J1aWx0aW5fbmVvbl92dXpwX3YoJl9fcmV0LCAoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDkpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBmbG9hdDMyeDJ4Ml90IHZ1enBfZjMyKGZsb2F0MzJ4Ml90IF9fcDAsIGZsb2F0MzJ4Ml90IF9fcDEpIHsKLSAgZmxvYXQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIGZsb2F0MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOwotICBmbG9hdDMyeDJ4Ml90IF9fcmV0OwotICBfX2J1aWx0aW5fbmVvbl92dXpwX3YoJl9fcmV0LCAoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCA5KTsKLQotICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMSwgMCk7Ci0gIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQzMngyeDJfdCB2dXpwX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKLSAgaW50MzJ4MngyX3QgX19yZXQ7Ci0gIF9fYnVpbHRpbl9uZW9uX3Z1enBfdigmX19yZXQsIChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMik7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDMyeDJ4Ml90IHZ1enBfczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgewotICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIGludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKLSAgaW50MzJ4MngyX3QgX19yZXQ7Ci0gIF9fYnVpbHRpbl9uZW9uX3Z1enBfdigmX19yZXQsIChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDIpOwotCi0gIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxLCAwKTsKLSAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDE2eDR4Ml90IHZ1enBfczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgewotICBpbnQxNng0eDJfdCBfX3JldDsKLSAgX19idWlsdGluX25lb25fdnV6cF92KCZfX3JldCwgKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MTZ4NHgyX3QgdnV6cF9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7Ci0gIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOwotICBpbnQxNng0eDJfdCBfX3JldDsKLSAgX19idWlsdGluX25lb25fdnV6cF92KCZfX3JldCwgKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMSk7Ci0KLSAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDMsIDIsIDEsIDApOwotICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgcG9seTh4OHgyX3QgdnppcF9wOChwb2x5OHg4X3QgX19wMCwgcG9seTh4OF90IF9fcDEpIHsKLSAgcG9seTh4OHgyX3QgX19yZXQ7Ci0gIF9fYnVpbHRpbl9uZW9uX3Z6aXBfdigmX19yZXQsIChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgNCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHBvbHk4eDh4Ml90IHZ6aXBfcDgocG9seTh4OF90IF9fcDAsIHBvbHk4eDhfdCBfX3AxKSB7Ci0gIHBvbHk4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcG9seTh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBwb2x5OHg4eDJfdCBfX3JldDsKLSAgX19idWlsdGluX25lb25fdnppcF92KCZfX3JldCwgKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgNCk7Ci0KLSAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgcG9seTE2eDR4Ml90IHZ6aXBfcDE2KHBvbHkxNng0X3QgX19wMCwgcG9seTE2eDRfdCBfX3AxKSB7Ci0gIHBvbHkxNng0eDJfdCBfX3JldDsKLSAgX19idWlsdGluX25lb25fdnppcF92KCZfX3JldCwgKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCA1KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgcG9seTE2eDR4Ml90IHZ6aXBfcDE2KHBvbHkxNng0X3QgX19wMCwgcG9seTE2eDRfdCBfX3AxKSB7Ci0gIHBvbHkxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIHBvbHkxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7Ci0gIHBvbHkxNng0eDJfdCBfX3JldDsKLSAgX19idWlsdGluX25lb25fdnppcF92KCZfX3JldCwgKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgNSk7Ci0KLSAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDMsIDIsIDEsIDApOwotICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgcG9seTh4MTZ4Ml90IHZ6aXBxX3A4KHBvbHk4eDE2X3QgX19wMCwgcG9seTh4MTZfdCBfX3AxKSB7Ci0gIHBvbHk4eDE2eDJfdCBfX3JldDsKLSAgX19idWlsdGluX25lb25fdnppcHFfdigmX19yZXQsIChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAzNik7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHBvbHk4eDE2eDJfdCB2emlwcV9wOChwb2x5OHgxNl90IF9fcDAsIHBvbHk4eDE2X3QgX19wMSkgewotICBwb2x5OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBwb2x5OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBwb2x5OHgxNngyX3QgX19yZXQ7Ci0gIF9fYnVpbHRpbl9uZW9uX3Z6aXBxX3YoJl9fcmV0LCAoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDM2KTsKLQotICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBwb2x5MTZ4OHgyX3QgdnppcHFfcDE2KHBvbHkxNng4X3QgX19wMCwgcG9seTE2eDhfdCBfX3AxKSB7Ci0gIHBvbHkxNng4eDJfdCBfX3JldDsKLSAgX19idWlsdGluX25lb25fdnppcHFfdigmX19yZXQsIChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAzNyk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHBvbHkxNng4eDJfdCB2emlwcV9wMTYocG9seTE2eDhfdCBfX3AwLCBwb2x5MTZ4OF90IF9fcDEpIHsKLSAgcG9seTE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcG9seTE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcG9seTE2eDh4Ml90IF9fcmV0OwotICBfX2J1aWx0aW5fbmVvbl92emlwcV92KCZfX3JldCwgKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAzNyk7Ci0KLSAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDh4MTZ4Ml90IHZ6aXBxX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7Ci0gIHVpbnQ4eDE2eDJfdCBfX3JldDsKLSAgX19idWlsdGluX25lb25fdnppcHFfdigmX19yZXQsIChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA0OCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ4eDE2eDJfdCB2emlwcV91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgewotICB1aW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50OHgxNngyX3QgX19yZXQ7Ci0gIF9fYnVpbHRpbl9uZW9uX3Z6aXBxX3YoJl9fcmV0LCAoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDQ4KTsKLQotICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MzJ4NHgyX3QgdnppcHFfdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7Ci0gIHVpbnQzMng0eDJfdCBfX3JldDsKLSAgX19idWlsdGluX25lb25fdnppcHFfdigmX19yZXQsIChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA1MCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQzMng0eDJfdCB2emlwcV91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEpIHsKLSAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgdWludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKLSAgdWludDMyeDR4Ml90IF9fcmV0OwotICBfX2J1aWx0aW5fbmVvbl92emlwcV92KCZfX3JldCwgKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA1MCk7Ci0KLSAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDMsIDIsIDEsIDApOwotICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDE2eDh4Ml90IHZ6aXBxX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSkgewotICB1aW50MTZ4OHgyX3QgX19yZXQ7Ci0gIF9fYnVpbHRpbl9uZW9uX3Z6aXBxX3YoJl9fcmV0LCAoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNDkpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MTZ4OHgyX3QgdnppcHFfdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxKSB7Ci0gIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQxNng4eDJfdCBfX3JldDsKLSAgX19idWlsdGluX25lb25fdnppcHFfdigmX19yZXQsIChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNDkpOwotCi0gIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDh4MTZ4Ml90IHZ6aXBxX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgewotICBpbnQ4eDE2eDJfdCBfX3JldDsKLSAgX19idWlsdGluX25lb25fdnppcHFfdigmX19yZXQsIChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAzMik7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDh4MTZ4Ml90IHZ6aXBxX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgewotICBpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50OHgxNngyX3QgX19yZXQ7Ci0gIF9fYnVpbHRpbl9uZW9uX3Z6aXBxX3YoJl9fcmV0LCAoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDMyKTsKLQotICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBmbG9hdDMyeDR4Ml90IHZ6aXBxX2YzMihmbG9hdDMyeDRfdCBfX3AwLCBmbG9hdDMyeDRfdCBfX3AxKSB7Ci0gIGZsb2F0MzJ4NHgyX3QgX19yZXQ7Ci0gIF9fYnVpbHRpbl9uZW9uX3Z6aXBxX3YoJl9fcmV0LCAoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBmbG9hdDMyeDR4Ml90IHZ6aXBxX2YzMihmbG9hdDMyeDRfdCBfX3AwLCBmbG9hdDMyeDRfdCBfX3AxKSB7Ci0gIGZsb2F0MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICBmbG9hdDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKLSAgZmxvYXQzMng0eDJfdCBfX3JldDsKLSAgX19idWlsdGluX25lb25fdnppcHFfdigmX19yZXQsIChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNDEpOwotCi0gIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAzLCAyLCAxLCAwKTsKLSAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDMyeDR4Ml90IHZ6aXBxX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKLSAgaW50MzJ4NHgyX3QgX19yZXQ7Ci0gIF9fYnVpbHRpbl9uZW9uX3Z6aXBxX3YoJl9fcmV0LCAoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMzQpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQzMng0eDJfdCB2emlwcV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7Ci0gIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOwotICBpbnQzMng0eDJfdCBfX3JldDsKLSAgX19idWlsdGluX25lb25fdnppcHFfdigmX19yZXQsIChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMzQpOwotCi0gIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAzLCAyLCAxLCAwKTsKLSAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDE2eDh4Ml90IHZ6aXBxX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKLSAgaW50MTZ4OHgyX3QgX19yZXQ7Ci0gIF9fYnVpbHRpbl9uZW9uX3Z6aXBxX3YoJl9fcmV0LCAoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMzMpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQxNng4eDJfdCB2emlwcV9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7Ci0gIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQxNng4eDJfdCBfX3JldDsKLSAgX19idWlsdGluX25lb25fdnppcHFfdigmX19yZXQsIChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMzMpOwotCi0gIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ4eDh4Ml90IHZ6aXBfdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7Ci0gIHVpbnQ4eDh4Ml90IF9fcmV0OwotICBfX2J1aWx0aW5fbmVvbl92emlwX3YoJl9fcmV0LCAoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDE2KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDh4OHgyX3QgdnppcF91OCh1aW50OHg4X3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKLSAgdWludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQ4eDh4Ml90IF9fcmV0OwotICBfX2J1aWx0aW5fbmVvbl92emlwX3YoJl9fcmV0LCAoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAxNik7Ci0KLSAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDMyeDJ4Ml90IHZ6aXBfdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxKSB7Ci0gIHVpbnQzMngyeDJfdCBfX3JldDsKLSAgX19idWlsdGluX25lb25fdnppcF92KCZfX3JldCwgKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxOCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQzMngyeDJfdCB2emlwX3UzMih1aW50MzJ4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSkgewotICB1aW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICB1aW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOwotICB1aW50MzJ4MngyX3QgX19yZXQ7Ci0gIF9fYnVpbHRpbl9uZW9uX3Z6aXBfdigmX19yZXQsIChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDE4KTsKLQotICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMSwgMCk7Ci0gIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MTZ4NHgyX3QgdnppcF91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEpIHsKLSAgdWludDE2eDR4Ml90IF9fcmV0OwotICBfX2J1aWx0aW5fbmVvbl92emlwX3YoJl9fcmV0LCAoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDE3KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDE2eDR4Ml90IHZ6aXBfdTE2KHVpbnQxNng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxKSB7Ci0gIHVpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7Ci0gIHVpbnQxNng0eDJfdCBfX3JldDsKLSAgX19idWlsdGluX25lb25fdnppcF92KCZfX3JldCwgKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMTcpOwotCi0gIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAzLCAyLCAxLCAwKTsKLSAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDh4OHgyX3QgdnppcF9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7Ci0gIGludDh4OHgyX3QgX19yZXQ7Ci0gIF9fYnVpbHRpbl9uZW9uX3Z6aXBfdigmX19yZXQsIChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDh4OHgyX3QgdnppcF9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7Ci0gIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50OHg4eDJfdCBfX3JldDsKLSAgX19idWlsdGluX25lb25fdnppcF92KCZfX3JldCwgKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMCk7Ci0KLSAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgZmxvYXQzMngyeDJfdCB2emlwX2YzMihmbG9hdDMyeDJfdCBfX3AwLCBmbG9hdDMyeDJfdCBfX3AxKSB7Ci0gIGZsb2F0MzJ4MngyX3QgX19yZXQ7Ci0gIF9fYnVpbHRpbl9uZW9uX3Z6aXBfdigmX19yZXQsIChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgOSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGZsb2F0MzJ4MngyX3QgdnppcF9mMzIoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSkgewotICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgZmxvYXQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7Ci0gIGZsb2F0MzJ4MngyX3QgX19yZXQ7Ci0gIF9fYnVpbHRpbl9uZW9uX3Z6aXBfdigmX19yZXQsIChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDkpOwotCi0gIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxLCAwKTsKLSAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDMyeDJ4Ml90IHZ6aXBfczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgewotICBpbnQzMngyeDJfdCBfX3JldDsKLSAgX19idWlsdGluX25lb25fdnppcF92KCZfX3JldCwgKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAyKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MzJ4MngyX3QgdnppcF9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7Ci0gIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOwotICBpbnQzMngyeDJfdCBfX3JldDsKLSAgX19idWlsdGluX25lb25fdnppcF92KCZfX3JldCwgKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMik7Ci0KLSAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDEsIDApOwotICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MTZ4NHgyX3QgdnppcF9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7Ci0gIGludDE2eDR4Ml90IF9fcmV0OwotICBfX2J1aWx0aW5fbmVvbl92emlwX3YoJl9fcmV0LCAoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQxNng0eDJfdCB2emlwX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKLSAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICBpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7Ci0gIGludDE2eDR4Ml90IF9fcmV0OwotICBfX2J1aWx0aW5fbmVvbl92emlwX3YoJl9fcmV0LCAoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAxKTsKLQotICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMywgMiwgMSwgMCk7Ci0gIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZiAhZGVmaW5lZChfX2FhcmNoNjRfXykKLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBwb2x5OHg4X3QgdnJlaW50ZXJwcmV0X3A4X3AxNihwb2x5MTZ4NF90IF9fcDApIHsKLSAgcG9seTh4OF90IF9fcmV0OwotICBfX3JldCA9IChwb2x5OHg4X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBwb2x5OHg4X3QgdnJlaW50ZXJwcmV0X3A4X3AxNihwb2x5MTZ4NF90IF9fcDApIHsKLSAgcG9seTh4OF90IF9fcmV0OwotICBfX3JldCA9IChwb2x5OHg4X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHBvbHk4eDhfdCB2cmVpbnRlcnByZXRfcDhfdTgodWludDh4OF90IF9fcDApIHsKLSAgcG9seTh4OF90IF9fcmV0OwotICBfX3JldCA9IChwb2x5OHg4X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBwb2x5OHg4X3QgdnJlaW50ZXJwcmV0X3A4X3U4KHVpbnQ4eDhfdCBfX3AwKSB7Ci0gIHBvbHk4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAocG9seTh4OF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBwb2x5OHg4X3QgdnJlaW50ZXJwcmV0X3A4X3UzMih1aW50MzJ4Ml90IF9fcDApIHsKLSAgcG9seTh4OF90IF9fcmV0OwotICBfX3JldCA9IChwb2x5OHg4X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBwb2x5OHg4X3QgdnJlaW50ZXJwcmV0X3A4X3UzMih1aW50MzJ4Ml90IF9fcDApIHsKLSAgcG9seTh4OF90IF9fcmV0OwotICBfX3JldCA9IChwb2x5OHg4X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHBvbHk4eDhfdCB2cmVpbnRlcnByZXRfcDhfdTY0KHVpbnQ2NHgxX3QgX19wMCkgewotICBwb2x5OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHBvbHk4eDhfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHBvbHk4eDhfdCB2cmVpbnRlcnByZXRfcDhfdTY0KHVpbnQ2NHgxX3QgX19wMCkgewotICBwb2x5OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHBvbHk4eDhfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgcG9seTh4OF90IHZyZWludGVycHJldF9wOF91MTYodWludDE2eDRfdCBfX3AwKSB7Ci0gIHBvbHk4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAocG9seTh4OF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgcG9seTh4OF90IHZyZWludGVycHJldF9wOF91MTYodWludDE2eDRfdCBfX3AwKSB7Ci0gIHBvbHk4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAocG9seTh4OF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBwb2x5OHg4X3QgdnJlaW50ZXJwcmV0X3A4X3M4KGludDh4OF90IF9fcDApIHsKLSAgcG9seTh4OF90IF9fcmV0OwotICBfX3JldCA9IChwb2x5OHg4X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBwb2x5OHg4X3QgdnJlaW50ZXJwcmV0X3A4X3M4KGludDh4OF90IF9fcDApIHsKLSAgcG9seTh4OF90IF9fcmV0OwotICBfX3JldCA9IChwb2x5OHg4X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHBvbHk4eDhfdCB2cmVpbnRlcnByZXRfcDhfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKLSAgcG9seTh4OF90IF9fcmV0OwotICBfX3JldCA9IChwb2x5OHg4X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBwb2x5OHg4X3QgdnJlaW50ZXJwcmV0X3A4X2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7Ci0gIHBvbHk4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAocG9seTh4OF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBwb2x5OHg4X3QgdnJlaW50ZXJwcmV0X3A4X2YxNihmbG9hdDE2eDRfdCBfX3AwKSB7Ci0gIHBvbHk4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAocG9seTh4OF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgcG9seTh4OF90IHZyZWludGVycHJldF9wOF9mMTYoZmxvYXQxNng0X3QgX19wMCkgewotICBwb2x5OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHBvbHk4eDhfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgcG9seTh4OF90IHZyZWludGVycHJldF9wOF9zMzIoaW50MzJ4Ml90IF9fcDApIHsKLSAgcG9seTh4OF90IF9fcmV0OwotICBfX3JldCA9IChwb2x5OHg4X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBwb2x5OHg4X3QgdnJlaW50ZXJwcmV0X3A4X3MzMihpbnQzMngyX3QgX19wMCkgewotICBwb2x5OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHBvbHk4eDhfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgcG9seTh4OF90IHZyZWludGVycHJldF9wOF9zNjQoaW50NjR4MV90IF9fcDApIHsKLSAgcG9seTh4OF90IF9fcmV0OwotICBfX3JldCA9IChwb2x5OHg4X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBwb2x5OHg4X3QgdnJlaW50ZXJwcmV0X3A4X3M2NChpbnQ2NHgxX3QgX19wMCkgewotICBwb2x5OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHBvbHk4eDhfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgcG9seTh4OF90IHZyZWludGVycHJldF9wOF9zMTYoaW50MTZ4NF90IF9fcDApIHsKLSAgcG9seTh4OF90IF9fcmV0OwotICBfX3JldCA9IChwb2x5OHg4X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBwb2x5OHg4X3QgdnJlaW50ZXJwcmV0X3A4X3MxNihpbnQxNng0X3QgX19wMCkgewotICBwb2x5OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHBvbHk4eDhfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgcG9seTE2eDRfdCB2cmVpbnRlcnByZXRfcDE2X3A4KHBvbHk4eDhfdCBfX3AwKSB7Ci0gIHBvbHkxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHBvbHkxNng0X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBwb2x5MTZ4NF90IHZyZWludGVycHJldF9wMTZfcDgocG9seTh4OF90IF9fcDApIHsKLSAgcG9seTE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSAocG9seTE2eDRfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgcG9seTE2eDRfdCB2cmVpbnRlcnByZXRfcDE2X3U4KHVpbnQ4eDhfdCBfX3AwKSB7Ci0gIHBvbHkxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHBvbHkxNng0X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBwb2x5MTZ4NF90IHZyZWludGVycHJldF9wMTZfdTgodWludDh4OF90IF9fcDApIHsKLSAgcG9seTE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSAocG9seTE2eDRfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgcG9seTE2eDRfdCB2cmVpbnRlcnByZXRfcDE2X3UzMih1aW50MzJ4Ml90IF9fcDApIHsKLSAgcG9seTE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSAocG9seTE2eDRfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHBvbHkxNng0X3QgdnJlaW50ZXJwcmV0X3AxNl91MzIodWludDMyeDJfdCBfX3AwKSB7Ci0gIHBvbHkxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHBvbHkxNng0X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHBvbHkxNng0X3QgdnJlaW50ZXJwcmV0X3AxNl91NjQodWludDY0eDFfdCBfX3AwKSB7Ci0gIHBvbHkxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHBvbHkxNng0X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBwb2x5MTZ4NF90IHZyZWludGVycHJldF9wMTZfdTY0KHVpbnQ2NHgxX3QgX19wMCkgewotICBwb2x5MTZ4NF90IF9fcmV0OwotICBfX3JldCA9IChwb2x5MTZ4NF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBwb2x5MTZ4NF90IHZyZWludGVycHJldF9wMTZfdTE2KHVpbnQxNng0X3QgX19wMCkgewotICBwb2x5MTZ4NF90IF9fcmV0OwotICBfX3JldCA9IChwb2x5MTZ4NF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgcG9seTE2eDRfdCB2cmVpbnRlcnByZXRfcDE2X3UxNih1aW50MTZ4NF90IF9fcDApIHsKLSAgcG9seTE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSAocG9seTE2eDRfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgcG9seTE2eDRfdCB2cmVpbnRlcnByZXRfcDE2X3M4KGludDh4OF90IF9fcDApIHsKLSAgcG9seTE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSAocG9seTE2eDRfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHBvbHkxNng0X3QgdnJlaW50ZXJwcmV0X3AxNl9zOChpbnQ4eDhfdCBfX3AwKSB7Ci0gIHBvbHkxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHBvbHkxNng0X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHBvbHkxNng0X3QgdnJlaW50ZXJwcmV0X3AxNl9mMzIoZmxvYXQzMngyX3QgX19wMCkgewotICBwb2x5MTZ4NF90IF9fcmV0OwotICBfX3JldCA9IChwb2x5MTZ4NF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgcG9seTE2eDRfdCB2cmVpbnRlcnByZXRfcDE2X2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7Ci0gIHBvbHkxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHBvbHkxNng0X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHBvbHkxNng0X3QgdnJlaW50ZXJwcmV0X3AxNl9mMTYoZmxvYXQxNng0X3QgX19wMCkgewotICBwb2x5MTZ4NF90IF9fcmV0OwotICBfX3JldCA9IChwb2x5MTZ4NF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgcG9seTE2eDRfdCB2cmVpbnRlcnByZXRfcDE2X2YxNihmbG9hdDE2eDRfdCBfX3AwKSB7Ci0gIHBvbHkxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHBvbHkxNng0X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHBvbHkxNng0X3QgdnJlaW50ZXJwcmV0X3AxNl9zMzIoaW50MzJ4Ml90IF9fcDApIHsKLSAgcG9seTE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSAocG9seTE2eDRfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHBvbHkxNng0X3QgdnJlaW50ZXJwcmV0X3AxNl9zMzIoaW50MzJ4Ml90IF9fcDApIHsKLSAgcG9seTE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSAocG9seTE2eDRfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgcG9seTE2eDRfdCB2cmVpbnRlcnByZXRfcDE2X3M2NChpbnQ2NHgxX3QgX19wMCkgewotICBwb2x5MTZ4NF90IF9fcmV0OwotICBfX3JldCA9IChwb2x5MTZ4NF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgcG9seTE2eDRfdCB2cmVpbnRlcnByZXRfcDE2X3M2NChpbnQ2NHgxX3QgX19wMCkgewotICBwb2x5MTZ4NF90IF9fcmV0OwotICBfX3JldCA9IChwb2x5MTZ4NF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBwb2x5MTZ4NF90IHZyZWludGVycHJldF9wMTZfczE2KGludDE2eDRfdCBfX3AwKSB7Ci0gIHBvbHkxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHBvbHkxNng0X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBwb2x5MTZ4NF90IHZyZWludGVycHJldF9wMTZfczE2KGludDE2eDRfdCBfX3AwKSB7Ci0gIHBvbHkxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHBvbHkxNng0X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHBvbHk4eDE2X3QgdnJlaW50ZXJwcmV0cV9wOF9wMTYocG9seTE2eDhfdCBfX3AwKSB7Ci0gIHBvbHk4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHBvbHk4eDE2X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBwb2x5OHgxNl90IHZyZWludGVycHJldHFfcDhfcDE2KHBvbHkxNng4X3QgX19wMCkgewotICBwb2x5OHgxNl90IF9fcmV0OwotICBfX3JldCA9IChwb2x5OHgxNl90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBwb2x5OHgxNl90IHZyZWludGVycHJldHFfcDhfdTgodWludDh4MTZfdCBfX3AwKSB7Ci0gIHBvbHk4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHBvbHk4eDE2X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBwb2x5OHgxNl90IHZyZWludGVycHJldHFfcDhfdTgodWludDh4MTZfdCBfX3AwKSB7Ci0gIHBvbHk4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHBvbHk4eDE2X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHBvbHk4eDE2X3QgdnJlaW50ZXJwcmV0cV9wOF91MzIodWludDMyeDRfdCBfX3AwKSB7Ci0gIHBvbHk4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHBvbHk4eDE2X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBwb2x5OHgxNl90IHZyZWludGVycHJldHFfcDhfdTMyKHVpbnQzMng0X3QgX19wMCkgewotICBwb2x5OHgxNl90IF9fcmV0OwotICBfX3JldCA9IChwb2x5OHgxNl90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBwb2x5OHgxNl90IHZyZWludGVycHJldHFfcDhfdTY0KHVpbnQ2NHgyX3QgX19wMCkgewotICBwb2x5OHgxNl90IF9fcmV0OwotICBfX3JldCA9IChwb2x5OHgxNl90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgcG9seTh4MTZfdCB2cmVpbnRlcnByZXRxX3A4X3U2NCh1aW50NjR4Ml90IF9fcDApIHsKLSAgcG9seTh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSAocG9seTh4MTZfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgcG9seTh4MTZfdCB2cmVpbnRlcnByZXRxX3A4X3UxNih1aW50MTZ4OF90IF9fcDApIHsKLSAgcG9seTh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSAocG9seTh4MTZfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHBvbHk4eDE2X3QgdnJlaW50ZXJwcmV0cV9wOF91MTYodWludDE2eDhfdCBfX3AwKSB7Ci0gIHBvbHk4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHBvbHk4eDE2X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHBvbHk4eDE2X3QgdnJlaW50ZXJwcmV0cV9wOF9zOChpbnQ4eDE2X3QgX19wMCkgewotICBwb2x5OHgxNl90IF9fcmV0OwotICBfX3JldCA9IChwb2x5OHgxNl90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgcG9seTh4MTZfdCB2cmVpbnRlcnByZXRxX3A4X3M4KGludDh4MTZfdCBfX3AwKSB7Ci0gIHBvbHk4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHBvbHk4eDE2X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHBvbHk4eDE2X3QgdnJlaW50ZXJwcmV0cV9wOF9mMzIoZmxvYXQzMng0X3QgX19wMCkgewotICBwb2x5OHgxNl90IF9fcmV0OwotICBfX3JldCA9IChwb2x5OHgxNl90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgcG9seTh4MTZfdCB2cmVpbnRlcnByZXRxX3A4X2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7Ci0gIHBvbHk4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHBvbHk4eDE2X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHBvbHk4eDE2X3QgdnJlaW50ZXJwcmV0cV9wOF9mMTYoZmxvYXQxNng4X3QgX19wMCkgewotICBwb2x5OHgxNl90IF9fcmV0OwotICBfX3JldCA9IChwb2x5OHgxNl90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgcG9seTh4MTZfdCB2cmVpbnRlcnByZXRxX3A4X2YxNihmbG9hdDE2eDhfdCBfX3AwKSB7Ci0gIHBvbHk4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHBvbHk4eDE2X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHBvbHk4eDE2X3QgdnJlaW50ZXJwcmV0cV9wOF9zMzIoaW50MzJ4NF90IF9fcDApIHsKLSAgcG9seTh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSAocG9seTh4MTZfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHBvbHk4eDE2X3QgdnJlaW50ZXJwcmV0cV9wOF9zMzIoaW50MzJ4NF90IF9fcDApIHsKLSAgcG9seTh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSAocG9seTh4MTZfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgcG9seTh4MTZfdCB2cmVpbnRlcnByZXRxX3A4X3M2NChpbnQ2NHgyX3QgX19wMCkgewotICBwb2x5OHgxNl90IF9fcmV0OwotICBfX3JldCA9IChwb2x5OHgxNl90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgcG9seTh4MTZfdCB2cmVpbnRlcnByZXRxX3A4X3M2NChpbnQ2NHgyX3QgX19wMCkgewotICBwb2x5OHgxNl90IF9fcmV0OwotICBfX3JldCA9IChwb2x5OHgxNl90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBwb2x5OHgxNl90IHZyZWludGVycHJldHFfcDhfczE2KGludDE2eDhfdCBfX3AwKSB7Ci0gIHBvbHk4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHBvbHk4eDE2X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBwb2x5OHgxNl90IHZyZWludGVycHJldHFfcDhfczE2KGludDE2eDhfdCBfX3AwKSB7Ci0gIHBvbHk4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHBvbHk4eDE2X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHBvbHkxNng4X3QgdnJlaW50ZXJwcmV0cV9wMTZfcDgocG9seTh4MTZfdCBfX3AwKSB7Ci0gIHBvbHkxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHBvbHkxNng4X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBwb2x5MTZ4OF90IHZyZWludGVycHJldHFfcDE2X3A4KHBvbHk4eDE2X3QgX19wMCkgewotICBwb2x5MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IChwb2x5MTZ4OF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBwb2x5MTZ4OF90IHZyZWludGVycHJldHFfcDE2X3U4KHVpbnQ4eDE2X3QgX19wMCkgewotICBwb2x5MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IChwb2x5MTZ4OF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgcG9seTE2eDhfdCB2cmVpbnRlcnByZXRxX3AxNl91OCh1aW50OHgxNl90IF9fcDApIHsKLSAgcG9seTE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSAocG9seTE2eDhfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgcG9seTE2eDhfdCB2cmVpbnRlcnByZXRxX3AxNl91MzIodWludDMyeDRfdCBfX3AwKSB7Ci0gIHBvbHkxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHBvbHkxNng4X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBwb2x5MTZ4OF90IHZyZWludGVycHJldHFfcDE2X3UzMih1aW50MzJ4NF90IF9fcDApIHsKLSAgcG9seTE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSAocG9seTE2eDhfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgcG9seTE2eDhfdCB2cmVpbnRlcnByZXRxX3AxNl91NjQodWludDY0eDJfdCBfX3AwKSB7Ci0gIHBvbHkxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHBvbHkxNng4X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBwb2x5MTZ4OF90IHZyZWludGVycHJldHFfcDE2X3U2NCh1aW50NjR4Ml90IF9fcDApIHsKLSAgcG9seTE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSAocG9seTE2eDhfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgcG9seTE2eDhfdCB2cmVpbnRlcnByZXRxX3AxNl91MTYodWludDE2eDhfdCBfX3AwKSB7Ci0gIHBvbHkxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHBvbHkxNng4X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBwb2x5MTZ4OF90IHZyZWludGVycHJldHFfcDE2X3UxNih1aW50MTZ4OF90IF9fcDApIHsKLSAgcG9seTE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSAocG9seTE2eDhfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgcG9seTE2eDhfdCB2cmVpbnRlcnByZXRxX3AxNl9zOChpbnQ4eDE2X3QgX19wMCkgewotICBwb2x5MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IChwb2x5MTZ4OF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgcG9seTE2eDhfdCB2cmVpbnRlcnByZXRxX3AxNl9zOChpbnQ4eDE2X3QgX19wMCkgewotICBwb2x5MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IChwb2x5MTZ4OF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBwb2x5MTZ4OF90IHZyZWludGVycHJldHFfcDE2X2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7Ci0gIHBvbHkxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHBvbHkxNng4X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBwb2x5MTZ4OF90IHZyZWludGVycHJldHFfcDE2X2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7Ci0gIHBvbHkxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHBvbHkxNng4X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHBvbHkxNng4X3QgdnJlaW50ZXJwcmV0cV9wMTZfZjE2KGZsb2F0MTZ4OF90IF9fcDApIHsKLSAgcG9seTE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSAocG9seTE2eDhfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHBvbHkxNng4X3QgdnJlaW50ZXJwcmV0cV9wMTZfZjE2KGZsb2F0MTZ4OF90IF9fcDApIHsKLSAgcG9seTE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSAocG9seTE2eDhfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgcG9seTE2eDhfdCB2cmVpbnRlcnByZXRxX3AxNl9zMzIoaW50MzJ4NF90IF9fcDApIHsKLSAgcG9seTE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSAocG9seTE2eDhfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHBvbHkxNng4X3QgdnJlaW50ZXJwcmV0cV9wMTZfczMyKGludDMyeDRfdCBfX3AwKSB7Ci0gIHBvbHkxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHBvbHkxNng4X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHBvbHkxNng4X3QgdnJlaW50ZXJwcmV0cV9wMTZfczY0KGludDY0eDJfdCBfX3AwKSB7Ci0gIHBvbHkxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHBvbHkxNng4X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBwb2x5MTZ4OF90IHZyZWludGVycHJldHFfcDE2X3M2NChpbnQ2NHgyX3QgX19wMCkgewotICBwb2x5MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IChwb2x5MTZ4OF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBwb2x5MTZ4OF90IHZyZWludGVycHJldHFfcDE2X3MxNihpbnQxNng4X3QgX19wMCkgewotICBwb2x5MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IChwb2x5MTZ4OF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgcG9seTE2eDhfdCB2cmVpbnRlcnByZXRxX3AxNl9zMTYoaW50MTZ4OF90IF9fcDApIHsKLSAgcG9seTE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSAocG9seTE2eDhfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDh4MTZfdCB2cmVpbnRlcnByZXRxX3U4X3A4KHBvbHk4eDE2X3QgX19wMCkgewotICB1aW50OHgxNl90IF9fcmV0OwotICBfX3JldCA9ICh1aW50OHgxNl90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDh4MTZfdCB2cmVpbnRlcnByZXRxX3U4X3A4KHBvbHk4eDE2X3QgX19wMCkgewotICB1aW50OHgxNl90IF9fcmV0OwotICBfX3JldCA9ICh1aW50OHgxNl90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50OHgxNl90IHZyZWludGVycHJldHFfdThfcDE2KHBvbHkxNng4X3QgX19wMCkgewotICB1aW50OHgxNl90IF9fcmV0OwotICBfX3JldCA9ICh1aW50OHgxNl90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDh4MTZfdCB2cmVpbnRlcnByZXRxX3U4X3AxNihwb2x5MTZ4OF90IF9fcDApIHsKLSAgdWludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDh4MTZfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDh4MTZfdCB2cmVpbnRlcnByZXRxX3U4X3UzMih1aW50MzJ4NF90IF9fcDApIHsKLSAgdWludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDh4MTZfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ4eDE2X3QgdnJlaW50ZXJwcmV0cV91OF91MzIodWludDMyeDRfdCBfX3AwKSB7Ci0gIHVpbnQ4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ4eDE2X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ4eDE2X3QgdnJlaW50ZXJwcmV0cV91OF91NjQodWludDY0eDJfdCBfX3AwKSB7Ci0gIHVpbnQ4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ4eDE2X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50OHgxNl90IHZyZWludGVycHJldHFfdThfdTY0KHVpbnQ2NHgyX3QgX19wMCkgewotICB1aW50OHgxNl90IF9fcmV0OwotICBfX3JldCA9ICh1aW50OHgxNl90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50OHgxNl90IHZyZWludGVycHJldHFfdThfdTE2KHVpbnQxNng4X3QgX19wMCkgewotICB1aW50OHgxNl90IF9fcmV0OwotICBfX3JldCA9ICh1aW50OHgxNl90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDh4MTZfdCB2cmVpbnRlcnByZXRxX3U4X3UxNih1aW50MTZ4OF90IF9fcDApIHsKLSAgdWludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDh4MTZfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDh4MTZfdCB2cmVpbnRlcnByZXRxX3U4X3M4KGludDh4MTZfdCBfX3AwKSB7Ci0gIHVpbnQ4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ4eDE2X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50OHgxNl90IHZyZWludGVycHJldHFfdThfczgoaW50OHgxNl90IF9fcDApIHsKLSAgdWludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDh4MTZfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDh4MTZfdCB2cmVpbnRlcnByZXRxX3U4X2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7Ci0gIHVpbnQ4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ4eDE2X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50OHgxNl90IHZyZWludGVycHJldHFfdThfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKLSAgdWludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDh4MTZfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDh4MTZfdCB2cmVpbnRlcnByZXRxX3U4X2YxNihmbG9hdDE2eDhfdCBfX3AwKSB7Ci0gIHVpbnQ4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ4eDE2X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50OHgxNl90IHZyZWludGVycHJldHFfdThfZjE2KGZsb2F0MTZ4OF90IF9fcDApIHsKLSAgdWludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDh4MTZfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDh4MTZfdCB2cmVpbnRlcnByZXRxX3U4X3MzMihpbnQzMng0X3QgX19wMCkgewotICB1aW50OHgxNl90IF9fcmV0OwotICBfX3JldCA9ICh1aW50OHgxNl90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDh4MTZfdCB2cmVpbnRlcnByZXRxX3U4X3MzMihpbnQzMng0X3QgX19wMCkgewotICB1aW50OHgxNl90IF9fcmV0OwotICBfX3JldCA9ICh1aW50OHgxNl90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50OHgxNl90IHZyZWludGVycHJldHFfdThfczY0KGludDY0eDJfdCBfX3AwKSB7Ci0gIHVpbnQ4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ4eDE2X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50OHgxNl90IHZyZWludGVycHJldHFfdThfczY0KGludDY0eDJfdCBfX3AwKSB7Ci0gIHVpbnQ4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ4eDE2X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ4eDE2X3QgdnJlaW50ZXJwcmV0cV91OF9zMTYoaW50MTZ4OF90IF9fcDApIHsKLSAgdWludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDh4MTZfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ4eDE2X3QgdnJlaW50ZXJwcmV0cV91OF9zMTYoaW50MTZ4OF90IF9fcDApIHsKLSAgdWludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDh4MTZfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDMyeDRfdCB2cmVpbnRlcnByZXRxX3UzMl9wOChwb2x5OHgxNl90IF9fcDApIHsKLSAgdWludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDMyeDRfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV91MzJfcDgocG9seTh4MTZfdCBfX3AwKSB7Ci0gIHVpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMng0X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV91MzJfcDE2KHBvbHkxNng4X3QgX19wMCkgewotICB1aW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJ4NF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDMyeDRfdCB2cmVpbnRlcnByZXRxX3UzMl9wMTYocG9seTE2eDhfdCBfX3AwKSB7Ci0gIHVpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMng0X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV91MzJfdTgodWludDh4MTZfdCBfX3AwKSB7Ci0gIHVpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMng0X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MzJ4NF90IHZyZWludGVycHJldHFfdTMyX3U4KHVpbnQ4eDE2X3QgX19wMCkgewotICB1aW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJ4NF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MzJ4NF90IHZyZWludGVycHJldHFfdTMyX3U2NCh1aW50NjR4Ml90IF9fcDApIHsKLSAgdWludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDMyeDRfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV91MzJfdTY0KHVpbnQ2NHgyX3QgX19wMCkgewotICB1aW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJ4NF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MzJ4NF90IHZyZWludGVycHJldHFfdTMyX3UxNih1aW50MTZ4OF90IF9fcDApIHsKLSAgdWludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDMyeDRfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV91MzJfdTE2KHVpbnQxNng4X3QgX19wMCkgewotICB1aW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJ4NF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MzJ4NF90IHZyZWludGVycHJldHFfdTMyX3M4KGludDh4MTZfdCBfX3AwKSB7Ci0gIHVpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMng0X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MzJ4NF90IHZyZWludGVycHJldHFfdTMyX3M4KGludDh4MTZfdCBfX3AwKSB7Ci0gIHVpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMng0X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV91MzJfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKLSAgdWludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDMyeDRfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV91MzJfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKLSAgdWludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDMyeDRfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDMyeDRfdCB2cmVpbnRlcnByZXRxX3UzMl9mMTYoZmxvYXQxNng4X3QgX19wMCkgewotICB1aW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJ4NF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDMyeDRfdCB2cmVpbnRlcnByZXRxX3UzMl9mMTYoZmxvYXQxNng4X3QgX19wMCkgewotICB1aW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJ4NF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MzJ4NF90IHZyZWludGVycHJldHFfdTMyX3MzMihpbnQzMng0X3QgX19wMCkgewotICB1aW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJ4NF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDMyeDRfdCB2cmVpbnRlcnByZXRxX3UzMl9zMzIoaW50MzJ4NF90IF9fcDApIHsKLSAgdWludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDMyeDRfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDMyeDRfdCB2cmVpbnRlcnByZXRxX3UzMl9zNjQoaW50NjR4Ml90IF9fcDApIHsKLSAgdWludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDMyeDRfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV91MzJfczY0KGludDY0eDJfdCBfX3AwKSB7Ci0gIHVpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMng0X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV91MzJfczE2KGludDE2eDhfdCBfX3AwKSB7Ci0gIHVpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMng0X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MzJ4NF90IHZyZWludGVycHJldHFfdTMyX3MxNihpbnQxNng4X3QgX19wMCkgewotICB1aW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJ4NF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50NjR4Ml90IHZyZWludGVycHJldHFfdTY0X3A4KHBvbHk4eDE2X3QgX19wMCkgewotICB1aW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9ICh1aW50NjR4Ml90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDY0eDJfdCB2cmVpbnRlcnByZXRxX3U2NF9wOChwb2x5OHgxNl90IF9fcDApIHsKLSAgdWludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDY0eDJfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDY0eDJfdCB2cmVpbnRlcnByZXRxX3U2NF9wMTYocG9seTE2eDhfdCBfX3AwKSB7Ci0gIHVpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NHgyX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50NjR4Ml90IHZyZWludGVycHJldHFfdTY0X3AxNihwb2x5MTZ4OF90IF9fcDApIHsKLSAgdWludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDY0eDJfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDY0eDJfdCB2cmVpbnRlcnByZXRxX3U2NF91OCh1aW50OHgxNl90IF9fcDApIHsKLSAgdWludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDY0eDJfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ2NHgyX3QgdnJlaW50ZXJwcmV0cV91NjRfdTgodWludDh4MTZfdCBfX3AwKSB7Ci0gIHVpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NHgyX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ2NHgyX3QgdnJlaW50ZXJwcmV0cV91NjRfdTMyKHVpbnQzMng0X3QgX19wMCkgewotICB1aW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9ICh1aW50NjR4Ml90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDY0eDJfdCB2cmVpbnRlcnByZXRxX3U2NF91MzIodWludDMyeDRfdCBfX3AwKSB7Ci0gIHVpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NHgyX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ2NHgyX3QgdnJlaW50ZXJwcmV0cV91NjRfdTE2KHVpbnQxNng4X3QgX19wMCkgewotICB1aW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9ICh1aW50NjR4Ml90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDY0eDJfdCB2cmVpbnRlcnByZXRxX3U2NF91MTYodWludDE2eDhfdCBfX3AwKSB7Ci0gIHVpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NHgyX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ2NHgyX3QgdnJlaW50ZXJwcmV0cV91NjRfczgoaW50OHgxNl90IF9fcDApIHsKLSAgdWludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDY0eDJfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ2NHgyX3QgdnJlaW50ZXJwcmV0cV91NjRfczgoaW50OHgxNl90IF9fcDApIHsKLSAgdWludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDY0eDJfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDY0eDJfdCB2cmVpbnRlcnByZXRxX3U2NF9mMzIoZmxvYXQzMng0X3QgX19wMCkgewotICB1aW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9ICh1aW50NjR4Ml90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDY0eDJfdCB2cmVpbnRlcnByZXRxX3U2NF9mMzIoZmxvYXQzMng0X3QgX19wMCkgewotICB1aW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9ICh1aW50NjR4Ml90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50NjR4Ml90IHZyZWludGVycHJldHFfdTY0X2YxNihmbG9hdDE2eDhfdCBfX3AwKSB7Ci0gIHVpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NHgyX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50NjR4Ml90IHZyZWludGVycHJldHFfdTY0X2YxNihmbG9hdDE2eDhfdCBfX3AwKSB7Ci0gIHVpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NHgyX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ2NHgyX3QgdnJlaW50ZXJwcmV0cV91NjRfczMyKGludDMyeDRfdCBfX3AwKSB7Ci0gIHVpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NHgyX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50NjR4Ml90IHZyZWludGVycHJldHFfdTY0X3MzMihpbnQzMng0X3QgX19wMCkgewotICB1aW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9ICh1aW50NjR4Ml90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50NjR4Ml90IHZyZWludGVycHJldHFfdTY0X3M2NChpbnQ2NHgyX3QgX19wMCkgewotICB1aW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9ICh1aW50NjR4Ml90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDY0eDJfdCB2cmVpbnRlcnByZXRxX3U2NF9zNjQoaW50NjR4Ml90IF9fcDApIHsKLSAgdWludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDY0eDJfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDY0eDJfdCB2cmVpbnRlcnByZXRxX3U2NF9zMTYoaW50MTZ4OF90IF9fcDApIHsKLSAgdWludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDY0eDJfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ2NHgyX3QgdnJlaW50ZXJwcmV0cV91NjRfczE2KGludDE2eDhfdCBfX3AwKSB7Ci0gIHVpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NHgyX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV91MTZfcDgocG9seTh4MTZfdCBfX3AwKSB7Ci0gIHVpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQxNng4X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MTZ4OF90IHZyZWludGVycHJldHFfdTE2X3A4KHBvbHk4eDE2X3QgX19wMCkgewotICB1aW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MTZ4OF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MTZ4OF90IHZyZWludGVycHJldHFfdTE2X3AxNihwb2x5MTZ4OF90IF9fcDApIHsKLSAgdWludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDE2eDhfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV91MTZfcDE2KHBvbHkxNng4X3QgX19wMCkgewotICB1aW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MTZ4OF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MTZ4OF90IHZyZWludGVycHJldHFfdTE2X3U4KHVpbnQ4eDE2X3QgX19wMCkgewotICB1aW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MTZ4OF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDE2eDhfdCB2cmVpbnRlcnByZXRxX3UxNl91OCh1aW50OHgxNl90IF9fcDApIHsKLSAgdWludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDE2eDhfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDE2eDhfdCB2cmVpbnRlcnByZXRxX3UxNl91MzIodWludDMyeDRfdCBfX3AwKSB7Ci0gIHVpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQxNng4X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MTZ4OF90IHZyZWludGVycHJldHFfdTE2X3UzMih1aW50MzJ4NF90IF9fcDApIHsKLSAgdWludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDE2eDhfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDE2eDhfdCB2cmVpbnRlcnByZXRxX3UxNl91NjQodWludDY0eDJfdCBfX3AwKSB7Ci0gIHVpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQxNng4X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MTZ4OF90IHZyZWludGVycHJldHFfdTE2X3U2NCh1aW50NjR4Ml90IF9fcDApIHsKLSAgdWludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDE2eDhfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDE2eDhfdCB2cmVpbnRlcnByZXRxX3UxNl9zOChpbnQ4eDE2X3QgX19wMCkgewotICB1aW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MTZ4OF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDE2eDhfdCB2cmVpbnRlcnByZXRxX3UxNl9zOChpbnQ4eDE2X3QgX19wMCkgewotICB1aW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MTZ4OF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MTZ4OF90IHZyZWludGVycHJldHFfdTE2X2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7Ci0gIHVpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQxNng4X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MTZ4OF90IHZyZWludGVycHJldHFfdTE2X2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7Ci0gIHVpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQxNng4X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV91MTZfZjE2KGZsb2F0MTZ4OF90IF9fcDApIHsKLSAgdWludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDE2eDhfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV91MTZfZjE2KGZsb2F0MTZ4OF90IF9fcDApIHsKLSAgdWludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDE2eDhfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDE2eDhfdCB2cmVpbnRlcnByZXRxX3UxNl9zMzIoaW50MzJ4NF90IF9fcDApIHsKLSAgdWludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDE2eDhfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV91MTZfczMyKGludDMyeDRfdCBfX3AwKSB7Ci0gIHVpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQxNng4X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV91MTZfczY0KGludDY0eDJfdCBfX3AwKSB7Ci0gIHVpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQxNng4X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MTZ4OF90IHZyZWludGVycHJldHFfdTE2X3M2NChpbnQ2NHgyX3QgX19wMCkgewotICB1aW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MTZ4OF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MTZ4OF90IHZyZWludGVycHJldHFfdTE2X3MxNihpbnQxNng4X3QgX19wMCkgewotICB1aW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MTZ4OF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDE2eDhfdCB2cmVpbnRlcnByZXRxX3UxNl9zMTYoaW50MTZ4OF90IF9fcDApIHsKLSAgdWludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDE2eDhfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50OHgxNl90IHZyZWludGVycHJldHFfczhfcDgocG9seTh4MTZfdCBfX3AwKSB7Ci0gIGludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50OHgxNl90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50OHgxNl90IHZyZWludGVycHJldHFfczhfcDgocG9seTh4MTZfdCBfX3AwKSB7Ci0gIGludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50OHgxNl90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ4eDE2X3QgdnJlaW50ZXJwcmV0cV9zOF9wMTYocG9seTE2eDhfdCBfX3AwKSB7Ci0gIGludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50OHgxNl90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50OHgxNl90IHZyZWludGVycHJldHFfczhfcDE2KHBvbHkxNng4X3QgX19wMCkgewotICBpbnQ4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDh4MTZfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50OHgxNl90IHZyZWludGVycHJldHFfczhfdTgodWludDh4MTZfdCBfX3AwKSB7Ci0gIGludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50OHgxNl90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50OHgxNl90IHZyZWludGVycHJldHFfczhfdTgodWludDh4MTZfdCBfX3AwKSB7Ci0gIGludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50OHgxNl90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ4eDE2X3QgdnJlaW50ZXJwcmV0cV9zOF91MzIodWludDMyeDRfdCBfX3AwKSB7Ci0gIGludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50OHgxNl90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50OHgxNl90IHZyZWludGVycHJldHFfczhfdTMyKHVpbnQzMng0X3QgX19wMCkgewotICBpbnQ4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDh4MTZfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50OHgxNl90IHZyZWludGVycHJldHFfczhfdTY0KHVpbnQ2NHgyX3QgX19wMCkgewotICBpbnQ4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDh4MTZfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDh4MTZfdCB2cmVpbnRlcnByZXRxX3M4X3U2NCh1aW50NjR4Ml90IF9fcDApIHsKLSAgaW50OHgxNl90IF9fcmV0OwotICBfX3JldCA9IChpbnQ4eDE2X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDh4MTZfdCB2cmVpbnRlcnByZXRxX3M4X3UxNih1aW50MTZ4OF90IF9fcDApIHsKLSAgaW50OHgxNl90IF9fcmV0OwotICBfX3JldCA9IChpbnQ4eDE2X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQ4eDE2X3QgdnJlaW50ZXJwcmV0cV9zOF91MTYodWludDE2eDhfdCBfX3AwKSB7Ci0gIGludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50OHgxNl90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ4eDE2X3QgdnJlaW50ZXJwcmV0cV9zOF9mMzIoZmxvYXQzMng0X3QgX19wMCkgewotICBpbnQ4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDh4MTZfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDh4MTZfdCB2cmVpbnRlcnByZXRxX3M4X2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7Ci0gIGludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50OHgxNl90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ4eDE2X3QgdnJlaW50ZXJwcmV0cV9zOF9mMTYoZmxvYXQxNng4X3QgX19wMCkgewotICBpbnQ4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDh4MTZfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDh4MTZfdCB2cmVpbnRlcnByZXRxX3M4X2YxNihmbG9hdDE2eDhfdCBfX3AwKSB7Ci0gIGludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50OHgxNl90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ4eDE2X3QgdnJlaW50ZXJwcmV0cV9zOF9zMzIoaW50MzJ4NF90IF9fcDApIHsKLSAgaW50OHgxNl90IF9fcmV0OwotICBfX3JldCA9IChpbnQ4eDE2X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQ4eDE2X3QgdnJlaW50ZXJwcmV0cV9zOF9zMzIoaW50MzJ4NF90IF9fcDApIHsKLSAgaW50OHgxNl90IF9fcmV0OwotICBfX3JldCA9IChpbnQ4eDE2X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDh4MTZfdCB2cmVpbnRlcnByZXRxX3M4X3M2NChpbnQ2NHgyX3QgX19wMCkgewotICBpbnQ4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDh4MTZfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDh4MTZfdCB2cmVpbnRlcnByZXRxX3M4X3M2NChpbnQ2NHgyX3QgX19wMCkgewotICBpbnQ4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDh4MTZfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50OHgxNl90IHZyZWludGVycHJldHFfczhfczE2KGludDE2eDhfdCBfX3AwKSB7Ci0gIGludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50OHgxNl90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50OHgxNl90IHZyZWludGVycHJldHFfczhfczE2KGludDE2eDhfdCBfX3AwKSB7Ci0gIGludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50OHgxNl90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBmbG9hdDMyeDRfdCB2cmVpbnRlcnByZXRxX2YzMl9wOChwb2x5OHgxNl90IF9fcDApIHsKLSAgZmxvYXQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0MzJ4NF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgZmxvYXQzMng0X3QgdnJlaW50ZXJwcmV0cV9mMzJfcDgocG9seTh4MTZfdCBfX3AwKSB7Ci0gIGZsb2F0MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDMyeDRfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgZmxvYXQzMng0X3QgdnJlaW50ZXJwcmV0cV9mMzJfcDE2KHBvbHkxNng4X3QgX19wMCkgewotICBmbG9hdDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQzMng0X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBmbG9hdDMyeDRfdCB2cmVpbnRlcnByZXRxX2YzMl9wMTYocG9seTE2eDhfdCBfX3AwKSB7Ci0gIGZsb2F0MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDMyeDRfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgZmxvYXQzMng0X3QgdnJlaW50ZXJwcmV0cV9mMzJfdTgodWludDh4MTZfdCBfX3AwKSB7Ci0gIGZsb2F0MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDMyeDRfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGZsb2F0MzJ4NF90IHZyZWludGVycHJldHFfZjMyX3U4KHVpbnQ4eDE2X3QgX19wMCkgewotICBmbG9hdDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQzMng0X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGZsb2F0MzJ4NF90IHZyZWludGVycHJldHFfZjMyX3UzMih1aW50MzJ4NF90IF9fcDApIHsKLSAgZmxvYXQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0MzJ4NF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgZmxvYXQzMng0X3QgdnJlaW50ZXJwcmV0cV9mMzJfdTMyKHVpbnQzMng0X3QgX19wMCkgewotICBmbG9hdDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQzMng0X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGZsb2F0MzJ4NF90IHZyZWludGVycHJldHFfZjMyX3U2NCh1aW50NjR4Ml90IF9fcDApIHsKLSAgZmxvYXQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0MzJ4NF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgZmxvYXQzMng0X3QgdnJlaW50ZXJwcmV0cV9mMzJfdTY0KHVpbnQ2NHgyX3QgX19wMCkgewotICBmbG9hdDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQzMng0X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGZsb2F0MzJ4NF90IHZyZWludGVycHJldHFfZjMyX3UxNih1aW50MTZ4OF90IF9fcDApIHsKLSAgZmxvYXQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0MzJ4NF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgZmxvYXQzMng0X3QgdnJlaW50ZXJwcmV0cV9mMzJfdTE2KHVpbnQxNng4X3QgX19wMCkgewotICBmbG9hdDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQzMng0X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGZsb2F0MzJ4NF90IHZyZWludGVycHJldHFfZjMyX3M4KGludDh4MTZfdCBfX3AwKSB7Ci0gIGZsb2F0MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDMyeDRfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGZsb2F0MzJ4NF90IHZyZWludGVycHJldHFfZjMyX3M4KGludDh4MTZfdCBfX3AwKSB7Ci0gIGZsb2F0MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDMyeDRfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgZmxvYXQzMng0X3QgdnJlaW50ZXJwcmV0cV9mMzJfZjE2KGZsb2F0MTZ4OF90IF9fcDApIHsKLSAgZmxvYXQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0MzJ4NF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgZmxvYXQzMng0X3QgdnJlaW50ZXJwcmV0cV9mMzJfZjE2KGZsb2F0MTZ4OF90IF9fcDApIHsKLSAgZmxvYXQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0MzJ4NF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBmbG9hdDMyeDRfdCB2cmVpbnRlcnByZXRxX2YzMl9zMzIoaW50MzJ4NF90IF9fcDApIHsKLSAgZmxvYXQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0MzJ4NF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgZmxvYXQzMng0X3QgdnJlaW50ZXJwcmV0cV9mMzJfczMyKGludDMyeDRfdCBfX3AwKSB7Ci0gIGZsb2F0MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDMyeDRfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgZmxvYXQzMng0X3QgdnJlaW50ZXJwcmV0cV9mMzJfczY0KGludDY0eDJfdCBfX3AwKSB7Ci0gIGZsb2F0MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDMyeDRfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGZsb2F0MzJ4NF90IHZyZWludGVycHJldHFfZjMyX3M2NChpbnQ2NHgyX3QgX19wMCkgewotICBmbG9hdDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQzMng0X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGZsb2F0MzJ4NF90IHZyZWludGVycHJldHFfZjMyX3MxNihpbnQxNng4X3QgX19wMCkgewotICBmbG9hdDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQzMng0X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBmbG9hdDMyeDRfdCB2cmVpbnRlcnByZXRxX2YzMl9zMTYoaW50MTZ4OF90IF9fcDApIHsKLSAgZmxvYXQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0MzJ4NF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBmbG9hdDE2eDhfdCB2cmVpbnRlcnByZXRxX2YxNl9wOChwb2x5OHgxNl90IF9fcDApIHsKLSAgZmxvYXQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0MTZ4OF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgZmxvYXQxNng4X3QgdnJlaW50ZXJwcmV0cV9mMTZfcDgocG9seTh4MTZfdCBfX3AwKSB7Ci0gIGZsb2F0MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDE2eDhfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgZmxvYXQxNng4X3QgdnJlaW50ZXJwcmV0cV9mMTZfcDE2KHBvbHkxNng4X3QgX19wMCkgewotICBmbG9hdDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQxNng4X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBmbG9hdDE2eDhfdCB2cmVpbnRlcnByZXRxX2YxNl9wMTYocG9seTE2eDhfdCBfX3AwKSB7Ci0gIGZsb2F0MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDE2eDhfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgZmxvYXQxNng4X3QgdnJlaW50ZXJwcmV0cV9mMTZfdTgodWludDh4MTZfdCBfX3AwKSB7Ci0gIGZsb2F0MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDE2eDhfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGZsb2F0MTZ4OF90IHZyZWludGVycHJldHFfZjE2X3U4KHVpbnQ4eDE2X3QgX19wMCkgewotICBmbG9hdDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQxNng4X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGZsb2F0MTZ4OF90IHZyZWludGVycHJldHFfZjE2X3UzMih1aW50MzJ4NF90IF9fcDApIHsKLSAgZmxvYXQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0MTZ4OF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgZmxvYXQxNng4X3QgdnJlaW50ZXJwcmV0cV9mMTZfdTMyKHVpbnQzMng0X3QgX19wMCkgewotICBmbG9hdDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQxNng4X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGZsb2F0MTZ4OF90IHZyZWludGVycHJldHFfZjE2X3U2NCh1aW50NjR4Ml90IF9fcDApIHsKLSAgZmxvYXQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0MTZ4OF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgZmxvYXQxNng4X3QgdnJlaW50ZXJwcmV0cV9mMTZfdTY0KHVpbnQ2NHgyX3QgX19wMCkgewotICBmbG9hdDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQxNng4X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGZsb2F0MTZ4OF90IHZyZWludGVycHJldHFfZjE2X3UxNih1aW50MTZ4OF90IF9fcDApIHsKLSAgZmxvYXQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0MTZ4OF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgZmxvYXQxNng4X3QgdnJlaW50ZXJwcmV0cV9mMTZfdTE2KHVpbnQxNng4X3QgX19wMCkgewotICBmbG9hdDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQxNng4X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGZsb2F0MTZ4OF90IHZyZWludGVycHJldHFfZjE2X3M4KGludDh4MTZfdCBfX3AwKSB7Ci0gIGZsb2F0MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDE2eDhfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGZsb2F0MTZ4OF90IHZyZWludGVycHJldHFfZjE2X3M4KGludDh4MTZfdCBfX3AwKSB7Ci0gIGZsb2F0MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDE2eDhfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgZmxvYXQxNng4X3QgdnJlaW50ZXJwcmV0cV9mMTZfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKLSAgZmxvYXQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0MTZ4OF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgZmxvYXQxNng4X3QgdnJlaW50ZXJwcmV0cV9mMTZfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKLSAgZmxvYXQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0MTZ4OF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBmbG9hdDE2eDhfdCB2cmVpbnRlcnByZXRxX2YxNl9zMzIoaW50MzJ4NF90IF9fcDApIHsKLSAgZmxvYXQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0MTZ4OF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgZmxvYXQxNng4X3QgdnJlaW50ZXJwcmV0cV9mMTZfczMyKGludDMyeDRfdCBfX3AwKSB7Ci0gIGZsb2F0MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDE2eDhfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgZmxvYXQxNng4X3QgdnJlaW50ZXJwcmV0cV9mMTZfczY0KGludDY0eDJfdCBfX3AwKSB7Ci0gIGZsb2F0MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDE2eDhfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGZsb2F0MTZ4OF90IHZyZWludGVycHJldHFfZjE2X3M2NChpbnQ2NHgyX3QgX19wMCkgewotICBmbG9hdDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQxNng4X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGZsb2F0MTZ4OF90IHZyZWludGVycHJldHFfZjE2X3MxNihpbnQxNng4X3QgX19wMCkgewotICBmbG9hdDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQxNng4X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBmbG9hdDE2eDhfdCB2cmVpbnRlcnByZXRxX2YxNl9zMTYoaW50MTZ4OF90IF9fcDApIHsKLSAgZmxvYXQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0MTZ4OF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV9zMzJfcDgocG9seTh4MTZfdCBfX3AwKSB7Ci0gIGludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MzJ4NF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MzJ4NF90IHZyZWludGVycHJldHFfczMyX3A4KHBvbHk4eDE2X3QgX19wMCkgewotICBpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDMyeDRfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MzJ4NF90IHZyZWludGVycHJldHFfczMyX3AxNihwb2x5MTZ4OF90IF9fcDApIHsKLSAgaW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IChpbnQzMng0X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV9zMzJfcDE2KHBvbHkxNng4X3QgX19wMCkgewotICBpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDMyeDRfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MzJ4NF90IHZyZWludGVycHJldHFfczMyX3U4KHVpbnQ4eDE2X3QgX19wMCkgewotICBpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDMyeDRfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDMyeDRfdCB2cmVpbnRlcnByZXRxX3MzMl91OCh1aW50OHgxNl90IF9fcDApIHsKLSAgaW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IChpbnQzMng0X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDMyeDRfdCB2cmVpbnRlcnByZXRxX3MzMl91MzIodWludDMyeDRfdCBfX3AwKSB7Ci0gIGludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MzJ4NF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MzJ4NF90IHZyZWludGVycHJldHFfczMyX3UzMih1aW50MzJ4NF90IF9fcDApIHsKLSAgaW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IChpbnQzMng0X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDMyeDRfdCB2cmVpbnRlcnByZXRxX3MzMl91NjQodWludDY0eDJfdCBfX3AwKSB7Ci0gIGludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MzJ4NF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MzJ4NF90IHZyZWludGVycHJldHFfczMyX3U2NCh1aW50NjR4Ml90IF9fcDApIHsKLSAgaW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IChpbnQzMng0X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDMyeDRfdCB2cmVpbnRlcnByZXRxX3MzMl91MTYodWludDE2eDhfdCBfX3AwKSB7Ci0gIGludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MzJ4NF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MzJ4NF90IHZyZWludGVycHJldHFfczMyX3UxNih1aW50MTZ4OF90IF9fcDApIHsKLSAgaW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IChpbnQzMng0X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDMyeDRfdCB2cmVpbnRlcnByZXRxX3MzMl9zOChpbnQ4eDE2X3QgX19wMCkgewotICBpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDMyeDRfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDMyeDRfdCB2cmVpbnRlcnByZXRxX3MzMl9zOChpbnQ4eDE2X3QgX19wMCkgewotICBpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDMyeDRfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MzJ4NF90IHZyZWludGVycHJldHFfczMyX2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7Ci0gIGludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MzJ4NF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MzJ4NF90IHZyZWludGVycHJldHFfczMyX2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7Ci0gIGludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MzJ4NF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV9zMzJfZjE2KGZsb2F0MTZ4OF90IF9fcDApIHsKLSAgaW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IChpbnQzMng0X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV9zMzJfZjE2KGZsb2F0MTZ4OF90IF9fcDApIHsKLSAgaW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IChpbnQzMng0X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDMyeDRfdCB2cmVpbnRlcnByZXRxX3MzMl9zNjQoaW50NjR4Ml90IF9fcDApIHsKLSAgaW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IChpbnQzMng0X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV9zMzJfczY0KGludDY0eDJfdCBfX3AwKSB7Ci0gIGludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MzJ4NF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV9zMzJfczE2KGludDE2eDhfdCBfX3AwKSB7Ci0gIGludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MzJ4NF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MzJ4NF90IHZyZWludGVycHJldHFfczMyX3MxNihpbnQxNng4X3QgX19wMCkgewotICBpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDMyeDRfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50NjR4Ml90IHZyZWludGVycHJldHFfczY0X3A4KHBvbHk4eDE2X3QgX19wMCkgewotICBpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDY0eDJfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDY0eDJfdCB2cmVpbnRlcnByZXRxX3M2NF9wOChwb2x5OHgxNl90IF9fcDApIHsKLSAgaW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IChpbnQ2NHgyX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDY0eDJfdCB2cmVpbnRlcnByZXRxX3M2NF9wMTYocG9seTE2eDhfdCBfX3AwKSB7Ci0gIGludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50NjR4Ml90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50NjR4Ml90IHZyZWludGVycHJldHFfczY0X3AxNihwb2x5MTZ4OF90IF9fcDApIHsKLSAgaW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IChpbnQ2NHgyX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDY0eDJfdCB2cmVpbnRlcnByZXRxX3M2NF91OCh1aW50OHgxNl90IF9fcDApIHsKLSAgaW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IChpbnQ2NHgyX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQ2NHgyX3QgdnJlaW50ZXJwcmV0cV9zNjRfdTgodWludDh4MTZfdCBfX3AwKSB7Ci0gIGludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50NjR4Ml90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ2NHgyX3QgdnJlaW50ZXJwcmV0cV9zNjRfdTMyKHVpbnQzMng0X3QgX19wMCkgewotICBpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDY0eDJfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDY0eDJfdCB2cmVpbnRlcnByZXRxX3M2NF91MzIodWludDMyeDRfdCBfX3AwKSB7Ci0gIGludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50NjR4Ml90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ2NHgyX3QgdnJlaW50ZXJwcmV0cV9zNjRfdTY0KHVpbnQ2NHgyX3QgX19wMCkgewotICBpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDY0eDJfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDY0eDJfdCB2cmVpbnRlcnByZXRxX3M2NF91NjQodWludDY0eDJfdCBfX3AwKSB7Ci0gIGludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50NjR4Ml90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ2NHgyX3QgdnJlaW50ZXJwcmV0cV9zNjRfdTE2KHVpbnQxNng4X3QgX19wMCkgewotICBpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDY0eDJfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDY0eDJfdCB2cmVpbnRlcnByZXRxX3M2NF91MTYodWludDE2eDhfdCBfX3AwKSB7Ci0gIGludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50NjR4Ml90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ2NHgyX3QgdnJlaW50ZXJwcmV0cV9zNjRfczgoaW50OHgxNl90IF9fcDApIHsKLSAgaW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IChpbnQ2NHgyX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQ2NHgyX3QgdnJlaW50ZXJwcmV0cV9zNjRfczgoaW50OHgxNl90IF9fcDApIHsKLSAgaW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IChpbnQ2NHgyX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDY0eDJfdCB2cmVpbnRlcnByZXRxX3M2NF9mMzIoZmxvYXQzMng0X3QgX19wMCkgewotICBpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDY0eDJfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDY0eDJfdCB2cmVpbnRlcnByZXRxX3M2NF9mMzIoZmxvYXQzMng0X3QgX19wMCkgewotICBpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDY0eDJfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50NjR4Ml90IHZyZWludGVycHJldHFfczY0X2YxNihmbG9hdDE2eDhfdCBfX3AwKSB7Ci0gIGludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50NjR4Ml90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50NjR4Ml90IHZyZWludGVycHJldHFfczY0X2YxNihmbG9hdDE2eDhfdCBfX3AwKSB7Ci0gIGludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50NjR4Ml90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ2NHgyX3QgdnJlaW50ZXJwcmV0cV9zNjRfczMyKGludDMyeDRfdCBfX3AwKSB7Ci0gIGludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50NjR4Ml90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50NjR4Ml90IHZyZWludGVycHJldHFfczY0X3MzMihpbnQzMng0X3QgX19wMCkgewotICBpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDY0eDJfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50NjR4Ml90IHZyZWludGVycHJldHFfczY0X3MxNihpbnQxNng4X3QgX19wMCkgewotICBpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDY0eDJfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDY0eDJfdCB2cmVpbnRlcnByZXRxX3M2NF9zMTYoaW50MTZ4OF90IF9fcDApIHsKLSAgaW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IChpbnQ2NHgyX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDE2eDhfdCB2cmVpbnRlcnByZXRxX3MxNl9wOChwb2x5OHgxNl90IF9fcDApIHsKLSAgaW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IChpbnQxNng4X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV9zMTZfcDgocG9seTh4MTZfdCBfX3AwKSB7Ci0gIGludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MTZ4OF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV9zMTZfcDE2KHBvbHkxNng4X3QgX19wMCkgewotICBpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDE2eDhfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDE2eDhfdCB2cmVpbnRlcnByZXRxX3MxNl9wMTYocG9seTE2eDhfdCBfX3AwKSB7Ci0gIGludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MTZ4OF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV9zMTZfdTgodWludDh4MTZfdCBfX3AwKSB7Ci0gIGludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MTZ4OF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MTZ4OF90IHZyZWludGVycHJldHFfczE2X3U4KHVpbnQ4eDE2X3QgX19wMCkgewotICBpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDE2eDhfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MTZ4OF90IHZyZWludGVycHJldHFfczE2X3UzMih1aW50MzJ4NF90IF9fcDApIHsKLSAgaW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IChpbnQxNng4X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV9zMTZfdTMyKHVpbnQzMng0X3QgX19wMCkgewotICBpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDE2eDhfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MTZ4OF90IHZyZWludGVycHJldHFfczE2X3U2NCh1aW50NjR4Ml90IF9fcDApIHsKLSAgaW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IChpbnQxNng4X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV9zMTZfdTY0KHVpbnQ2NHgyX3QgX19wMCkgewotICBpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDE2eDhfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MTZ4OF90IHZyZWludGVycHJldHFfczE2X3UxNih1aW50MTZ4OF90IF9fcDApIHsKLSAgaW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IChpbnQxNng4X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV9zMTZfdTE2KHVpbnQxNng4X3QgX19wMCkgewotICBpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDE2eDhfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MTZ4OF90IHZyZWludGVycHJldHFfczE2X3M4KGludDh4MTZfdCBfX3AwKSB7Ci0gIGludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MTZ4OF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MTZ4OF90IHZyZWludGVycHJldHFfczE2X3M4KGludDh4MTZfdCBfX3AwKSB7Ci0gIGludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MTZ4OF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV9zMTZfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKLSAgaW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IChpbnQxNng4X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV9zMTZfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKLSAgaW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IChpbnQxNng4X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDE2eDhfdCB2cmVpbnRlcnByZXRxX3MxNl9mMTYoZmxvYXQxNng4X3QgX19wMCkgewotICBpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDE2eDhfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDE2eDhfdCB2cmVpbnRlcnByZXRxX3MxNl9mMTYoZmxvYXQxNng4X3QgX19wMCkgewotICBpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDE2eDhfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MTZ4OF90IHZyZWludGVycHJldHFfczE2X3MzMihpbnQzMng0X3QgX19wMCkgewotICBpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDE2eDhfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDE2eDhfdCB2cmVpbnRlcnByZXRxX3MxNl9zMzIoaW50MzJ4NF90IF9fcDApIHsKLSAgaW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IChpbnQxNng4X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDE2eDhfdCB2cmVpbnRlcnByZXRxX3MxNl9zNjQoaW50NjR4Ml90IF9fcDApIHsKLSAgaW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IChpbnQxNng4X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV9zMTZfczY0KGludDY0eDJfdCBfX3AwKSB7Ci0gIGludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MTZ4OF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50OHg4X3QgdnJlaW50ZXJwcmV0X3U4X3A4KHBvbHk4eDhfdCBfX3AwKSB7Ci0gIHVpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDh4OF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDh4OF90IHZyZWludGVycHJldF91OF9wOChwb2x5OHg4X3QgX19wMCkgewotICB1aW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ4eDhfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDh4OF90IHZyZWludGVycHJldF91OF9wMTYocG9seTE2eDRfdCBfX3AwKSB7Ci0gIHVpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDh4OF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDh4OF90IHZyZWludGVycHJldF91OF9wMTYocG9seTE2eDRfdCBfX3AwKSB7Ci0gIHVpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDh4OF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50OHg4X3QgdnJlaW50ZXJwcmV0X3U4X3UzMih1aW50MzJ4Ml90IF9fcDApIHsKLSAgdWludDh4OF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50OHg4X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50OHg4X3QgdnJlaW50ZXJwcmV0X3U4X3UzMih1aW50MzJ4Ml90IF9fcDApIHsKLSAgdWludDh4OF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50OHg4X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ4eDhfdCB2cmVpbnRlcnByZXRfdThfdTY0KHVpbnQ2NHgxX3QgX19wMCkgewotICB1aW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ4eDhfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ4eDhfdCB2cmVpbnRlcnByZXRfdThfdTY0KHVpbnQ2NHgxX3QgX19wMCkgewotICB1aW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ4eDhfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDh4OF90IHZyZWludGVycHJldF91OF91MTYodWludDE2eDRfdCBfX3AwKSB7Ci0gIHVpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDh4OF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDh4OF90IHZyZWludGVycHJldF91OF91MTYodWludDE2eDRfdCBfX3AwKSB7Ci0gIHVpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDh4OF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50OHg4X3QgdnJlaW50ZXJwcmV0X3U4X3M4KGludDh4OF90IF9fcDApIHsKLSAgdWludDh4OF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50OHg4X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50OHg4X3QgdnJlaW50ZXJwcmV0X3U4X3M4KGludDh4OF90IF9fcDApIHsKLSAgdWludDh4OF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50OHg4X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ4eDhfdCB2cmVpbnRlcnByZXRfdThfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKLSAgdWludDh4OF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50OHg4X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50OHg4X3QgdnJlaW50ZXJwcmV0X3U4X2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7Ci0gIHVpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDh4OF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50OHg4X3QgdnJlaW50ZXJwcmV0X3U4X2YxNihmbG9hdDE2eDRfdCBfX3AwKSB7Ci0gIHVpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDh4OF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDh4OF90IHZyZWludGVycHJldF91OF9mMTYoZmxvYXQxNng0X3QgX19wMCkgewotICB1aW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ4eDhfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDh4OF90IHZyZWludGVycHJldF91OF9zMzIoaW50MzJ4Ml90IF9fcDApIHsKLSAgdWludDh4OF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50OHg4X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50OHg4X3QgdnJlaW50ZXJwcmV0X3U4X3MzMihpbnQzMngyX3QgX19wMCkgewotICB1aW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ4eDhfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDh4OF90IHZyZWludGVycHJldF91OF9zNjQoaW50NjR4MV90IF9fcDApIHsKLSAgdWludDh4OF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50OHg4X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50OHg4X3QgdnJlaW50ZXJwcmV0X3U4X3M2NChpbnQ2NHgxX3QgX19wMCkgewotICB1aW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ4eDhfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDh4OF90IHZyZWludGVycHJldF91OF9zMTYoaW50MTZ4NF90IF9fcDApIHsKLSAgdWludDh4OF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50OHg4X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50OHg4X3QgdnJlaW50ZXJwcmV0X3U4X3MxNihpbnQxNng0X3QgX19wMCkgewotICB1aW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ4eDhfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDMyeDJfdCB2cmVpbnRlcnByZXRfdTMyX3A4KHBvbHk4eDhfdCBfX3AwKSB7Ci0gIHVpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMngyX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MzJ4Ml90IHZyZWludGVycHJldF91MzJfcDgocG9seTh4OF90IF9fcDApIHsKLSAgdWludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDMyeDJfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDMyeDJfdCB2cmVpbnRlcnByZXRfdTMyX3AxNihwb2x5MTZ4NF90IF9fcDApIHsKLSAgdWludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDMyeDJfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQzMngyX3QgdnJlaW50ZXJwcmV0X3UzMl9wMTYocG9seTE2eDRfdCBfX3AwKSB7Ci0gIHVpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMngyX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQzMngyX3QgdnJlaW50ZXJwcmV0X3UzMl91OCh1aW50OHg4X3QgX19wMCkgewotICB1aW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJ4Ml90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDMyeDJfdCB2cmVpbnRlcnByZXRfdTMyX3U4KHVpbnQ4eDhfdCBfX3AwKSB7Ci0gIHVpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMngyX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQzMngyX3QgdnJlaW50ZXJwcmV0X3UzMl91NjQodWludDY0eDFfdCBfX3AwKSB7Ci0gIHVpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMngyX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MzJ4Ml90IHZyZWludGVycHJldF91MzJfdTY0KHVpbnQ2NHgxX3QgX19wMCkgewotICB1aW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJ4Ml90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MzJ4Ml90IHZyZWludGVycHJldF91MzJfdTE2KHVpbnQxNng0X3QgX19wMCkgewotICB1aW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJ4Ml90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDMyeDJfdCB2cmVpbnRlcnByZXRfdTMyX3UxNih1aW50MTZ4NF90IF9fcDApIHsKLSAgdWludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDMyeDJfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDMyeDJfdCB2cmVpbnRlcnByZXRfdTMyX3M4KGludDh4OF90IF9fcDApIHsKLSAgdWludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDMyeDJfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQzMngyX3QgdnJlaW50ZXJwcmV0X3UzMl9zOChpbnQ4eDhfdCBfX3AwKSB7Ci0gIHVpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMngyX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQzMngyX3QgdnJlaW50ZXJwcmV0X3UzMl9mMzIoZmxvYXQzMngyX3QgX19wMCkgewotICB1aW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJ4Ml90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDMyeDJfdCB2cmVpbnRlcnByZXRfdTMyX2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7Ci0gIHVpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMngyX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQzMngyX3QgdnJlaW50ZXJwcmV0X3UzMl9mMTYoZmxvYXQxNng0X3QgX19wMCkgewotICB1aW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJ4Ml90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDMyeDJfdCB2cmVpbnRlcnByZXRfdTMyX2YxNihmbG9hdDE2eDRfdCBfX3AwKSB7Ci0gIHVpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMngyX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQzMngyX3QgdnJlaW50ZXJwcmV0X3UzMl9zMzIoaW50MzJ4Ml90IF9fcDApIHsKLSAgdWludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDMyeDJfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQzMngyX3QgdnJlaW50ZXJwcmV0X3UzMl9zMzIoaW50MzJ4Ml90IF9fcDApIHsKLSAgdWludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDMyeDJfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDMyeDJfdCB2cmVpbnRlcnByZXRfdTMyX3M2NChpbnQ2NHgxX3QgX19wMCkgewotICB1aW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJ4Ml90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDMyeDJfdCB2cmVpbnRlcnByZXRfdTMyX3M2NChpbnQ2NHgxX3QgX19wMCkgewotICB1aW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJ4Ml90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MzJ4Ml90IHZyZWludGVycHJldF91MzJfczE2KGludDE2eDRfdCBfX3AwKSB7Ci0gIHVpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMngyX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MzJ4Ml90IHZyZWludGVycHJldF91MzJfczE2KGludDE2eDRfdCBfX3AwKSB7Ci0gIHVpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMngyX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3U2NF9wOChwb2x5OHg4X3QgX19wMCkgewotICB1aW50NjR4MV90IF9fcmV0OwotICBfX3JldCA9ICh1aW50NjR4MV90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDY0eDFfdCB2cmVpbnRlcnByZXRfdTY0X3A4KHBvbHk4eDhfdCBfX3AwKSB7Ci0gIHVpbnQ2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NHgxX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3U2NF9wMTYocG9seTE2eDRfdCBfX3AwKSB7Ci0gIHVpbnQ2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NHgxX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50NjR4MV90IHZyZWludGVycHJldF91NjRfcDE2KHBvbHkxNng0X3QgX19wMCkgewotICB1aW50NjR4MV90IF9fcmV0OwotICBfX3JldCA9ICh1aW50NjR4MV90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50NjR4MV90IHZyZWludGVycHJldF91NjRfdTgodWludDh4OF90IF9fcDApIHsKLSAgdWludDY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDY0eDFfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3U2NF91OCh1aW50OHg4X3QgX19wMCkgewotICB1aW50NjR4MV90IF9fcmV0OwotICBfX3JldCA9ICh1aW50NjR4MV90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50NjR4MV90IHZyZWludGVycHJldF91NjRfdTMyKHVpbnQzMngyX3QgX19wMCkgewotICB1aW50NjR4MV90IF9fcmV0OwotICBfX3JldCA9ICh1aW50NjR4MV90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDY0eDFfdCB2cmVpbnRlcnByZXRfdTY0X3UzMih1aW50MzJ4Ml90IF9fcDApIHsKLSAgdWludDY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDY0eDFfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDY0eDFfdCB2cmVpbnRlcnByZXRfdTY0X3UxNih1aW50MTZ4NF90IF9fcDApIHsKLSAgdWludDY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDY0eDFfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3U2NF91MTYodWludDE2eDRfdCBfX3AwKSB7Ci0gIHVpbnQ2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NHgxX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3U2NF9zOChpbnQ4eDhfdCBfX3AwKSB7Ci0gIHVpbnQ2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NHgxX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50NjR4MV90IHZyZWludGVycHJldF91NjRfczgoaW50OHg4X3QgX19wMCkgewotICB1aW50NjR4MV90IF9fcmV0OwotICBfX3JldCA9ICh1aW50NjR4MV90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50NjR4MV90IHZyZWludGVycHJldF91NjRfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKLSAgdWludDY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDY0eDFfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3U2NF9mMzIoZmxvYXQzMngyX3QgX19wMCkgewotICB1aW50NjR4MV90IF9fcmV0OwotICBfX3JldCA9ICh1aW50NjR4MV90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50NjR4MV90IHZyZWludGVycHJldF91NjRfZjE2KGZsb2F0MTZ4NF90IF9fcDApIHsKLSAgdWludDY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDY0eDFfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3U2NF9mMTYoZmxvYXQxNng0X3QgX19wMCkgewotICB1aW50NjR4MV90IF9fcmV0OwotICBfX3JldCA9ICh1aW50NjR4MV90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50NjR4MV90IHZyZWludGVycHJldF91NjRfczMyKGludDMyeDJfdCBfX3AwKSB7Ci0gIHVpbnQ2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NHgxX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50NjR4MV90IHZyZWludGVycHJldF91NjRfczMyKGludDMyeDJfdCBfX3AwKSB7Ci0gIHVpbnQ2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NHgxX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3U2NF9zNjQoaW50NjR4MV90IF9fcDApIHsKLSAgdWludDY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDY0eDFfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3U2NF9zNjQoaW50NjR4MV90IF9fcDApIHsKLSAgdWludDY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDY0eDFfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDY0eDFfdCB2cmVpbnRlcnByZXRfdTY0X3MxNihpbnQxNng0X3QgX19wMCkgewotICB1aW50NjR4MV90IF9fcmV0OwotICBfX3JldCA9ICh1aW50NjR4MV90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDY0eDFfdCB2cmVpbnRlcnByZXRfdTY0X3MxNihpbnQxNng0X3QgX19wMCkgewotICB1aW50NjR4MV90IF9fcmV0OwotICBfX3JldCA9ICh1aW50NjR4MV90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MTZ4NF90IHZyZWludGVycHJldF91MTZfcDgocG9seTh4OF90IF9fcDApIHsKLSAgdWludDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDE2eDRfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQxNng0X3QgdnJlaW50ZXJwcmV0X3UxNl9wOChwb2x5OHg4X3QgX19wMCkgewotICB1aW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MTZ4NF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MTZ4NF90IHZyZWludGVycHJldF91MTZfcDE2KHBvbHkxNng0X3QgX19wMCkgewotICB1aW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MTZ4NF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDE2eDRfdCB2cmVpbnRlcnByZXRfdTE2X3AxNihwb2x5MTZ4NF90IF9fcDApIHsKLSAgdWludDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDE2eDRfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDE2eDRfdCB2cmVpbnRlcnByZXRfdTE2X3U4KHVpbnQ4eDhfdCBfX3AwKSB7Ci0gIHVpbnQxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQxNng0X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MTZ4NF90IHZyZWludGVycHJldF91MTZfdTgodWludDh4OF90IF9fcDApIHsKLSAgdWludDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDE2eDRfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDE2eDRfdCB2cmVpbnRlcnByZXRfdTE2X3UzMih1aW50MzJ4Ml90IF9fcDApIHsKLSAgdWludDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDE2eDRfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQxNng0X3QgdnJlaW50ZXJwcmV0X3UxNl91MzIodWludDMyeDJfdCBfX3AwKSB7Ci0gIHVpbnQxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQxNng0X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQxNng0X3QgdnJlaW50ZXJwcmV0X3UxNl91NjQodWludDY0eDFfdCBfX3AwKSB7Ci0gIHVpbnQxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQxNng0X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MTZ4NF90IHZyZWludGVycHJldF91MTZfdTY0KHVpbnQ2NHgxX3QgX19wMCkgewotICB1aW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MTZ4NF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MTZ4NF90IHZyZWludGVycHJldF91MTZfczgoaW50OHg4X3QgX19wMCkgewotICB1aW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MTZ4NF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDE2eDRfdCB2cmVpbnRlcnByZXRfdTE2X3M4KGludDh4OF90IF9fcDApIHsKLSAgdWludDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDE2eDRfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDE2eDRfdCB2cmVpbnRlcnByZXRfdTE2X2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7Ci0gIHVpbnQxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQxNng0X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MTZ4NF90IHZyZWludGVycHJldF91MTZfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKLSAgdWludDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDE2eDRfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDE2eDRfdCB2cmVpbnRlcnByZXRfdTE2X2YxNihmbG9hdDE2eDRfdCBfX3AwKSB7Ci0gIHVpbnQxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQxNng0X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MTZ4NF90IHZyZWludGVycHJldF91MTZfZjE2KGZsb2F0MTZ4NF90IF9fcDApIHsKLSAgdWludDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDE2eDRfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDE2eDRfdCB2cmVpbnRlcnByZXRfdTE2X3MzMihpbnQzMngyX3QgX19wMCkgewotICB1aW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MTZ4NF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDE2eDRfdCB2cmVpbnRlcnByZXRfdTE2X3MzMihpbnQzMngyX3QgX19wMCkgewotICB1aW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MTZ4NF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MTZ4NF90IHZyZWludGVycHJldF91MTZfczY0KGludDY0eDFfdCBfX3AwKSB7Ci0gIHVpbnQxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQxNng0X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MTZ4NF90IHZyZWludGVycHJldF91MTZfczY0KGludDY0eDFfdCBfX3AwKSB7Ci0gIHVpbnQxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQxNng0X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQxNng0X3QgdnJlaW50ZXJwcmV0X3UxNl9zMTYoaW50MTZ4NF90IF9fcDApIHsKLSAgdWludDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDE2eDRfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQxNng0X3QgdnJlaW50ZXJwcmV0X3UxNl9zMTYoaW50MTZ4NF90IF9fcDApIHsKLSAgdWludDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDE2eDRfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50OHg4X3QgdnJlaW50ZXJwcmV0X3M4X3A4KHBvbHk4eDhfdCBfX3AwKSB7Ci0gIGludDh4OF90IF9fcmV0OwotICBfX3JldCA9IChpbnQ4eDhfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDh4OF90IHZyZWludGVycHJldF9zOF9wOChwb2x5OHg4X3QgX19wMCkgewotICBpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50OHg4X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDh4OF90IHZyZWludGVycHJldF9zOF9wMTYocG9seTE2eDRfdCBfX3AwKSB7Ci0gIGludDh4OF90IF9fcmV0OwotICBfX3JldCA9IChpbnQ4eDhfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDh4OF90IHZyZWludGVycHJldF9zOF9wMTYocG9seTE2eDRfdCBfX3AwKSB7Ci0gIGludDh4OF90IF9fcmV0OwotICBfX3JldCA9IChpbnQ4eDhfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50OHg4X3QgdnJlaW50ZXJwcmV0X3M4X3U4KHVpbnQ4eDhfdCBfX3AwKSB7Ci0gIGludDh4OF90IF9fcmV0OwotICBfX3JldCA9IChpbnQ4eDhfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDh4OF90IHZyZWludGVycHJldF9zOF91OCh1aW50OHg4X3QgX19wMCkgewotICBpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50OHg4X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDh4OF90IHZyZWludGVycHJldF9zOF91MzIodWludDMyeDJfdCBfX3AwKSB7Ci0gIGludDh4OF90IF9fcmV0OwotICBfX3JldCA9IChpbnQ4eDhfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDh4OF90IHZyZWludGVycHJldF9zOF91MzIodWludDMyeDJfdCBfX3AwKSB7Ci0gIGludDh4OF90IF9fcmV0OwotICBfX3JldCA9IChpbnQ4eDhfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50OHg4X3QgdnJlaW50ZXJwcmV0X3M4X3U2NCh1aW50NjR4MV90IF9fcDApIHsKLSAgaW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDh4OF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50OHg4X3QgdnJlaW50ZXJwcmV0X3M4X3U2NCh1aW50NjR4MV90IF9fcDApIHsKLSAgaW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDh4OF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ4eDhfdCB2cmVpbnRlcnByZXRfczhfdTE2KHVpbnQxNng0X3QgX19wMCkgewotICBpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50OHg4X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQ4eDhfdCB2cmVpbnRlcnByZXRfczhfdTE2KHVpbnQxNng0X3QgX19wMCkgewotICBpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50OHg4X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDh4OF90IHZyZWludGVycHJldF9zOF9mMzIoZmxvYXQzMngyX3QgX19wMCkgewotICBpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50OHg4X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQ4eDhfdCB2cmVpbnRlcnByZXRfczhfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKLSAgaW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDh4OF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ4eDhfdCB2cmVpbnRlcnByZXRfczhfZjE2KGZsb2F0MTZ4NF90IF9fcDApIHsKLSAgaW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDh4OF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50OHg4X3QgdnJlaW50ZXJwcmV0X3M4X2YxNihmbG9hdDE2eDRfdCBfX3AwKSB7Ci0gIGludDh4OF90IF9fcmV0OwotICBfX3JldCA9IChpbnQ4eDhfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50OHg4X3QgdnJlaW50ZXJwcmV0X3M4X3MzMihpbnQzMngyX3QgX19wMCkgewotICBpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50OHg4X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQ4eDhfdCB2cmVpbnRlcnByZXRfczhfczMyKGludDMyeDJfdCBfX3AwKSB7Ci0gIGludDh4OF90IF9fcmV0OwotICBfX3JldCA9IChpbnQ4eDhfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50OHg4X3QgdnJlaW50ZXJwcmV0X3M4X3M2NChpbnQ2NHgxX3QgX19wMCkgewotICBpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50OHg4X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQ4eDhfdCB2cmVpbnRlcnByZXRfczhfczY0KGludDY0eDFfdCBfX3AwKSB7Ci0gIGludDh4OF90IF9fcmV0OwotICBfX3JldCA9IChpbnQ4eDhfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50OHg4X3QgdnJlaW50ZXJwcmV0X3M4X3MxNihpbnQxNng0X3QgX19wMCkgewotICBpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50OHg4X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQ4eDhfdCB2cmVpbnRlcnByZXRfczhfczE2KGludDE2eDRfdCBfX3AwKSB7Ci0gIGludDh4OF90IF9fcmV0OwotICBfX3JldCA9IChpbnQ4eDhfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgZmxvYXQzMngyX3QgdnJlaW50ZXJwcmV0X2YzMl9wOChwb2x5OHg4X3QgX19wMCkgewotICBmbG9hdDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQzMngyX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBmbG9hdDMyeDJfdCB2cmVpbnRlcnByZXRfZjMyX3A4KHBvbHk4eDhfdCBfX3AwKSB7Ci0gIGZsb2F0MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDMyeDJfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgZmxvYXQzMngyX3QgdnJlaW50ZXJwcmV0X2YzMl9wMTYocG9seTE2eDRfdCBfX3AwKSB7Ci0gIGZsb2F0MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDMyeDJfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGZsb2F0MzJ4Ml90IHZyZWludGVycHJldF9mMzJfcDE2KHBvbHkxNng0X3QgX19wMCkgewotICBmbG9hdDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQzMngyX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGZsb2F0MzJ4Ml90IHZyZWludGVycHJldF9mMzJfdTgodWludDh4OF90IF9fcDApIHsKLSAgZmxvYXQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgZmxvYXQzMngyX3QgdnJlaW50ZXJwcmV0X2YzMl91OCh1aW50OHg4X3QgX19wMCkgewotICBmbG9hdDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQzMngyX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGZsb2F0MzJ4Ml90IHZyZWludGVycHJldF9mMzJfdTMyKHVpbnQzMngyX3QgX19wMCkgewotICBmbG9hdDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQzMngyX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBmbG9hdDMyeDJfdCB2cmVpbnRlcnByZXRfZjMyX3UzMih1aW50MzJ4Ml90IF9fcDApIHsKLSAgZmxvYXQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBmbG9hdDMyeDJfdCB2cmVpbnRlcnByZXRfZjMyX3U2NCh1aW50NjR4MV90IF9fcDApIHsKLSAgZmxvYXQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgZmxvYXQzMngyX3QgdnJlaW50ZXJwcmV0X2YzMl91NjQodWludDY0eDFfdCBfX3AwKSB7Ci0gIGZsb2F0MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDMyeDJfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgZmxvYXQzMngyX3QgdnJlaW50ZXJwcmV0X2YzMl91MTYodWludDE2eDRfdCBfX3AwKSB7Ci0gIGZsb2F0MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDMyeDJfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGZsb2F0MzJ4Ml90IHZyZWludGVycHJldF9mMzJfdTE2KHVpbnQxNng0X3QgX19wMCkgewotICBmbG9hdDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQzMngyX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGZsb2F0MzJ4Ml90IHZyZWludGVycHJldF9mMzJfczgoaW50OHg4X3QgX19wMCkgewotICBmbG9hdDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQzMngyX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBmbG9hdDMyeDJfdCB2cmVpbnRlcnByZXRfZjMyX3M4KGludDh4OF90IF9fcDApIHsKLSAgZmxvYXQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBmbG9hdDMyeDJfdCB2cmVpbnRlcnByZXRfZjMyX2YxNihmbG9hdDE2eDRfdCBfX3AwKSB7Ci0gIGZsb2F0MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDMyeDJfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGZsb2F0MzJ4Ml90IHZyZWludGVycHJldF9mMzJfZjE2KGZsb2F0MTZ4NF90IF9fcDApIHsKLSAgZmxvYXQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBmbG9hdDMyeDJfdCB2cmVpbnRlcnByZXRfZjMyX3MzMihpbnQzMngyX3QgX19wMCkgewotICBmbG9hdDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQzMngyX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBmbG9hdDMyeDJfdCB2cmVpbnRlcnByZXRfZjMyX3MzMihpbnQzMngyX3QgX19wMCkgewotICBmbG9hdDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQzMngyX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGZsb2F0MzJ4Ml90IHZyZWludGVycHJldF9mMzJfczY0KGludDY0eDFfdCBfX3AwKSB7Ci0gIGZsb2F0MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDMyeDJfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGZsb2F0MzJ4Ml90IHZyZWludGVycHJldF9mMzJfczY0KGludDY0eDFfdCBfX3AwKSB7Ci0gIGZsb2F0MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDMyeDJfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgZmxvYXQzMngyX3QgdnJlaW50ZXJwcmV0X2YzMl9zMTYoaW50MTZ4NF90IF9fcDApIHsKLSAgZmxvYXQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgZmxvYXQzMngyX3QgdnJlaW50ZXJwcmV0X2YzMl9zMTYoaW50MTZ4NF90IF9fcDApIHsKLSAgZmxvYXQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBmbG9hdDE2eDRfdCB2cmVpbnRlcnByZXRfZjE2X3A4KHBvbHk4eDhfdCBfX3AwKSB7Ci0gIGZsb2F0MTZ4NF90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDE2eDRfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGZsb2F0MTZ4NF90IHZyZWludGVycHJldF9mMTZfcDgocG9seTh4OF90IF9fcDApIHsKLSAgZmxvYXQxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0MTZ4NF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBmbG9hdDE2eDRfdCB2cmVpbnRlcnByZXRfZjE2X3AxNihwb2x5MTZ4NF90IF9fcDApIHsKLSAgZmxvYXQxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0MTZ4NF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgZmxvYXQxNng0X3QgdnJlaW50ZXJwcmV0X2YxNl9wMTYocG9seTE2eDRfdCBfX3AwKSB7Ci0gIGZsb2F0MTZ4NF90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDE2eDRfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgZmxvYXQxNng0X3QgdnJlaW50ZXJwcmV0X2YxNl91OCh1aW50OHg4X3QgX19wMCkgewotICBmbG9hdDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQxNng0X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBmbG9hdDE2eDRfdCB2cmVpbnRlcnByZXRfZjE2X3U4KHVpbnQ4eDhfdCBfX3AwKSB7Ci0gIGZsb2F0MTZ4NF90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDE2eDRfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgZmxvYXQxNng0X3QgdnJlaW50ZXJwcmV0X2YxNl91MzIodWludDMyeDJfdCBfX3AwKSB7Ci0gIGZsb2F0MTZ4NF90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDE2eDRfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGZsb2F0MTZ4NF90IHZyZWludGVycHJldF9mMTZfdTMyKHVpbnQzMngyX3QgX19wMCkgewotICBmbG9hdDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQxNng0X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGZsb2F0MTZ4NF90IHZyZWludGVycHJldF9mMTZfdTY0KHVpbnQ2NHgxX3QgX19wMCkgewotICBmbG9hdDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQxNng0X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBmbG9hdDE2eDRfdCB2cmVpbnRlcnByZXRfZjE2X3U2NCh1aW50NjR4MV90IF9fcDApIHsKLSAgZmxvYXQxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0MTZ4NF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBmbG9hdDE2eDRfdCB2cmVpbnRlcnByZXRfZjE2X3UxNih1aW50MTZ4NF90IF9fcDApIHsKLSAgZmxvYXQxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0MTZ4NF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgZmxvYXQxNng0X3QgdnJlaW50ZXJwcmV0X2YxNl91MTYodWludDE2eDRfdCBfX3AwKSB7Ci0gIGZsb2F0MTZ4NF90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDE2eDRfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgZmxvYXQxNng0X3QgdnJlaW50ZXJwcmV0X2YxNl9zOChpbnQ4eDhfdCBfX3AwKSB7Ci0gIGZsb2F0MTZ4NF90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDE2eDRfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGZsb2F0MTZ4NF90IHZyZWludGVycHJldF9mMTZfczgoaW50OHg4X3QgX19wMCkgewotICBmbG9hdDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQxNng0X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGZsb2F0MTZ4NF90IHZyZWludGVycHJldF9mMTZfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKLSAgZmxvYXQxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0MTZ4NF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgZmxvYXQxNng0X3QgdnJlaW50ZXJwcmV0X2YxNl9mMzIoZmxvYXQzMngyX3QgX19wMCkgewotICBmbG9hdDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQxNng0X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGZsb2F0MTZ4NF90IHZyZWludGVycHJldF9mMTZfczMyKGludDMyeDJfdCBfX3AwKSB7Ci0gIGZsb2F0MTZ4NF90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDE2eDRfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGZsb2F0MTZ4NF90IHZyZWludGVycHJldF9mMTZfczMyKGludDMyeDJfdCBfX3AwKSB7Ci0gIGZsb2F0MTZ4NF90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDE2eDRfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgZmxvYXQxNng0X3QgdnJlaW50ZXJwcmV0X2YxNl9zNjQoaW50NjR4MV90IF9fcDApIHsKLSAgZmxvYXQxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0MTZ4NF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgZmxvYXQxNng0X3QgdnJlaW50ZXJwcmV0X2YxNl9zNjQoaW50NjR4MV90IF9fcDApIHsKLSAgZmxvYXQxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0MTZ4NF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBmbG9hdDE2eDRfdCB2cmVpbnRlcnByZXRfZjE2X3MxNihpbnQxNng0X3QgX19wMCkgewotICBmbG9hdDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQxNng0X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBmbG9hdDE2eDRfdCB2cmVpbnRlcnByZXRfZjE2X3MxNihpbnQxNng0X3QgX19wMCkgewotICBmbG9hdDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQxNng0X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDMyeDJfdCB2cmVpbnRlcnByZXRfczMyX3A4KHBvbHk4eDhfdCBfX3AwKSB7Ci0gIGludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MzJ4Ml90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MzJ4Ml90IHZyZWludGVycHJldF9zMzJfcDgocG9seTh4OF90IF9fcDApIHsKLSAgaW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IChpbnQzMngyX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDMyeDJfdCB2cmVpbnRlcnByZXRfczMyX3AxNihwb2x5MTZ4NF90IF9fcDApIHsKLSAgaW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IChpbnQzMngyX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQzMngyX3QgdnJlaW50ZXJwcmV0X3MzMl9wMTYocG9seTE2eDRfdCBfX3AwKSB7Ci0gIGludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MzJ4Ml90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQzMngyX3QgdnJlaW50ZXJwcmV0X3MzMl91OCh1aW50OHg4X3QgX19wMCkgewotICBpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDMyeDJfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDMyeDJfdCB2cmVpbnRlcnByZXRfczMyX3U4KHVpbnQ4eDhfdCBfX3AwKSB7Ci0gIGludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MzJ4Ml90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQzMngyX3QgdnJlaW50ZXJwcmV0X3MzMl91MzIodWludDMyeDJfdCBfX3AwKSB7Ci0gIGludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MzJ4Ml90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MzJ4Ml90IHZyZWludGVycHJldF9zMzJfdTMyKHVpbnQzMngyX3QgX19wMCkgewotICBpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDMyeDJfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MzJ4Ml90IHZyZWludGVycHJldF9zMzJfdTY0KHVpbnQ2NHgxX3QgX19wMCkgewotICBpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDMyeDJfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDMyeDJfdCB2cmVpbnRlcnByZXRfczMyX3U2NCh1aW50NjR4MV90IF9fcDApIHsKLSAgaW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IChpbnQzMngyX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDMyeDJfdCB2cmVpbnRlcnByZXRfczMyX3UxNih1aW50MTZ4NF90IF9fcDApIHsKLSAgaW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IChpbnQzMngyX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQzMngyX3QgdnJlaW50ZXJwcmV0X3MzMl91MTYodWludDE2eDRfdCBfX3AwKSB7Ci0gIGludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MzJ4Ml90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQzMngyX3QgdnJlaW50ZXJwcmV0X3MzMl9zOChpbnQ4eDhfdCBfX3AwKSB7Ci0gIGludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MzJ4Ml90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MzJ4Ml90IHZyZWludGVycHJldF9zMzJfczgoaW50OHg4X3QgX19wMCkgewotICBpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDMyeDJfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MzJ4Ml90IHZyZWludGVycHJldF9zMzJfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKLSAgaW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IChpbnQzMngyX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQzMngyX3QgdnJlaW50ZXJwcmV0X3MzMl9mMzIoZmxvYXQzMngyX3QgX19wMCkgewotICBpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDMyeDJfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MzJ4Ml90IHZyZWludGVycHJldF9zMzJfZjE2KGZsb2F0MTZ4NF90IF9fcDApIHsKLSAgaW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IChpbnQzMngyX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQzMngyX3QgdnJlaW50ZXJwcmV0X3MzMl9mMTYoZmxvYXQxNng0X3QgX19wMCkgewotICBpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDMyeDJfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MzJ4Ml90IHZyZWludGVycHJldF9zMzJfczY0KGludDY0eDFfdCBfX3AwKSB7Ci0gIGludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MzJ4Ml90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MzJ4Ml90IHZyZWludGVycHJldF9zMzJfczY0KGludDY0eDFfdCBfX3AwKSB7Ci0gIGludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MzJ4Ml90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQzMngyX3QgdnJlaW50ZXJwcmV0X3MzMl9zMTYoaW50MTZ4NF90IF9fcDApIHsKLSAgaW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IChpbnQzMngyX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQzMngyX3QgdnJlaW50ZXJwcmV0X3MzMl9zMTYoaW50MTZ4NF90IF9fcDApIHsKLSAgaW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IChpbnQzMngyX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDY0eDFfdCB2cmVpbnRlcnByZXRfczY0X3A4KHBvbHk4eDhfdCBfX3AwKSB7Ci0gIGludDY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50NjR4MV90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50NjR4MV90IHZyZWludGVycHJldF9zNjRfcDgocG9seTh4OF90IF9fcDApIHsKLSAgaW50NjR4MV90IF9fcmV0OwotICBfX3JldCA9IChpbnQ2NHgxX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDY0eDFfdCB2cmVpbnRlcnByZXRfczY0X3AxNihwb2x5MTZ4NF90IF9fcDApIHsKLSAgaW50NjR4MV90IF9fcmV0OwotICBfX3JldCA9IChpbnQ2NHgxX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3M2NF9wMTYocG9seTE2eDRfdCBfX3AwKSB7Ci0gIGludDY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50NjR4MV90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3M2NF91OCh1aW50OHg4X3QgX19wMCkgewotICBpbnQ2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDY0eDFfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDY0eDFfdCB2cmVpbnRlcnByZXRfczY0X3U4KHVpbnQ4eDhfdCBfX3AwKSB7Ci0gIGludDY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50NjR4MV90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3M2NF91MzIodWludDMyeDJfdCBfX3AwKSB7Ci0gIGludDY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50NjR4MV90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50NjR4MV90IHZyZWludGVycHJldF9zNjRfdTMyKHVpbnQzMngyX3QgX19wMCkgewotICBpbnQ2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDY0eDFfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50NjR4MV90IHZyZWludGVycHJldF9zNjRfdTY0KHVpbnQ2NHgxX3QgX19wMCkgewotICBpbnQ2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDY0eDFfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDY0eDFfdCB2cmVpbnRlcnByZXRfczY0X3U2NCh1aW50NjR4MV90IF9fcDApIHsKLSAgaW50NjR4MV90IF9fcmV0OwotICBfX3JldCA9IChpbnQ2NHgxX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDY0eDFfdCB2cmVpbnRlcnByZXRfczY0X3UxNih1aW50MTZ4NF90IF9fcDApIHsKLSAgaW50NjR4MV90IF9fcmV0OwotICBfX3JldCA9IChpbnQ2NHgxX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3M2NF91MTYodWludDE2eDRfdCBfX3AwKSB7Ci0gIGludDY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50NjR4MV90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3M2NF9zOChpbnQ4eDhfdCBfX3AwKSB7Ci0gIGludDY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50NjR4MV90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50NjR4MV90IHZyZWludGVycHJldF9zNjRfczgoaW50OHg4X3QgX19wMCkgewotICBpbnQ2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDY0eDFfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50NjR4MV90IHZyZWludGVycHJldF9zNjRfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKLSAgaW50NjR4MV90IF9fcmV0OwotICBfX3JldCA9IChpbnQ2NHgxX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3M2NF9mMzIoZmxvYXQzMngyX3QgX19wMCkgewotICBpbnQ2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDY0eDFfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50NjR4MV90IHZyZWludGVycHJldF9zNjRfZjE2KGZsb2F0MTZ4NF90IF9fcDApIHsKLSAgaW50NjR4MV90IF9fcmV0OwotICBfX3JldCA9IChpbnQ2NHgxX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3M2NF9mMTYoZmxvYXQxNng0X3QgX19wMCkgewotICBpbnQ2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDY0eDFfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50NjR4MV90IHZyZWludGVycHJldF9zNjRfczMyKGludDMyeDJfdCBfX3AwKSB7Ci0gIGludDY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50NjR4MV90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50NjR4MV90IHZyZWludGVycHJldF9zNjRfczMyKGludDMyeDJfdCBfX3AwKSB7Ci0gIGludDY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50NjR4MV90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3M2NF9zMTYoaW50MTZ4NF90IF9fcDApIHsKLSAgaW50NjR4MV90IF9fcmV0OwotICBfX3JldCA9IChpbnQ2NHgxX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3M2NF9zMTYoaW50MTZ4NF90IF9fcDApIHsKLSAgaW50NjR4MV90IF9fcmV0OwotICBfX3JldCA9IChpbnQ2NHgxX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDE2eDRfdCB2cmVpbnRlcnByZXRfczE2X3A4KHBvbHk4eDhfdCBfX3AwKSB7Ci0gIGludDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MTZ4NF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MTZ4NF90IHZyZWludGVycHJldF9zMTZfcDgocG9seTh4OF90IF9fcDApIHsKLSAgaW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9IChpbnQxNng0X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDE2eDRfdCB2cmVpbnRlcnByZXRfczE2X3AxNihwb2x5MTZ4NF90IF9fcDApIHsKLSAgaW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9IChpbnQxNng0X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQxNng0X3QgdnJlaW50ZXJwcmV0X3MxNl9wMTYocG9seTE2eDRfdCBfX3AwKSB7Ci0gIGludDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MTZ4NF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQxNng0X3QgdnJlaW50ZXJwcmV0X3MxNl91OCh1aW50OHg4X3QgX19wMCkgewotICBpbnQxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDE2eDRfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDE2eDRfdCB2cmVpbnRlcnByZXRfczE2X3U4KHVpbnQ4eDhfdCBfX3AwKSB7Ci0gIGludDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MTZ4NF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQxNng0X3QgdnJlaW50ZXJwcmV0X3MxNl91MzIodWludDMyeDJfdCBfX3AwKSB7Ci0gIGludDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MTZ4NF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MTZ4NF90IHZyZWludGVycHJldF9zMTZfdTMyKHVpbnQzMngyX3QgX19wMCkgewotICBpbnQxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDE2eDRfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MTZ4NF90IHZyZWludGVycHJldF9zMTZfdTY0KHVpbnQ2NHgxX3QgX19wMCkgewotICBpbnQxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDE2eDRfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDE2eDRfdCB2cmVpbnRlcnByZXRfczE2X3U2NCh1aW50NjR4MV90IF9fcDApIHsKLSAgaW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9IChpbnQxNng0X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDE2eDRfdCB2cmVpbnRlcnByZXRfczE2X3UxNih1aW50MTZ4NF90IF9fcDApIHsKLSAgaW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9IChpbnQxNng0X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQxNng0X3QgdnJlaW50ZXJwcmV0X3MxNl91MTYodWludDE2eDRfdCBfX3AwKSB7Ci0gIGludDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MTZ4NF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQxNng0X3QgdnJlaW50ZXJwcmV0X3MxNl9zOChpbnQ4eDhfdCBfX3AwKSB7Ci0gIGludDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MTZ4NF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MTZ4NF90IHZyZWludGVycHJldF9zMTZfczgoaW50OHg4X3QgX19wMCkgewotICBpbnQxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDE2eDRfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MTZ4NF90IHZyZWludGVycHJldF9zMTZfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKLSAgaW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9IChpbnQxNng0X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQxNng0X3QgdnJlaW50ZXJwcmV0X3MxNl9mMzIoZmxvYXQzMngyX3QgX19wMCkgewotICBpbnQxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDE2eDRfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MTZ4NF90IHZyZWludGVycHJldF9zMTZfZjE2KGZsb2F0MTZ4NF90IF9fcDApIHsKLSAgaW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9IChpbnQxNng0X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQxNng0X3QgdnJlaW50ZXJwcmV0X3MxNl9mMTYoZmxvYXQxNng0X3QgX19wMCkgewotICBpbnQxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDE2eDRfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MTZ4NF90IHZyZWludGVycHJldF9zMTZfczMyKGludDMyeDJfdCBfX3AwKSB7Ci0gIGludDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MTZ4NF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MTZ4NF90IHZyZWludGVycHJldF9zMTZfczMyKGludDMyeDJfdCBfX3AwKSB7Ci0gIGludDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MTZ4NF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQxNng0X3QgdnJlaW50ZXJwcmV0X3MxNl9zNjQoaW50NjR4MV90IF9fcDApIHsKLSAgaW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9IChpbnQxNng0X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQxNng0X3QgdnJlaW50ZXJwcmV0X3MxNl9zNjQoaW50NjR4MV90IF9fcDApIHsKLSAgaW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9IChpbnQxNng0X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2VuZGlmCi0jaWYgX19BUk1fQVJDSCA+PSA4Ci0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MzJ4NF90IHZjdnRhcV9zMzJfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKLSAgaW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRhcV9zMzJfdigoaW50OHgxNl90KV9fcDAsIDM0KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MzJ4NF90IHZjdnRhcV9zMzJfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKLSAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIGludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0YXFfczMyX3YoKGludDh4MTZfdClfX3JldjAsIDM0KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDMyeDJfdCB2Y3Z0YV9zMzJfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKLSAgaW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRhX3MzMl92KChpbnQ4eDhfdClfX3AwLCAyKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MzJ4Ml90IHZjdnRhX3MzMl9mMzIoZmxvYXQzMngyX3QgX19wMCkgewotICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgaW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRhX3MzMl92KChpbnQ4eDhfdClfX3JldjAsIDIpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDMyeDRfdCB2Y3Z0YXFfdTMyX2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7Ci0gIHVpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRhcV91MzJfdigoaW50OHgxNl90KV9fcDAsIDUwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDMyeDRfdCB2Y3Z0YXFfdTMyX2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7Ci0gIGZsb2F0MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICB1aW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0YXFfdTMyX3YoKGludDh4MTZfdClfX3JldjAsIDUwKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQzMngyX3QgdmN2dGFfdTMyX2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7Ci0gIHVpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRhX3UzMl92KChpbnQ4eDhfdClfX3AwLCAxOCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQzMngyX3QgdmN2dGFfdTMyX2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7Ci0gIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICB1aW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0YV91MzJfdigoaW50OHg4X3QpX19yZXYwLCAxOCk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQzMng0X3QgdmN2dG1xX3MzMl9mMzIoZmxvYXQzMng0X3QgX19wMCkgewotICBpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdmN2dG1xX3MzMl92KChpbnQ4eDE2X3QpX19wMCwgMzQpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQzMng0X3QgdmN2dG1xX3MzMl9mMzIoZmxvYXQzMng0X3QgX19wMCkgewotICBmbG9hdDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgaW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRtcV9zMzJfdigoaW50OHgxNl90KV9fcmV2MCwgMzQpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MzJ4Ml90IHZjdnRtX3MzMl9mMzIoZmxvYXQzMngyX3QgX19wMCkgewotICBpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdmN2dG1fczMyX3YoKGludDh4OF90KV9fcDAsIDIpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQzMngyX3QgdmN2dG1fczMyX2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7Ci0gIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICBpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdmN2dG1fczMyX3YoKGludDh4OF90KV9fcmV2MCwgMik7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MzJ4NF90IHZjdnRtcV91MzJfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKLSAgdWludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdmN2dG1xX3UzMl92KChpbnQ4eDE2X3QpX19wMCwgNTApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MzJ4NF90IHZjdnRtcV91MzJfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKLSAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRtcV91MzJfdigoaW50OHgxNl90KV9fcmV2MCwgNTApOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDMyeDJfdCB2Y3Z0bV91MzJfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKLSAgdWludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdmN2dG1fdTMyX3YoKGludDh4OF90KV9fcDAsIDE4KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDMyeDJfdCB2Y3Z0bV91MzJfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKLSAgZmxvYXQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIHVpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRtX3UzMl92KChpbnQ4eDhfdClfX3JldjAsIDE4KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDMyeDRfdCB2Y3Z0bnFfczMyX2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7Ci0gIGludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0bnFfczMyX3YoKGludDh4MTZfdClfX3AwLCAzNCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDMyeDRfdCB2Y3Z0bnFfczMyX2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7Ci0gIGZsb2F0MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICBpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdmN2dG5xX3MzMl92KChpbnQ4eDE2X3QpX19yZXYwLCAzNCk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQzMngyX3QgdmN2dG5fczMyX2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7Ci0gIGludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0bl9zMzJfdigoaW50OHg4X3QpX19wMCwgMik7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDMyeDJfdCB2Y3Z0bl9zMzJfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKLSAgZmxvYXQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIGludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0bl9zMzJfdigoaW50OHg4X3QpX19yZXYwLCAyKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQzMng0X3QgdmN2dG5xX3UzMl9mMzIoZmxvYXQzMng0X3QgX19wMCkgewotICB1aW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0bnFfdTMyX3YoKGludDh4MTZfdClfX3AwLCA1MCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQzMng0X3QgdmN2dG5xX3UzMl9mMzIoZmxvYXQzMng0X3QgX19wMCkgewotICBmbG9hdDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgdWludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdmN2dG5xX3UzMl92KChpbnQ4eDE2X3QpX19yZXYwLCA1MCk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MzJ4Ml90IHZjdnRuX3UzMl9mMzIoZmxvYXQzMngyX3QgX19wMCkgewotICB1aW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0bl91MzJfdigoaW50OHg4X3QpX19wMCwgMTgpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MzJ4Ml90IHZjdnRuX3UzMl9mMzIoZmxvYXQzMngyX3QgX19wMCkgewotICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgdWludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdmN2dG5fdTMyX3YoKGludDh4OF90KV9fcmV2MCwgMTgpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MzJ4NF90IHZjdnRwcV9zMzJfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKLSAgaW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRwcV9zMzJfdigoaW50OHgxNl90KV9fcDAsIDM0KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MzJ4NF90IHZjdnRwcV9zMzJfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKLSAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIGludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0cHFfczMyX3YoKGludDh4MTZfdClfX3JldjAsIDM0KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDMyeDJfdCB2Y3Z0cF9zMzJfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKLSAgaW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRwX3MzMl92KChpbnQ4eDhfdClfX3AwLCAyKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MzJ4Ml90IHZjdnRwX3MzMl9mMzIoZmxvYXQzMngyX3QgX19wMCkgewotICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgaW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRwX3MzMl92KChpbnQ4eDhfdClfX3JldjAsIDIpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDMyeDRfdCB2Y3Z0cHFfdTMyX2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7Ci0gIHVpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRwcV91MzJfdigoaW50OHgxNl90KV9fcDAsIDUwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDMyeDRfdCB2Y3Z0cHFfdTMyX2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7Ci0gIGZsb2F0MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICB1aW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0cHFfdTMyX3YoKGludDh4MTZfdClfX3JldjAsIDUwKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQzMngyX3QgdmN2dHBfdTMyX2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7Ci0gIHVpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRwX3UzMl92KChpbnQ4eDhfdClfX3AwLCAxOCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQzMngyX3QgdmN2dHBfdTMyX2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7Ci0gIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICB1aW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0cF91MzJfdigoaW50OHg4X3QpX19yZXYwLCAxOCk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNlbmRpZgotI2lmIF9fQVJNX0FSQ0ggPj0gOCAmJiBkZWZpbmVkKF9fQVJNX0ZFQVRVUkVfRElSRUNURURfUk9VTkRJTkcpCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgZmxvYXQzMng0X3QgdnJuZHFfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKLSAgZmxvYXQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cm5kcV92KChpbnQ4eDE2X3QpX19wMCwgNDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBmbG9hdDMyeDRfdCB2cm5kcV9mMzIoZmxvYXQzMng0X3QgX19wMCkgewotICBmbG9hdDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgZmxvYXQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cm5kcV92KChpbnQ4eDE2X3QpX19yZXYwLCA0MSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBmbG9hdDMyeDJfdCB2cm5kX2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7Ci0gIGZsb2F0MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDMyeDJfdCkgX19idWlsdGluX25lb25fdnJuZF92KChpbnQ4eDhfdClfX3AwLCA5KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgZmxvYXQzMngyX3QgdnJuZF9mMzIoZmxvYXQzMngyX3QgX19wMCkgewotICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgZmxvYXQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cm5kX3YoKGludDh4OF90KV9fcmV2MCwgOSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBmbG9hdDMyeDRfdCB2cm5kYXFfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKLSAgZmxvYXQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cm5kYXFfdigoaW50OHgxNl90KV9fcDAsIDQxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgZmxvYXQzMng0X3QgdnJuZGFxX2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7Ci0gIGZsb2F0MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICBmbG9hdDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZybmRhcV92KChpbnQ4eDE2X3QpX19yZXYwLCA0MSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBmbG9hdDMyeDJfdCB2cm5kYV9mMzIoZmxvYXQzMngyX3QgX19wMCkgewotICBmbG9hdDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZybmRhX3YoKGludDh4OF90KV9fcDAsIDkpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBmbG9hdDMyeDJfdCB2cm5kYV9mMzIoZmxvYXQzMngyX3QgX19wMCkgewotICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgZmxvYXQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cm5kYV92KChpbnQ4eDhfdClfX3JldjAsIDkpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgZmxvYXQzMng0X3QgdnJuZG1xX2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7Ci0gIGZsb2F0MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDMyeDRfdCkgX19idWlsdGluX25lb25fdnJuZG1xX3YoKGludDh4MTZfdClfX3AwLCA0MSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGZsb2F0MzJ4NF90IHZybmRtcV9mMzIoZmxvYXQzMng0X3QgX19wMCkgewotICBmbG9hdDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgZmxvYXQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cm5kbXFfdigoaW50OHgxNl90KV9fcmV2MCwgNDEpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgZmxvYXQzMngyX3QgdnJuZG1fZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKLSAgZmxvYXQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cm5kbV92KChpbnQ4eDhfdClfX3AwLCA5KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgZmxvYXQzMngyX3QgdnJuZG1fZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKLSAgZmxvYXQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIGZsb2F0MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDMyeDJfdCkgX19idWlsdGluX25lb25fdnJuZG1fdigoaW50OHg4X3QpX19yZXYwLCA5KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGZsb2F0MzJ4NF90IHZybmRucV9mMzIoZmxvYXQzMng0X3QgX19wMCkgewotICBmbG9hdDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZybmRucV92KChpbnQ4eDE2X3QpX19wMCwgNDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBmbG9hdDMyeDRfdCB2cm5kbnFfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKLSAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIGZsb2F0MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDMyeDRfdCkgX19idWlsdGluX25lb25fdnJuZG5xX3YoKGludDh4MTZfdClfX3JldjAsIDQxKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGZsb2F0MzJ4Ml90IHZybmRuX2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7Ci0gIGZsb2F0MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDMyeDJfdCkgX19idWlsdGluX25lb25fdnJuZG5fdigoaW50OHg4X3QpX19wMCwgOSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGZsb2F0MzJ4Ml90IHZybmRuX2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7Ci0gIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICBmbG9hdDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZybmRuX3YoKGludDh4OF90KV9fcmV2MCwgOSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBmbG9hdDMyeDRfdCB2cm5kcHFfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKLSAgZmxvYXQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cm5kcHFfdigoaW50OHgxNl90KV9fcDAsIDQxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgZmxvYXQzMng0X3QgdnJuZHBxX2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7Ci0gIGZsb2F0MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICBmbG9hdDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZybmRwcV92KChpbnQ4eDE2X3QpX19yZXYwLCA0MSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBmbG9hdDMyeDJfdCB2cm5kcF9mMzIoZmxvYXQzMngyX3QgX19wMCkgewotICBmbG9hdDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZybmRwX3YoKGludDh4OF90KV9fcDAsIDkpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBmbG9hdDMyeDJfdCB2cm5kcF9mMzIoZmxvYXQzMngyX3QgX19wMCkgewotICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgZmxvYXQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cm5kcF92KChpbnQ4eDhfdClfX3JldjAsIDkpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgZmxvYXQzMng0X3QgdnJuZHhxX2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7Ci0gIGZsb2F0MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDMyeDRfdCkgX19idWlsdGluX25lb25fdnJuZHhxX3YoKGludDh4MTZfdClfX3AwLCA0MSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGZsb2F0MzJ4NF90IHZybmR4cV9mMzIoZmxvYXQzMng0X3QgX19wMCkgewotICBmbG9hdDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgZmxvYXQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cm5keHFfdigoaW50OHgxNl90KV9fcmV2MCwgNDEpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgZmxvYXQzMngyX3QgdnJuZHhfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKLSAgZmxvYXQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cm5keF92KChpbnQ4eDhfdClfX3AwLCA5KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgZmxvYXQzMngyX3QgdnJuZHhfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKLSAgZmxvYXQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIGZsb2F0MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDMyeDJfdCkgX19idWlsdGluX25lb25fdnJuZHhfdigoaW50OHg4X3QpX19yZXYwLCA5KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2VuZGlmCi0jaWYgX19BUk1fQVJDSCA+PSA4ICYmIGRlZmluZWQoX19BUk1fRkVBVFVSRV9OVU1FUklDX01BWE1JTikKLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBmbG9hdDMyeDRfdCB2bWF4bm1xX2YzMihmbG9hdDMyeDRfdCBfX3AwLCBmbG9hdDMyeDRfdCBfX3AxKSB7Ci0gIGZsb2F0MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDMyeDRfdCkgX19idWlsdGluX25lb25fdm1heG5tcV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA0MSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGZsb2F0MzJ4NF90IHZtYXhubXFfZjMyKGZsb2F0MzJ4NF90IF9fcDAsIGZsb2F0MzJ4NF90IF9fcDEpIHsKLSAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIGZsb2F0MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOwotICBmbG9hdDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZtYXhubXFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDQxKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGZsb2F0MzJ4Ml90IHZtYXhubV9mMzIoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSkgewotICBmbG9hdDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZtYXhubV92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgOSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGZsb2F0MzJ4Ml90IHZtYXhubV9mMzIoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSkgewotICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgZmxvYXQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7Ci0gIGZsb2F0MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDMyeDJfdCkgX19idWlsdGluX25lb25fdm1heG5tX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgOSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBmbG9hdDMyeDRfdCB2bWlubm1xX2YzMihmbG9hdDMyeDRfdCBfX3AwLCBmbG9hdDMyeDRfdCBfX3AxKSB7Ci0gIGZsb2F0MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDMyeDRfdCkgX19idWlsdGluX25lb25fdm1pbm5tcV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA0MSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGZsb2F0MzJ4NF90IHZtaW5ubXFfZjMyKGZsb2F0MzJ4NF90IF9fcDAsIGZsb2F0MzJ4NF90IF9fcDEpIHsKLSAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIGZsb2F0MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOwotICBmbG9hdDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZtaW5ubXFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDQxKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGZsb2F0MzJ4Ml90IHZtaW5ubV9mMzIoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSkgewotICBmbG9hdDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZtaW5ubV92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgOSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGZsb2F0MzJ4Ml90IHZtaW5ubV9mMzIoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSkgewotICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgZmxvYXQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7Ci0gIGZsb2F0MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDMyeDJfdCkgX19idWlsdGluX25lb25fdm1pbm5tX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgOSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNlbmRpZgotI2lmIF9fQVJNX0FSQ0ggPj0gOCAmJiBkZWZpbmVkKF9fYWFyY2g2NF9fKQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDY0eDJfdCB2Y3Z0YXFfczY0X2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7Ci0gIGludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0YXFfczY0X3YoKGludDh4MTZfdClfX3AwLCAzNSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDY0eDJfdCB2Y3Z0YXFfczY0X2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7Ci0gIGZsb2F0NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICBpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDY0eDJfdCkgX19idWlsdGluX25lb25fdmN2dGFxX3M2NF92KChpbnQ4eDE2X3QpX19yZXYwLCAzNSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ2NHgxX3QgdmN2dGFfczY0X2Y2NChmbG9hdDY0eDFfdCBfX3AwKSB7Ci0gIGludDY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0YV9zNjRfdigoaW50OHg4X3QpX19wMCwgMyk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDY0eDFfdCB2Y3Z0YV9zNjRfZjY0KGZsb2F0NjR4MV90IF9fcDApIHsKLSAgaW50NjR4MV90IF9fcmV0OwotICBfX3JldCA9IChpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRhX3M2NF92KChpbnQ4eDhfdClfX3AwLCAzKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50NjR4Ml90IHZjdnRhcV91NjRfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKLSAgdWludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdmN2dGFxX3U2NF92KChpbnQ4eDE2X3QpX19wMCwgNTEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50NjR4Ml90IHZjdnRhcV91NjRfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKLSAgZmxvYXQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIHVpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRhcV91NjRfdigoaW50OHgxNl90KV9fcmV2MCwgNTEpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDY0eDFfdCB2Y3Z0YV91NjRfZjY0KGZsb2F0NjR4MV90IF9fcDApIHsKLSAgdWludDY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDY0eDFfdCkgX19idWlsdGluX25lb25fdmN2dGFfdTY0X3YoKGludDh4OF90KV9fcDAsIDE5KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDY0eDFfdCB2Y3Z0YV91NjRfZjY0KGZsb2F0NjR4MV90IF9fcDApIHsKLSAgdWludDY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDY0eDFfdCkgX19idWlsdGluX25lb25fdmN2dGFfdTY0X3YoKGludDh4OF90KV9fcDAsIDE5KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ2NHgyX3QgdmN2dG1xX3M2NF9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgewotICBpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDY0eDJfdCkgX19idWlsdGluX25lb25fdmN2dG1xX3M2NF92KChpbnQ4eDE2X3QpX19wMCwgMzUpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQ2NHgyX3QgdmN2dG1xX3M2NF9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgewotICBmbG9hdDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgaW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRtcV9zNjRfdigoaW50OHgxNl90KV9fcmV2MCwgMzUpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50NjR4MV90IHZjdnRtX3M2NF9mNjQoZmxvYXQ2NHgxX3QgX19wMCkgewotICBpbnQ2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDY0eDFfdCkgX19idWlsdGluX25lb25fdmN2dG1fczY0X3YoKGludDh4OF90KV9fcDAsIDMpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQ2NHgxX3QgdmN2dG1fczY0X2Y2NChmbG9hdDY0eDFfdCBfX3AwKSB7Ci0gIGludDY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0bV9zNjRfdigoaW50OHg4X3QpX19wMCwgMyk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDY0eDJfdCB2Y3Z0bXFfdTY0X2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7Ci0gIHVpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRtcV91NjRfdigoaW50OHgxNl90KV9fcDAsIDUxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDY0eDJfdCB2Y3Z0bXFfdTY0X2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7Ci0gIGZsb2F0NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICB1aW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0bXFfdTY0X3YoKGludDh4MTZfdClfX3JldjAsIDUxKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ2NHgxX3QgdmN2dG1fdTY0X2Y2NChmbG9hdDY0eDFfdCBfX3AwKSB7Ci0gIHVpbnQ2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRtX3U2NF92KChpbnQ4eDhfdClfX3AwLCAxOSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ2NHgxX3QgdmN2dG1fdTY0X2Y2NChmbG9hdDY0eDFfdCBfX3AwKSB7Ci0gIHVpbnQ2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRtX3U2NF92KChpbnQ4eDhfdClfX3AwLCAxOSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50NjR4Ml90IHZjdnRucV9zNjRfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKLSAgaW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRucV9zNjRfdigoaW50OHgxNl90KV9fcDAsIDM1KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50NjR4Ml90IHZjdnRucV9zNjRfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKLSAgZmxvYXQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIGludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0bnFfczY0X3YoKGludDh4MTZfdClfX3JldjAsIDM1KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDY0eDFfdCB2Y3Z0bl9zNjRfZjY0KGZsb2F0NjR4MV90IF9fcDApIHsKLSAgaW50NjR4MV90IF9fcmV0OwotICBfX3JldCA9IChpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRuX3M2NF92KChpbnQ4eDhfdClfX3AwLCAzKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50NjR4MV90IHZjdnRuX3M2NF9mNjQoZmxvYXQ2NHgxX3QgX19wMCkgewotICBpbnQ2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDY0eDFfdCkgX19idWlsdGluX25lb25fdmN2dG5fczY0X3YoKGludDh4OF90KV9fcDAsIDMpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ2NHgyX3QgdmN2dG5xX3U2NF9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgewotICB1aW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0bnFfdTY0X3YoKGludDh4MTZfdClfX3AwLCA1MSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ2NHgyX3QgdmN2dG5xX3U2NF9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgewotICBmbG9hdDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgdWludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdmN2dG5xX3U2NF92KChpbnQ4eDE2X3QpX19yZXYwLCA1MSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50NjR4MV90IHZjdnRuX3U2NF9mNjQoZmxvYXQ2NHgxX3QgX19wMCkgewotICB1aW50NjR4MV90IF9fcmV0OwotICBfX3JldCA9ICh1aW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0bl91NjRfdigoaW50OHg4X3QpX19wMCwgMTkpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50NjR4MV90IHZjdnRuX3U2NF9mNjQoZmxvYXQ2NHgxX3QgX19wMCkgewotICB1aW50NjR4MV90IF9fcmV0OwotICBfX3JldCA9ICh1aW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0bl91NjRfdigoaW50OHg4X3QpX19wMCwgMTkpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDY0eDJfdCB2Y3Z0cHFfczY0X2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7Ci0gIGludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0cHFfczY0X3YoKGludDh4MTZfdClfX3AwLCAzNSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDY0eDJfdCB2Y3Z0cHFfczY0X2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7Ci0gIGZsb2F0NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICBpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDY0eDJfdCkgX19idWlsdGluX25lb25fdmN2dHBxX3M2NF92KChpbnQ4eDE2X3QpX19yZXYwLCAzNSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ2NHgxX3QgdmN2dHBfczY0X2Y2NChmbG9hdDY0eDFfdCBfX3AwKSB7Ci0gIGludDY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0cF9zNjRfdigoaW50OHg4X3QpX19wMCwgMyk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDY0eDFfdCB2Y3Z0cF9zNjRfZjY0KGZsb2F0NjR4MV90IF9fcDApIHsKLSAgaW50NjR4MV90IF9fcmV0OwotICBfX3JldCA9IChpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRwX3M2NF92KChpbnQ4eDhfdClfX3AwLCAzKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50NjR4Ml90IHZjdnRwcV91NjRfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKLSAgdWludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdmN2dHBxX3U2NF92KChpbnQ4eDE2X3QpX19wMCwgNTEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50NjR4Ml90IHZjdnRwcV91NjRfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKLSAgZmxvYXQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIHVpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRwcV91NjRfdigoaW50OHgxNl90KV9fcmV2MCwgNTEpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDY0eDFfdCB2Y3Z0cF91NjRfZjY0KGZsb2F0NjR4MV90IF9fcDApIHsKLSAgdWludDY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDY0eDFfdCkgX19idWlsdGluX25lb25fdmN2dHBfdTY0X3YoKGludDh4OF90KV9fcDAsIDE5KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDY0eDFfdCB2Y3Z0cF91NjRfZjY0KGZsb2F0NjR4MV90IF9fcDApIHsKLSAgdWludDY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDY0eDFfdCkgX19idWlsdGluX25lb25fdmN2dHBfdTY0X3YoKGludDh4OF90KV9fcDAsIDE5KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBwb2x5OHg4X3QgdnJlaW50ZXJwcmV0X3A4X3A2NChwb2x5NjR4MV90IF9fcDApIHsKLSAgcG9seTh4OF90IF9fcmV0OwotICBfX3JldCA9IChwb2x5OHg4X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBwb2x5OHg4X3QgdnJlaW50ZXJwcmV0X3A4X3A2NChwb2x5NjR4MV90IF9fcDApIHsKLSAgcG9seTh4OF90IF9fcmV0OwotICBfX3JldCA9IChwb2x5OHg4X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHBvbHk4eDhfdCB2cmVpbnRlcnByZXRfcDhfcDE2KHBvbHkxNng0X3QgX19wMCkgewotICBwb2x5OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHBvbHk4eDhfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHBvbHk4eDhfdCB2cmVpbnRlcnByZXRfcDhfcDE2KHBvbHkxNng0X3QgX19wMCkgewotICBwb2x5OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHBvbHk4eDhfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgcG9seTh4OF90IHZyZWludGVycHJldF9wOF91OCh1aW50OHg4X3QgX19wMCkgewotICBwb2x5OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHBvbHk4eDhfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHBvbHk4eDhfdCB2cmVpbnRlcnByZXRfcDhfdTgodWludDh4OF90IF9fcDApIHsKLSAgcG9seTh4OF90IF9fcmV0OwotICBfX3JldCA9IChwb2x5OHg4X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHBvbHk4eDhfdCB2cmVpbnRlcnByZXRfcDhfdTMyKHVpbnQzMngyX3QgX19wMCkgewotICBwb2x5OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHBvbHk4eDhfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHBvbHk4eDhfdCB2cmVpbnRlcnByZXRfcDhfdTMyKHVpbnQzMngyX3QgX19wMCkgewotICBwb2x5OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHBvbHk4eDhfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgcG9seTh4OF90IHZyZWludGVycHJldF9wOF91NjQodWludDY0eDFfdCBfX3AwKSB7Ci0gIHBvbHk4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAocG9seTh4OF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgcG9seTh4OF90IHZyZWludGVycHJldF9wOF91NjQodWludDY0eDFfdCBfX3AwKSB7Ci0gIHBvbHk4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAocG9seTh4OF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBwb2x5OHg4X3QgdnJlaW50ZXJwcmV0X3A4X3UxNih1aW50MTZ4NF90IF9fcDApIHsKLSAgcG9seTh4OF90IF9fcmV0OwotICBfX3JldCA9IChwb2x5OHg4X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBwb2x5OHg4X3QgdnJlaW50ZXJwcmV0X3A4X3UxNih1aW50MTZ4NF90IF9fcDApIHsKLSAgcG9seTh4OF90IF9fcmV0OwotICBfX3JldCA9IChwb2x5OHg4X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHBvbHk4eDhfdCB2cmVpbnRlcnByZXRfcDhfczgoaW50OHg4X3QgX19wMCkgewotICBwb2x5OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHBvbHk4eDhfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHBvbHk4eDhfdCB2cmVpbnRlcnByZXRfcDhfczgoaW50OHg4X3QgX19wMCkgewotICBwb2x5OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHBvbHk4eDhfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgcG9seTh4OF90IHZyZWludGVycHJldF9wOF9mNjQoZmxvYXQ2NHgxX3QgX19wMCkgewotICBwb2x5OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHBvbHk4eDhfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHBvbHk4eDhfdCB2cmVpbnRlcnByZXRfcDhfZjY0KGZsb2F0NjR4MV90IF9fcDApIHsKLSAgcG9seTh4OF90IF9fcmV0OwotICBfX3JldCA9IChwb2x5OHg4X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHBvbHk4eDhfdCB2cmVpbnRlcnByZXRfcDhfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKLSAgcG9seTh4OF90IF9fcmV0OwotICBfX3JldCA9IChwb2x5OHg4X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBwb2x5OHg4X3QgdnJlaW50ZXJwcmV0X3A4X2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7Ci0gIHBvbHk4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAocG9seTh4OF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBwb2x5OHg4X3QgdnJlaW50ZXJwcmV0X3A4X2YxNihmbG9hdDE2eDRfdCBfX3AwKSB7Ci0gIHBvbHk4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAocG9seTh4OF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgcG9seTh4OF90IHZyZWludGVycHJldF9wOF9mMTYoZmxvYXQxNng0X3QgX19wMCkgewotICBwb2x5OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHBvbHk4eDhfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgcG9seTh4OF90IHZyZWludGVycHJldF9wOF9zMzIoaW50MzJ4Ml90IF9fcDApIHsKLSAgcG9seTh4OF90IF9fcmV0OwotICBfX3JldCA9IChwb2x5OHg4X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBwb2x5OHg4X3QgdnJlaW50ZXJwcmV0X3A4X3MzMihpbnQzMngyX3QgX19wMCkgewotICBwb2x5OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHBvbHk4eDhfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgcG9seTh4OF90IHZyZWludGVycHJldF9wOF9zNjQoaW50NjR4MV90IF9fcDApIHsKLSAgcG9seTh4OF90IF9fcmV0OwotICBfX3JldCA9IChwb2x5OHg4X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBwb2x5OHg4X3QgdnJlaW50ZXJwcmV0X3A4X3M2NChpbnQ2NHgxX3QgX19wMCkgewotICBwb2x5OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHBvbHk4eDhfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgcG9seTh4OF90IHZyZWludGVycHJldF9wOF9zMTYoaW50MTZ4NF90IF9fcDApIHsKLSAgcG9seTh4OF90IF9fcmV0OwotICBfX3JldCA9IChwb2x5OHg4X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBwb2x5OHg4X3QgdnJlaW50ZXJwcmV0X3A4X3MxNihpbnQxNng0X3QgX19wMCkgewotICBwb2x5OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHBvbHk4eDhfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgcG9seTY0eDFfdCB2cmVpbnRlcnByZXRfcDY0X3A4KHBvbHk4eDhfdCBfX3AwKSB7Ci0gIHBvbHk2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHBvbHk2NHgxX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBwb2x5NjR4MV90IHZyZWludGVycHJldF9wNjRfcDgocG9seTh4OF90IF9fcDApIHsKLSAgcG9seTY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSAocG9seTY0eDFfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgcG9seTY0eDFfdCB2cmVpbnRlcnByZXRfcDY0X3AxNihwb2x5MTZ4NF90IF9fcDApIHsKLSAgcG9seTY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSAocG9seTY0eDFfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHBvbHk2NHgxX3QgdnJlaW50ZXJwcmV0X3A2NF9wMTYocG9seTE2eDRfdCBfX3AwKSB7Ci0gIHBvbHk2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHBvbHk2NHgxX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHBvbHk2NHgxX3QgdnJlaW50ZXJwcmV0X3A2NF91OCh1aW50OHg4X3QgX19wMCkgewotICBwb2x5NjR4MV90IF9fcmV0OwotICBfX3JldCA9IChwb2x5NjR4MV90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgcG9seTY0eDFfdCB2cmVpbnRlcnByZXRfcDY0X3U4KHVpbnQ4eDhfdCBfX3AwKSB7Ci0gIHBvbHk2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHBvbHk2NHgxX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHBvbHk2NHgxX3QgdnJlaW50ZXJwcmV0X3A2NF91MzIodWludDMyeDJfdCBfX3AwKSB7Ci0gIHBvbHk2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHBvbHk2NHgxX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBwb2x5NjR4MV90IHZyZWludGVycHJldF9wNjRfdTMyKHVpbnQzMngyX3QgX19wMCkgewotICBwb2x5NjR4MV90IF9fcmV0OwotICBfX3JldCA9IChwb2x5NjR4MV90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBwb2x5NjR4MV90IHZyZWludGVycHJldF9wNjRfdTY0KHVpbnQ2NHgxX3QgX19wMCkgewotICBwb2x5NjR4MV90IF9fcmV0OwotICBfX3JldCA9IChwb2x5NjR4MV90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgcG9seTY0eDFfdCB2cmVpbnRlcnByZXRfcDY0X3U2NCh1aW50NjR4MV90IF9fcDApIHsKLSAgcG9seTY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSAocG9seTY0eDFfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgcG9seTY0eDFfdCB2cmVpbnRlcnByZXRfcDY0X3UxNih1aW50MTZ4NF90IF9fcDApIHsKLSAgcG9seTY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSAocG9seTY0eDFfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHBvbHk2NHgxX3QgdnJlaW50ZXJwcmV0X3A2NF91MTYodWludDE2eDRfdCBfX3AwKSB7Ci0gIHBvbHk2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHBvbHk2NHgxX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHBvbHk2NHgxX3QgdnJlaW50ZXJwcmV0X3A2NF9zOChpbnQ4eDhfdCBfX3AwKSB7Ci0gIHBvbHk2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHBvbHk2NHgxX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBwb2x5NjR4MV90IHZyZWludGVycHJldF9wNjRfczgoaW50OHg4X3QgX19wMCkgewotICBwb2x5NjR4MV90IF9fcmV0OwotICBfX3JldCA9IChwb2x5NjR4MV90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBwb2x5NjR4MV90IHZyZWludGVycHJldF9wNjRfZjY0KGZsb2F0NjR4MV90IF9fcDApIHsKLSAgcG9seTY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSAocG9seTY0eDFfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHBvbHk2NHgxX3QgdnJlaW50ZXJwcmV0X3A2NF9mNjQoZmxvYXQ2NHgxX3QgX19wMCkgewotICBwb2x5NjR4MV90IF9fcmV0OwotICBfX3JldCA9IChwb2x5NjR4MV90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBwb2x5NjR4MV90IHZyZWludGVycHJldF9wNjRfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKLSAgcG9seTY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSAocG9seTY0eDFfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHBvbHk2NHgxX3QgdnJlaW50ZXJwcmV0X3A2NF9mMzIoZmxvYXQzMngyX3QgX19wMCkgewotICBwb2x5NjR4MV90IF9fcmV0OwotICBfX3JldCA9IChwb2x5NjR4MV90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBwb2x5NjR4MV90IHZyZWludGVycHJldF9wNjRfZjE2KGZsb2F0MTZ4NF90IF9fcDApIHsKLSAgcG9seTY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSAocG9seTY0eDFfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHBvbHk2NHgxX3QgdnJlaW50ZXJwcmV0X3A2NF9mMTYoZmxvYXQxNng0X3QgX19wMCkgewotICBwb2x5NjR4MV90IF9fcmV0OwotICBfX3JldCA9IChwb2x5NjR4MV90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBwb2x5NjR4MV90IHZyZWludGVycHJldF9wNjRfczMyKGludDMyeDJfdCBfX3AwKSB7Ci0gIHBvbHk2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHBvbHk2NHgxX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBwb2x5NjR4MV90IHZyZWludGVycHJldF9wNjRfczMyKGludDMyeDJfdCBfX3AwKSB7Ci0gIHBvbHk2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHBvbHk2NHgxX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHBvbHk2NHgxX3QgdnJlaW50ZXJwcmV0X3A2NF9zNjQoaW50NjR4MV90IF9fcDApIHsKLSAgcG9seTY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSAocG9seTY0eDFfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHBvbHk2NHgxX3QgdnJlaW50ZXJwcmV0X3A2NF9zNjQoaW50NjR4MV90IF9fcDApIHsKLSAgcG9seTY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSAocG9seTY0eDFfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgcG9seTY0eDFfdCB2cmVpbnRlcnByZXRfcDY0X3MxNihpbnQxNng0X3QgX19wMCkgewotICBwb2x5NjR4MV90IF9fcmV0OwotICBfX3JldCA9IChwb2x5NjR4MV90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgcG9seTY0eDFfdCB2cmVpbnRlcnByZXRfcDY0X3MxNihpbnQxNng0X3QgX19wMCkgewotICBwb2x5NjR4MV90IF9fcmV0OwotICBfX3JldCA9IChwb2x5NjR4MV90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBwb2x5MTZ4NF90IHZyZWludGVycHJldF9wMTZfcDgocG9seTh4OF90IF9fcDApIHsKLSAgcG9seTE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSAocG9seTE2eDRfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHBvbHkxNng0X3QgdnJlaW50ZXJwcmV0X3AxNl9wOChwb2x5OHg4X3QgX19wMCkgewotICBwb2x5MTZ4NF90IF9fcmV0OwotICBfX3JldCA9IChwb2x5MTZ4NF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBwb2x5MTZ4NF90IHZyZWludGVycHJldF9wMTZfcDY0KHBvbHk2NHgxX3QgX19wMCkgewotICBwb2x5MTZ4NF90IF9fcmV0OwotICBfX3JldCA9IChwb2x5MTZ4NF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgcG9seTE2eDRfdCB2cmVpbnRlcnByZXRfcDE2X3A2NChwb2x5NjR4MV90IF9fcDApIHsKLSAgcG9seTE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSAocG9seTE2eDRfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgcG9seTE2eDRfdCB2cmVpbnRlcnByZXRfcDE2X3U4KHVpbnQ4eDhfdCBfX3AwKSB7Ci0gIHBvbHkxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHBvbHkxNng0X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBwb2x5MTZ4NF90IHZyZWludGVycHJldF9wMTZfdTgodWludDh4OF90IF9fcDApIHsKLSAgcG9seTE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSAocG9seTE2eDRfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgcG9seTE2eDRfdCB2cmVpbnRlcnByZXRfcDE2X3UzMih1aW50MzJ4Ml90IF9fcDApIHsKLSAgcG9seTE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSAocG9seTE2eDRfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHBvbHkxNng0X3QgdnJlaW50ZXJwcmV0X3AxNl91MzIodWludDMyeDJfdCBfX3AwKSB7Ci0gIHBvbHkxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHBvbHkxNng0X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHBvbHkxNng0X3QgdnJlaW50ZXJwcmV0X3AxNl91NjQodWludDY0eDFfdCBfX3AwKSB7Ci0gIHBvbHkxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHBvbHkxNng0X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBwb2x5MTZ4NF90IHZyZWludGVycHJldF9wMTZfdTY0KHVpbnQ2NHgxX3QgX19wMCkgewotICBwb2x5MTZ4NF90IF9fcmV0OwotICBfX3JldCA9IChwb2x5MTZ4NF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBwb2x5MTZ4NF90IHZyZWludGVycHJldF9wMTZfdTE2KHVpbnQxNng0X3QgX19wMCkgewotICBwb2x5MTZ4NF90IF9fcmV0OwotICBfX3JldCA9IChwb2x5MTZ4NF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgcG9seTE2eDRfdCB2cmVpbnRlcnByZXRfcDE2X3UxNih1aW50MTZ4NF90IF9fcDApIHsKLSAgcG9seTE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSAocG9seTE2eDRfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgcG9seTE2eDRfdCB2cmVpbnRlcnByZXRfcDE2X3M4KGludDh4OF90IF9fcDApIHsKLSAgcG9seTE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSAocG9seTE2eDRfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHBvbHkxNng0X3QgdnJlaW50ZXJwcmV0X3AxNl9zOChpbnQ4eDhfdCBfX3AwKSB7Ci0gIHBvbHkxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHBvbHkxNng0X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHBvbHkxNng0X3QgdnJlaW50ZXJwcmV0X3AxNl9mNjQoZmxvYXQ2NHgxX3QgX19wMCkgewotICBwb2x5MTZ4NF90IF9fcmV0OwotICBfX3JldCA9IChwb2x5MTZ4NF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgcG9seTE2eDRfdCB2cmVpbnRlcnByZXRfcDE2X2Y2NChmbG9hdDY0eDFfdCBfX3AwKSB7Ci0gIHBvbHkxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHBvbHkxNng0X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHBvbHkxNng0X3QgdnJlaW50ZXJwcmV0X3AxNl9mMzIoZmxvYXQzMngyX3QgX19wMCkgewotICBwb2x5MTZ4NF90IF9fcmV0OwotICBfX3JldCA9IChwb2x5MTZ4NF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgcG9seTE2eDRfdCB2cmVpbnRlcnByZXRfcDE2X2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7Ci0gIHBvbHkxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHBvbHkxNng0X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHBvbHkxNng0X3QgdnJlaW50ZXJwcmV0X3AxNl9mMTYoZmxvYXQxNng0X3QgX19wMCkgewotICBwb2x5MTZ4NF90IF9fcmV0OwotICBfX3JldCA9IChwb2x5MTZ4NF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgcG9seTE2eDRfdCB2cmVpbnRlcnByZXRfcDE2X2YxNihmbG9hdDE2eDRfdCBfX3AwKSB7Ci0gIHBvbHkxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHBvbHkxNng0X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHBvbHkxNng0X3QgdnJlaW50ZXJwcmV0X3AxNl9zMzIoaW50MzJ4Ml90IF9fcDApIHsKLSAgcG9seTE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSAocG9seTE2eDRfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHBvbHkxNng0X3QgdnJlaW50ZXJwcmV0X3AxNl9zMzIoaW50MzJ4Ml90IF9fcDApIHsKLSAgcG9seTE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSAocG9seTE2eDRfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgcG9seTE2eDRfdCB2cmVpbnRlcnByZXRfcDE2X3M2NChpbnQ2NHgxX3QgX19wMCkgewotICBwb2x5MTZ4NF90IF9fcmV0OwotICBfX3JldCA9IChwb2x5MTZ4NF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgcG9seTE2eDRfdCB2cmVpbnRlcnByZXRfcDE2X3M2NChpbnQ2NHgxX3QgX19wMCkgewotICBwb2x5MTZ4NF90IF9fcmV0OwotICBfX3JldCA9IChwb2x5MTZ4NF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBwb2x5MTZ4NF90IHZyZWludGVycHJldF9wMTZfczE2KGludDE2eDRfdCBfX3AwKSB7Ci0gIHBvbHkxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHBvbHkxNng0X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBwb2x5MTZ4NF90IHZyZWludGVycHJldF9wMTZfczE2KGludDE2eDRfdCBfX3AwKSB7Ci0gIHBvbHkxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHBvbHkxNng0X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHBvbHk4eDE2X3QgdnJlaW50ZXJwcmV0cV9wOF9wMTI4KHBvbHkxMjhfdCBfX3AwKSB7Ci0gIHBvbHk4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHBvbHk4eDE2X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBwb2x5OHgxNl90IHZyZWludGVycHJldHFfcDhfcDEyOChwb2x5MTI4X3QgX19wMCkgewotICBwb2x5OHgxNl90IF9fcmV0OwotICBfX3JldCA9IChwb2x5OHgxNl90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBwb2x5OHgxNl90IHZyZWludGVycHJldHFfcDhfcDY0KHBvbHk2NHgyX3QgX19wMCkgewotICBwb2x5OHgxNl90IF9fcmV0OwotICBfX3JldCA9IChwb2x5OHgxNl90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgcG9seTh4MTZfdCB2cmVpbnRlcnByZXRxX3A4X3A2NChwb2x5NjR4Ml90IF9fcDApIHsKLSAgcG9seTh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSAocG9seTh4MTZfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgcG9seTh4MTZfdCB2cmVpbnRlcnByZXRxX3A4X3AxNihwb2x5MTZ4OF90IF9fcDApIHsKLSAgcG9seTh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSAocG9seTh4MTZfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHBvbHk4eDE2X3QgdnJlaW50ZXJwcmV0cV9wOF9wMTYocG9seTE2eDhfdCBfX3AwKSB7Ci0gIHBvbHk4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHBvbHk4eDE2X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHBvbHk4eDE2X3QgdnJlaW50ZXJwcmV0cV9wOF91OCh1aW50OHgxNl90IF9fcDApIHsKLSAgcG9seTh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSAocG9seTh4MTZfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHBvbHk4eDE2X3QgdnJlaW50ZXJwcmV0cV9wOF91OCh1aW50OHgxNl90IF9fcDApIHsKLSAgcG9seTh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSAocG9seTh4MTZfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgcG9seTh4MTZfdCB2cmVpbnRlcnByZXRxX3A4X3UzMih1aW50MzJ4NF90IF9fcDApIHsKLSAgcG9seTh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSAocG9seTh4MTZfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHBvbHk4eDE2X3QgdnJlaW50ZXJwcmV0cV9wOF91MzIodWludDMyeDRfdCBfX3AwKSB7Ci0gIHBvbHk4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHBvbHk4eDE2X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHBvbHk4eDE2X3QgdnJlaW50ZXJwcmV0cV9wOF91NjQodWludDY0eDJfdCBfX3AwKSB7Ci0gIHBvbHk4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHBvbHk4eDE2X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBwb2x5OHgxNl90IHZyZWludGVycHJldHFfcDhfdTY0KHVpbnQ2NHgyX3QgX19wMCkgewotICBwb2x5OHgxNl90IF9fcmV0OwotICBfX3JldCA9IChwb2x5OHgxNl90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBwb2x5OHgxNl90IHZyZWludGVycHJldHFfcDhfdTE2KHVpbnQxNng4X3QgX19wMCkgewotICBwb2x5OHgxNl90IF9fcmV0OwotICBfX3JldCA9IChwb2x5OHgxNl90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgcG9seTh4MTZfdCB2cmVpbnRlcnByZXRxX3A4X3UxNih1aW50MTZ4OF90IF9fcDApIHsKLSAgcG9seTh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSAocG9seTh4MTZfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgcG9seTh4MTZfdCB2cmVpbnRlcnByZXRxX3A4X3M4KGludDh4MTZfdCBfX3AwKSB7Ci0gIHBvbHk4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHBvbHk4eDE2X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBwb2x5OHgxNl90IHZyZWludGVycHJldHFfcDhfczgoaW50OHgxNl90IF9fcDApIHsKLSAgcG9seTh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSAocG9seTh4MTZfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgcG9seTh4MTZfdCB2cmVpbnRlcnByZXRxX3A4X2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7Ci0gIHBvbHk4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHBvbHk4eDE2X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBwb2x5OHgxNl90IHZyZWludGVycHJldHFfcDhfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKLSAgcG9seTh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSAocG9seTh4MTZfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgcG9seTh4MTZfdCB2cmVpbnRlcnByZXRxX3A4X2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7Ci0gIHBvbHk4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHBvbHk4eDE2X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBwb2x5OHgxNl90IHZyZWludGVycHJldHFfcDhfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKLSAgcG9seTh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSAocG9seTh4MTZfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgcG9seTh4MTZfdCB2cmVpbnRlcnByZXRxX3A4X2YxNihmbG9hdDE2eDhfdCBfX3AwKSB7Ci0gIHBvbHk4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHBvbHk4eDE2X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBwb2x5OHgxNl90IHZyZWludGVycHJldHFfcDhfZjE2KGZsb2F0MTZ4OF90IF9fcDApIHsKLSAgcG9seTh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSAocG9seTh4MTZfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgcG9seTh4MTZfdCB2cmVpbnRlcnByZXRxX3A4X3MzMihpbnQzMng0X3QgX19wMCkgewotICBwb2x5OHgxNl90IF9fcmV0OwotICBfX3JldCA9IChwb2x5OHgxNl90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgcG9seTh4MTZfdCB2cmVpbnRlcnByZXRxX3A4X3MzMihpbnQzMng0X3QgX19wMCkgewotICBwb2x5OHgxNl90IF9fcmV0OwotICBfX3JldCA9IChwb2x5OHgxNl90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBwb2x5OHgxNl90IHZyZWludGVycHJldHFfcDhfczY0KGludDY0eDJfdCBfX3AwKSB7Ci0gIHBvbHk4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHBvbHk4eDE2X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBwb2x5OHgxNl90IHZyZWludGVycHJldHFfcDhfczY0KGludDY0eDJfdCBfX3AwKSB7Ci0gIHBvbHk4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHBvbHk4eDE2X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHBvbHk4eDE2X3QgdnJlaW50ZXJwcmV0cV9wOF9zMTYoaW50MTZ4OF90IF9fcDApIHsKLSAgcG9seTh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSAocG9seTh4MTZfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHBvbHk4eDE2X3QgdnJlaW50ZXJwcmV0cV9wOF9zMTYoaW50MTZ4OF90IF9fcDApIHsKLSAgcG9seTh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSAocG9seTh4MTZfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgcG9seTEyOF90IHZyZWludGVycHJldHFfcDEyOF9wOChwb2x5OHgxNl90IF9fcDApIHsKLSAgcG9seTEyOF90IF9fcmV0OwotICBfX3JldCA9IChwb2x5MTI4X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBwb2x5MTI4X3QgdnJlaW50ZXJwcmV0cV9wMTI4X3A4KHBvbHk4eDE2X3QgX19wMCkgewotICBwb2x5MTI4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHBvbHkxMjhfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgcG9seTEyOF90IHZyZWludGVycHJldHFfcDEyOF9wNjQocG9seTY0eDJfdCBfX3AwKSB7Ci0gIHBvbHkxMjhfdCBfX3JldDsKLSAgX19yZXQgPSAocG9seTEyOF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgcG9seTEyOF90IHZyZWludGVycHJldHFfcDEyOF9wNjQocG9seTY0eDJfdCBfX3AwKSB7Ci0gIHBvbHkxMjhfdCBfX3JldDsKLSAgX19yZXQgPSAocG9seTEyOF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBwb2x5MTI4X3QgdnJlaW50ZXJwcmV0cV9wMTI4X3AxNihwb2x5MTZ4OF90IF9fcDApIHsKLSAgcG9seTEyOF90IF9fcmV0OwotICBfX3JldCA9IChwb2x5MTI4X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBwb2x5MTI4X3QgdnJlaW50ZXJwcmV0cV9wMTI4X3AxNihwb2x5MTZ4OF90IF9fcDApIHsKLSAgcG9seTEyOF90IF9fcmV0OwotICBfX3JldCA9IChwb2x5MTI4X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHBvbHkxMjhfdCB2cmVpbnRlcnByZXRxX3AxMjhfdTgodWludDh4MTZfdCBfX3AwKSB7Ci0gIHBvbHkxMjhfdCBfX3JldDsKLSAgX19yZXQgPSAocG9seTEyOF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgcG9seTEyOF90IHZyZWludGVycHJldHFfcDEyOF91OCh1aW50OHgxNl90IF9fcDApIHsKLSAgcG9seTEyOF90IF9fcmV0OwotICBfX3JldCA9IChwb2x5MTI4X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHBvbHkxMjhfdCB2cmVpbnRlcnByZXRxX3AxMjhfdTMyKHVpbnQzMng0X3QgX19wMCkgewotICBwb2x5MTI4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHBvbHkxMjhfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHBvbHkxMjhfdCB2cmVpbnRlcnByZXRxX3AxMjhfdTMyKHVpbnQzMng0X3QgX19wMCkgewotICBwb2x5MTI4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHBvbHkxMjhfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgcG9seTEyOF90IHZyZWludGVycHJldHFfcDEyOF91NjQodWludDY0eDJfdCBfX3AwKSB7Ci0gIHBvbHkxMjhfdCBfX3JldDsKLSAgX19yZXQgPSAocG9seTEyOF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgcG9seTEyOF90IHZyZWludGVycHJldHFfcDEyOF91NjQodWludDY0eDJfdCBfX3AwKSB7Ci0gIHBvbHkxMjhfdCBfX3JldDsKLSAgX19yZXQgPSAocG9seTEyOF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBwb2x5MTI4X3QgdnJlaW50ZXJwcmV0cV9wMTI4X3UxNih1aW50MTZ4OF90IF9fcDApIHsKLSAgcG9seTEyOF90IF9fcmV0OwotICBfX3JldCA9IChwb2x5MTI4X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBwb2x5MTI4X3QgdnJlaW50ZXJwcmV0cV9wMTI4X3UxNih1aW50MTZ4OF90IF9fcDApIHsKLSAgcG9seTEyOF90IF9fcmV0OwotICBfX3JldCA9IChwb2x5MTI4X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHBvbHkxMjhfdCB2cmVpbnRlcnByZXRxX3AxMjhfczgoaW50OHgxNl90IF9fcDApIHsKLSAgcG9seTEyOF90IF9fcmV0OwotICBfX3JldCA9IChwb2x5MTI4X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBwb2x5MTI4X3QgdnJlaW50ZXJwcmV0cV9wMTI4X3M4KGludDh4MTZfdCBfX3AwKSB7Ci0gIHBvbHkxMjhfdCBfX3JldDsKLSAgX19yZXQgPSAocG9seTEyOF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBwb2x5MTI4X3QgdnJlaW50ZXJwcmV0cV9wMTI4X2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7Ci0gIHBvbHkxMjhfdCBfX3JldDsKLSAgX19yZXQgPSAocG9seTEyOF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgcG9seTEyOF90IHZyZWludGVycHJldHFfcDEyOF9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgewotICBwb2x5MTI4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHBvbHkxMjhfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgcG9seTEyOF90IHZyZWludGVycHJldHFfcDEyOF9mMzIoZmxvYXQzMng0X3QgX19wMCkgewotICBwb2x5MTI4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHBvbHkxMjhfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHBvbHkxMjhfdCB2cmVpbnRlcnByZXRxX3AxMjhfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKLSAgcG9seTEyOF90IF9fcmV0OwotICBfX3JldCA9IChwb2x5MTI4X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHBvbHkxMjhfdCB2cmVpbnRlcnByZXRxX3AxMjhfZjE2KGZsb2F0MTZ4OF90IF9fcDApIHsKLSAgcG9seTEyOF90IF9fcmV0OwotICBfX3JldCA9IChwb2x5MTI4X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBwb2x5MTI4X3QgdnJlaW50ZXJwcmV0cV9wMTI4X2YxNihmbG9hdDE2eDhfdCBfX3AwKSB7Ci0gIHBvbHkxMjhfdCBfX3JldDsKLSAgX19yZXQgPSAocG9seTEyOF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBwb2x5MTI4X3QgdnJlaW50ZXJwcmV0cV9wMTI4X3MzMihpbnQzMng0X3QgX19wMCkgewotICBwb2x5MTI4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHBvbHkxMjhfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHBvbHkxMjhfdCB2cmVpbnRlcnByZXRxX3AxMjhfczMyKGludDMyeDRfdCBfX3AwKSB7Ci0gIHBvbHkxMjhfdCBfX3JldDsKLSAgX19yZXQgPSAocG9seTEyOF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBwb2x5MTI4X3QgdnJlaW50ZXJwcmV0cV9wMTI4X3M2NChpbnQ2NHgyX3QgX19wMCkgewotICBwb2x5MTI4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHBvbHkxMjhfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHBvbHkxMjhfdCB2cmVpbnRlcnByZXRxX3AxMjhfczY0KGludDY0eDJfdCBfX3AwKSB7Ci0gIHBvbHkxMjhfdCBfX3JldDsKLSAgX19yZXQgPSAocG9seTEyOF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBwb2x5MTI4X3QgdnJlaW50ZXJwcmV0cV9wMTI4X3MxNihpbnQxNng4X3QgX19wMCkgewotICBwb2x5MTI4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHBvbHkxMjhfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHBvbHkxMjhfdCB2cmVpbnRlcnByZXRxX3AxMjhfczE2KGludDE2eDhfdCBfX3AwKSB7Ci0gIHBvbHkxMjhfdCBfX3JldDsKLSAgX19yZXQgPSAocG9seTEyOF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBwb2x5NjR4Ml90IHZyZWludGVycHJldHFfcDY0X3A4KHBvbHk4eDE2X3QgX19wMCkgewotICBwb2x5NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IChwb2x5NjR4Ml90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgcG9seTY0eDJfdCB2cmVpbnRlcnByZXRxX3A2NF9wOChwb2x5OHgxNl90IF9fcDApIHsKLSAgcG9seTY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSAocG9seTY0eDJfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgcG9seTY0eDJfdCB2cmVpbnRlcnByZXRxX3A2NF9wMTI4KHBvbHkxMjhfdCBfX3AwKSB7Ci0gIHBvbHk2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHBvbHk2NHgyX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBwb2x5NjR4Ml90IHZyZWludGVycHJldHFfcDY0X3AxMjgocG9seTEyOF90IF9fcDApIHsKLSAgcG9seTY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSAocG9seTY0eDJfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgcG9seTY0eDJfdCB2cmVpbnRlcnByZXRxX3A2NF9wMTYocG9seTE2eDhfdCBfX3AwKSB7Ci0gIHBvbHk2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHBvbHk2NHgyX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBwb2x5NjR4Ml90IHZyZWludGVycHJldHFfcDY0X3AxNihwb2x5MTZ4OF90IF9fcDApIHsKLSAgcG9seTY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSAocG9seTY0eDJfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgcG9seTY0eDJfdCB2cmVpbnRlcnByZXRxX3A2NF91OCh1aW50OHgxNl90IF9fcDApIHsKLSAgcG9seTY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSAocG9seTY0eDJfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHBvbHk2NHgyX3QgdnJlaW50ZXJwcmV0cV9wNjRfdTgodWludDh4MTZfdCBfX3AwKSB7Ci0gIHBvbHk2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHBvbHk2NHgyX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHBvbHk2NHgyX3QgdnJlaW50ZXJwcmV0cV9wNjRfdTMyKHVpbnQzMng0X3QgX19wMCkgewotICBwb2x5NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IChwb2x5NjR4Ml90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgcG9seTY0eDJfdCB2cmVpbnRlcnByZXRxX3A2NF91MzIodWludDMyeDRfdCBfX3AwKSB7Ci0gIHBvbHk2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHBvbHk2NHgyX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHBvbHk2NHgyX3QgdnJlaW50ZXJwcmV0cV9wNjRfdTY0KHVpbnQ2NHgyX3QgX19wMCkgewotICBwb2x5NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IChwb2x5NjR4Ml90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgcG9seTY0eDJfdCB2cmVpbnRlcnByZXRxX3A2NF91NjQodWludDY0eDJfdCBfX3AwKSB7Ci0gIHBvbHk2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHBvbHk2NHgyX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHBvbHk2NHgyX3QgdnJlaW50ZXJwcmV0cV9wNjRfdTE2KHVpbnQxNng4X3QgX19wMCkgewotICBwb2x5NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IChwb2x5NjR4Ml90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgcG9seTY0eDJfdCB2cmVpbnRlcnByZXRxX3A2NF91MTYodWludDE2eDhfdCBfX3AwKSB7Ci0gIHBvbHk2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHBvbHk2NHgyX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHBvbHk2NHgyX3QgdnJlaW50ZXJwcmV0cV9wNjRfczgoaW50OHgxNl90IF9fcDApIHsKLSAgcG9seTY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSAocG9seTY0eDJfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHBvbHk2NHgyX3QgdnJlaW50ZXJwcmV0cV9wNjRfczgoaW50OHgxNl90IF9fcDApIHsKLSAgcG9seTY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSAocG9seTY0eDJfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgcG9seTY0eDJfdCB2cmVpbnRlcnByZXRxX3A2NF9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgewotICBwb2x5NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IChwb2x5NjR4Ml90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgcG9seTY0eDJfdCB2cmVpbnRlcnByZXRxX3A2NF9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgewotICBwb2x5NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IChwb2x5NjR4Ml90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBwb2x5NjR4Ml90IHZyZWludGVycHJldHFfcDY0X2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7Ci0gIHBvbHk2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHBvbHk2NHgyX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBwb2x5NjR4Ml90IHZyZWludGVycHJldHFfcDY0X2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7Ci0gIHBvbHk2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHBvbHk2NHgyX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHBvbHk2NHgyX3QgdnJlaW50ZXJwcmV0cV9wNjRfZjE2KGZsb2F0MTZ4OF90IF9fcDApIHsKLSAgcG9seTY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSAocG9seTY0eDJfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHBvbHk2NHgyX3QgdnJlaW50ZXJwcmV0cV9wNjRfZjE2KGZsb2F0MTZ4OF90IF9fcDApIHsKLSAgcG9seTY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSAocG9seTY0eDJfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgcG9seTY0eDJfdCB2cmVpbnRlcnByZXRxX3A2NF9zMzIoaW50MzJ4NF90IF9fcDApIHsKLSAgcG9seTY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSAocG9seTY0eDJfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHBvbHk2NHgyX3QgdnJlaW50ZXJwcmV0cV9wNjRfczMyKGludDMyeDRfdCBfX3AwKSB7Ci0gIHBvbHk2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHBvbHk2NHgyX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHBvbHk2NHgyX3QgdnJlaW50ZXJwcmV0cV9wNjRfczY0KGludDY0eDJfdCBfX3AwKSB7Ci0gIHBvbHk2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHBvbHk2NHgyX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBwb2x5NjR4Ml90IHZyZWludGVycHJldHFfcDY0X3M2NChpbnQ2NHgyX3QgX19wMCkgewotICBwb2x5NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IChwb2x5NjR4Ml90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBwb2x5NjR4Ml90IHZyZWludGVycHJldHFfcDY0X3MxNihpbnQxNng4X3QgX19wMCkgewotICBwb2x5NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IChwb2x5NjR4Ml90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgcG9seTY0eDJfdCB2cmVpbnRlcnByZXRxX3A2NF9zMTYoaW50MTZ4OF90IF9fcDApIHsKLSAgcG9seTY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSAocG9seTY0eDJfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgcG9seTE2eDhfdCB2cmVpbnRlcnByZXRxX3AxNl9wOChwb2x5OHgxNl90IF9fcDApIHsKLSAgcG9seTE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSAocG9seTE2eDhfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHBvbHkxNng4X3QgdnJlaW50ZXJwcmV0cV9wMTZfcDgocG9seTh4MTZfdCBfX3AwKSB7Ci0gIHBvbHkxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHBvbHkxNng4X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHBvbHkxNng4X3QgdnJlaW50ZXJwcmV0cV9wMTZfcDEyOChwb2x5MTI4X3QgX19wMCkgewotICBwb2x5MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IChwb2x5MTZ4OF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgcG9seTE2eDhfdCB2cmVpbnRlcnByZXRxX3AxNl9wMTI4KHBvbHkxMjhfdCBfX3AwKSB7Ci0gIHBvbHkxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHBvbHkxNng4X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHBvbHkxNng4X3QgdnJlaW50ZXJwcmV0cV9wMTZfcDY0KHBvbHk2NHgyX3QgX19wMCkgewotICBwb2x5MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IChwb2x5MTZ4OF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgcG9seTE2eDhfdCB2cmVpbnRlcnByZXRxX3AxNl9wNjQocG9seTY0eDJfdCBfX3AwKSB7Ci0gIHBvbHkxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHBvbHkxNng4X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHBvbHkxNng4X3QgdnJlaW50ZXJwcmV0cV9wMTZfdTgodWludDh4MTZfdCBfX3AwKSB7Ci0gIHBvbHkxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHBvbHkxNng4X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBwb2x5MTZ4OF90IHZyZWludGVycHJldHFfcDE2X3U4KHVpbnQ4eDE2X3QgX19wMCkgewotICBwb2x5MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IChwb2x5MTZ4OF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBwb2x5MTZ4OF90IHZyZWludGVycHJldHFfcDE2X3UzMih1aW50MzJ4NF90IF9fcDApIHsKLSAgcG9seTE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSAocG9seTE2eDhfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHBvbHkxNng4X3QgdnJlaW50ZXJwcmV0cV9wMTZfdTMyKHVpbnQzMng0X3QgX19wMCkgewotICBwb2x5MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IChwb2x5MTZ4OF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBwb2x5MTZ4OF90IHZyZWludGVycHJldHFfcDE2X3U2NCh1aW50NjR4Ml90IF9fcDApIHsKLSAgcG9seTE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSAocG9seTE2eDhfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHBvbHkxNng4X3QgdnJlaW50ZXJwcmV0cV9wMTZfdTY0KHVpbnQ2NHgyX3QgX19wMCkgewotICBwb2x5MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IChwb2x5MTZ4OF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBwb2x5MTZ4OF90IHZyZWludGVycHJldHFfcDE2X3UxNih1aW50MTZ4OF90IF9fcDApIHsKLSAgcG9seTE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSAocG9seTE2eDhfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHBvbHkxNng4X3QgdnJlaW50ZXJwcmV0cV9wMTZfdTE2KHVpbnQxNng4X3QgX19wMCkgewotICBwb2x5MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IChwb2x5MTZ4OF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBwb2x5MTZ4OF90IHZyZWludGVycHJldHFfcDE2X3M4KGludDh4MTZfdCBfX3AwKSB7Ci0gIHBvbHkxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHBvbHkxNng4X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBwb2x5MTZ4OF90IHZyZWludGVycHJldHFfcDE2X3M4KGludDh4MTZfdCBfX3AwKSB7Ci0gIHBvbHkxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHBvbHkxNng4X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHBvbHkxNng4X3QgdnJlaW50ZXJwcmV0cV9wMTZfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKLSAgcG9seTE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSAocG9seTE2eDhfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHBvbHkxNng4X3QgdnJlaW50ZXJwcmV0cV9wMTZfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKLSAgcG9seTE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSAocG9seTE2eDhfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgcG9seTE2eDhfdCB2cmVpbnRlcnByZXRxX3AxNl9mMzIoZmxvYXQzMng0X3QgX19wMCkgewotICBwb2x5MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IChwb2x5MTZ4OF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgcG9seTE2eDhfdCB2cmVpbnRlcnByZXRxX3AxNl9mMzIoZmxvYXQzMng0X3QgX19wMCkgewotICBwb2x5MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IChwb2x5MTZ4OF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBwb2x5MTZ4OF90IHZyZWludGVycHJldHFfcDE2X2YxNihmbG9hdDE2eDhfdCBfX3AwKSB7Ci0gIHBvbHkxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHBvbHkxNng4X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBwb2x5MTZ4OF90IHZyZWludGVycHJldHFfcDE2X2YxNihmbG9hdDE2eDhfdCBfX3AwKSB7Ci0gIHBvbHkxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHBvbHkxNng4X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHBvbHkxNng4X3QgdnJlaW50ZXJwcmV0cV9wMTZfczMyKGludDMyeDRfdCBfX3AwKSB7Ci0gIHBvbHkxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHBvbHkxNng4X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBwb2x5MTZ4OF90IHZyZWludGVycHJldHFfcDE2X3MzMihpbnQzMng0X3QgX19wMCkgewotICBwb2x5MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IChwb2x5MTZ4OF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBwb2x5MTZ4OF90IHZyZWludGVycHJldHFfcDE2X3M2NChpbnQ2NHgyX3QgX19wMCkgewotICBwb2x5MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IChwb2x5MTZ4OF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgcG9seTE2eDhfdCB2cmVpbnRlcnByZXRxX3AxNl9zNjQoaW50NjR4Ml90IF9fcDApIHsKLSAgcG9seTE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSAocG9seTE2eDhfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgcG9seTE2eDhfdCB2cmVpbnRlcnByZXRxX3AxNl9zMTYoaW50MTZ4OF90IF9fcDApIHsKLSAgcG9seTE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSAocG9seTE2eDhfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHBvbHkxNng4X3QgdnJlaW50ZXJwcmV0cV9wMTZfczE2KGludDE2eDhfdCBfX3AwKSB7Ci0gIHBvbHkxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHBvbHkxNng4X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ4eDE2X3QgdnJlaW50ZXJwcmV0cV91OF9wOChwb2x5OHgxNl90IF9fcDApIHsKLSAgdWludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDh4MTZfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ4eDE2X3QgdnJlaW50ZXJwcmV0cV91OF9wOChwb2x5OHgxNl90IF9fcDApIHsKLSAgdWludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDh4MTZfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDh4MTZfdCB2cmVpbnRlcnByZXRxX3U4X3AxMjgocG9seTEyOF90IF9fcDApIHsKLSAgdWludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDh4MTZfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ4eDE2X3QgdnJlaW50ZXJwcmV0cV91OF9wMTI4KHBvbHkxMjhfdCBfX3AwKSB7Ci0gIHVpbnQ4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ4eDE2X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ4eDE2X3QgdnJlaW50ZXJwcmV0cV91OF9wNjQocG9seTY0eDJfdCBfX3AwKSB7Ci0gIHVpbnQ4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ4eDE2X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50OHgxNl90IHZyZWludGVycHJldHFfdThfcDY0KHBvbHk2NHgyX3QgX19wMCkgewotICB1aW50OHgxNl90IF9fcmV0OwotICBfX3JldCA9ICh1aW50OHgxNl90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50OHgxNl90IHZyZWludGVycHJldHFfdThfcDE2KHBvbHkxNng4X3QgX19wMCkgewotICB1aW50OHgxNl90IF9fcmV0OwotICBfX3JldCA9ICh1aW50OHgxNl90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDh4MTZfdCB2cmVpbnRlcnByZXRxX3U4X3AxNihwb2x5MTZ4OF90IF9fcDApIHsKLSAgdWludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDh4MTZfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDh4MTZfdCB2cmVpbnRlcnByZXRxX3U4X3UzMih1aW50MzJ4NF90IF9fcDApIHsKLSAgdWludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDh4MTZfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ4eDE2X3QgdnJlaW50ZXJwcmV0cV91OF91MzIodWludDMyeDRfdCBfX3AwKSB7Ci0gIHVpbnQ4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ4eDE2X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ4eDE2X3QgdnJlaW50ZXJwcmV0cV91OF91NjQodWludDY0eDJfdCBfX3AwKSB7Ci0gIHVpbnQ4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ4eDE2X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50OHgxNl90IHZyZWludGVycHJldHFfdThfdTY0KHVpbnQ2NHgyX3QgX19wMCkgewotICB1aW50OHgxNl90IF9fcmV0OwotICBfX3JldCA9ICh1aW50OHgxNl90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50OHgxNl90IHZyZWludGVycHJldHFfdThfdTE2KHVpbnQxNng4X3QgX19wMCkgewotICB1aW50OHgxNl90IF9fcmV0OwotICBfX3JldCA9ICh1aW50OHgxNl90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDh4MTZfdCB2cmVpbnRlcnByZXRxX3U4X3UxNih1aW50MTZ4OF90IF9fcDApIHsKLSAgdWludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDh4MTZfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDh4MTZfdCB2cmVpbnRlcnByZXRxX3U4X3M4KGludDh4MTZfdCBfX3AwKSB7Ci0gIHVpbnQ4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ4eDE2X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50OHgxNl90IHZyZWludGVycHJldHFfdThfczgoaW50OHgxNl90IF9fcDApIHsKLSAgdWludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDh4MTZfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDh4MTZfdCB2cmVpbnRlcnByZXRxX3U4X2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7Ci0gIHVpbnQ4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ4eDE2X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50OHgxNl90IHZyZWludGVycHJldHFfdThfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKLSAgdWludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDh4MTZfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDh4MTZfdCB2cmVpbnRlcnByZXRxX3U4X2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7Ci0gIHVpbnQ4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ4eDE2X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50OHgxNl90IHZyZWludGVycHJldHFfdThfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKLSAgdWludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDh4MTZfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDh4MTZfdCB2cmVpbnRlcnByZXRxX3U4X2YxNihmbG9hdDE2eDhfdCBfX3AwKSB7Ci0gIHVpbnQ4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ4eDE2X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50OHgxNl90IHZyZWludGVycHJldHFfdThfZjE2KGZsb2F0MTZ4OF90IF9fcDApIHsKLSAgdWludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDh4MTZfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDh4MTZfdCB2cmVpbnRlcnByZXRxX3U4X3MzMihpbnQzMng0X3QgX19wMCkgewotICB1aW50OHgxNl90IF9fcmV0OwotICBfX3JldCA9ICh1aW50OHgxNl90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDh4MTZfdCB2cmVpbnRlcnByZXRxX3U4X3MzMihpbnQzMng0X3QgX19wMCkgewotICB1aW50OHgxNl90IF9fcmV0OwotICBfX3JldCA9ICh1aW50OHgxNl90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50OHgxNl90IHZyZWludGVycHJldHFfdThfczY0KGludDY0eDJfdCBfX3AwKSB7Ci0gIHVpbnQ4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ4eDE2X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50OHgxNl90IHZyZWludGVycHJldHFfdThfczY0KGludDY0eDJfdCBfX3AwKSB7Ci0gIHVpbnQ4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ4eDE2X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ4eDE2X3QgdnJlaW50ZXJwcmV0cV91OF9zMTYoaW50MTZ4OF90IF9fcDApIHsKLSAgdWludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDh4MTZfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ4eDE2X3QgdnJlaW50ZXJwcmV0cV91OF9zMTYoaW50MTZ4OF90IF9fcDApIHsKLSAgdWludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDh4MTZfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDMyeDRfdCB2cmVpbnRlcnByZXRxX3UzMl9wOChwb2x5OHgxNl90IF9fcDApIHsKLSAgdWludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDMyeDRfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV91MzJfcDgocG9seTh4MTZfdCBfX3AwKSB7Ci0gIHVpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMng0X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV91MzJfcDEyOChwb2x5MTI4X3QgX19wMCkgewotICB1aW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJ4NF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDMyeDRfdCB2cmVpbnRlcnByZXRxX3UzMl9wMTI4KHBvbHkxMjhfdCBfX3AwKSB7Ci0gIHVpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMng0X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV91MzJfcDY0KHBvbHk2NHgyX3QgX19wMCkgewotICB1aW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJ4NF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDMyeDRfdCB2cmVpbnRlcnByZXRxX3UzMl9wNjQocG9seTY0eDJfdCBfX3AwKSB7Ci0gIHVpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMng0X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV91MzJfcDE2KHBvbHkxNng4X3QgX19wMCkgewotICB1aW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJ4NF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDMyeDRfdCB2cmVpbnRlcnByZXRxX3UzMl9wMTYocG9seTE2eDhfdCBfX3AwKSB7Ci0gIHVpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMng0X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV91MzJfdTgodWludDh4MTZfdCBfX3AwKSB7Ci0gIHVpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMng0X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MzJ4NF90IHZyZWludGVycHJldHFfdTMyX3U4KHVpbnQ4eDE2X3QgX19wMCkgewotICB1aW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJ4NF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MzJ4NF90IHZyZWludGVycHJldHFfdTMyX3U2NCh1aW50NjR4Ml90IF9fcDApIHsKLSAgdWludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDMyeDRfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV91MzJfdTY0KHVpbnQ2NHgyX3QgX19wMCkgewotICB1aW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJ4NF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MzJ4NF90IHZyZWludGVycHJldHFfdTMyX3UxNih1aW50MTZ4OF90IF9fcDApIHsKLSAgdWludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDMyeDRfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV91MzJfdTE2KHVpbnQxNng4X3QgX19wMCkgewotICB1aW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJ4NF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MzJ4NF90IHZyZWludGVycHJldHFfdTMyX3M4KGludDh4MTZfdCBfX3AwKSB7Ci0gIHVpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMng0X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MzJ4NF90IHZyZWludGVycHJldHFfdTMyX3M4KGludDh4MTZfdCBfX3AwKSB7Ci0gIHVpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMng0X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV91MzJfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKLSAgdWludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDMyeDRfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV91MzJfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKLSAgdWludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDMyeDRfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDMyeDRfdCB2cmVpbnRlcnByZXRxX3UzMl9mMzIoZmxvYXQzMng0X3QgX19wMCkgewotICB1aW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJ4NF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDMyeDRfdCB2cmVpbnRlcnByZXRxX3UzMl9mMzIoZmxvYXQzMng0X3QgX19wMCkgewotICB1aW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJ4NF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MzJ4NF90IHZyZWludGVycHJldHFfdTMyX2YxNihmbG9hdDE2eDhfdCBfX3AwKSB7Ci0gIHVpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMng0X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MzJ4NF90IHZyZWludGVycHJldHFfdTMyX2YxNihmbG9hdDE2eDhfdCBfX3AwKSB7Ci0gIHVpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMng0X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV91MzJfczMyKGludDMyeDRfdCBfX3AwKSB7Ci0gIHVpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMng0X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MzJ4NF90IHZyZWludGVycHJldHFfdTMyX3MzMihpbnQzMng0X3QgX19wMCkgewotICB1aW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJ4NF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MzJ4NF90IHZyZWludGVycHJldHFfdTMyX3M2NChpbnQ2NHgyX3QgX19wMCkgewotICB1aW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJ4NF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDMyeDRfdCB2cmVpbnRlcnByZXRxX3UzMl9zNjQoaW50NjR4Ml90IF9fcDApIHsKLSAgdWludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDMyeDRfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDMyeDRfdCB2cmVpbnRlcnByZXRxX3UzMl9zMTYoaW50MTZ4OF90IF9fcDApIHsKLSAgdWludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDMyeDRfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV91MzJfczE2KGludDE2eDhfdCBfX3AwKSB7Ci0gIHVpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMng0X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ2NHgyX3QgdnJlaW50ZXJwcmV0cV91NjRfcDgocG9seTh4MTZfdCBfX3AwKSB7Ci0gIHVpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NHgyX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50NjR4Ml90IHZyZWludGVycHJldHFfdTY0X3A4KHBvbHk4eDE2X3QgX19wMCkgewotICB1aW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9ICh1aW50NjR4Ml90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50NjR4Ml90IHZyZWludGVycHJldHFfdTY0X3AxMjgocG9seTEyOF90IF9fcDApIHsKLSAgdWludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDY0eDJfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ2NHgyX3QgdnJlaW50ZXJwcmV0cV91NjRfcDEyOChwb2x5MTI4X3QgX19wMCkgewotICB1aW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9ICh1aW50NjR4Ml90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50NjR4Ml90IHZyZWludGVycHJldHFfdTY0X3A2NChwb2x5NjR4Ml90IF9fcDApIHsKLSAgdWludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDY0eDJfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ2NHgyX3QgdnJlaW50ZXJwcmV0cV91NjRfcDY0KHBvbHk2NHgyX3QgX19wMCkgewotICB1aW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9ICh1aW50NjR4Ml90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50NjR4Ml90IHZyZWludGVycHJldHFfdTY0X3AxNihwb2x5MTZ4OF90IF9fcDApIHsKLSAgdWludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDY0eDJfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ2NHgyX3QgdnJlaW50ZXJwcmV0cV91NjRfcDE2KHBvbHkxNng4X3QgX19wMCkgewotICB1aW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9ICh1aW50NjR4Ml90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50NjR4Ml90IHZyZWludGVycHJldHFfdTY0X3U4KHVpbnQ4eDE2X3QgX19wMCkgewotICB1aW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9ICh1aW50NjR4Ml90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDY0eDJfdCB2cmVpbnRlcnByZXRxX3U2NF91OCh1aW50OHgxNl90IF9fcDApIHsKLSAgdWludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDY0eDJfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDY0eDJfdCB2cmVpbnRlcnByZXRxX3U2NF91MzIodWludDMyeDRfdCBfX3AwKSB7Ci0gIHVpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NHgyX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50NjR4Ml90IHZyZWludGVycHJldHFfdTY0X3UzMih1aW50MzJ4NF90IF9fcDApIHsKLSAgdWludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDY0eDJfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDY0eDJfdCB2cmVpbnRlcnByZXRxX3U2NF91MTYodWludDE2eDhfdCBfX3AwKSB7Ci0gIHVpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NHgyX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50NjR4Ml90IHZyZWludGVycHJldHFfdTY0X3UxNih1aW50MTZ4OF90IF9fcDApIHsKLSAgdWludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDY0eDJfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDY0eDJfdCB2cmVpbnRlcnByZXRxX3U2NF9zOChpbnQ4eDE2X3QgX19wMCkgewotICB1aW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9ICh1aW50NjR4Ml90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDY0eDJfdCB2cmVpbnRlcnByZXRxX3U2NF9zOChpbnQ4eDE2X3QgX19wMCkgewotICB1aW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9ICh1aW50NjR4Ml90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50NjR4Ml90IHZyZWludGVycHJldHFfdTY0X2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7Ci0gIHVpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NHgyX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50NjR4Ml90IHZyZWludGVycHJldHFfdTY0X2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7Ci0gIHVpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NHgyX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ2NHgyX3QgdnJlaW50ZXJwcmV0cV91NjRfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKLSAgdWludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDY0eDJfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ2NHgyX3QgdnJlaW50ZXJwcmV0cV91NjRfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKLSAgdWludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDY0eDJfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDY0eDJfdCB2cmVpbnRlcnByZXRxX3U2NF9mMTYoZmxvYXQxNng4X3QgX19wMCkgewotICB1aW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9ICh1aW50NjR4Ml90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDY0eDJfdCB2cmVpbnRlcnByZXRxX3U2NF9mMTYoZmxvYXQxNng4X3QgX19wMCkgewotICB1aW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9ICh1aW50NjR4Ml90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50NjR4Ml90IHZyZWludGVycHJldHFfdTY0X3MzMihpbnQzMng0X3QgX19wMCkgewotICB1aW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9ICh1aW50NjR4Ml90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDY0eDJfdCB2cmVpbnRlcnByZXRxX3U2NF9zMzIoaW50MzJ4NF90IF9fcDApIHsKLSAgdWludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDY0eDJfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDY0eDJfdCB2cmVpbnRlcnByZXRxX3U2NF9zNjQoaW50NjR4Ml90IF9fcDApIHsKLSAgdWludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDY0eDJfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ2NHgyX3QgdnJlaW50ZXJwcmV0cV91NjRfczY0KGludDY0eDJfdCBfX3AwKSB7Ci0gIHVpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NHgyX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ2NHgyX3QgdnJlaW50ZXJwcmV0cV91NjRfczE2KGludDE2eDhfdCBfX3AwKSB7Ci0gIHVpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NHgyX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50NjR4Ml90IHZyZWludGVycHJldHFfdTY0X3MxNihpbnQxNng4X3QgX19wMCkgewotICB1aW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9ICh1aW50NjR4Ml90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MTZ4OF90IHZyZWludGVycHJldHFfdTE2X3A4KHBvbHk4eDE2X3QgX19wMCkgewotICB1aW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MTZ4OF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDE2eDhfdCB2cmVpbnRlcnByZXRxX3UxNl9wOChwb2x5OHgxNl90IF9fcDApIHsKLSAgdWludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDE2eDhfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDE2eDhfdCB2cmVpbnRlcnByZXRxX3UxNl9wMTI4KHBvbHkxMjhfdCBfX3AwKSB7Ci0gIHVpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQxNng4X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MTZ4OF90IHZyZWludGVycHJldHFfdTE2X3AxMjgocG9seTEyOF90IF9fcDApIHsKLSAgdWludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDE2eDhfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDE2eDhfdCB2cmVpbnRlcnByZXRxX3UxNl9wNjQocG9seTY0eDJfdCBfX3AwKSB7Ci0gIHVpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQxNng4X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MTZ4OF90IHZyZWludGVycHJldHFfdTE2X3A2NChwb2x5NjR4Ml90IF9fcDApIHsKLSAgdWludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDE2eDhfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDE2eDhfdCB2cmVpbnRlcnByZXRxX3UxNl9wMTYocG9seTE2eDhfdCBfX3AwKSB7Ci0gIHVpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQxNng4X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MTZ4OF90IHZyZWludGVycHJldHFfdTE2X3AxNihwb2x5MTZ4OF90IF9fcDApIHsKLSAgdWludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDE2eDhfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDE2eDhfdCB2cmVpbnRlcnByZXRxX3UxNl91OCh1aW50OHgxNl90IF9fcDApIHsKLSAgdWludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDE2eDhfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV91MTZfdTgodWludDh4MTZfdCBfX3AwKSB7Ci0gIHVpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQxNng4X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV91MTZfdTMyKHVpbnQzMng0X3QgX19wMCkgewotICB1aW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MTZ4OF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDE2eDhfdCB2cmVpbnRlcnByZXRxX3UxNl91MzIodWludDMyeDRfdCBfX3AwKSB7Ci0gIHVpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQxNng4X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV91MTZfdTY0KHVpbnQ2NHgyX3QgX19wMCkgewotICB1aW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MTZ4OF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDE2eDhfdCB2cmVpbnRlcnByZXRxX3UxNl91NjQodWludDY0eDJfdCBfX3AwKSB7Ci0gIHVpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQxNng4X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV91MTZfczgoaW50OHgxNl90IF9fcDApIHsKLSAgdWludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDE2eDhfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV91MTZfczgoaW50OHgxNl90IF9fcDApIHsKLSAgdWludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDE2eDhfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDE2eDhfdCB2cmVpbnRlcnByZXRxX3UxNl9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgewotICB1aW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MTZ4OF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDE2eDhfdCB2cmVpbnRlcnByZXRxX3UxNl9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgewotICB1aW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MTZ4OF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MTZ4OF90IHZyZWludGVycHJldHFfdTE2X2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7Ci0gIHVpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQxNng4X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MTZ4OF90IHZyZWludGVycHJldHFfdTE2X2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7Ci0gIHVpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQxNng4X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV91MTZfZjE2KGZsb2F0MTZ4OF90IF9fcDApIHsKLSAgdWludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDE2eDhfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV91MTZfZjE2KGZsb2F0MTZ4OF90IF9fcDApIHsKLSAgdWludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDE2eDhfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDE2eDhfdCB2cmVpbnRlcnByZXRxX3UxNl9zMzIoaW50MzJ4NF90IF9fcDApIHsKLSAgdWludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDE2eDhfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV91MTZfczMyKGludDMyeDRfdCBfX3AwKSB7Ci0gIHVpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQxNng4X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV91MTZfczY0KGludDY0eDJfdCBfX3AwKSB7Ci0gIHVpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQxNng4X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MTZ4OF90IHZyZWludGVycHJldHFfdTE2X3M2NChpbnQ2NHgyX3QgX19wMCkgewotICB1aW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MTZ4OF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MTZ4OF90IHZyZWludGVycHJldHFfdTE2X3MxNihpbnQxNng4X3QgX19wMCkgewotICB1aW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MTZ4OF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDE2eDhfdCB2cmVpbnRlcnByZXRxX3UxNl9zMTYoaW50MTZ4OF90IF9fcDApIHsKLSAgdWludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDE2eDhfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50OHgxNl90IHZyZWludGVycHJldHFfczhfcDgocG9seTh4MTZfdCBfX3AwKSB7Ci0gIGludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50OHgxNl90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50OHgxNl90IHZyZWludGVycHJldHFfczhfcDgocG9seTh4MTZfdCBfX3AwKSB7Ci0gIGludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50OHgxNl90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ4eDE2X3QgdnJlaW50ZXJwcmV0cV9zOF9wMTI4KHBvbHkxMjhfdCBfX3AwKSB7Ci0gIGludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50OHgxNl90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50OHgxNl90IHZyZWludGVycHJldHFfczhfcDEyOChwb2x5MTI4X3QgX19wMCkgewotICBpbnQ4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDh4MTZfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50OHgxNl90IHZyZWludGVycHJldHFfczhfcDY0KHBvbHk2NHgyX3QgX19wMCkgewotICBpbnQ4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDh4MTZfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDh4MTZfdCB2cmVpbnRlcnByZXRxX3M4X3A2NChwb2x5NjR4Ml90IF9fcDApIHsKLSAgaW50OHgxNl90IF9fcmV0OwotICBfX3JldCA9IChpbnQ4eDE2X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDh4MTZfdCB2cmVpbnRlcnByZXRxX3M4X3AxNihwb2x5MTZ4OF90IF9fcDApIHsKLSAgaW50OHgxNl90IF9fcmV0OwotICBfX3JldCA9IChpbnQ4eDE2X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQ4eDE2X3QgdnJlaW50ZXJwcmV0cV9zOF9wMTYocG9seTE2eDhfdCBfX3AwKSB7Ci0gIGludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50OHgxNl90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ4eDE2X3QgdnJlaW50ZXJwcmV0cV9zOF91OCh1aW50OHgxNl90IF9fcDApIHsKLSAgaW50OHgxNl90IF9fcmV0OwotICBfX3JldCA9IChpbnQ4eDE2X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQ4eDE2X3QgdnJlaW50ZXJwcmV0cV9zOF91OCh1aW50OHgxNl90IF9fcDApIHsKLSAgaW50OHgxNl90IF9fcmV0OwotICBfX3JldCA9IChpbnQ4eDE2X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDh4MTZfdCB2cmVpbnRlcnByZXRxX3M4X3UzMih1aW50MzJ4NF90IF9fcDApIHsKLSAgaW50OHgxNl90IF9fcmV0OwotICBfX3JldCA9IChpbnQ4eDE2X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQ4eDE2X3QgdnJlaW50ZXJwcmV0cV9zOF91MzIodWludDMyeDRfdCBfX3AwKSB7Ci0gIGludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50OHgxNl90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ4eDE2X3QgdnJlaW50ZXJwcmV0cV9zOF91NjQodWludDY0eDJfdCBfX3AwKSB7Ci0gIGludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50OHgxNl90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50OHgxNl90IHZyZWludGVycHJldHFfczhfdTY0KHVpbnQ2NHgyX3QgX19wMCkgewotICBpbnQ4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDh4MTZfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50OHgxNl90IHZyZWludGVycHJldHFfczhfdTE2KHVpbnQxNng4X3QgX19wMCkgewotICBpbnQ4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDh4MTZfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDh4MTZfdCB2cmVpbnRlcnByZXRxX3M4X3UxNih1aW50MTZ4OF90IF9fcDApIHsKLSAgaW50OHgxNl90IF9fcmV0OwotICBfX3JldCA9IChpbnQ4eDE2X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDh4MTZfdCB2cmVpbnRlcnByZXRxX3M4X2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7Ci0gIGludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50OHgxNl90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50OHgxNl90IHZyZWludGVycHJldHFfczhfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKLSAgaW50OHgxNl90IF9fcmV0OwotICBfX3JldCA9IChpbnQ4eDE2X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDh4MTZfdCB2cmVpbnRlcnByZXRxX3M4X2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7Ci0gIGludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50OHgxNl90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50OHgxNl90IHZyZWludGVycHJldHFfczhfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKLSAgaW50OHgxNl90IF9fcmV0OwotICBfX3JldCA9IChpbnQ4eDE2X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDh4MTZfdCB2cmVpbnRlcnByZXRxX3M4X2YxNihmbG9hdDE2eDhfdCBfX3AwKSB7Ci0gIGludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50OHgxNl90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50OHgxNl90IHZyZWludGVycHJldHFfczhfZjE2KGZsb2F0MTZ4OF90IF9fcDApIHsKLSAgaW50OHgxNl90IF9fcmV0OwotICBfX3JldCA9IChpbnQ4eDE2X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDh4MTZfdCB2cmVpbnRlcnByZXRxX3M4X3MzMihpbnQzMng0X3QgX19wMCkgewotICBpbnQ4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDh4MTZfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDh4MTZfdCB2cmVpbnRlcnByZXRxX3M4X3MzMihpbnQzMng0X3QgX19wMCkgewotICBpbnQ4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDh4MTZfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50OHgxNl90IHZyZWludGVycHJldHFfczhfczY0KGludDY0eDJfdCBfX3AwKSB7Ci0gIGludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50OHgxNl90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50OHgxNl90IHZyZWludGVycHJldHFfczhfczY0KGludDY0eDJfdCBfX3AwKSB7Ci0gIGludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50OHgxNl90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ4eDE2X3QgdnJlaW50ZXJwcmV0cV9zOF9zMTYoaW50MTZ4OF90IF9fcDApIHsKLSAgaW50OHgxNl90IF9fcmV0OwotICBfX3JldCA9IChpbnQ4eDE2X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQ4eDE2X3QgdnJlaW50ZXJwcmV0cV9zOF9zMTYoaW50MTZ4OF90IF9fcDApIHsKLSAgaW50OHgxNl90IF9fcmV0OwotICBfX3JldCA9IChpbnQ4eDE2X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGZsb2F0NjR4Ml90IHZyZWludGVycHJldHFfZjY0X3A4KHBvbHk4eDE2X3QgX19wMCkgewotICBmbG9hdDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBmbG9hdDY0eDJfdCB2cmVpbnRlcnByZXRxX2Y2NF9wOChwb2x5OHgxNl90IF9fcDApIHsKLSAgZmxvYXQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0NjR4Ml90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBmbG9hdDY0eDJfdCB2cmVpbnRlcnByZXRxX2Y2NF9wMTI4KHBvbHkxMjhfdCBfX3AwKSB7Ci0gIGZsb2F0NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDY0eDJfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGZsb2F0NjR4Ml90IHZyZWludGVycHJldHFfZjY0X3AxMjgocG9seTEyOF90IF9fcDApIHsKLSAgZmxvYXQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0NjR4Ml90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBmbG9hdDY0eDJfdCB2cmVpbnRlcnByZXRxX2Y2NF9wNjQocG9seTY0eDJfdCBfX3AwKSB7Ci0gIGZsb2F0NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDY0eDJfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGZsb2F0NjR4Ml90IHZyZWludGVycHJldHFfZjY0X3A2NChwb2x5NjR4Ml90IF9fcDApIHsKLSAgZmxvYXQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0NjR4Ml90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBmbG9hdDY0eDJfdCB2cmVpbnRlcnByZXRxX2Y2NF9wMTYocG9seTE2eDhfdCBfX3AwKSB7Ci0gIGZsb2F0NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDY0eDJfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGZsb2F0NjR4Ml90IHZyZWludGVycHJldHFfZjY0X3AxNihwb2x5MTZ4OF90IF9fcDApIHsKLSAgZmxvYXQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0NjR4Ml90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBmbG9hdDY0eDJfdCB2cmVpbnRlcnByZXRxX2Y2NF91OCh1aW50OHgxNl90IF9fcDApIHsKLSAgZmxvYXQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0NjR4Ml90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgZmxvYXQ2NHgyX3QgdnJlaW50ZXJwcmV0cV9mNjRfdTgodWludDh4MTZfdCBfX3AwKSB7Ci0gIGZsb2F0NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDY0eDJfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgZmxvYXQ2NHgyX3QgdnJlaW50ZXJwcmV0cV9mNjRfdTMyKHVpbnQzMng0X3QgX19wMCkgewotICBmbG9hdDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBmbG9hdDY0eDJfdCB2cmVpbnRlcnByZXRxX2Y2NF91MzIodWludDMyeDRfdCBfX3AwKSB7Ci0gIGZsb2F0NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDY0eDJfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgZmxvYXQ2NHgyX3QgdnJlaW50ZXJwcmV0cV9mNjRfdTY0KHVpbnQ2NHgyX3QgX19wMCkgewotICBmbG9hdDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBmbG9hdDY0eDJfdCB2cmVpbnRlcnByZXRxX2Y2NF91NjQodWludDY0eDJfdCBfX3AwKSB7Ci0gIGZsb2F0NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDY0eDJfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgZmxvYXQ2NHgyX3QgdnJlaW50ZXJwcmV0cV9mNjRfdTE2KHVpbnQxNng4X3QgX19wMCkgewotICBmbG9hdDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBmbG9hdDY0eDJfdCB2cmVpbnRlcnByZXRxX2Y2NF91MTYodWludDE2eDhfdCBfX3AwKSB7Ci0gIGZsb2F0NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDY0eDJfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgZmxvYXQ2NHgyX3QgdnJlaW50ZXJwcmV0cV9mNjRfczgoaW50OHgxNl90IF9fcDApIHsKLSAgZmxvYXQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0NjR4Ml90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgZmxvYXQ2NHgyX3QgdnJlaW50ZXJwcmV0cV9mNjRfczgoaW50OHgxNl90IF9fcDApIHsKLSAgZmxvYXQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0NjR4Ml90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBmbG9hdDY0eDJfdCB2cmVpbnRlcnByZXRxX2Y2NF9mMzIoZmxvYXQzMng0X3QgX19wMCkgewotICBmbG9hdDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBmbG9hdDY0eDJfdCB2cmVpbnRlcnByZXRxX2Y2NF9mMzIoZmxvYXQzMng0X3QgX19wMCkgewotICBmbG9hdDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGZsb2F0NjR4Ml90IHZyZWludGVycHJldHFfZjY0X2YxNihmbG9hdDE2eDhfdCBfX3AwKSB7Ci0gIGZsb2F0NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDY0eDJfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGZsb2F0NjR4Ml90IHZyZWludGVycHJldHFfZjY0X2YxNihmbG9hdDE2eDhfdCBfX3AwKSB7Ci0gIGZsb2F0NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDY0eDJfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgZmxvYXQ2NHgyX3QgdnJlaW50ZXJwcmV0cV9mNjRfczMyKGludDMyeDRfdCBfX3AwKSB7Ci0gIGZsb2F0NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDY0eDJfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGZsb2F0NjR4Ml90IHZyZWludGVycHJldHFfZjY0X3MzMihpbnQzMng0X3QgX19wMCkgewotICBmbG9hdDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGZsb2F0NjR4Ml90IHZyZWludGVycHJldHFfZjY0X3M2NChpbnQ2NHgyX3QgX19wMCkgewotICBmbG9hdDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBmbG9hdDY0eDJfdCB2cmVpbnRlcnByZXRxX2Y2NF9zNjQoaW50NjR4Ml90IF9fcDApIHsKLSAgZmxvYXQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0NjR4Ml90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBmbG9hdDY0eDJfdCB2cmVpbnRlcnByZXRxX2Y2NF9zMTYoaW50MTZ4OF90IF9fcDApIHsKLSAgZmxvYXQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0NjR4Ml90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgZmxvYXQ2NHgyX3QgdnJlaW50ZXJwcmV0cV9mNjRfczE2KGludDE2eDhfdCBfX3AwKSB7Ci0gIGZsb2F0NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDY0eDJfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgZmxvYXQzMng0X3QgdnJlaW50ZXJwcmV0cV9mMzJfcDgocG9seTh4MTZfdCBfX3AwKSB7Ci0gIGZsb2F0MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDMyeDRfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGZsb2F0MzJ4NF90IHZyZWludGVycHJldHFfZjMyX3A4KHBvbHk4eDE2X3QgX19wMCkgewotICBmbG9hdDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQzMng0X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGZsb2F0MzJ4NF90IHZyZWludGVycHJldHFfZjMyX3AxMjgocG9seTEyOF90IF9fcDApIHsKLSAgZmxvYXQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0MzJ4NF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgZmxvYXQzMng0X3QgdnJlaW50ZXJwcmV0cV9mMzJfcDEyOChwb2x5MTI4X3QgX19wMCkgewotICBmbG9hdDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQzMng0X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGZsb2F0MzJ4NF90IHZyZWludGVycHJldHFfZjMyX3A2NChwb2x5NjR4Ml90IF9fcDApIHsKLSAgZmxvYXQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0MzJ4NF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgZmxvYXQzMng0X3QgdnJlaW50ZXJwcmV0cV9mMzJfcDY0KHBvbHk2NHgyX3QgX19wMCkgewotICBmbG9hdDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQzMng0X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGZsb2F0MzJ4NF90IHZyZWludGVycHJldHFfZjMyX3AxNihwb2x5MTZ4OF90IF9fcDApIHsKLSAgZmxvYXQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0MzJ4NF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgZmxvYXQzMng0X3QgdnJlaW50ZXJwcmV0cV9mMzJfcDE2KHBvbHkxNng4X3QgX19wMCkgewotICBmbG9hdDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQzMng0X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGZsb2F0MzJ4NF90IHZyZWludGVycHJldHFfZjMyX3U4KHVpbnQ4eDE2X3QgX19wMCkgewotICBmbG9hdDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQzMng0X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBmbG9hdDMyeDRfdCB2cmVpbnRlcnByZXRxX2YzMl91OCh1aW50OHgxNl90IF9fcDApIHsKLSAgZmxvYXQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0MzJ4NF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBmbG9hdDMyeDRfdCB2cmVpbnRlcnByZXRxX2YzMl91MzIodWludDMyeDRfdCBfX3AwKSB7Ci0gIGZsb2F0MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDMyeDRfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGZsb2F0MzJ4NF90IHZyZWludGVycHJldHFfZjMyX3UzMih1aW50MzJ4NF90IF9fcDApIHsKLSAgZmxvYXQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0MzJ4NF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBmbG9hdDMyeDRfdCB2cmVpbnRlcnByZXRxX2YzMl91NjQodWludDY0eDJfdCBfX3AwKSB7Ci0gIGZsb2F0MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDMyeDRfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGZsb2F0MzJ4NF90IHZyZWludGVycHJldHFfZjMyX3U2NCh1aW50NjR4Ml90IF9fcDApIHsKLSAgZmxvYXQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0MzJ4NF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBmbG9hdDMyeDRfdCB2cmVpbnRlcnByZXRxX2YzMl91MTYodWludDE2eDhfdCBfX3AwKSB7Ci0gIGZsb2F0MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDMyeDRfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGZsb2F0MzJ4NF90IHZyZWludGVycHJldHFfZjMyX3UxNih1aW50MTZ4OF90IF9fcDApIHsKLSAgZmxvYXQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0MzJ4NF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBmbG9hdDMyeDRfdCB2cmVpbnRlcnByZXRxX2YzMl9zOChpbnQ4eDE2X3QgX19wMCkgewotICBmbG9hdDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQzMng0X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBmbG9hdDMyeDRfdCB2cmVpbnRlcnByZXRxX2YzMl9zOChpbnQ4eDE2X3QgX19wMCkgewotICBmbG9hdDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQzMng0X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGZsb2F0MzJ4NF90IHZyZWludGVycHJldHFfZjMyX2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7Ci0gIGZsb2F0MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDMyeDRfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGZsb2F0MzJ4NF90IHZyZWludGVycHJldHFfZjMyX2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7Ci0gIGZsb2F0MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDMyeDRfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgZmxvYXQzMng0X3QgdnJlaW50ZXJwcmV0cV9mMzJfZjE2KGZsb2F0MTZ4OF90IF9fcDApIHsKLSAgZmxvYXQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0MzJ4NF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgZmxvYXQzMng0X3QgdnJlaW50ZXJwcmV0cV9mMzJfZjE2KGZsb2F0MTZ4OF90IF9fcDApIHsKLSAgZmxvYXQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0MzJ4NF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBmbG9hdDMyeDRfdCB2cmVpbnRlcnByZXRxX2YzMl9zMzIoaW50MzJ4NF90IF9fcDApIHsKLSAgZmxvYXQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0MzJ4NF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgZmxvYXQzMng0X3QgdnJlaW50ZXJwcmV0cV9mMzJfczMyKGludDMyeDRfdCBfX3AwKSB7Ci0gIGZsb2F0MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDMyeDRfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgZmxvYXQzMng0X3QgdnJlaW50ZXJwcmV0cV9mMzJfczY0KGludDY0eDJfdCBfX3AwKSB7Ci0gIGZsb2F0MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDMyeDRfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGZsb2F0MzJ4NF90IHZyZWludGVycHJldHFfZjMyX3M2NChpbnQ2NHgyX3QgX19wMCkgewotICBmbG9hdDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQzMng0X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGZsb2F0MzJ4NF90IHZyZWludGVycHJldHFfZjMyX3MxNihpbnQxNng4X3QgX19wMCkgewotICBmbG9hdDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQzMng0X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBmbG9hdDMyeDRfdCB2cmVpbnRlcnByZXRxX2YzMl9zMTYoaW50MTZ4OF90IF9fcDApIHsKLSAgZmxvYXQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0MzJ4NF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBmbG9hdDE2eDhfdCB2cmVpbnRlcnByZXRxX2YxNl9wOChwb2x5OHgxNl90IF9fcDApIHsKLSAgZmxvYXQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0MTZ4OF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgZmxvYXQxNng4X3QgdnJlaW50ZXJwcmV0cV9mMTZfcDgocG9seTh4MTZfdCBfX3AwKSB7Ci0gIGZsb2F0MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDE2eDhfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgZmxvYXQxNng4X3QgdnJlaW50ZXJwcmV0cV9mMTZfcDEyOChwb2x5MTI4X3QgX19wMCkgewotICBmbG9hdDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQxNng4X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBmbG9hdDE2eDhfdCB2cmVpbnRlcnByZXRxX2YxNl9wMTI4KHBvbHkxMjhfdCBfX3AwKSB7Ci0gIGZsb2F0MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDE2eDhfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgZmxvYXQxNng4X3QgdnJlaW50ZXJwcmV0cV9mMTZfcDY0KHBvbHk2NHgyX3QgX19wMCkgewotICBmbG9hdDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQxNng4X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBmbG9hdDE2eDhfdCB2cmVpbnRlcnByZXRxX2YxNl9wNjQocG9seTY0eDJfdCBfX3AwKSB7Ci0gIGZsb2F0MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDE2eDhfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgZmxvYXQxNng4X3QgdnJlaW50ZXJwcmV0cV9mMTZfcDE2KHBvbHkxNng4X3QgX19wMCkgewotICBmbG9hdDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQxNng4X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBmbG9hdDE2eDhfdCB2cmVpbnRlcnByZXRxX2YxNl9wMTYocG9seTE2eDhfdCBfX3AwKSB7Ci0gIGZsb2F0MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDE2eDhfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgZmxvYXQxNng4X3QgdnJlaW50ZXJwcmV0cV9mMTZfdTgodWludDh4MTZfdCBfX3AwKSB7Ci0gIGZsb2F0MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDE2eDhfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGZsb2F0MTZ4OF90IHZyZWludGVycHJldHFfZjE2X3U4KHVpbnQ4eDE2X3QgX19wMCkgewotICBmbG9hdDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQxNng4X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGZsb2F0MTZ4OF90IHZyZWludGVycHJldHFfZjE2X3UzMih1aW50MzJ4NF90IF9fcDApIHsKLSAgZmxvYXQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0MTZ4OF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgZmxvYXQxNng4X3QgdnJlaW50ZXJwcmV0cV9mMTZfdTMyKHVpbnQzMng0X3QgX19wMCkgewotICBmbG9hdDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQxNng4X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGZsb2F0MTZ4OF90IHZyZWludGVycHJldHFfZjE2X3U2NCh1aW50NjR4Ml90IF9fcDApIHsKLSAgZmxvYXQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0MTZ4OF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgZmxvYXQxNng4X3QgdnJlaW50ZXJwcmV0cV9mMTZfdTY0KHVpbnQ2NHgyX3QgX19wMCkgewotICBmbG9hdDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQxNng4X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGZsb2F0MTZ4OF90IHZyZWludGVycHJldHFfZjE2X3UxNih1aW50MTZ4OF90IF9fcDApIHsKLSAgZmxvYXQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0MTZ4OF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgZmxvYXQxNng4X3QgdnJlaW50ZXJwcmV0cV9mMTZfdTE2KHVpbnQxNng4X3QgX19wMCkgewotICBmbG9hdDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQxNng4X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGZsb2F0MTZ4OF90IHZyZWludGVycHJldHFfZjE2X3M4KGludDh4MTZfdCBfX3AwKSB7Ci0gIGZsb2F0MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDE2eDhfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGZsb2F0MTZ4OF90IHZyZWludGVycHJldHFfZjE2X3M4KGludDh4MTZfdCBfX3AwKSB7Ci0gIGZsb2F0MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDE2eDhfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgZmxvYXQxNng4X3QgdnJlaW50ZXJwcmV0cV9mMTZfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKLSAgZmxvYXQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0MTZ4OF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgZmxvYXQxNng4X3QgdnJlaW50ZXJwcmV0cV9mMTZfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKLSAgZmxvYXQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0MTZ4OF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBmbG9hdDE2eDhfdCB2cmVpbnRlcnByZXRxX2YxNl9mMzIoZmxvYXQzMng0X3QgX19wMCkgewotICBmbG9hdDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQxNng4X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBmbG9hdDE2eDhfdCB2cmVpbnRlcnByZXRxX2YxNl9mMzIoZmxvYXQzMng0X3QgX19wMCkgewotICBmbG9hdDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQxNng4X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGZsb2F0MTZ4OF90IHZyZWludGVycHJldHFfZjE2X3MzMihpbnQzMng0X3QgX19wMCkgewotICBmbG9hdDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQxNng4X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBmbG9hdDE2eDhfdCB2cmVpbnRlcnByZXRxX2YxNl9zMzIoaW50MzJ4NF90IF9fcDApIHsKLSAgZmxvYXQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0MTZ4OF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBmbG9hdDE2eDhfdCB2cmVpbnRlcnByZXRxX2YxNl9zNjQoaW50NjR4Ml90IF9fcDApIHsKLSAgZmxvYXQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0MTZ4OF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgZmxvYXQxNng4X3QgdnJlaW50ZXJwcmV0cV9mMTZfczY0KGludDY0eDJfdCBfX3AwKSB7Ci0gIGZsb2F0MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDE2eDhfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgZmxvYXQxNng4X3QgdnJlaW50ZXJwcmV0cV9mMTZfczE2KGludDE2eDhfdCBfX3AwKSB7Ci0gIGZsb2F0MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDE2eDhfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGZsb2F0MTZ4OF90IHZyZWludGVycHJldHFfZjE2X3MxNihpbnQxNng4X3QgX19wMCkgewotICBmbG9hdDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQxNng4X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDMyeDRfdCB2cmVpbnRlcnByZXRxX3MzMl9wOChwb2x5OHgxNl90IF9fcDApIHsKLSAgaW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IChpbnQzMng0X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV9zMzJfcDgocG9seTh4MTZfdCBfX3AwKSB7Ci0gIGludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MzJ4NF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV9zMzJfcDEyOChwb2x5MTI4X3QgX19wMCkgewotICBpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDMyeDRfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDMyeDRfdCB2cmVpbnRlcnByZXRxX3MzMl9wMTI4KHBvbHkxMjhfdCBfX3AwKSB7Ci0gIGludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MzJ4NF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV9zMzJfcDY0KHBvbHk2NHgyX3QgX19wMCkgewotICBpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDMyeDRfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDMyeDRfdCB2cmVpbnRlcnByZXRxX3MzMl9wNjQocG9seTY0eDJfdCBfX3AwKSB7Ci0gIGludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MzJ4NF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV9zMzJfcDE2KHBvbHkxNng4X3QgX19wMCkgewotICBpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDMyeDRfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDMyeDRfdCB2cmVpbnRlcnByZXRxX3MzMl9wMTYocG9seTE2eDhfdCBfX3AwKSB7Ci0gIGludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MzJ4NF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV9zMzJfdTgodWludDh4MTZfdCBfX3AwKSB7Ci0gIGludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MzJ4NF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MzJ4NF90IHZyZWludGVycHJldHFfczMyX3U4KHVpbnQ4eDE2X3QgX19wMCkgewotICBpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDMyeDRfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MzJ4NF90IHZyZWludGVycHJldHFfczMyX3UzMih1aW50MzJ4NF90IF9fcDApIHsKLSAgaW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IChpbnQzMng0X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV9zMzJfdTMyKHVpbnQzMng0X3QgX19wMCkgewotICBpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDMyeDRfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MzJ4NF90IHZyZWludGVycHJldHFfczMyX3U2NCh1aW50NjR4Ml90IF9fcDApIHsKLSAgaW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IChpbnQzMng0X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV9zMzJfdTY0KHVpbnQ2NHgyX3QgX19wMCkgewotICBpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDMyeDRfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MzJ4NF90IHZyZWludGVycHJldHFfczMyX3UxNih1aW50MTZ4OF90IF9fcDApIHsKLSAgaW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IChpbnQzMng0X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV9zMzJfdTE2KHVpbnQxNng4X3QgX19wMCkgewotICBpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDMyeDRfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MzJ4NF90IHZyZWludGVycHJldHFfczMyX3M4KGludDh4MTZfdCBfX3AwKSB7Ci0gIGludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MzJ4NF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MzJ4NF90IHZyZWludGVycHJldHFfczMyX3M4KGludDh4MTZfdCBfX3AwKSB7Ci0gIGludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MzJ4NF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV9zMzJfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKLSAgaW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IChpbnQzMng0X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV9zMzJfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKLSAgaW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IChpbnQzMng0X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDMyeDRfdCB2cmVpbnRlcnByZXRxX3MzMl9mMzIoZmxvYXQzMng0X3QgX19wMCkgewotICBpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDMyeDRfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDMyeDRfdCB2cmVpbnRlcnByZXRxX3MzMl9mMzIoZmxvYXQzMng0X3QgX19wMCkgewotICBpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDMyeDRfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MzJ4NF90IHZyZWludGVycHJldHFfczMyX2YxNihmbG9hdDE2eDhfdCBfX3AwKSB7Ci0gIGludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MzJ4NF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MzJ4NF90IHZyZWludGVycHJldHFfczMyX2YxNihmbG9hdDE2eDhfdCBfX3AwKSB7Ci0gIGludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MzJ4NF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV9zMzJfczY0KGludDY0eDJfdCBfX3AwKSB7Ci0gIGludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MzJ4NF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MzJ4NF90IHZyZWludGVycHJldHFfczMyX3M2NChpbnQ2NHgyX3QgX19wMCkgewotICBpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDMyeDRfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MzJ4NF90IHZyZWludGVycHJldHFfczMyX3MxNihpbnQxNng4X3QgX19wMCkgewotICBpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDMyeDRfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDMyeDRfdCB2cmVpbnRlcnByZXRxX3MzMl9zMTYoaW50MTZ4OF90IF9fcDApIHsKLSAgaW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IChpbnQzMng0X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDY0eDJfdCB2cmVpbnRlcnByZXRxX3M2NF9wOChwb2x5OHgxNl90IF9fcDApIHsKLSAgaW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IChpbnQ2NHgyX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQ2NHgyX3QgdnJlaW50ZXJwcmV0cV9zNjRfcDgocG9seTh4MTZfdCBfX3AwKSB7Ci0gIGludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50NjR4Ml90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ2NHgyX3QgdnJlaW50ZXJwcmV0cV9zNjRfcDEyOChwb2x5MTI4X3QgX19wMCkgewotICBpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDY0eDJfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDY0eDJfdCB2cmVpbnRlcnByZXRxX3M2NF9wMTI4KHBvbHkxMjhfdCBfX3AwKSB7Ci0gIGludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50NjR4Ml90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ2NHgyX3QgdnJlaW50ZXJwcmV0cV9zNjRfcDY0KHBvbHk2NHgyX3QgX19wMCkgewotICBpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDY0eDJfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDY0eDJfdCB2cmVpbnRlcnByZXRxX3M2NF9wNjQocG9seTY0eDJfdCBfX3AwKSB7Ci0gIGludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50NjR4Ml90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ2NHgyX3QgdnJlaW50ZXJwcmV0cV9zNjRfcDE2KHBvbHkxNng4X3QgX19wMCkgewotICBpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDY0eDJfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDY0eDJfdCB2cmVpbnRlcnByZXRxX3M2NF9wMTYocG9seTE2eDhfdCBfX3AwKSB7Ci0gIGludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50NjR4Ml90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ2NHgyX3QgdnJlaW50ZXJwcmV0cV9zNjRfdTgodWludDh4MTZfdCBfX3AwKSB7Ci0gIGludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50NjR4Ml90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50NjR4Ml90IHZyZWludGVycHJldHFfczY0X3U4KHVpbnQ4eDE2X3QgX19wMCkgewotICBpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDY0eDJfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50NjR4Ml90IHZyZWludGVycHJldHFfczY0X3UzMih1aW50MzJ4NF90IF9fcDApIHsKLSAgaW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IChpbnQ2NHgyX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQ2NHgyX3QgdnJlaW50ZXJwcmV0cV9zNjRfdTMyKHVpbnQzMng0X3QgX19wMCkgewotICBpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDY0eDJfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50NjR4Ml90IHZyZWludGVycHJldHFfczY0X3U2NCh1aW50NjR4Ml90IF9fcDApIHsKLSAgaW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IChpbnQ2NHgyX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQ2NHgyX3QgdnJlaW50ZXJwcmV0cV9zNjRfdTY0KHVpbnQ2NHgyX3QgX19wMCkgewotICBpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDY0eDJfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50NjR4Ml90IHZyZWludGVycHJldHFfczY0X3UxNih1aW50MTZ4OF90IF9fcDApIHsKLSAgaW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IChpbnQ2NHgyX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQ2NHgyX3QgdnJlaW50ZXJwcmV0cV9zNjRfdTE2KHVpbnQxNng4X3QgX19wMCkgewotICBpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDY0eDJfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50NjR4Ml90IHZyZWludGVycHJldHFfczY0X3M4KGludDh4MTZfdCBfX3AwKSB7Ci0gIGludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50NjR4Ml90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50NjR4Ml90IHZyZWludGVycHJldHFfczY0X3M4KGludDh4MTZfdCBfX3AwKSB7Ci0gIGludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50NjR4Ml90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ2NHgyX3QgdnJlaW50ZXJwcmV0cV9zNjRfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKLSAgaW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IChpbnQ2NHgyX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQ2NHgyX3QgdnJlaW50ZXJwcmV0cV9zNjRfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKLSAgaW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IChpbnQ2NHgyX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDY0eDJfdCB2cmVpbnRlcnByZXRxX3M2NF9mMzIoZmxvYXQzMng0X3QgX19wMCkgewotICBpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDY0eDJfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDY0eDJfdCB2cmVpbnRlcnByZXRxX3M2NF9mMzIoZmxvYXQzMng0X3QgX19wMCkgewotICBpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDY0eDJfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50NjR4Ml90IHZyZWludGVycHJldHFfczY0X2YxNihmbG9hdDE2eDhfdCBfX3AwKSB7Ci0gIGludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50NjR4Ml90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50NjR4Ml90IHZyZWludGVycHJldHFfczY0X2YxNihmbG9hdDE2eDhfdCBfX3AwKSB7Ci0gIGludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50NjR4Ml90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ2NHgyX3QgdnJlaW50ZXJwcmV0cV9zNjRfczMyKGludDMyeDRfdCBfX3AwKSB7Ci0gIGludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50NjR4Ml90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50NjR4Ml90IHZyZWludGVycHJldHFfczY0X3MzMihpbnQzMng0X3QgX19wMCkgewotICBpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDY0eDJfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50NjR4Ml90IHZyZWludGVycHJldHFfczY0X3MxNihpbnQxNng4X3QgX19wMCkgewotICBpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDY0eDJfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDY0eDJfdCB2cmVpbnRlcnByZXRxX3M2NF9zMTYoaW50MTZ4OF90IF9fcDApIHsKLSAgaW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IChpbnQ2NHgyX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDE2eDhfdCB2cmVpbnRlcnByZXRxX3MxNl9wOChwb2x5OHgxNl90IF9fcDApIHsKLSAgaW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IChpbnQxNng4X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV9zMTZfcDgocG9seTh4MTZfdCBfX3AwKSB7Ci0gIGludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MTZ4OF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV9zMTZfcDEyOChwb2x5MTI4X3QgX19wMCkgewotICBpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDE2eDhfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDE2eDhfdCB2cmVpbnRlcnByZXRxX3MxNl9wMTI4KHBvbHkxMjhfdCBfX3AwKSB7Ci0gIGludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MTZ4OF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV9zMTZfcDY0KHBvbHk2NHgyX3QgX19wMCkgewotICBpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDE2eDhfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDE2eDhfdCB2cmVpbnRlcnByZXRxX3MxNl9wNjQocG9seTY0eDJfdCBfX3AwKSB7Ci0gIGludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MTZ4OF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV9zMTZfcDE2KHBvbHkxNng4X3QgX19wMCkgewotICBpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDE2eDhfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDE2eDhfdCB2cmVpbnRlcnByZXRxX3MxNl9wMTYocG9seTE2eDhfdCBfX3AwKSB7Ci0gIGludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MTZ4OF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV9zMTZfdTgodWludDh4MTZfdCBfX3AwKSB7Ci0gIGludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MTZ4OF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MTZ4OF90IHZyZWludGVycHJldHFfczE2X3U4KHVpbnQ4eDE2X3QgX19wMCkgewotICBpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDE2eDhfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MTZ4OF90IHZyZWludGVycHJldHFfczE2X3UzMih1aW50MzJ4NF90IF9fcDApIHsKLSAgaW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IChpbnQxNng4X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV9zMTZfdTMyKHVpbnQzMng0X3QgX19wMCkgewotICBpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDE2eDhfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MTZ4OF90IHZyZWludGVycHJldHFfczE2X3U2NCh1aW50NjR4Ml90IF9fcDApIHsKLSAgaW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IChpbnQxNng4X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV9zMTZfdTY0KHVpbnQ2NHgyX3QgX19wMCkgewotICBpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDE2eDhfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MTZ4OF90IHZyZWludGVycHJldHFfczE2X3UxNih1aW50MTZ4OF90IF9fcDApIHsKLSAgaW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IChpbnQxNng4X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV9zMTZfdTE2KHVpbnQxNng4X3QgX19wMCkgewotICBpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDE2eDhfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MTZ4OF90IHZyZWludGVycHJldHFfczE2X3M4KGludDh4MTZfdCBfX3AwKSB7Ci0gIGludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MTZ4OF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MTZ4OF90IHZyZWludGVycHJldHFfczE2X3M4KGludDh4MTZfdCBfX3AwKSB7Ci0gIGludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MTZ4OF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV9zMTZfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKLSAgaW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IChpbnQxNng4X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV9zMTZfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKLSAgaW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IChpbnQxNng4X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDE2eDhfdCB2cmVpbnRlcnByZXRxX3MxNl9mMzIoZmxvYXQzMng0X3QgX19wMCkgewotICBpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDE2eDhfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDE2eDhfdCB2cmVpbnRlcnByZXRxX3MxNl9mMzIoZmxvYXQzMng0X3QgX19wMCkgewotICBpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDE2eDhfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MTZ4OF90IHZyZWludGVycHJldHFfczE2X2YxNihmbG9hdDE2eDhfdCBfX3AwKSB7Ci0gIGludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MTZ4OF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MTZ4OF90IHZyZWludGVycHJldHFfczE2X2YxNihmbG9hdDE2eDhfdCBfX3AwKSB7Ci0gIGludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MTZ4OF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV9zMTZfczMyKGludDMyeDRfdCBfX3AwKSB7Ci0gIGludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MTZ4OF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MTZ4OF90IHZyZWludGVycHJldHFfczE2X3MzMihpbnQzMng0X3QgX19wMCkgewotICBpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDE2eDhfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MTZ4OF90IHZyZWludGVycHJldHFfczE2X3M2NChpbnQ2NHgyX3QgX19wMCkgewotICBpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDE2eDhfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDE2eDhfdCB2cmVpbnRlcnByZXRxX3MxNl9zNjQoaW50NjR4Ml90IF9fcDApIHsKLSAgaW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IChpbnQxNng4X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ4eDhfdCB2cmVpbnRlcnByZXRfdThfcDgocG9seTh4OF90IF9fcDApIHsKLSAgdWludDh4OF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50OHg4X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50OHg4X3QgdnJlaW50ZXJwcmV0X3U4X3A4KHBvbHk4eDhfdCBfX3AwKSB7Ci0gIHVpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDh4OF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50OHg4X3QgdnJlaW50ZXJwcmV0X3U4X3A2NChwb2x5NjR4MV90IF9fcDApIHsKLSAgdWludDh4OF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50OHg4X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50OHg4X3QgdnJlaW50ZXJwcmV0X3U4X3A2NChwb2x5NjR4MV90IF9fcDApIHsKLSAgdWludDh4OF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50OHg4X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ4eDhfdCB2cmVpbnRlcnByZXRfdThfcDE2KHBvbHkxNng0X3QgX19wMCkgewotICB1aW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ4eDhfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ4eDhfdCB2cmVpbnRlcnByZXRfdThfcDE2KHBvbHkxNng0X3QgX19wMCkgewotICB1aW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ4eDhfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDh4OF90IHZyZWludGVycHJldF91OF91MzIodWludDMyeDJfdCBfX3AwKSB7Ci0gIHVpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDh4OF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDh4OF90IHZyZWludGVycHJldF91OF91MzIodWludDMyeDJfdCBfX3AwKSB7Ci0gIHVpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDh4OF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50OHg4X3QgdnJlaW50ZXJwcmV0X3U4X3U2NCh1aW50NjR4MV90IF9fcDApIHsKLSAgdWludDh4OF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50OHg4X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50OHg4X3QgdnJlaW50ZXJwcmV0X3U4X3U2NCh1aW50NjR4MV90IF9fcDApIHsKLSAgdWludDh4OF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50OHg4X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ4eDhfdCB2cmVpbnRlcnByZXRfdThfdTE2KHVpbnQxNng0X3QgX19wMCkgewotICB1aW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ4eDhfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ4eDhfdCB2cmVpbnRlcnByZXRfdThfdTE2KHVpbnQxNng0X3QgX19wMCkgewotICB1aW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ4eDhfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDh4OF90IHZyZWludGVycHJldF91OF9zOChpbnQ4eDhfdCBfX3AwKSB7Ci0gIHVpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDh4OF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDh4OF90IHZyZWludGVycHJldF91OF9zOChpbnQ4eDhfdCBfX3AwKSB7Ci0gIHVpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDh4OF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50OHg4X3QgdnJlaW50ZXJwcmV0X3U4X2Y2NChmbG9hdDY0eDFfdCBfX3AwKSB7Ci0gIHVpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDh4OF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDh4OF90IHZyZWludGVycHJldF91OF9mNjQoZmxvYXQ2NHgxX3QgX19wMCkgewotICB1aW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ4eDhfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDh4OF90IHZyZWludGVycHJldF91OF9mMzIoZmxvYXQzMngyX3QgX19wMCkgewotICB1aW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ4eDhfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ4eDhfdCB2cmVpbnRlcnByZXRfdThfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKLSAgdWludDh4OF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50OHg4X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ4eDhfdCB2cmVpbnRlcnByZXRfdThfZjE2KGZsb2F0MTZ4NF90IF9fcDApIHsKLSAgdWludDh4OF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50OHg4X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50OHg4X3QgdnJlaW50ZXJwcmV0X3U4X2YxNihmbG9hdDE2eDRfdCBfX3AwKSB7Ci0gIHVpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDh4OF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50OHg4X3QgdnJlaW50ZXJwcmV0X3U4X3MzMihpbnQzMngyX3QgX19wMCkgewotICB1aW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ4eDhfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ4eDhfdCB2cmVpbnRlcnByZXRfdThfczMyKGludDMyeDJfdCBfX3AwKSB7Ci0gIHVpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDh4OF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50OHg4X3QgdnJlaW50ZXJwcmV0X3U4X3M2NChpbnQ2NHgxX3QgX19wMCkgewotICB1aW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ4eDhfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ4eDhfdCB2cmVpbnRlcnByZXRfdThfczY0KGludDY0eDFfdCBfX3AwKSB7Ci0gIHVpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDh4OF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50OHg4X3QgdnJlaW50ZXJwcmV0X3U4X3MxNihpbnQxNng0X3QgX19wMCkgewotICB1aW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ4eDhfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ4eDhfdCB2cmVpbnRlcnByZXRfdThfczE2KGludDE2eDRfdCBfX3AwKSB7Ci0gIHVpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDh4OF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MzJ4Ml90IHZyZWludGVycHJldF91MzJfcDgocG9seTh4OF90IF9fcDApIHsKLSAgdWludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDMyeDJfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQzMngyX3QgdnJlaW50ZXJwcmV0X3UzMl9wOChwb2x5OHg4X3QgX19wMCkgewotICB1aW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJ4Ml90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MzJ4Ml90IHZyZWludGVycHJldF91MzJfcDY0KHBvbHk2NHgxX3QgX19wMCkgewotICB1aW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJ4Ml90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDMyeDJfdCB2cmVpbnRlcnByZXRfdTMyX3A2NChwb2x5NjR4MV90IF9fcDApIHsKLSAgdWludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDMyeDJfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDMyeDJfdCB2cmVpbnRlcnByZXRfdTMyX3AxNihwb2x5MTZ4NF90IF9fcDApIHsKLSAgdWludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDMyeDJfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQzMngyX3QgdnJlaW50ZXJwcmV0X3UzMl9wMTYocG9seTE2eDRfdCBfX3AwKSB7Ci0gIHVpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMngyX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQzMngyX3QgdnJlaW50ZXJwcmV0X3UzMl91OCh1aW50OHg4X3QgX19wMCkgewotICB1aW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJ4Ml90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDMyeDJfdCB2cmVpbnRlcnByZXRfdTMyX3U4KHVpbnQ4eDhfdCBfX3AwKSB7Ci0gIHVpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMngyX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQzMngyX3QgdnJlaW50ZXJwcmV0X3UzMl91NjQodWludDY0eDFfdCBfX3AwKSB7Ci0gIHVpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMngyX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MzJ4Ml90IHZyZWludGVycHJldF91MzJfdTY0KHVpbnQ2NHgxX3QgX19wMCkgewotICB1aW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJ4Ml90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MzJ4Ml90IHZyZWludGVycHJldF91MzJfdTE2KHVpbnQxNng0X3QgX19wMCkgewotICB1aW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJ4Ml90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDMyeDJfdCB2cmVpbnRlcnByZXRfdTMyX3UxNih1aW50MTZ4NF90IF9fcDApIHsKLSAgdWludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDMyeDJfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDMyeDJfdCB2cmVpbnRlcnByZXRfdTMyX3M4KGludDh4OF90IF9fcDApIHsKLSAgdWludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDMyeDJfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQzMngyX3QgdnJlaW50ZXJwcmV0X3UzMl9zOChpbnQ4eDhfdCBfX3AwKSB7Ci0gIHVpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMngyX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQzMngyX3QgdnJlaW50ZXJwcmV0X3UzMl9mNjQoZmxvYXQ2NHgxX3QgX19wMCkgewotICB1aW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJ4Ml90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDMyeDJfdCB2cmVpbnRlcnByZXRfdTMyX2Y2NChmbG9hdDY0eDFfdCBfX3AwKSB7Ci0gIHVpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMngyX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQzMngyX3QgdnJlaW50ZXJwcmV0X3UzMl9mMzIoZmxvYXQzMngyX3QgX19wMCkgewotICB1aW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJ4Ml90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDMyeDJfdCB2cmVpbnRlcnByZXRfdTMyX2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7Ci0gIHVpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMngyX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQzMngyX3QgdnJlaW50ZXJwcmV0X3UzMl9mMTYoZmxvYXQxNng0X3QgX19wMCkgewotICB1aW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJ4Ml90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDMyeDJfdCB2cmVpbnRlcnByZXRfdTMyX2YxNihmbG9hdDE2eDRfdCBfX3AwKSB7Ci0gIHVpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMngyX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQzMngyX3QgdnJlaW50ZXJwcmV0X3UzMl9zMzIoaW50MzJ4Ml90IF9fcDApIHsKLSAgdWludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDMyeDJfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQzMngyX3QgdnJlaW50ZXJwcmV0X3UzMl9zMzIoaW50MzJ4Ml90IF9fcDApIHsKLSAgdWludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDMyeDJfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDMyeDJfdCB2cmVpbnRlcnByZXRfdTMyX3M2NChpbnQ2NHgxX3QgX19wMCkgewotICB1aW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJ4Ml90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDMyeDJfdCB2cmVpbnRlcnByZXRfdTMyX3M2NChpbnQ2NHgxX3QgX19wMCkgewotICB1aW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJ4Ml90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MzJ4Ml90IHZyZWludGVycHJldF91MzJfczE2KGludDE2eDRfdCBfX3AwKSB7Ci0gIHVpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMngyX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MzJ4Ml90IHZyZWludGVycHJldF91MzJfczE2KGludDE2eDRfdCBfX3AwKSB7Ci0gIHVpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMngyX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3U2NF9wOChwb2x5OHg4X3QgX19wMCkgewotICB1aW50NjR4MV90IF9fcmV0OwotICBfX3JldCA9ICh1aW50NjR4MV90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDY0eDFfdCB2cmVpbnRlcnByZXRfdTY0X3A4KHBvbHk4eDhfdCBfX3AwKSB7Ci0gIHVpbnQ2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NHgxX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3U2NF9wNjQocG9seTY0eDFfdCBfX3AwKSB7Ci0gIHVpbnQ2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NHgxX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50NjR4MV90IHZyZWludGVycHJldF91NjRfcDY0KHBvbHk2NHgxX3QgX19wMCkgewotICB1aW50NjR4MV90IF9fcmV0OwotICBfX3JldCA9ICh1aW50NjR4MV90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50NjR4MV90IHZyZWludGVycHJldF91NjRfcDE2KHBvbHkxNng0X3QgX19wMCkgewotICB1aW50NjR4MV90IF9fcmV0OwotICBfX3JldCA9ICh1aW50NjR4MV90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDY0eDFfdCB2cmVpbnRlcnByZXRfdTY0X3AxNihwb2x5MTZ4NF90IF9fcDApIHsKLSAgdWludDY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDY0eDFfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDY0eDFfdCB2cmVpbnRlcnByZXRfdTY0X3U4KHVpbnQ4eDhfdCBfX3AwKSB7Ci0gIHVpbnQ2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NHgxX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50NjR4MV90IHZyZWludGVycHJldF91NjRfdTgodWludDh4OF90IF9fcDApIHsKLSAgdWludDY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDY0eDFfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDY0eDFfdCB2cmVpbnRlcnByZXRfdTY0X3UzMih1aW50MzJ4Ml90IF9fcDApIHsKLSAgdWludDY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDY0eDFfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3U2NF91MzIodWludDMyeDJfdCBfX3AwKSB7Ci0gIHVpbnQ2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NHgxX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3U2NF91MTYodWludDE2eDRfdCBfX3AwKSB7Ci0gIHVpbnQ2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NHgxX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50NjR4MV90IHZyZWludGVycHJldF91NjRfdTE2KHVpbnQxNng0X3QgX19wMCkgewotICB1aW50NjR4MV90IF9fcmV0OwotICBfX3JldCA9ICh1aW50NjR4MV90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50NjR4MV90IHZyZWludGVycHJldF91NjRfczgoaW50OHg4X3QgX19wMCkgewotICB1aW50NjR4MV90IF9fcmV0OwotICBfX3JldCA9ICh1aW50NjR4MV90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDY0eDFfdCB2cmVpbnRlcnByZXRfdTY0X3M4KGludDh4OF90IF9fcDApIHsKLSAgdWludDY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDY0eDFfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDY0eDFfdCB2cmVpbnRlcnByZXRfdTY0X2Y2NChmbG9hdDY0eDFfdCBfX3AwKSB7Ci0gIHVpbnQ2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NHgxX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50NjR4MV90IHZyZWludGVycHJldF91NjRfZjY0KGZsb2F0NjR4MV90IF9fcDApIHsKLSAgdWludDY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDY0eDFfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDY0eDFfdCB2cmVpbnRlcnByZXRfdTY0X2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7Ci0gIHVpbnQ2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NHgxX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50NjR4MV90IHZyZWludGVycHJldF91NjRfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKLSAgdWludDY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDY0eDFfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDY0eDFfdCB2cmVpbnRlcnByZXRfdTY0X2YxNihmbG9hdDE2eDRfdCBfX3AwKSB7Ci0gIHVpbnQ2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NHgxX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50NjR4MV90IHZyZWludGVycHJldF91NjRfZjE2KGZsb2F0MTZ4NF90IF9fcDApIHsKLSAgdWludDY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDY0eDFfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDY0eDFfdCB2cmVpbnRlcnByZXRfdTY0X3MzMihpbnQzMngyX3QgX19wMCkgewotICB1aW50NjR4MV90IF9fcmV0OwotICBfX3JldCA9ICh1aW50NjR4MV90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDY0eDFfdCB2cmVpbnRlcnByZXRfdTY0X3MzMihpbnQzMngyX3QgX19wMCkgewotICB1aW50NjR4MV90IF9fcmV0OwotICBfX3JldCA9ICh1aW50NjR4MV90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50NjR4MV90IHZyZWludGVycHJldF91NjRfczY0KGludDY0eDFfdCBfX3AwKSB7Ci0gIHVpbnQ2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NHgxX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50NjR4MV90IHZyZWludGVycHJldF91NjRfczY0KGludDY0eDFfdCBfX3AwKSB7Ci0gIHVpbnQ2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NHgxX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3U2NF9zMTYoaW50MTZ4NF90IF9fcDApIHsKLSAgdWludDY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDY0eDFfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3U2NF9zMTYoaW50MTZ4NF90IF9fcDApIHsKLSAgdWludDY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDY0eDFfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDE2eDRfdCB2cmVpbnRlcnByZXRfdTE2X3A4KHBvbHk4eDhfdCBfX3AwKSB7Ci0gIHVpbnQxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQxNng0X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MTZ4NF90IHZyZWludGVycHJldF91MTZfcDgocG9seTh4OF90IF9fcDApIHsKLSAgdWludDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDE2eDRfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDE2eDRfdCB2cmVpbnRlcnByZXRfdTE2X3A2NChwb2x5NjR4MV90IF9fcDApIHsKLSAgdWludDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDE2eDRfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQxNng0X3QgdnJlaW50ZXJwcmV0X3UxNl9wNjQocG9seTY0eDFfdCBfX3AwKSB7Ci0gIHVpbnQxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQxNng0X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQxNng0X3QgdnJlaW50ZXJwcmV0X3UxNl9wMTYocG9seTE2eDRfdCBfX3AwKSB7Ci0gIHVpbnQxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQxNng0X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MTZ4NF90IHZyZWludGVycHJldF91MTZfcDE2KHBvbHkxNng0X3QgX19wMCkgewotICB1aW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MTZ4NF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MTZ4NF90IHZyZWludGVycHJldF91MTZfdTgodWludDh4OF90IF9fcDApIHsKLSAgdWludDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDE2eDRfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQxNng0X3QgdnJlaW50ZXJwcmV0X3UxNl91OCh1aW50OHg4X3QgX19wMCkgewotICB1aW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MTZ4NF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MTZ4NF90IHZyZWludGVycHJldF91MTZfdTMyKHVpbnQzMngyX3QgX19wMCkgewotICB1aW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MTZ4NF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDE2eDRfdCB2cmVpbnRlcnByZXRfdTE2X3UzMih1aW50MzJ4Ml90IF9fcDApIHsKLSAgdWludDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDE2eDRfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDE2eDRfdCB2cmVpbnRlcnByZXRfdTE2X3U2NCh1aW50NjR4MV90IF9fcDApIHsKLSAgdWludDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDE2eDRfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQxNng0X3QgdnJlaW50ZXJwcmV0X3UxNl91NjQodWludDY0eDFfdCBfX3AwKSB7Ci0gIHVpbnQxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQxNng0X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQxNng0X3QgdnJlaW50ZXJwcmV0X3UxNl9zOChpbnQ4eDhfdCBfX3AwKSB7Ci0gIHVpbnQxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQxNng0X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MTZ4NF90IHZyZWludGVycHJldF91MTZfczgoaW50OHg4X3QgX19wMCkgewotICB1aW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MTZ4NF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MTZ4NF90IHZyZWludGVycHJldF91MTZfZjY0KGZsb2F0NjR4MV90IF9fcDApIHsKLSAgdWludDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDE2eDRfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQxNng0X3QgdnJlaW50ZXJwcmV0X3UxNl9mNjQoZmxvYXQ2NHgxX3QgX19wMCkgewotICB1aW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MTZ4NF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MTZ4NF90IHZyZWludGVycHJldF91MTZfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKLSAgdWludDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDE2eDRfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQxNng0X3QgdnJlaW50ZXJwcmV0X3UxNl9mMzIoZmxvYXQzMngyX3QgX19wMCkgewotICB1aW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MTZ4NF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MTZ4NF90IHZyZWludGVycHJldF91MTZfZjE2KGZsb2F0MTZ4NF90IF9fcDApIHsKLSAgdWludDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDE2eDRfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQxNng0X3QgdnJlaW50ZXJwcmV0X3UxNl9mMTYoZmxvYXQxNng0X3QgX19wMCkgewotICB1aW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MTZ4NF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MTZ4NF90IHZyZWludGVycHJldF91MTZfczMyKGludDMyeDJfdCBfX3AwKSB7Ci0gIHVpbnQxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQxNng0X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MTZ4NF90IHZyZWludGVycHJldF91MTZfczMyKGludDMyeDJfdCBfX3AwKSB7Ci0gIHVpbnQxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQxNng0X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQxNng0X3QgdnJlaW50ZXJwcmV0X3UxNl9zNjQoaW50NjR4MV90IF9fcDApIHsKLSAgdWludDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDE2eDRfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQxNng0X3QgdnJlaW50ZXJwcmV0X3UxNl9zNjQoaW50NjR4MV90IF9fcDApIHsKLSAgdWludDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDE2eDRfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDE2eDRfdCB2cmVpbnRlcnByZXRfdTE2X3MxNihpbnQxNng0X3QgX19wMCkgewotICB1aW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MTZ4NF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDE2eDRfdCB2cmVpbnRlcnByZXRfdTE2X3MxNihpbnQxNng0X3QgX19wMCkgewotICB1aW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MTZ4NF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ4eDhfdCB2cmVpbnRlcnByZXRfczhfcDgocG9seTh4OF90IF9fcDApIHsKLSAgaW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDh4OF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50OHg4X3QgdnJlaW50ZXJwcmV0X3M4X3A4KHBvbHk4eDhfdCBfX3AwKSB7Ci0gIGludDh4OF90IF9fcmV0OwotICBfX3JldCA9IChpbnQ4eDhfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50OHg4X3QgdnJlaW50ZXJwcmV0X3M4X3A2NChwb2x5NjR4MV90IF9fcDApIHsKLSAgaW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDh4OF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50OHg4X3QgdnJlaW50ZXJwcmV0X3M4X3A2NChwb2x5NjR4MV90IF9fcDApIHsKLSAgaW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDh4OF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ4eDhfdCB2cmVpbnRlcnByZXRfczhfcDE2KHBvbHkxNng0X3QgX19wMCkgewotICBpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50OHg4X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQ4eDhfdCB2cmVpbnRlcnByZXRfczhfcDE2KHBvbHkxNng0X3QgX19wMCkgewotICBpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50OHg4X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDh4OF90IHZyZWludGVycHJldF9zOF91OCh1aW50OHg4X3QgX19wMCkgewotICBpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50OHg4X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQ4eDhfdCB2cmVpbnRlcnByZXRfczhfdTgodWludDh4OF90IF9fcDApIHsKLSAgaW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDh4OF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ4eDhfdCB2cmVpbnRlcnByZXRfczhfdTMyKHVpbnQzMngyX3QgX19wMCkgewotICBpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50OHg4X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQ4eDhfdCB2cmVpbnRlcnByZXRfczhfdTMyKHVpbnQzMngyX3QgX19wMCkgewotICBpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50OHg4X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDh4OF90IHZyZWludGVycHJldF9zOF91NjQodWludDY0eDFfdCBfX3AwKSB7Ci0gIGludDh4OF90IF9fcmV0OwotICBfX3JldCA9IChpbnQ4eDhfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDh4OF90IHZyZWludGVycHJldF9zOF91NjQodWludDY0eDFfdCBfX3AwKSB7Ci0gIGludDh4OF90IF9fcmV0OwotICBfX3JldCA9IChpbnQ4eDhfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50OHg4X3QgdnJlaW50ZXJwcmV0X3M4X3UxNih1aW50MTZ4NF90IF9fcDApIHsKLSAgaW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDh4OF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50OHg4X3QgdnJlaW50ZXJwcmV0X3M4X3UxNih1aW50MTZ4NF90IF9fcDApIHsKLSAgaW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDh4OF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ4eDhfdCB2cmVpbnRlcnByZXRfczhfZjY0KGZsb2F0NjR4MV90IF9fcDApIHsKLSAgaW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDh4OF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50OHg4X3QgdnJlaW50ZXJwcmV0X3M4X2Y2NChmbG9hdDY0eDFfdCBfX3AwKSB7Ci0gIGludDh4OF90IF9fcmV0OwotICBfX3JldCA9IChpbnQ4eDhfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50OHg4X3QgdnJlaW50ZXJwcmV0X3M4X2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7Ci0gIGludDh4OF90IF9fcmV0OwotICBfX3JldCA9IChpbnQ4eDhfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDh4OF90IHZyZWludGVycHJldF9zOF9mMzIoZmxvYXQzMngyX3QgX19wMCkgewotICBpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50OHg4X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDh4OF90IHZyZWludGVycHJldF9zOF9mMTYoZmxvYXQxNng0X3QgX19wMCkgewotICBpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50OHg4X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQ4eDhfdCB2cmVpbnRlcnByZXRfczhfZjE2KGZsb2F0MTZ4NF90IF9fcDApIHsKLSAgaW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDh4OF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ4eDhfdCB2cmVpbnRlcnByZXRfczhfczMyKGludDMyeDJfdCBfX3AwKSB7Ci0gIGludDh4OF90IF9fcmV0OwotICBfX3JldCA9IChpbnQ4eDhfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDh4OF90IHZyZWludGVycHJldF9zOF9zMzIoaW50MzJ4Ml90IF9fcDApIHsKLSAgaW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDh4OF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ4eDhfdCB2cmVpbnRlcnByZXRfczhfczY0KGludDY0eDFfdCBfX3AwKSB7Ci0gIGludDh4OF90IF9fcmV0OwotICBfX3JldCA9IChpbnQ4eDhfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDh4OF90IHZyZWludGVycHJldF9zOF9zNjQoaW50NjR4MV90IF9fcDApIHsKLSAgaW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDh4OF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ4eDhfdCB2cmVpbnRlcnByZXRfczhfczE2KGludDE2eDRfdCBfX3AwKSB7Ci0gIGludDh4OF90IF9fcmV0OwotICBfX3JldCA9IChpbnQ4eDhfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDh4OF90IHZyZWludGVycHJldF9zOF9zMTYoaW50MTZ4NF90IF9fcDApIHsKLSAgaW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDh4OF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBmbG9hdDY0eDFfdCB2cmVpbnRlcnByZXRfZjY0X3A4KHBvbHk4eDhfdCBfX3AwKSB7Ci0gIGZsb2F0NjR4MV90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDY0eDFfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGZsb2F0NjR4MV90IHZyZWludGVycHJldF9mNjRfcDgocG9seTh4OF90IF9fcDApIHsKLSAgZmxvYXQ2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0NjR4MV90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBmbG9hdDY0eDFfdCB2cmVpbnRlcnByZXRfZjY0X3A2NChwb2x5NjR4MV90IF9fcDApIHsKLSAgZmxvYXQ2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0NjR4MV90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgZmxvYXQ2NHgxX3QgdnJlaW50ZXJwcmV0X2Y2NF9wNjQocG9seTY0eDFfdCBfX3AwKSB7Ci0gIGZsb2F0NjR4MV90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDY0eDFfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgZmxvYXQ2NHgxX3QgdnJlaW50ZXJwcmV0X2Y2NF9wMTYocG9seTE2eDRfdCBfX3AwKSB7Ci0gIGZsb2F0NjR4MV90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDY0eDFfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGZsb2F0NjR4MV90IHZyZWludGVycHJldF9mNjRfcDE2KHBvbHkxNng0X3QgX19wMCkgewotICBmbG9hdDY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGZsb2F0NjR4MV90IHZyZWludGVycHJldF9mNjRfdTgodWludDh4OF90IF9fcDApIHsKLSAgZmxvYXQ2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0NjR4MV90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgZmxvYXQ2NHgxX3QgdnJlaW50ZXJwcmV0X2Y2NF91OCh1aW50OHg4X3QgX19wMCkgewotICBmbG9hdDY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGZsb2F0NjR4MV90IHZyZWludGVycHJldF9mNjRfdTMyKHVpbnQzMngyX3QgX19wMCkgewotICBmbG9hdDY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBmbG9hdDY0eDFfdCB2cmVpbnRlcnByZXRfZjY0X3UzMih1aW50MzJ4Ml90IF9fcDApIHsKLSAgZmxvYXQ2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0NjR4MV90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBmbG9hdDY0eDFfdCB2cmVpbnRlcnByZXRfZjY0X3U2NCh1aW50NjR4MV90IF9fcDApIHsKLSAgZmxvYXQ2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0NjR4MV90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgZmxvYXQ2NHgxX3QgdnJlaW50ZXJwcmV0X2Y2NF91NjQodWludDY0eDFfdCBfX3AwKSB7Ci0gIGZsb2F0NjR4MV90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDY0eDFfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgZmxvYXQ2NHgxX3QgdnJlaW50ZXJwcmV0X2Y2NF91MTYodWludDE2eDRfdCBfX3AwKSB7Ci0gIGZsb2F0NjR4MV90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDY0eDFfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGZsb2F0NjR4MV90IHZyZWludGVycHJldF9mNjRfdTE2KHVpbnQxNng0X3QgX19wMCkgewotICBmbG9hdDY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGZsb2F0NjR4MV90IHZyZWludGVycHJldF9mNjRfczgoaW50OHg4X3QgX19wMCkgewotICBmbG9hdDY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBmbG9hdDY0eDFfdCB2cmVpbnRlcnByZXRfZjY0X3M4KGludDh4OF90IF9fcDApIHsKLSAgZmxvYXQ2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0NjR4MV90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBmbG9hdDY0eDFfdCB2cmVpbnRlcnByZXRfZjY0X2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7Ci0gIGZsb2F0NjR4MV90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDY0eDFfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGZsb2F0NjR4MV90IHZyZWludGVycHJldF9mNjRfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKLSAgZmxvYXQ2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0NjR4MV90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBmbG9hdDY0eDFfdCB2cmVpbnRlcnByZXRfZjY0X2YxNihmbG9hdDE2eDRfdCBfX3AwKSB7Ci0gIGZsb2F0NjR4MV90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDY0eDFfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGZsb2F0NjR4MV90IHZyZWludGVycHJldF9mNjRfZjE2KGZsb2F0MTZ4NF90IF9fcDApIHsKLSAgZmxvYXQ2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0NjR4MV90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBmbG9hdDY0eDFfdCB2cmVpbnRlcnByZXRfZjY0X3MzMihpbnQzMngyX3QgX19wMCkgewotICBmbG9hdDY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBmbG9hdDY0eDFfdCB2cmVpbnRlcnByZXRfZjY0X3MzMihpbnQzMngyX3QgX19wMCkgewotICBmbG9hdDY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGZsb2F0NjR4MV90IHZyZWludGVycHJldF9mNjRfczY0KGludDY0eDFfdCBfX3AwKSB7Ci0gIGZsb2F0NjR4MV90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDY0eDFfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGZsb2F0NjR4MV90IHZyZWludGVycHJldF9mNjRfczY0KGludDY0eDFfdCBfX3AwKSB7Ci0gIGZsb2F0NjR4MV90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDY0eDFfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgZmxvYXQ2NHgxX3QgdnJlaW50ZXJwcmV0X2Y2NF9zMTYoaW50MTZ4NF90IF9fcDApIHsKLSAgZmxvYXQ2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0NjR4MV90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgZmxvYXQ2NHgxX3QgdnJlaW50ZXJwcmV0X2Y2NF9zMTYoaW50MTZ4NF90IF9fcDApIHsKLSAgZmxvYXQ2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0NjR4MV90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBmbG9hdDMyeDJfdCB2cmVpbnRlcnByZXRfZjMyX3A4KHBvbHk4eDhfdCBfX3AwKSB7Ci0gIGZsb2F0MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDMyeDJfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGZsb2F0MzJ4Ml90IHZyZWludGVycHJldF9mMzJfcDgocG9seTh4OF90IF9fcDApIHsKLSAgZmxvYXQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBmbG9hdDMyeDJfdCB2cmVpbnRlcnByZXRfZjMyX3A2NChwb2x5NjR4MV90IF9fcDApIHsKLSAgZmxvYXQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgZmxvYXQzMngyX3QgdnJlaW50ZXJwcmV0X2YzMl9wNjQocG9seTY0eDFfdCBfX3AwKSB7Ci0gIGZsb2F0MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDMyeDJfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgZmxvYXQzMngyX3QgdnJlaW50ZXJwcmV0X2YzMl9wMTYocG9seTE2eDRfdCBfX3AwKSB7Ci0gIGZsb2F0MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDMyeDJfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGZsb2F0MzJ4Ml90IHZyZWludGVycHJldF9mMzJfcDE2KHBvbHkxNng0X3QgX19wMCkgewotICBmbG9hdDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQzMngyX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGZsb2F0MzJ4Ml90IHZyZWludGVycHJldF9mMzJfdTgodWludDh4OF90IF9fcDApIHsKLSAgZmxvYXQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgZmxvYXQzMngyX3QgdnJlaW50ZXJwcmV0X2YzMl91OCh1aW50OHg4X3QgX19wMCkgewotICBmbG9hdDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQzMngyX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGZsb2F0MzJ4Ml90IHZyZWludGVycHJldF9mMzJfdTMyKHVpbnQzMngyX3QgX19wMCkgewotICBmbG9hdDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQzMngyX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBmbG9hdDMyeDJfdCB2cmVpbnRlcnByZXRfZjMyX3UzMih1aW50MzJ4Ml90IF9fcDApIHsKLSAgZmxvYXQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBmbG9hdDMyeDJfdCB2cmVpbnRlcnByZXRfZjMyX3U2NCh1aW50NjR4MV90IF9fcDApIHsKLSAgZmxvYXQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgZmxvYXQzMngyX3QgdnJlaW50ZXJwcmV0X2YzMl91NjQodWludDY0eDFfdCBfX3AwKSB7Ci0gIGZsb2F0MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDMyeDJfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgZmxvYXQzMngyX3QgdnJlaW50ZXJwcmV0X2YzMl91MTYodWludDE2eDRfdCBfX3AwKSB7Ci0gIGZsb2F0MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDMyeDJfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGZsb2F0MzJ4Ml90IHZyZWludGVycHJldF9mMzJfdTE2KHVpbnQxNng0X3QgX19wMCkgewotICBmbG9hdDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQzMngyX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGZsb2F0MzJ4Ml90IHZyZWludGVycHJldF9mMzJfczgoaW50OHg4X3QgX19wMCkgewotICBmbG9hdDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQzMngyX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBmbG9hdDMyeDJfdCB2cmVpbnRlcnByZXRfZjMyX3M4KGludDh4OF90IF9fcDApIHsKLSAgZmxvYXQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBmbG9hdDMyeDJfdCB2cmVpbnRlcnByZXRfZjMyX2Y2NChmbG9hdDY0eDFfdCBfX3AwKSB7Ci0gIGZsb2F0MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDMyeDJfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGZsb2F0MzJ4Ml90IHZyZWludGVycHJldF9mMzJfZjY0KGZsb2F0NjR4MV90IF9fcDApIHsKLSAgZmxvYXQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBmbG9hdDMyeDJfdCB2cmVpbnRlcnByZXRfZjMyX2YxNihmbG9hdDE2eDRfdCBfX3AwKSB7Ci0gIGZsb2F0MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDMyeDJfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGZsb2F0MzJ4Ml90IHZyZWludGVycHJldF9mMzJfZjE2KGZsb2F0MTZ4NF90IF9fcDApIHsKLSAgZmxvYXQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBmbG9hdDMyeDJfdCB2cmVpbnRlcnByZXRfZjMyX3MzMihpbnQzMngyX3QgX19wMCkgewotICBmbG9hdDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQzMngyX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBmbG9hdDMyeDJfdCB2cmVpbnRlcnByZXRfZjMyX3MzMihpbnQzMngyX3QgX19wMCkgewotICBmbG9hdDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQzMngyX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGZsb2F0MzJ4Ml90IHZyZWludGVycHJldF9mMzJfczY0KGludDY0eDFfdCBfX3AwKSB7Ci0gIGZsb2F0MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDMyeDJfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGZsb2F0MzJ4Ml90IHZyZWludGVycHJldF9mMzJfczY0KGludDY0eDFfdCBfX3AwKSB7Ci0gIGZsb2F0MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDMyeDJfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgZmxvYXQzMngyX3QgdnJlaW50ZXJwcmV0X2YzMl9zMTYoaW50MTZ4NF90IF9fcDApIHsKLSAgZmxvYXQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgZmxvYXQzMngyX3QgdnJlaW50ZXJwcmV0X2YzMl9zMTYoaW50MTZ4NF90IF9fcDApIHsKLSAgZmxvYXQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBmbG9hdDE2eDRfdCB2cmVpbnRlcnByZXRfZjE2X3A4KHBvbHk4eDhfdCBfX3AwKSB7Ci0gIGZsb2F0MTZ4NF90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDE2eDRfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGZsb2F0MTZ4NF90IHZyZWludGVycHJldF9mMTZfcDgocG9seTh4OF90IF9fcDApIHsKLSAgZmxvYXQxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0MTZ4NF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBmbG9hdDE2eDRfdCB2cmVpbnRlcnByZXRfZjE2X3A2NChwb2x5NjR4MV90IF9fcDApIHsKLSAgZmxvYXQxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0MTZ4NF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgZmxvYXQxNng0X3QgdnJlaW50ZXJwcmV0X2YxNl9wNjQocG9seTY0eDFfdCBfX3AwKSB7Ci0gIGZsb2F0MTZ4NF90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDE2eDRfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgZmxvYXQxNng0X3QgdnJlaW50ZXJwcmV0X2YxNl9wMTYocG9seTE2eDRfdCBfX3AwKSB7Ci0gIGZsb2F0MTZ4NF90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDE2eDRfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGZsb2F0MTZ4NF90IHZyZWludGVycHJldF9mMTZfcDE2KHBvbHkxNng0X3QgX19wMCkgewotICBmbG9hdDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQxNng0X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGZsb2F0MTZ4NF90IHZyZWludGVycHJldF9mMTZfdTgodWludDh4OF90IF9fcDApIHsKLSAgZmxvYXQxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0MTZ4NF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgZmxvYXQxNng0X3QgdnJlaW50ZXJwcmV0X2YxNl91OCh1aW50OHg4X3QgX19wMCkgewotICBmbG9hdDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQxNng0X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGZsb2F0MTZ4NF90IHZyZWludGVycHJldF9mMTZfdTMyKHVpbnQzMngyX3QgX19wMCkgewotICBmbG9hdDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQxNng0X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBmbG9hdDE2eDRfdCB2cmVpbnRlcnByZXRfZjE2X3UzMih1aW50MzJ4Ml90IF9fcDApIHsKLSAgZmxvYXQxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0MTZ4NF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBmbG9hdDE2eDRfdCB2cmVpbnRlcnByZXRfZjE2X3U2NCh1aW50NjR4MV90IF9fcDApIHsKLSAgZmxvYXQxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0MTZ4NF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgZmxvYXQxNng0X3QgdnJlaW50ZXJwcmV0X2YxNl91NjQodWludDY0eDFfdCBfX3AwKSB7Ci0gIGZsb2F0MTZ4NF90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDE2eDRfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgZmxvYXQxNng0X3QgdnJlaW50ZXJwcmV0X2YxNl91MTYodWludDE2eDRfdCBfX3AwKSB7Ci0gIGZsb2F0MTZ4NF90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDE2eDRfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGZsb2F0MTZ4NF90IHZyZWludGVycHJldF9mMTZfdTE2KHVpbnQxNng0X3QgX19wMCkgewotICBmbG9hdDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQxNng0X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGZsb2F0MTZ4NF90IHZyZWludGVycHJldF9mMTZfczgoaW50OHg4X3QgX19wMCkgewotICBmbG9hdDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQxNng0X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBmbG9hdDE2eDRfdCB2cmVpbnRlcnByZXRfZjE2X3M4KGludDh4OF90IF9fcDApIHsKLSAgZmxvYXQxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0MTZ4NF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBmbG9hdDE2eDRfdCB2cmVpbnRlcnByZXRfZjE2X2Y2NChmbG9hdDY0eDFfdCBfX3AwKSB7Ci0gIGZsb2F0MTZ4NF90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDE2eDRfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGZsb2F0MTZ4NF90IHZyZWludGVycHJldF9mMTZfZjY0KGZsb2F0NjR4MV90IF9fcDApIHsKLSAgZmxvYXQxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0MTZ4NF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBmbG9hdDE2eDRfdCB2cmVpbnRlcnByZXRfZjE2X2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7Ci0gIGZsb2F0MTZ4NF90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDE2eDRfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGZsb2F0MTZ4NF90IHZyZWludGVycHJldF9mMTZfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKLSAgZmxvYXQxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0MTZ4NF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBmbG9hdDE2eDRfdCB2cmVpbnRlcnByZXRfZjE2X3MzMihpbnQzMngyX3QgX19wMCkgewotICBmbG9hdDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQxNng0X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBmbG9hdDE2eDRfdCB2cmVpbnRlcnByZXRfZjE2X3MzMihpbnQzMngyX3QgX19wMCkgewotICBmbG9hdDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQxNng0X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGZsb2F0MTZ4NF90IHZyZWludGVycHJldF9mMTZfczY0KGludDY0eDFfdCBfX3AwKSB7Ci0gIGZsb2F0MTZ4NF90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDE2eDRfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGZsb2F0MTZ4NF90IHZyZWludGVycHJldF9mMTZfczY0KGludDY0eDFfdCBfX3AwKSB7Ci0gIGZsb2F0MTZ4NF90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDE2eDRfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgZmxvYXQxNng0X3QgdnJlaW50ZXJwcmV0X2YxNl9zMTYoaW50MTZ4NF90IF9fcDApIHsKLSAgZmxvYXQxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0MTZ4NF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgZmxvYXQxNng0X3QgdnJlaW50ZXJwcmV0X2YxNl9zMTYoaW50MTZ4NF90IF9fcDApIHsKLSAgZmxvYXQxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0MTZ4NF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQzMngyX3QgdnJlaW50ZXJwcmV0X3MzMl9wOChwb2x5OHg4X3QgX19wMCkgewotICBpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDMyeDJfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDMyeDJfdCB2cmVpbnRlcnByZXRfczMyX3A4KHBvbHk4eDhfdCBfX3AwKSB7Ci0gIGludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MzJ4Ml90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQzMngyX3QgdnJlaW50ZXJwcmV0X3MzMl9wNjQocG9seTY0eDFfdCBfX3AwKSB7Ci0gIGludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MzJ4Ml90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MzJ4Ml90IHZyZWludGVycHJldF9zMzJfcDY0KHBvbHk2NHgxX3QgX19wMCkgewotICBpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDMyeDJfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MzJ4Ml90IHZyZWludGVycHJldF9zMzJfcDE2KHBvbHkxNng0X3QgX19wMCkgewotICBpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDMyeDJfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDMyeDJfdCB2cmVpbnRlcnByZXRfczMyX3AxNihwb2x5MTZ4NF90IF9fcDApIHsKLSAgaW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IChpbnQzMngyX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDMyeDJfdCB2cmVpbnRlcnByZXRfczMyX3U4KHVpbnQ4eDhfdCBfX3AwKSB7Ci0gIGludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MzJ4Ml90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MzJ4Ml90IHZyZWludGVycHJldF9zMzJfdTgodWludDh4OF90IF9fcDApIHsKLSAgaW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IChpbnQzMngyX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDMyeDJfdCB2cmVpbnRlcnByZXRfczMyX3UzMih1aW50MzJ4Ml90IF9fcDApIHsKLSAgaW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IChpbnQzMngyX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQzMngyX3QgdnJlaW50ZXJwcmV0X3MzMl91MzIodWludDMyeDJfdCBfX3AwKSB7Ci0gIGludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MzJ4Ml90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQzMngyX3QgdnJlaW50ZXJwcmV0X3MzMl91NjQodWludDY0eDFfdCBfX3AwKSB7Ci0gIGludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MzJ4Ml90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MzJ4Ml90IHZyZWludGVycHJldF9zMzJfdTY0KHVpbnQ2NHgxX3QgX19wMCkgewotICBpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDMyeDJfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MzJ4Ml90IHZyZWludGVycHJldF9zMzJfdTE2KHVpbnQxNng0X3QgX19wMCkgewotICBpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDMyeDJfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDMyeDJfdCB2cmVpbnRlcnByZXRfczMyX3UxNih1aW50MTZ4NF90IF9fcDApIHsKLSAgaW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IChpbnQzMngyX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDMyeDJfdCB2cmVpbnRlcnByZXRfczMyX3M4KGludDh4OF90IF9fcDApIHsKLSAgaW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IChpbnQzMngyX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQzMngyX3QgdnJlaW50ZXJwcmV0X3MzMl9zOChpbnQ4eDhfdCBfX3AwKSB7Ci0gIGludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MzJ4Ml90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQzMngyX3QgdnJlaW50ZXJwcmV0X3MzMl9mNjQoZmxvYXQ2NHgxX3QgX19wMCkgewotICBpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDMyeDJfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDMyeDJfdCB2cmVpbnRlcnByZXRfczMyX2Y2NChmbG9hdDY0eDFfdCBfX3AwKSB7Ci0gIGludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MzJ4Ml90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQzMngyX3QgdnJlaW50ZXJwcmV0X3MzMl9mMzIoZmxvYXQzMngyX3QgX19wMCkgewotICBpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDMyeDJfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDMyeDJfdCB2cmVpbnRlcnByZXRfczMyX2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7Ci0gIGludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MzJ4Ml90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQzMngyX3QgdnJlaW50ZXJwcmV0X3MzMl9mMTYoZmxvYXQxNng0X3QgX19wMCkgewotICBpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDMyeDJfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDMyeDJfdCB2cmVpbnRlcnByZXRfczMyX2YxNihmbG9hdDE2eDRfdCBfX3AwKSB7Ci0gIGludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MzJ4Ml90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQzMngyX3QgdnJlaW50ZXJwcmV0X3MzMl9zNjQoaW50NjR4MV90IF9fcDApIHsKLSAgaW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IChpbnQzMngyX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQzMngyX3QgdnJlaW50ZXJwcmV0X3MzMl9zNjQoaW50NjR4MV90IF9fcDApIHsKLSAgaW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IChpbnQzMngyX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDMyeDJfdCB2cmVpbnRlcnByZXRfczMyX3MxNihpbnQxNng0X3QgX19wMCkgewotICBpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDMyeDJfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDMyeDJfdCB2cmVpbnRlcnByZXRfczMyX3MxNihpbnQxNng0X3QgX19wMCkgewotICBpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDMyeDJfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50NjR4MV90IHZyZWludGVycHJldF9zNjRfcDgocG9seTh4OF90IF9fcDApIHsKLSAgaW50NjR4MV90IF9fcmV0OwotICBfX3JldCA9IChpbnQ2NHgxX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3M2NF9wOChwb2x5OHg4X3QgX19wMCkgewotICBpbnQ2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDY0eDFfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50NjR4MV90IHZyZWludGVycHJldF9zNjRfcDY0KHBvbHk2NHgxX3QgX19wMCkgewotICBpbnQ2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDY0eDFfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDY0eDFfdCB2cmVpbnRlcnByZXRfczY0X3A2NChwb2x5NjR4MV90IF9fcDApIHsKLSAgaW50NjR4MV90IF9fcmV0OwotICBfX3JldCA9IChpbnQ2NHgxX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDY0eDFfdCB2cmVpbnRlcnByZXRfczY0X3AxNihwb2x5MTZ4NF90IF9fcDApIHsKLSAgaW50NjR4MV90IF9fcmV0OwotICBfX3JldCA9IChpbnQ2NHgxX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3M2NF9wMTYocG9seTE2eDRfdCBfX3AwKSB7Ci0gIGludDY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50NjR4MV90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3M2NF91OCh1aW50OHg4X3QgX19wMCkgewotICBpbnQ2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDY0eDFfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDY0eDFfdCB2cmVpbnRlcnByZXRfczY0X3U4KHVpbnQ4eDhfdCBfX3AwKSB7Ci0gIGludDY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50NjR4MV90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3M2NF91MzIodWludDMyeDJfdCBfX3AwKSB7Ci0gIGludDY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50NjR4MV90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50NjR4MV90IHZyZWludGVycHJldF9zNjRfdTMyKHVpbnQzMngyX3QgX19wMCkgewotICBpbnQ2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDY0eDFfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50NjR4MV90IHZyZWludGVycHJldF9zNjRfdTY0KHVpbnQ2NHgxX3QgX19wMCkgewotICBpbnQ2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDY0eDFfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDY0eDFfdCB2cmVpbnRlcnByZXRfczY0X3U2NCh1aW50NjR4MV90IF9fcDApIHsKLSAgaW50NjR4MV90IF9fcmV0OwotICBfX3JldCA9IChpbnQ2NHgxX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDY0eDFfdCB2cmVpbnRlcnByZXRfczY0X3UxNih1aW50MTZ4NF90IF9fcDApIHsKLSAgaW50NjR4MV90IF9fcmV0OwotICBfX3JldCA9IChpbnQ2NHgxX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3M2NF91MTYodWludDE2eDRfdCBfX3AwKSB7Ci0gIGludDY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50NjR4MV90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3M2NF9zOChpbnQ4eDhfdCBfX3AwKSB7Ci0gIGludDY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50NjR4MV90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50NjR4MV90IHZyZWludGVycHJldF9zNjRfczgoaW50OHg4X3QgX19wMCkgewotICBpbnQ2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDY0eDFfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50NjR4MV90IHZyZWludGVycHJldF9zNjRfZjY0KGZsb2F0NjR4MV90IF9fcDApIHsKLSAgaW50NjR4MV90IF9fcmV0OwotICBfX3JldCA9IChpbnQ2NHgxX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3M2NF9mNjQoZmxvYXQ2NHgxX3QgX19wMCkgewotICBpbnQ2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDY0eDFfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50NjR4MV90IHZyZWludGVycHJldF9zNjRfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKLSAgaW50NjR4MV90IF9fcmV0OwotICBfX3JldCA9IChpbnQ2NHgxX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3M2NF9mMzIoZmxvYXQzMngyX3QgX19wMCkgewotICBpbnQ2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDY0eDFfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50NjR4MV90IHZyZWludGVycHJldF9zNjRfZjE2KGZsb2F0MTZ4NF90IF9fcDApIHsKLSAgaW50NjR4MV90IF9fcmV0OwotICBfX3JldCA9IChpbnQ2NHgxX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3M2NF9mMTYoZmxvYXQxNng0X3QgX19wMCkgewotICBpbnQ2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDY0eDFfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50NjR4MV90IHZyZWludGVycHJldF9zNjRfczMyKGludDMyeDJfdCBfX3AwKSB7Ci0gIGludDY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50NjR4MV90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50NjR4MV90IHZyZWludGVycHJldF9zNjRfczMyKGludDMyeDJfdCBfX3AwKSB7Ci0gIGludDY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50NjR4MV90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3M2NF9zMTYoaW50MTZ4NF90IF9fcDApIHsKLSAgaW50NjR4MV90IF9fcmV0OwotICBfX3JldCA9IChpbnQ2NHgxX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3M2NF9zMTYoaW50MTZ4NF90IF9fcDApIHsKLSAgaW50NjR4MV90IF9fcmV0OwotICBfX3JldCA9IChpbnQ2NHgxX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDE2eDRfdCB2cmVpbnRlcnByZXRfczE2X3A4KHBvbHk4eDhfdCBfX3AwKSB7Ci0gIGludDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MTZ4NF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MTZ4NF90IHZyZWludGVycHJldF9zMTZfcDgocG9seTh4OF90IF9fcDApIHsKLSAgaW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9IChpbnQxNng0X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDE2eDRfdCB2cmVpbnRlcnByZXRfczE2X3A2NChwb2x5NjR4MV90IF9fcDApIHsKLSAgaW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9IChpbnQxNng0X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQxNng0X3QgdnJlaW50ZXJwcmV0X3MxNl9wNjQocG9seTY0eDFfdCBfX3AwKSB7Ci0gIGludDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MTZ4NF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQxNng0X3QgdnJlaW50ZXJwcmV0X3MxNl9wMTYocG9seTE2eDRfdCBfX3AwKSB7Ci0gIGludDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MTZ4NF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MTZ4NF90IHZyZWludGVycHJldF9zMTZfcDE2KHBvbHkxNng0X3QgX19wMCkgewotICBpbnQxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDE2eDRfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MTZ4NF90IHZyZWludGVycHJldF9zMTZfdTgodWludDh4OF90IF9fcDApIHsKLSAgaW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9IChpbnQxNng0X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQxNng0X3QgdnJlaW50ZXJwcmV0X3MxNl91OCh1aW50OHg4X3QgX19wMCkgewotICBpbnQxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDE2eDRfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MTZ4NF90IHZyZWludGVycHJldF9zMTZfdTMyKHVpbnQzMngyX3QgX19wMCkgewotICBpbnQxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDE2eDRfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDE2eDRfdCB2cmVpbnRlcnByZXRfczE2X3UzMih1aW50MzJ4Ml90IF9fcDApIHsKLSAgaW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9IChpbnQxNng0X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDE2eDRfdCB2cmVpbnRlcnByZXRfczE2X3U2NCh1aW50NjR4MV90IF9fcDApIHsKLSAgaW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9IChpbnQxNng0X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQxNng0X3QgdnJlaW50ZXJwcmV0X3MxNl91NjQodWludDY0eDFfdCBfX3AwKSB7Ci0gIGludDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MTZ4NF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQxNng0X3QgdnJlaW50ZXJwcmV0X3MxNl91MTYodWludDE2eDRfdCBfX3AwKSB7Ci0gIGludDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MTZ4NF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MTZ4NF90IHZyZWludGVycHJldF9zMTZfdTE2KHVpbnQxNng0X3QgX19wMCkgewotICBpbnQxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDE2eDRfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MTZ4NF90IHZyZWludGVycHJldF9zMTZfczgoaW50OHg4X3QgX19wMCkgewotICBpbnQxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDE2eDRfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDE2eDRfdCB2cmVpbnRlcnByZXRfczE2X3M4KGludDh4OF90IF9fcDApIHsKLSAgaW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9IChpbnQxNng0X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDE2eDRfdCB2cmVpbnRlcnByZXRfczE2X2Y2NChmbG9hdDY0eDFfdCBfX3AwKSB7Ci0gIGludDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MTZ4NF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MTZ4NF90IHZyZWludGVycHJldF9zMTZfZjY0KGZsb2F0NjR4MV90IF9fcDApIHsKLSAgaW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9IChpbnQxNng0X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDE2eDRfdCB2cmVpbnRlcnByZXRfczE2X2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7Ci0gIGludDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MTZ4NF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MTZ4NF90IHZyZWludGVycHJldF9zMTZfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKLSAgaW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9IChpbnQxNng0X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDE2eDRfdCB2cmVpbnRlcnByZXRfczE2X2YxNihmbG9hdDE2eDRfdCBfX3AwKSB7Ci0gIGludDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MTZ4NF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MTZ4NF90IHZyZWludGVycHJldF9zMTZfZjE2KGZsb2F0MTZ4NF90IF9fcDApIHsKLSAgaW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9IChpbnQxNng0X3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDE2eDRfdCB2cmVpbnRlcnByZXRfczE2X3MzMihpbnQzMngyX3QgX19wMCkgewotICBpbnQxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDE2eDRfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDE2eDRfdCB2cmVpbnRlcnByZXRfczE2X3MzMihpbnQzMngyX3QgX19wMCkgewotICBpbnQxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDE2eDRfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MTZ4NF90IHZyZWludGVycHJldF9zMTZfczY0KGludDY0eDFfdCBfX3AwKSB7Ci0gIGludDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MTZ4NF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MTZ4NF90IHZyZWludGVycHJldF9zMTZfczY0KGludDY0eDFfdCBfX3AwKSB7Ci0gIGludDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MTZ4NF90KShfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNlbmRpZgotI2lmIF9fQVJNX0FSQ0ggPj0gOCAmJiBkZWZpbmVkKF9fYWFyY2g2NF9fKSAmJiBkZWZpbmVkKF9fQVJNX0ZFQVRVUkVfRElSRUNURURfUk9VTkRJTkcpCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgZmxvYXQ2NHgyX3QgdnJuZHFfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKLSAgZmxvYXQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92cm5kcV92KChpbnQ4eDE2X3QpX19wMCwgNDIpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBmbG9hdDY0eDJfdCB2cm5kcV9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgewotICBmbG9hdDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgZmxvYXQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92cm5kcV92KChpbnQ4eDE2X3QpX19yZXYwLCA0Mik7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBmbG9hdDY0eDFfdCB2cm5kX2Y2NChmbG9hdDY0eDFfdCBfX3AwKSB7Ci0gIGZsb2F0NjR4MV90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDY0eDFfdCkgX19idWlsdGluX25lb25fdnJuZF92KChpbnQ4eDhfdClfX3AwLCAxMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGZsb2F0NjR4MV90IHZybmRfZjY0KGZsb2F0NjR4MV90IF9fcDApIHsKLSAgZmxvYXQ2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92cm5kX3YoKGludDh4OF90KV9fcDAsIDEwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBmbG9hdDY0eDJfdCB2cm5kYXFfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKLSAgZmxvYXQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92cm5kYXFfdigoaW50OHgxNl90KV9fcDAsIDQyKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgZmxvYXQ2NHgyX3QgdnJuZGFxX2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7Ci0gIGZsb2F0NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICBmbG9hdDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZybmRhcV92KChpbnQ4eDE2X3QpX19yZXYwLCA0Mik7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBmbG9hdDY0eDFfdCB2cm5kYV9mNjQoZmxvYXQ2NHgxX3QgX19wMCkgewotICBmbG9hdDY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZybmRhX3YoKGludDh4OF90KV9fcDAsIDEwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgZmxvYXQ2NHgxX3QgdnJuZGFfZjY0KGZsb2F0NjR4MV90IF9fcDApIHsKLSAgZmxvYXQ2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92cm5kYV92KChpbnQ4eDhfdClfX3AwLCAxMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgZmxvYXQ2NHgyX3QgdnJuZGlxX2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7Ci0gIGZsb2F0NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDY0eDJfdCkgX19idWlsdGluX25lb25fdnJuZGlxX3YoKGludDh4MTZfdClfX3AwLCA0Mik7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGZsb2F0NjR4Ml90IHZybmRpcV9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgewotICBmbG9hdDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgZmxvYXQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92cm5kaXFfdigoaW50OHgxNl90KV9fcmV2MCwgNDIpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgZmxvYXQzMng0X3QgdnJuZGlxX2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7Ci0gIGZsb2F0MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDMyeDRfdCkgX19idWlsdGluX25lb25fdnJuZGlxX3YoKGludDh4MTZfdClfX3AwLCA0MSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGZsb2F0MzJ4NF90IHZybmRpcV9mMzIoZmxvYXQzMng0X3QgX19wMCkgewotICBmbG9hdDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgZmxvYXQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cm5kaXFfdigoaW50OHgxNl90KV9fcmV2MCwgNDEpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgZmxvYXQ2NHgxX3QgdnJuZGlfZjY0KGZsb2F0NjR4MV90IF9fcDApIHsKLSAgZmxvYXQ2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92cm5kaV92KChpbnQ4eDhfdClfX3AwLCAxMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGZsb2F0NjR4MV90IHZybmRpX2Y2NChmbG9hdDY0eDFfdCBfX3AwKSB7Ci0gIGZsb2F0NjR4MV90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDY0eDFfdCkgX19idWlsdGluX25lb25fdnJuZGlfdigoaW50OHg4X3QpX19wMCwgMTApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGZsb2F0MzJ4Ml90IHZybmRpX2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7Ci0gIGZsb2F0MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDMyeDJfdCkgX19idWlsdGluX25lb25fdnJuZGlfdigoaW50OHg4X3QpX19wMCwgOSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGZsb2F0MzJ4Ml90IHZybmRpX2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7Ci0gIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICBmbG9hdDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZybmRpX3YoKGludDh4OF90KV9fcmV2MCwgOSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBmbG9hdDY0eDJfdCB2cm5kbXFfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKLSAgZmxvYXQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92cm5kbXFfdigoaW50OHgxNl90KV9fcDAsIDQyKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgZmxvYXQ2NHgyX3QgdnJuZG1xX2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7Ci0gIGZsb2F0NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICBmbG9hdDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZybmRtcV92KChpbnQ4eDE2X3QpX19yZXYwLCA0Mik7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBmbG9hdDY0eDFfdCB2cm5kbV9mNjQoZmxvYXQ2NHgxX3QgX19wMCkgewotICBmbG9hdDY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZybmRtX3YoKGludDh4OF90KV9fcDAsIDEwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgZmxvYXQ2NHgxX3QgdnJuZG1fZjY0KGZsb2F0NjR4MV90IF9fcDApIHsKLSAgZmxvYXQ2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92cm5kbV92KChpbnQ4eDhfdClfX3AwLCAxMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgZmxvYXQ2NHgyX3QgdnJuZG5xX2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7Ci0gIGZsb2F0NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDY0eDJfdCkgX19idWlsdGluX25lb25fdnJuZG5xX3YoKGludDh4MTZfdClfX3AwLCA0Mik7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGZsb2F0NjR4Ml90IHZybmRucV9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgewotICBmbG9hdDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgZmxvYXQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92cm5kbnFfdigoaW50OHgxNl90KV9fcmV2MCwgNDIpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgZmxvYXQ2NHgxX3QgdnJuZG5fZjY0KGZsb2F0NjR4MV90IF9fcDApIHsKLSAgZmxvYXQ2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92cm5kbl92KChpbnQ4eDhfdClfX3AwLCAxMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGZsb2F0NjR4MV90IHZybmRuX2Y2NChmbG9hdDY0eDFfdCBfX3AwKSB7Ci0gIGZsb2F0NjR4MV90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDY0eDFfdCkgX19idWlsdGluX25lb25fdnJuZG5fdigoaW50OHg4X3QpX19wMCwgMTApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGZsb2F0NjR4Ml90IHZybmRwcV9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgewotICBmbG9hdDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZybmRwcV92KChpbnQ4eDE2X3QpX19wMCwgNDIpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBmbG9hdDY0eDJfdCB2cm5kcHFfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKLSAgZmxvYXQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIGZsb2F0NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDY0eDJfdCkgX19idWlsdGluX25lb25fdnJuZHBxX3YoKGludDh4MTZfdClfX3JldjAsIDQyKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGZsb2F0NjR4MV90IHZybmRwX2Y2NChmbG9hdDY0eDFfdCBfX3AwKSB7Ci0gIGZsb2F0NjR4MV90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDY0eDFfdCkgX19idWlsdGluX25lb25fdnJuZHBfdigoaW50OHg4X3QpX19wMCwgMTApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBmbG9hdDY0eDFfdCB2cm5kcF9mNjQoZmxvYXQ2NHgxX3QgX19wMCkgewotICBmbG9hdDY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZybmRwX3YoKGludDh4OF90KV9fcDAsIDEwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBmbG9hdDY0eDJfdCB2cm5keHFfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKLSAgZmxvYXQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92cm5keHFfdigoaW50OHgxNl90KV9fcDAsIDQyKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgZmxvYXQ2NHgyX3QgdnJuZHhxX2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7Ci0gIGZsb2F0NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICBmbG9hdDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZybmR4cV92KChpbnQ4eDE2X3QpX19yZXYwLCA0Mik7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBmbG9hdDY0eDFfdCB2cm5keF9mNjQoZmxvYXQ2NHgxX3QgX19wMCkgewotICBmbG9hdDY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZybmR4X3YoKGludDh4OF90KV9fcDAsIDEwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgZmxvYXQ2NHgxX3QgdnJuZHhfZjY0KGZsb2F0NjR4MV90IF9fcDApIHsKLSAgZmxvYXQ2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92cm5keF92KChpbnQ4eDhfdClfX3AwLCAxMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jZW5kaWYKLSNpZiBfX0FSTV9BUkNIID49IDggJiYgZGVmaW5lZChfX2FhcmNoNjRfXykgJiYgZGVmaW5lZChfX0FSTV9GRUFUVVJFX05VTUVSSUNfTUFYTUlOKQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGZsb2F0NjR4Ml90IHZtYXhubXFfZjY0KGZsb2F0NjR4Ml90IF9fcDAsIGZsb2F0NjR4Ml90IF9fcDEpIHsKLSAgZmxvYXQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92bWF4bm1xX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDQyKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgZmxvYXQ2NHgyX3Qgdm1heG5tcV9mNjQoZmxvYXQ2NHgyX3QgX19wMCwgZmxvYXQ2NHgyX3QgX19wMSkgewotICBmbG9hdDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgZmxvYXQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7Ci0gIGZsb2F0NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDY0eDJfdCkgX19idWlsdGluX25lb25fdm1heG5tcV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNDIpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgZmxvYXQ2NHgxX3Qgdm1heG5tX2Y2NChmbG9hdDY0eDFfdCBfX3AwLCBmbG9hdDY0eDFfdCBfX3AxKSB7Ci0gIGZsb2F0NjR4MV90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDY0eDFfdCkgX19idWlsdGluX25lb25fdm1heG5tX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGZsb2F0NjR4MV90IHZtYXhubV9mNjQoZmxvYXQ2NHgxX3QgX19wMCwgZmxvYXQ2NHgxX3QgX19wMSkgewotICBmbG9hdDY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZtYXhubV92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGZsb2F0NjR4Ml90IHZtaW5ubXFfZjY0KGZsb2F0NjR4Ml90IF9fcDAsIGZsb2F0NjR4Ml90IF9fcDEpIHsKLSAgZmxvYXQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92bWlubm1xX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDQyKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgZmxvYXQ2NHgyX3Qgdm1pbm5tcV9mNjQoZmxvYXQ2NHgyX3QgX19wMCwgZmxvYXQ2NHgyX3QgX19wMSkgewotICBmbG9hdDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgZmxvYXQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7Ci0gIGZsb2F0NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDY0eDJfdCkgX19idWlsdGluX25lb25fdm1pbm5tcV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNDIpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgZmxvYXQ2NHgxX3Qgdm1pbm5tX2Y2NChmbG9hdDY0eDFfdCBfX3AwLCBmbG9hdDY0eDFfdCBfX3AxKSB7Ci0gIGZsb2F0NjR4MV90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDY0eDFfdCkgX19idWlsdGluX25lb25fdm1pbm5tX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGZsb2F0NjR4MV90IHZtaW5ubV9mNjQoZmxvYXQ2NHgxX3QgX19wMCwgZmxvYXQ2NHgxX3QgX19wMSkgewotICBmbG9hdDY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZtaW5ubV92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2VuZGlmCi0jaWYgX19BUk1fRkVBVFVSRV9DUllQVE8KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50OHgxNl90IHZhZXNkcV91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgewotICB1aW50OHgxNl90IF9fcmV0OwotICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92YWVzZHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNDgpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50OHgxNl90IHZhZXNkcV91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgewotICB1aW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50OHgxNl90IF9fcmV0OwotICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92YWVzZHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDQ4KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ4eDE2X3QgdmFlc2VxX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7Ci0gIHVpbnQ4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZhZXNlcV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA0OCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ4eDE2X3QgdmFlc2VxX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7Ci0gIHVpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQ4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZhZXNlcV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNDgpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDh4MTZfdCB2YWVzaW1jcV91OCh1aW50OHgxNl90IF9fcDApIHsKLSAgdWludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdmFlc2ltY3FfdigoaW50OHgxNl90KV9fcDAsIDQ4KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDh4MTZfdCB2YWVzaW1jcV91OCh1aW50OHgxNl90IF9fcDApIHsKLSAgdWludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdmFlc2ltY3FfdigoaW50OHgxNl90KV9fcmV2MCwgNDgpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDh4MTZfdCB2YWVzbWNxX3U4KHVpbnQ4eDE2X3QgX19wMCkgewotICB1aW50OHgxNl90IF9fcmV0OwotICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92YWVzbWNxX3YoKGludDh4MTZfdClfX3AwLCA0OCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ4eDE2X3QgdmFlc21jcV91OCh1aW50OHgxNl90IF9fcDApIHsKLSAgdWludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdmFlc21jcV92KChpbnQ4eDE2X3QpX19yZXYwLCA0OCk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MzJ4NF90IHZzaGExY3FfdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyX3QgX19wMSwgdWludDMyeDRfdCBfX3AyKSB7Ci0gIHVpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGExY3FfdTMyKChpbnQ4eDE2X3QpX19wMCwgX19wMSwgKGludDh4MTZfdClfX3AyKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDMyeDRfdCB2c2hhMWNxX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMl90IF9fcDEsIHVpbnQzMng0X3QgX19wMikgewotICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICB1aW50MzJ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDMsIDIsIDEsIDApOwotICB1aW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92c2hhMWNxX3UzMigoaW50OHgxNl90KV9fcmV2MCwgX19wMSwgKGludDh4MTZfdClfX3JldjIpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDMyX3QgdnNoYTFoX3UzMih1aW50MzJfdCBfX3AwKSB7Ci0gIHVpbnQzMl90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJfdCkgX19idWlsdGluX25lb25fdnNoYTFoX3UzMihfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDMyX3QgdnNoYTFoX3UzMih1aW50MzJfdCBfX3AwKSB7Ci0gIHVpbnQzMl90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJfdCkgX19idWlsdGluX25lb25fdnNoYTFoX3UzMihfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MzJ4NF90IHZzaGExbXFfdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyX3QgX19wMSwgdWludDMyeDRfdCBfX3AyKSB7Ci0gIHVpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGExbXFfdTMyKChpbnQ4eDE2X3QpX19wMCwgX19wMSwgKGludDh4MTZfdClfX3AyKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDMyeDRfdCB2c2hhMW1xX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMl90IF9fcDEsIHVpbnQzMng0X3QgX19wMikgewotICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICB1aW50MzJ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDMsIDIsIDEsIDApOwotICB1aW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92c2hhMW1xX3UzMigoaW50OHgxNl90KV9fcmV2MCwgX19wMSwgKGludDh4MTZfdClfX3JldjIpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDMyeDRfdCB2c2hhMXBxX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMl90IF9fcDEsIHVpbnQzMng0X3QgX19wMikgewotICB1aW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92c2hhMXBxX3UzMigoaW50OHgxNl90KV9fcDAsIF9fcDEsIChpbnQ4eDE2X3QpX19wMik7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQzMng0X3QgdnNoYTFwcV91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJfdCBfX3AxLCB1aW50MzJ4NF90IF9fcDIpIHsKLSAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgdWludDMyeDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAzLCAyLCAxLCAwKTsKLSAgdWludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdnNoYTFwcV91MzIoKGludDh4MTZfdClfX3JldjAsIF9fcDEsIChpbnQ4eDE2X3QpX19yZXYyKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQzMng0X3QgdnNoYTFzdTBxX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSwgdWludDMyeDRfdCBfX3AyKSB7Ci0gIHVpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGExc3UwcV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAoaW50OHgxNl90KV9fcDIsIDUwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDMyeDRfdCB2c2hhMXN1MHFfdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxLCB1aW50MzJ4NF90IF9fcDIpIHsKLSAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgdWludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKLSAgdWludDMyeDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAzLCAyLCAxLCAwKTsKLSAgdWludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdnNoYTFzdTBxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAoaW50OHgxNl90KV9fcmV2MiwgNTApOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDMyeDRfdCB2c2hhMXN1MXFfdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7Ci0gIHVpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGExc3UxcV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA1MCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQzMng0X3QgdnNoYTFzdTFxX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgewotICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICB1aW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOwotICB1aW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92c2hhMXN1MXFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDUwKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQzMng0X3QgdnNoYTI1NmhxX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSwgdWludDMyeDRfdCBfX3AyKSB7Ci0gIHVpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGEyNTZocV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAoaW50OHgxNl90KV9fcDIsIDUwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDMyeDRfdCB2c2hhMjU2aHFfdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxLCB1aW50MzJ4NF90IF9fcDIpIHsKLSAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgdWludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKLSAgdWludDMyeDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAzLCAyLCAxLCAwKTsKLSAgdWludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdnNoYTI1NmhxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAoaW50OHgxNl90KV9fcmV2MiwgNTApOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDMyeDRfdCB2c2hhMjU2aDJxX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSwgdWludDMyeDRfdCBfX3AyKSB7Ci0gIHVpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGEyNTZoMnFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgKGludDh4MTZfdClfX3AyLCA1MCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQzMng0X3QgdnNoYTI1NmgycV91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEsIHVpbnQzMng0X3QgX19wMikgewotICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICB1aW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOwotICB1aW50MzJ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDMsIDIsIDEsIDApOwotICB1aW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92c2hhMjU2aDJxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAoaW50OHgxNl90KV9fcmV2MiwgNTApOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDMyeDRfdCB2c2hhMjU2c3UwcV91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEpIHsKLSAgdWludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdnNoYTI1NnN1MHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNTApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MzJ4NF90IHZzaGEyNTZzdTBxX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgewotICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICB1aW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOwotICB1aW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92c2hhMjU2c3UwcV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNTApOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDMyeDRfdCB2c2hhMjU2c3UxcV91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEsIHVpbnQzMng0X3QgX19wMikgewotICB1aW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92c2hhMjU2c3UxcV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAoaW50OHgxNl90KV9fcDIsIDUwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDMyeDRfdCB2c2hhMjU2c3UxcV91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEsIHVpbnQzMng0X3QgX19wMikgewotICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICB1aW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOwotICB1aW50MzJ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDMsIDIsIDEsIDApOwotICB1aW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92c2hhMjU2c3UxcV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgKGludDh4MTZfdClfX3JldjIsIDUwKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2VuZGlmCi0jaWYgZGVmaW5lZChfX0FSTV9GRUFUVVJFX1FSRE1YKQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDMyeDRfdCB2cXJkbWxhaHFfczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSwgaW50MzJ4NF90IF9fcDIpIHsKLSAgaW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IHZxYWRkcV9zMzIoX19wMCwgdnFyZG11bGhxX3MzMihfX3AxLCBfX3AyKSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDMyeDRfdCB2cXJkbWxhaHFfczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSwgaW50MzJ4NF90IF9fcDIpIHsKLSAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7Ci0gIGludDMyeDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAzLCAyLCAxLCAwKTsKLSAgaW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IF9fbm9zd2FwX3ZxYWRkcV9zMzIoX19yZXYwLCBfX25vc3dhcF92cXJkbXVsaHFfczMyKF9fcmV2MSwgX19yZXYyKSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQxNng4X3QgdnFyZG1sYWhxX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEsIGludDE2eDhfdCBfX3AyKSB7Ci0gIGludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSB2cWFkZHFfczE2KF9fcDAsIHZxcmRtdWxocV9zMTYoX19wMSwgX19wMikpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQxNng4X3QgdnFyZG1sYWhxX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEsIGludDE2eDhfdCBfX3AyKSB7Ci0gIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQxNng4X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSBfX25vc3dhcF92cWFkZHFfczE2KF9fcmV2MCwgX19ub3N3YXBfdnFyZG11bGhxX3MxNihfX3JldjEsIF9fcmV2MikpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MzJ4Ml90IHZxcmRtbGFoX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEsIGludDMyeDJfdCBfX3AyKSB7Ci0gIGludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSB2cWFkZF9zMzIoX19wMCwgdnFyZG11bGhfczMyKF9fcDEsIF9fcDIpKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MzJ4Ml90IHZxcmRtbGFoX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEsIGludDMyeDJfdCBfX3AyKSB7Ci0gIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOwotICBpbnQzMngyX3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMSwgMCk7Ci0gIGludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSBfX25vc3dhcF92cWFkZF9zMzIoX19yZXYwLCBfX25vc3dhcF92cXJkbXVsaF9zMzIoX19yZXYxLCBfX3JldjIpKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDE2eDRfdCB2cXJkbWxhaF9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxLCBpbnQxNng0X3QgX19wMikgewotICBpbnQxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gdnFhZGRfczE2KF9fcDAsIHZxcmRtdWxoX3MxNihfX3AxLCBfX3AyKSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDE2eDRfdCB2cXJkbWxhaF9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxLCBpbnQxNng0X3QgX19wMikgewotICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKLSAgaW50MTZ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDMsIDIsIDEsIDApOwotICBpbnQxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19ub3N3YXBfdnFhZGRfczE2KF9fcmV2MCwgX19ub3N3YXBfdnFyZG11bGhfczE2KF9fcmV2MSwgX19yZXYyKSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2cXJkbWxhaHFfbGFuZV9zMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAotICBpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKLSAgaW50MzJ4Ml90IF9fczIgPSBfX3AyOyBcCi0gIGludDMyeDRfdCBfX3JldDsgXAotICBfX3JldCA9IHZxYWRkcV9zMzIoX19zMCwgdnFyZG11bGhxX3MzMihfX3MxLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKSkpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnFyZG1sYWhxX2xhbmVfczMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCi0gIGludDMyeDJfdCBfX3MyID0gX19wMjsgXAotICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKLSAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCi0gIGludDMyeDJfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCAxLCAwKTsgXAotICBpbnQzMng0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSBfX25vc3dhcF92cWFkZHFfczMyKF9fcmV2MCwgX19ub3N3YXBfdnFyZG11bGhxX3MzMihfX3JldjEsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MiwgX19yZXYyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKSkpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnFyZG1sYWhxX2xhbmVfczE2KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCi0gIGludDE2eDRfdCBfX3MyID0gX19wMjsgXAotICBpbnQxNng4X3QgX19yZXQ7IFwKLSAgX19yZXQgPSB2cWFkZHFfczE2KF9fczAsIHZxcmRtdWxocV9zMTYoX19zMSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMywgX19wMywgX19wMywgX19wMywgX19wMywgX19wMywgX19wMykpKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZxcmRtbGFocV9sYW5lX3MxNihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCi0gIGludDE2eDhfdCBfX3MxID0gX19wMTsgXAotICBpbnQxNng0X3QgX19zMiA9IF9fcDI7IFwKLSAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBpbnQxNng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgMywgMiwgMSwgMCk7IFwKLSAgaW50MTZ4OF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gX19ub3N3YXBfdnFhZGRxX3MxNihfX3JldjAsIF9fbm9zd2FwX3ZxcmRtdWxocV9zMTYoX19yZXYxLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMywgX19wMywgX19wMywgX19wMywgX19wMywgX19wMywgX19wMykpKTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZxcmRtbGFoX2xhbmVfczMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCi0gIGludDMyeDJfdCBfX3MyID0gX19wMjsgXAotICBpbnQzMngyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSB2cWFkZF9zMzIoX19zMCwgdnFyZG11bGhfczMyKF9fczEsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIF9fcDMsIF9fcDMpKSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2cXJkbWxhaF9sYW5lX3MzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCi0gIGludDMyeDJfdCBfX3MxID0gX19wMTsgXAotICBpbnQzMngyX3QgX19zMiA9IF9fcDI7IFwKLSAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCi0gIGludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxLCAwKTsgXAotICBpbnQzMngyX3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgMSwgMCk7IFwKLSAgaW50MzJ4Ml90IF9fcmV0OyBcCi0gIF9fcmV0ID0gX19ub3N3YXBfdnFhZGRfczMyKF9fcmV2MCwgX19ub3N3YXBfdnFyZG11bGhfczMyKF9fcmV2MSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMpKSk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2cXJkbWxhaF9sYW5lX3MxNihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCi0gIGludDE2eDRfdCBfX3MxID0gX19wMTsgXAotICBpbnQxNng0X3QgX19zMiA9IF9fcDI7IFwKLSAgaW50MTZ4NF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gdnFhZGRfczE2KF9fczAsIHZxcmRtdWxoX3MxNihfX3MxLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKSkpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnFyZG1sYWhfbGFuZV9zMTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDE2eDRfdCBfX3MwID0gX19wMDsgXAotICBpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKLSAgaW50MTZ4NF90IF9fczIgPSBfX3AyOyBcCi0gIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAotICBpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKLSAgaW50MTZ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDMsIDIsIDEsIDApOyBcCi0gIGludDE2eDRfdCBfX3JldDsgXAotICBfX3JldCA9IF9fbm9zd2FwX3ZxYWRkX3MxNihfX3JldjAsIF9fbm9zd2FwX3ZxcmRtdWxoX3MxNihfX3JldjEsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MiwgX19yZXYyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKSkpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MzJ4NF90IHZxcmRtbHNocV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxLCBpbnQzMng0X3QgX19wMikgewotICBpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gdnFzdWJxX3MzMihfX3AwLCB2cXJkbXVsaHFfczMyKF9fcDEsIF9fcDIpKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MzJ4NF90IHZxcmRtbHNocV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxLCBpbnQzMng0X3QgX19wMikgewotICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKLSAgaW50MzJ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDMsIDIsIDEsIDApOwotICBpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19ub3N3YXBfdnFzdWJxX3MzMihfX3JldjAsIF9fbm9zd2FwX3ZxcmRtdWxocV9zMzIoX19yZXYxLCBfX3JldjIpKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDE2eDhfdCB2cXJkbWxzaHFfczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSwgaW50MTZ4OF90IF9fcDIpIHsKLSAgaW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IHZxc3VicV9zMTYoX19wMCwgdnFyZG11bGhxX3MxNihfX3AxLCBfX3AyKSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDE2eDhfdCB2cXJkbWxzaHFfczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSwgaW50MTZ4OF90IF9fcDIpIHsKLSAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDE2eDhfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IF9fbm9zd2FwX3Zxc3VicV9zMTYoX19yZXYwLCBfX25vc3dhcF92cXJkbXVsaHFfczE2KF9fcmV2MSwgX19yZXYyKSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQzMngyX3QgdnFyZG1sc2hfczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSwgaW50MzJ4Ml90IF9fcDIpIHsKLSAgaW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IHZxc3ViX3MzMihfX3AwLCB2cXJkbXVsaF9zMzIoX19wMSwgX19wMikpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQzMngyX3QgdnFyZG1sc2hfczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSwgaW50MzJ4Ml90IF9fcDIpIHsKLSAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7Ci0gIGludDMyeDJfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAxLCAwKTsKLSAgaW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IF9fbm9zd2FwX3Zxc3ViX3MzMihfX3JldjAsIF9fbm9zd2FwX3ZxcmRtdWxoX3MzMihfX3JldjEsIF9fcmV2MikpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MTZ4NF90IHZxcmRtbHNoX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEsIGludDE2eDRfdCBfX3AyKSB7Ci0gIGludDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSB2cXN1Yl9zMTYoX19wMCwgdnFyZG11bGhfczE2KF9fcDEsIF9fcDIpKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MTZ4NF90IHZxcmRtbHNoX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEsIGludDE2eDRfdCBfX3AyKSB7Ci0gIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOwotICBpbnQxNng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMywgMiwgMSwgMCk7Ci0gIGludDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSBfX25vc3dhcF92cXN1Yl9zMTYoX19yZXYwLCBfX25vc3dhcF92cXJkbXVsaF9zMTYoX19yZXYxLCBfX3JldjIpKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZxcmRtbHNocV9sYW5lX3MzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCi0gIGludDMyeDRfdCBfX3MxID0gX19wMTsgXAotICBpbnQzMngyX3QgX19zMiA9IF9fcDI7IFwKLSAgaW50MzJ4NF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gdnFzdWJxX3MzMihfX3MwLCB2cXJkbXVsaHFfczMyKF9fczEsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpKSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2cXJkbWxzaHFfbGFuZV9zMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAotICBpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKLSAgaW50MzJ4Ml90IF9fczIgPSBfX3AyOyBcCi0gIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAotICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKLSAgaW50MzJ4Ml90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDEsIDApOyBcCi0gIGludDMyeDRfdCBfX3JldDsgXAotICBfX3JldCA9IF9fbm9zd2FwX3Zxc3VicV9zMzIoX19yZXYwLCBfX25vc3dhcF92cXJkbXVsaHFfczMyKF9fcmV2MSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpKSk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2cXJkbWxzaHFfbGFuZV9zMTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDE2eDhfdCBfX3MwID0gX19wMDsgXAotICBpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKLSAgaW50MTZ4NF90IF9fczIgPSBfX3AyOyBcCi0gIGludDE2eDhfdCBfX3JldDsgXAotICBfX3JldCA9IHZxc3VicV9zMTYoX19zMCwgdnFyZG11bGhxX3MxNihfX3MxLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKSkpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnFyZG1sc2hxX2xhbmVfczE2KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCi0gIGludDE2eDRfdCBfX3MyID0gX19wMjsgXAotICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIGludDE2eDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCAzLCAyLCAxLCAwKTsgXAotICBpbnQxNng4X3QgX19yZXQ7IFwKLSAgX19yZXQgPSBfX25vc3dhcF92cXN1YnFfczE2KF9fcmV2MCwgX19ub3N3YXBfdnFyZG11bGhxX3MxNihfX3JldjEsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MiwgX19yZXYyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKSkpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnFyZG1sc2hfbGFuZV9zMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDMyeDJfdCBfX3MwID0gX19wMDsgXAotICBpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKLSAgaW50MzJ4Ml90IF9fczIgPSBfX3AyOyBcCi0gIGludDMyeDJfdCBfX3JldDsgXAotICBfX3JldCA9IHZxc3ViX3MzMihfX3MwLCB2cXJkbXVsaF9zMzIoX19zMSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMykpKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZxcmRtbHNoX2xhbmVfczMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCi0gIGludDMyeDJfdCBfX3MyID0gX19wMjsgXAotICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKLSAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCi0gIGludDMyeDJfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCAxLCAwKTsgXAotICBpbnQzMngyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSBfX25vc3dhcF92cXN1Yl9zMzIoX19yZXYwLCBfX25vc3dhcF92cXJkbXVsaF9zMzIoX19yZXYxLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMykpKTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZxcmRtbHNoX2xhbmVfczE2KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCi0gIGludDE2eDRfdCBfX3MyID0gX19wMjsgXAotICBpbnQxNng0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSB2cXN1Yl9zMTYoX19zMCwgdnFyZG11bGhfczE2KF9fczEsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpKSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2cXJkbWxzaF9sYW5lX3MxNihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCi0gIGludDE2eDRfdCBfX3MxID0gX19wMTsgXAotICBpbnQxNng0X3QgX19zMiA9IF9fcDI7IFwKLSAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCi0gIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAotICBpbnQxNng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgMywgMiwgMSwgMCk7IFwKLSAgaW50MTZ4NF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gX19ub3N3YXBfdnFzdWJfczE2KF9fcmV2MCwgX19ub3N3YXBfdnFyZG11bGhfczE2KF9fcmV2MSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpKSk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNlbmRpZgotI2lmIGRlZmluZWQoX19BUk1fRkVBVFVSRV9RUkRNWCkgJiYgZGVmaW5lZChfX2FhcmNoNjRfXykKLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2cXJkbWxhaHFfbGFuZXFfczMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCi0gIGludDMyeDRfdCBfX3MyID0gX19wMjsgXAotICBpbnQzMng0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSB2cWFkZHFfczMyKF9fczAsIHZxcmRtdWxocV9zMzIoX19zMSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMywgX19wMywgX19wMykpKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZxcmRtbGFocV9sYW5lcV9zMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAotICBpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKLSAgaW50MzJ4NF90IF9fczIgPSBfX3AyOyBcCi0gIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAotICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKLSAgaW50MzJ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDMsIDIsIDEsIDApOyBcCi0gIGludDMyeDRfdCBfX3JldDsgXAotICBfX3JldCA9IF9fbm9zd2FwX3ZxYWRkcV9zMzIoX19yZXYwLCBfX25vc3dhcF92cXJkbXVsaHFfczMyKF9fcmV2MSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpKSk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2cXJkbWxhaHFfbGFuZXFfczE2KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCi0gIGludDE2eDhfdCBfX3MyID0gX19wMjsgXAotICBpbnQxNng4X3QgX19yZXQ7IFwKLSAgX19yZXQgPSB2cWFkZHFfczE2KF9fczAsIHZxcmRtdWxocV9zMTYoX19zMSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMywgX19wMywgX19wMywgX19wMywgX19wMywgX19wMywgX19wMykpKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZxcmRtbGFocV9sYW5lcV9zMTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDE2eDhfdCBfX3MwID0gX19wMDsgXAotICBpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKLSAgaW50MTZ4OF90IF9fczIgPSBfX3AyOyBcCi0gIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgaW50MTZ4OF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIGludDE2eDhfdCBfX3JldDsgXAotICBfX3JldCA9IF9fbm9zd2FwX3ZxYWRkcV9zMTYoX19yZXYwLCBfX25vc3dhcF92cXJkbXVsaHFfczE2KF9fcmV2MSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpKSk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2cXJkbWxhaF9sYW5lcV9zMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDMyeDJfdCBfX3MwID0gX19wMDsgXAotICBpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKLSAgaW50MzJ4NF90IF9fczIgPSBfX3AyOyBcCi0gIGludDMyeDJfdCBfX3JldDsgXAotICBfX3JldCA9IHZxYWRkX3MzMihfX3MwLCB2cXJkbXVsaF9zMzIoX19zMSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMykpKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZxcmRtbGFoX2xhbmVxX3MzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCi0gIGludDMyeDJfdCBfX3MxID0gX19wMTsgXAotICBpbnQzMng0X3QgX19zMiA9IF9fcDI7IFwKLSAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCi0gIGludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxLCAwKTsgXAotICBpbnQzMng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgMywgMiwgMSwgMCk7IFwKLSAgaW50MzJ4Ml90IF9fcmV0OyBcCi0gIF9fcmV0ID0gX19ub3N3YXBfdnFhZGRfczMyKF9fcmV2MCwgX19ub3N3YXBfdnFyZG11bGhfczMyKF9fcmV2MSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMpKSk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2cXJkbWxhaF9sYW5lcV9zMTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDE2eDRfdCBfX3MwID0gX19wMDsgXAotICBpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKLSAgaW50MTZ4OF90IF9fczIgPSBfX3AyOyBcCi0gIGludDE2eDRfdCBfX3JldDsgXAotICBfX3JldCA9IHZxYWRkX3MxNihfX3MwLCB2cXJkbXVsaF9zMTYoX19zMSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMywgX19wMywgX19wMykpKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZxcmRtbGFoX2xhbmVxX3MxNihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCi0gIGludDE2eDRfdCBfX3MxID0gX19wMTsgXAotICBpbnQxNng4X3QgX19zMiA9IF9fcDI7IFwKLSAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCi0gIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAotICBpbnQxNng4X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgaW50MTZ4NF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gX19ub3N3YXBfdnFhZGRfczE2KF9fcmV2MCwgX19ub3N3YXBfdnFyZG11bGhfczE2KF9fcmV2MSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpKSk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2cXJkbWxzaHFfbGFuZXFfczMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCi0gIGludDMyeDRfdCBfX3MyID0gX19wMjsgXAotICBpbnQzMng0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSB2cXN1YnFfczMyKF9fczAsIHZxcmRtdWxocV9zMzIoX19zMSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMywgX19wMywgX19wMykpKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZxcmRtbHNocV9sYW5lcV9zMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAotICBpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKLSAgaW50MzJ4NF90IF9fczIgPSBfX3AyOyBcCi0gIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAotICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKLSAgaW50MzJ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDMsIDIsIDEsIDApOyBcCi0gIGludDMyeDRfdCBfX3JldDsgXAotICBfX3JldCA9IF9fbm9zd2FwX3Zxc3VicV9zMzIoX19yZXYwLCBfX25vc3dhcF92cXJkbXVsaHFfczMyKF9fcmV2MSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpKSk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2cXJkbWxzaHFfbGFuZXFfczE2KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCi0gIGludDE2eDhfdCBfX3MyID0gX19wMjsgXAotICBpbnQxNng4X3QgX19yZXQ7IFwKLSAgX19yZXQgPSB2cXN1YnFfczE2KF9fczAsIHZxcmRtdWxocV9zMTYoX19zMSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMywgX19wMywgX19wMywgX19wMywgX19wMywgX19wMywgX19wMykpKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZxcmRtbHNocV9sYW5lcV9zMTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDE2eDhfdCBfX3MwID0gX19wMDsgXAotICBpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKLSAgaW50MTZ4OF90IF9fczIgPSBfX3AyOyBcCi0gIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgaW50MTZ4OF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIGludDE2eDhfdCBfX3JldDsgXAotICBfX3JldCA9IF9fbm9zd2FwX3Zxc3VicV9zMTYoX19yZXYwLCBfX25vc3dhcF92cXJkbXVsaHFfczE2KF9fcmV2MSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpKSk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2cXJkbWxzaF9sYW5lcV9zMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDMyeDJfdCBfX3MwID0gX19wMDsgXAotICBpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKLSAgaW50MzJ4NF90IF9fczIgPSBfX3AyOyBcCi0gIGludDMyeDJfdCBfX3JldDsgXAotICBfX3JldCA9IHZxc3ViX3MzMihfX3MwLCB2cXJkbXVsaF9zMzIoX19zMSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMykpKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZxcmRtbHNoX2xhbmVxX3MzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCi0gIGludDMyeDJfdCBfX3MxID0gX19wMTsgXAotICBpbnQzMng0X3QgX19zMiA9IF9fcDI7IFwKLSAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCi0gIGludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxLCAwKTsgXAotICBpbnQzMng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgMywgMiwgMSwgMCk7IFwKLSAgaW50MzJ4Ml90IF9fcmV0OyBcCi0gIF9fcmV0ID0gX19ub3N3YXBfdnFzdWJfczMyKF9fcmV2MCwgX19ub3N3YXBfdnFyZG11bGhfczMyKF9fcmV2MSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMpKSk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2cXJkbWxzaF9sYW5lcV9zMTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDE2eDRfdCBfX3MwID0gX19wMDsgXAotICBpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKLSAgaW50MTZ4OF90IF9fczIgPSBfX3AyOyBcCi0gIGludDE2eDRfdCBfX3JldDsgXAotICBfX3JldCA9IHZxc3ViX3MxNihfX3MwLCB2cXJkbXVsaF9zMTYoX19zMSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMywgX19wMywgX19wMykpKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZxcmRtbHNoX2xhbmVxX3MxNihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCi0gIGludDE2eDRfdCBfX3MxID0gX19wMTsgXAotICBpbnQxNng4X3QgX19zMiA9IF9fcDI7IFwKLSAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCi0gIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAotICBpbnQxNng4X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgaW50MTZ4NF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gX19ub3N3YXBfdnFzdWJfczE2KF9fcmV2MCwgX19ub3N3YXBfdnFyZG11bGhfczE2KF9fcmV2MSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpKSk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNlbmRpZgotI2lmIGRlZmluZWQoX19hYXJjaDY0X18pCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgZmxvYXQ2NHgyX3QgdmFiZHFfZjY0KGZsb2F0NjR4Ml90IF9fcDAsIGZsb2F0NjR4Ml90IF9fcDEpIHsKLSAgZmxvYXQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92YWJkcV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA0Mik7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGZsb2F0NjR4Ml90IHZhYmRxX2Y2NChmbG9hdDY0eDJfdCBfX3AwLCBmbG9hdDY0eDJfdCBfX3AxKSB7Ci0gIGZsb2F0NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICBmbG9hdDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKLSAgZmxvYXQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92YWJkcV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNDIpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgZmxvYXQ2NHgxX3QgdmFiZF9mNjQoZmxvYXQ2NHgxX3QgX19wMCwgZmxvYXQ2NHgxX3QgX19wMSkgewotICBmbG9hdDY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZhYmRfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDEwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgZmxvYXQ2NHgxX3QgdmFiZF9mNjQoZmxvYXQ2NHgxX3QgX19wMCwgZmxvYXQ2NHgxX3QgX19wMSkgewotICBmbG9hdDY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZhYmRfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDEwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBmbG9hdDY0X3QgdmFiZGRfZjY0KGZsb2F0NjRfdCBfX3AwLCBmbG9hdDY0X3QgX19wMSkgewotICBmbG9hdDY0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0NjRfdCkgX19idWlsdGluX25lb25fdmFiZGRfZjY0KF9fcDAsIF9fcDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBmbG9hdDY0X3QgdmFiZGRfZjY0KGZsb2F0NjRfdCBfX3AwLCBmbG9hdDY0X3QgX19wMSkgewotICBmbG9hdDY0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0NjRfdCkgX19idWlsdGluX25lb25fdmFiZGRfZjY0KF9fcDAsIF9fcDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGZsb2F0MzJfdCB2YWJkc19mMzIoZmxvYXQzMl90IF9fcDAsIGZsb2F0MzJfdCBfX3AxKSB7Ci0gIGZsb2F0MzJfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQzMl90KSBfX2J1aWx0aW5fbmVvbl92YWJkc19mMzIoX19wMCwgX19wMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGZsb2F0MzJfdCB2YWJkc19mMzIoZmxvYXQzMl90IF9fcDAsIGZsb2F0MzJfdCBfX3AxKSB7Ci0gIGZsb2F0MzJfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQzMl90KSBfX2J1aWx0aW5fbmVvbl92YWJkc19mMzIoX19wMCwgX19wMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgZmxvYXQ2NHgyX3QgdmFic3FfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKLSAgZmxvYXQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92YWJzcV92KChpbnQ4eDE2X3QpX19wMCwgNDIpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBmbG9hdDY0eDJfdCB2YWJzcV9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgewotICBmbG9hdDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgZmxvYXQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92YWJzcV92KChpbnQ4eDE2X3QpX19yZXYwLCA0Mik7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ2NHgyX3QgdmFic3FfczY0KGludDY0eDJfdCBfX3AwKSB7Ci0gIGludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92YWJzcV92KChpbnQ4eDE2X3QpX19wMCwgMzUpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQ2NHgyX3QgdmFic3FfczY0KGludDY0eDJfdCBfX3AwKSB7Ci0gIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgaW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZhYnNxX3YoKGludDh4MTZfdClfX3JldjAsIDM1KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGZsb2F0NjR4MV90IHZhYnNfZjY0KGZsb2F0NjR4MV90IF9fcDApIHsKLSAgZmxvYXQ2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92YWJzX3YoKGludDh4OF90KV9fcDAsIDEwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgZmxvYXQ2NHgxX3QgdmFic19mNjQoZmxvYXQ2NHgxX3QgX19wMCkgewotICBmbG9hdDY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZhYnNfdigoaW50OHg4X3QpX19wMCwgMTApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDY0eDFfdCB2YWJzX3M2NChpbnQ2NHgxX3QgX19wMCkgewotICBpbnQ2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDY0eDFfdCkgX19idWlsdGluX25lb25fdmFic192KChpbnQ4eDhfdClfX3AwLCAzKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50NjR4MV90IHZhYnNfczY0KGludDY0eDFfdCBfX3AwKSB7Ci0gIGludDY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92YWJzX3YoKGludDh4OF90KV9fcDAsIDMpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDY0X3QgdmFic2RfczY0KGludDY0X3QgX19wMCkgewotICBpbnQ2NF90IF9fcmV0OwotICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92YWJzZF9zNjQoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDY0X3QgdmFic2RfczY0KGludDY0X3QgX19wMCkgewotICBpbnQ2NF90IF9fcmV0OwotICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92YWJzZF9zNjQoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgZmxvYXQ2NHgyX3QgdmFkZHFfZjY0KGZsb2F0NjR4Ml90IF9fcDAsIGZsb2F0NjR4Ml90IF9fcDEpIHsKLSAgZmxvYXQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19wMCArIF9fcDE7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGZsb2F0NjR4Ml90IHZhZGRxX2Y2NChmbG9hdDY0eDJfdCBfX3AwLCBmbG9hdDY0eDJfdCBfX3AxKSB7Ci0gIGZsb2F0NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICBmbG9hdDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKLSAgZmxvYXQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19yZXYwICsgX19yZXYxOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgZmxvYXQ2NHgxX3QgdmFkZF9mNjQoZmxvYXQ2NHgxX3QgX19wMCwgZmxvYXQ2NHgxX3QgX19wMSkgewotICBmbG9hdDY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSBfX3AwICsgX19wMTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgZmxvYXQ2NHgxX3QgdmFkZF9mNjQoZmxvYXQ2NHgxX3QgX19wMCwgZmxvYXQ2NHgxX3QgX19wMSkgewotICBmbG9hdDY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSBfX3AwICsgX19wMTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50NjRfdCB2YWRkZF91NjQodWludDY0X3QgX19wMCwgdWludDY0X3QgX19wMSkgewotICB1aW50NjRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZhZGRkX3U2NChfX3AwLCBfX3AxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDY0X3QgdmFkZGRfdTY0KHVpbnQ2NF90IF9fcDAsIHVpbnQ2NF90IF9fcDEpIHsKLSAgdWludDY0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92YWRkZF91NjQoX19wMCwgX19wMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50NjRfdCB2YWRkZF9zNjQoaW50NjRfdCBfX3AwLCBpbnQ2NF90IF9fcDEpIHsKLSAgaW50NjRfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdmFkZGRfczY0KF9fcDAsIF9fcDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQ2NF90IHZhZGRkX3M2NChpbnQ2NF90IF9fcDAsIGludDY0X3QgX19wMSkgewotICBpbnQ2NF90IF9fcmV0OwotICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92YWRkZF9zNjQoX19wMCwgX19wMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDE2eDhfdCB2YWRkaG5faGlnaF91MzIodWludDE2eDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEsIHVpbnQzMng0X3QgX19wMikgewotICB1aW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IHZjb21iaW5lX3UxNihfX3AwLCB2YWRkaG5fdTMyKF9fcDEsIF9fcDIpKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDE2eDhfdCB2YWRkaG5faGlnaF91MzIodWludDE2eDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEsIHVpbnQzMng0X3QgX19wMikgewotICB1aW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICB1aW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOwotICB1aW50MzJ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDMsIDIsIDEsIDApOwotICB1aW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IF9fbm9zd2FwX3Zjb21iaW5lX3UxNihfX3JldjAsIF9fbm9zd2FwX3ZhZGRobl91MzIoX19yZXYxLCBfX3JldjIpKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQzMng0X3QgdmFkZGhuX2hpZ2hfdTY0KHVpbnQzMngyX3QgX19wMCwgdWludDY0eDJfdCBfX3AxLCB1aW50NjR4Ml90IF9fcDIpIHsKLSAgdWludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSB2Y29tYmluZV91MzIoX19wMCwgdmFkZGhuX3U2NChfX3AxLCBfX3AyKSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQzMng0X3QgdmFkZGhuX2hpZ2hfdTY0KHVpbnQzMngyX3QgX19wMCwgdWludDY0eDJfdCBfX3AxLCB1aW50NjR4Ml90IF9fcDIpIHsKLSAgdWludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgdWludDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKLSAgdWludDY0eDJfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAxLCAwKTsKLSAgdWludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSBfX25vc3dhcF92Y29tYmluZV91MzIoX19yZXYwLCBfX25vc3dhcF92YWRkaG5fdTY0KF9fcmV2MSwgX19yZXYyKSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50OHgxNl90IHZhZGRobl9oaWdoX3UxNih1aW50OHg4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxLCB1aW50MTZ4OF90IF9fcDIpIHsKLSAgdWludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSB2Y29tYmluZV91OChfX3AwLCB2YWRkaG5fdTE2KF9fcDEsIF9fcDIpKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDh4MTZfdCB2YWRkaG5faGlnaF91MTYodWludDh4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSwgdWludDE2eDhfdCBfX3AyKSB7Ci0gIHVpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDE2eDhfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSBfX25vc3dhcF92Y29tYmluZV91OChfX3JldjAsIF9fbm9zd2FwX3ZhZGRobl91MTYoX19yZXYxLCBfX3JldjIpKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDE2eDhfdCB2YWRkaG5faGlnaF9zMzIoaW50MTZ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxLCBpbnQzMng0X3QgX19wMikgewotICBpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gdmNvbWJpbmVfczE2KF9fcDAsIHZhZGRobl9zMzIoX19wMSwgX19wMikpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQxNng4X3QgdmFkZGhuX2hpZ2hfczMyKGludDE2eDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSwgaW50MzJ4NF90IF9fcDIpIHsKLSAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7Ci0gIGludDMyeDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAzLCAyLCAxLCAwKTsKLSAgaW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IF9fbm9zd2FwX3Zjb21iaW5lX3MxNihfX3JldjAsIF9fbm9zd2FwX3ZhZGRobl9zMzIoX19yZXYxLCBfX3JldjIpKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDMyeDRfdCB2YWRkaG5faGlnaF9zNjQoaW50MzJ4Ml90IF9fcDAsIGludDY0eDJfdCBfX3AxLCBpbnQ2NHgyX3QgX19wMikgewotICBpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gdmNvbWJpbmVfczMyKF9fcDAsIHZhZGRobl9zNjQoX19wMSwgX19wMikpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQzMng0X3QgdmFkZGhuX2hpZ2hfczY0KGludDMyeDJfdCBfX3AwLCBpbnQ2NHgyX3QgX19wMSwgaW50NjR4Ml90IF9fcDIpIHsKLSAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICBpbnQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7Ci0gIGludDY0eDJfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAxLCAwKTsKLSAgaW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IF9fbm9zd2FwX3Zjb21iaW5lX3MzMihfX3JldjAsIF9fbm9zd2FwX3ZhZGRobl9zNjQoX19yZXYxLCBfX3JldjIpKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDh4MTZfdCB2YWRkaG5faGlnaF9zMTYoaW50OHg4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEsIGludDE2eDhfdCBfX3AyKSB7Ci0gIGludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSB2Y29tYmluZV9zOChfX3AwLCB2YWRkaG5fczE2KF9fcDEsIF9fcDIpKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50OHgxNl90IHZhZGRobl9oaWdoX3MxNihpbnQ4eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSwgaW50MTZ4OF90IF9fcDIpIHsKLSAgaW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50MTZ4OF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQ4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19ub3N3YXBfdmNvbWJpbmVfczgoX19yZXYwLCBfX25vc3dhcF92YWRkaG5fczE2KF9fcmV2MSwgX19yZXYyKSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MTZfdCB2YWRkbHZxX3U4KHVpbnQ4eDE2X3QgX19wMCkgewotICB1aW50MTZfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZhZGRsdnFfdTgoKGludDh4MTZfdClfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDE2X3QgdmFkZGx2cV91OCh1aW50OHgxNl90IF9fcDApIHsKLSAgdWludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92YWRkbHZxX3U4KChpbnQ4eDE2X3QpX19yZXYwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50NjRfdCB2YWRkbHZxX3UzMih1aW50MzJ4NF90IF9fcDApIHsKLSAgdWludDY0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92YWRkbHZxX3UzMigoaW50OHgxNl90KV9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50NjRfdCB2YWRkbHZxX3UzMih1aW50MzJ4NF90IF9fcDApIHsKLSAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgdWludDY0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92YWRkbHZxX3UzMigoaW50OHgxNl90KV9fcmV2MCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDMyX3QgdmFkZGx2cV91MTYodWludDE2eDhfdCBfX3AwKSB7Ci0gIHVpbnQzMl90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJfdCkgX19idWlsdGluX25lb25fdmFkZGx2cV91MTYoKGludDh4MTZfdClfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDMyX3QgdmFkZGx2cV91MTYodWludDE2eDhfdCBfX3AwKSB7Ci0gIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQzMl90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJfdCkgX19idWlsdGluX25lb25fdmFkZGx2cV91MTYoKGludDh4MTZfdClfX3JldjApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDE2X3QgdmFkZGx2cV9zOChpbnQ4eDE2X3QgX19wMCkgewotICBpbnQxNl90IF9fcmV0OwotICBfX3JldCA9IChpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92YWRkbHZxX3M4KChpbnQ4eDE2X3QpX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDE2X3QgdmFkZGx2cV9zOChpbnQ4eDE2X3QgX19wMCkgewotICBpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZhZGRsdnFfczgoKGludDh4MTZfdClfX3JldjApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDY0X3QgdmFkZGx2cV9zMzIoaW50MzJ4NF90IF9fcDApIHsKLSAgaW50NjRfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdmFkZGx2cV9zMzIoKGludDh4MTZfdClfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50NjRfdCB2YWRkbHZxX3MzMihpbnQzMng0X3QgX19wMCkgewotICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIGludDY0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZhZGRsdnFfczMyKChpbnQ4eDE2X3QpX19yZXYwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQzMl90IHZhZGRsdnFfczE2KGludDE2eDhfdCBfX3AwKSB7Ci0gIGludDMyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZhZGRsdnFfczE2KChpbnQ4eDE2X3QpX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDMyX3QgdmFkZGx2cV9zMTYoaW50MTZ4OF90IF9fcDApIHsKLSAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQzMl90IF9fcmV0OwotICBfX3JldCA9IChpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92YWRkbHZxX3MxNigoaW50OHgxNl90KV9fcmV2MCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDE2X3QgdmFkZGx2X3U4KHVpbnQ4eDhfdCBfX3AwKSB7Ci0gIHVpbnQxNl90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MTZfdCkgX19idWlsdGluX25lb25fdmFkZGx2X3U4KChpbnQ4eDhfdClfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDE2X3QgdmFkZGx2X3U4KHVpbnQ4eDhfdCBfX3AwKSB7Ci0gIHVpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92YWRkbHZfdTgoKGludDh4OF90KV9fcmV2MCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDY0X3QgdmFkZGx2X3UzMih1aW50MzJ4Ml90IF9fcDApIHsKLSAgdWludDY0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92YWRkbHZfdTMyKChpbnQ4eDhfdClfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDY0X3QgdmFkZGx2X3UzMih1aW50MzJ4Ml90IF9fcDApIHsKLSAgdWludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgdWludDY0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92YWRkbHZfdTMyKChpbnQ4eDhfdClfX3JldjApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQzMl90IHZhZGRsdl91MTYodWludDE2eDRfdCBfX3AwKSB7Ci0gIHVpbnQzMl90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJfdCkgX19idWlsdGluX25lb25fdmFkZGx2X3UxNigoaW50OHg4X3QpX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQzMl90IHZhZGRsdl91MTYodWludDE2eDRfdCBfX3AwKSB7Ci0gIHVpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQzMl90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJfdCkgX19idWlsdGluX25lb25fdmFkZGx2X3UxNigoaW50OHg4X3QpX19yZXYwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQxNl90IHZhZGRsdl9zOChpbnQ4eDhfdCBfX3AwKSB7Ci0gIGludDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZhZGRsdl9zOCgoaW50OHg4X3QpX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDE2X3QgdmFkZGx2X3M4KGludDh4OF90IF9fcDApIHsKLSAgaW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZhZGRsdl9zOCgoaW50OHg4X3QpX19yZXYwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ2NF90IHZhZGRsdl9zMzIoaW50MzJ4Ml90IF9fcDApIHsKLSAgaW50NjRfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdmFkZGx2X3MzMigoaW50OHg4X3QpX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDY0X3QgdmFkZGx2X3MzMihpbnQzMngyX3QgX19wMCkgewotICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIGludDY0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZhZGRsdl9zMzIoKGludDh4OF90KV9fcmV2MCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MzJfdCB2YWRkbHZfczE2KGludDE2eDRfdCBfX3AwKSB7Ci0gIGludDMyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZhZGRsdl9zMTYoKGludDh4OF90KV9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQzMl90IHZhZGRsdl9zMTYoaW50MTZ4NF90IF9fcDApIHsKLSAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICBpbnQzMl90IF9fcmV0OwotICBfX3JldCA9IChpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92YWRkbHZfczE2KChpbnQ4eDhfdClfX3JldjApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ4X3QgdmFkZHZxX3U4KHVpbnQ4eDE2X3QgX19wMCkgewotICB1aW50OF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50OF90KSBfX2J1aWx0aW5fbmVvbl92YWRkdnFfdTgoKGludDh4MTZfdClfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDhfdCB2YWRkdnFfdTgodWludDh4MTZfdCBfX3AwKSB7Ci0gIHVpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQ4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ4X3QpIF9fYnVpbHRpbl9uZW9uX3ZhZGR2cV91OCgoaW50OHgxNl90KV9fcmV2MCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDMyX3QgdmFkZHZxX3UzMih1aW50MzJ4NF90IF9fcDApIHsKLSAgdWludDMyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92YWRkdnFfdTMyKChpbnQ4eDE2X3QpX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQzMl90IHZhZGR2cV91MzIodWludDMyeDRfdCBfX3AwKSB7Ci0gIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQzMl90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJfdCkgX19idWlsdGluX25lb25fdmFkZHZxX3UzMigoaW50OHgxNl90KV9fcmV2MCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDY0X3QgdmFkZHZxX3U2NCh1aW50NjR4Ml90IF9fcDApIHsKLSAgdWludDY0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92YWRkdnFfdTY0KChpbnQ4eDE2X3QpX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ2NF90IHZhZGR2cV91NjQodWludDY0eDJfdCBfX3AwKSB7Ci0gIHVpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIHVpbnQ2NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50NjRfdCkgX19idWlsdGluX25lb25fdmFkZHZxX3U2NCgoaW50OHgxNl90KV9fcmV2MCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDE2X3QgdmFkZHZxX3UxNih1aW50MTZ4OF90IF9fcDApIHsKLSAgdWludDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92YWRkdnFfdTE2KChpbnQ4eDE2X3QpX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQxNl90IHZhZGR2cV91MTYodWludDE2eDhfdCBfX3AwKSB7Ci0gIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQxNl90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MTZfdCkgX19idWlsdGluX25lb25fdmFkZHZxX3UxNigoaW50OHgxNl90KV9fcmV2MCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50OF90IHZhZGR2cV9zOChpbnQ4eDE2X3QgX19wMCkgewotICBpbnQ4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDhfdCkgX19idWlsdGluX25lb25fdmFkZHZxX3M4KChpbnQ4eDE2X3QpX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDhfdCB2YWRkdnFfczgoaW50OHgxNl90IF9fcDApIHsKLSAgaW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQ4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDhfdCkgX19idWlsdGluX25lb25fdmFkZHZxX3M4KChpbnQ4eDE2X3QpX19yZXYwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBmbG9hdDY0X3QgdmFkZHZxX2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7Ci0gIGZsb2F0NjRfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQ2NF90KSBfX2J1aWx0aW5fbmVvbl92YWRkdnFfZjY0KChpbnQ4eDE2X3QpX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGZsb2F0NjRfdCB2YWRkdnFfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKLSAgZmxvYXQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIGZsb2F0NjRfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQ2NF90KSBfX2J1aWx0aW5fbmVvbl92YWRkdnFfZjY0KChpbnQ4eDE2X3QpX19yZXYwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBmbG9hdDMyX3QgdmFkZHZxX2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7Ci0gIGZsb2F0MzJfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQzMl90KSBfX2J1aWx0aW5fbmVvbl92YWRkdnFfZjMyKChpbnQ4eDE2X3QpX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGZsb2F0MzJfdCB2YWRkdnFfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKLSAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIGZsb2F0MzJfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQzMl90KSBfX2J1aWx0aW5fbmVvbl92YWRkdnFfZjMyKChpbnQ4eDE2X3QpX19yZXYwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQzMl90IHZhZGR2cV9zMzIoaW50MzJ4NF90IF9fcDApIHsKLSAgaW50MzJfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MzJfdCkgX19idWlsdGluX25lb25fdmFkZHZxX3MzMigoaW50OHgxNl90KV9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQzMl90IHZhZGR2cV9zMzIoaW50MzJ4NF90IF9fcDApIHsKLSAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICBpbnQzMl90IF9fcmV0OwotICBfX3JldCA9IChpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92YWRkdnFfczMyKChpbnQ4eDE2X3QpX19yZXYwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ2NF90IHZhZGR2cV9zNjQoaW50NjR4Ml90IF9fcDApIHsKLSAgaW50NjRfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdmFkZHZxX3M2NCgoaW50OHgxNl90KV9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQ2NF90IHZhZGR2cV9zNjQoaW50NjR4Ml90IF9fcDApIHsKLSAgaW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICBpbnQ2NF90IF9fcmV0OwotICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92YWRkdnFfczY0KChpbnQ4eDE2X3QpX19yZXYwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQxNl90IHZhZGR2cV9zMTYoaW50MTZ4OF90IF9fcDApIHsKLSAgaW50MTZfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MTZfdCkgX19idWlsdGluX25lb25fdmFkZHZxX3MxNigoaW50OHgxNl90KV9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQxNl90IHZhZGR2cV9zMTYoaW50MTZ4OF90IF9fcDApIHsKLSAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQxNl90IF9fcmV0OwotICBfX3JldCA9IChpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92YWRkdnFfczE2KChpbnQ4eDE2X3QpX19yZXYwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50OF90IHZhZGR2X3U4KHVpbnQ4eDhfdCBfX3AwKSB7Ci0gIHVpbnQ4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ4X3QpIF9fYnVpbHRpbl9uZW9uX3ZhZGR2X3U4KChpbnQ4eDhfdClfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDhfdCB2YWRkdl91OCh1aW50OHg4X3QgX19wMCkgewotICB1aW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQ4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ4X3QpIF9fYnVpbHRpbl9uZW9uX3ZhZGR2X3U4KChpbnQ4eDhfdClfX3JldjApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQzMl90IHZhZGR2X3UzMih1aW50MzJ4Ml90IF9fcDApIHsKLSAgdWludDMyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92YWRkdl91MzIoKGludDh4OF90KV9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MzJfdCB2YWRkdl91MzIodWludDMyeDJfdCBfX3AwKSB7Ci0gIHVpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIHVpbnQzMl90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJfdCkgX19idWlsdGluX25lb25fdmFkZHZfdTMyKChpbnQ4eDhfdClfX3JldjApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQxNl90IHZhZGR2X3UxNih1aW50MTZ4NF90IF9fcDApIHsKLSAgdWludDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92YWRkdl91MTYoKGludDh4OF90KV9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MTZfdCB2YWRkdl91MTYodWludDE2eDRfdCBfX3AwKSB7Ci0gIHVpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQxNl90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MTZfdCkgX19idWlsdGluX25lb25fdmFkZHZfdTE2KChpbnQ4eDhfdClfX3JldjApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDhfdCB2YWRkdl9zOChpbnQ4eDhfdCBfX3AwKSB7Ci0gIGludDhfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50OF90KSBfX2J1aWx0aW5fbmVvbl92YWRkdl9zOCgoaW50OHg4X3QpX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDhfdCB2YWRkdl9zOChpbnQ4eDhfdCBfX3AwKSB7Ci0gIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQ4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDhfdCkgX19idWlsdGluX25lb25fdmFkZHZfczgoKGludDh4OF90KV9fcmV2MCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgZmxvYXQzMl90IHZhZGR2X2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7Ci0gIGZsb2F0MzJfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQzMl90KSBfX2J1aWx0aW5fbmVvbl92YWRkdl9mMzIoKGludDh4OF90KV9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBmbG9hdDMyX3QgdmFkZHZfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKLSAgZmxvYXQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIGZsb2F0MzJfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQzMl90KSBfX2J1aWx0aW5fbmVvbl92YWRkdl9mMzIoKGludDh4OF90KV9fcmV2MCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MzJfdCB2YWRkdl9zMzIoaW50MzJ4Ml90IF9fcDApIHsKLSAgaW50MzJfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MzJfdCkgX19idWlsdGluX25lb25fdmFkZHZfczMyKChpbnQ4eDhfdClfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MzJfdCB2YWRkdl9zMzIoaW50MzJ4Ml90IF9fcDApIHsKLSAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICBpbnQzMl90IF9fcmV0OwotICBfX3JldCA9IChpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92YWRkdl9zMzIoKGludDh4OF90KV9fcmV2MCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MTZfdCB2YWRkdl9zMTYoaW50MTZ4NF90IF9fcDApIHsKLSAgaW50MTZfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MTZfdCkgX19idWlsdGluX25lb25fdmFkZHZfczE2KChpbnQ4eDhfdClfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MTZfdCB2YWRkdl9zMTYoaW50MTZ4NF90IF9fcDApIHsKLSAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICBpbnQxNl90IF9fcmV0OwotICBfX3JldCA9IChpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92YWRkdl9zMTYoKGludDh4OF90KV9fcmV2MCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgcG9seTY0eDFfdCB2YnNsX3A2NCh1aW50NjR4MV90IF9fcDAsIHBvbHk2NHgxX3QgX19wMSwgcG9seTY0eDFfdCBfX3AyKSB7Ci0gIHBvbHk2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHBvbHk2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3Zic2xfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIChpbnQ4eDhfdClfX3AyLCA2KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgcG9seTY0eDFfdCB2YnNsX3A2NCh1aW50NjR4MV90IF9fcDAsIHBvbHk2NHgxX3QgX19wMSwgcG9seTY0eDFfdCBfX3AyKSB7Ci0gIHBvbHk2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHBvbHk2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3Zic2xfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIChpbnQ4eDhfdClfX3AyLCA2KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBwb2x5NjR4Ml90IHZic2xxX3A2NCh1aW50NjR4Ml90IF9fcDAsIHBvbHk2NHgyX3QgX19wMSwgcG9seTY0eDJfdCBfX3AyKSB7Ci0gIHBvbHk2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHBvbHk2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3Zic2xxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIChpbnQ4eDE2X3QpX19wMiwgMzgpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBwb2x5NjR4Ml90IHZic2xxX3A2NCh1aW50NjR4Ml90IF9fcDAsIHBvbHk2NHgyX3QgX19wMSwgcG9seTY0eDJfdCBfX3AyKSB7Ci0gIHVpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIHBvbHk2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7Ci0gIHBvbHk2NHgyX3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMSwgMCk7Ci0gIHBvbHk2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHBvbHk2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3Zic2xxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAoaW50OHgxNl90KV9fcmV2MiwgMzgpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgZmxvYXQ2NHgyX3QgdmJzbHFfZjY0KHVpbnQ2NHgyX3QgX19wMCwgZmxvYXQ2NHgyX3QgX19wMSwgZmxvYXQ2NHgyX3QgX19wMikgewotICBmbG9hdDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3Zic2xxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIChpbnQ4eDE2X3QpX19wMiwgNDIpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBmbG9hdDY0eDJfdCB2YnNscV9mNjQodWludDY0eDJfdCBfX3AwLCBmbG9hdDY0eDJfdCBfX3AxLCBmbG9hdDY0eDJfdCBfX3AyKSB7Ci0gIHVpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIGZsb2F0NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOwotICBmbG9hdDY0eDJfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAxLCAwKTsKLSAgZmxvYXQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92YnNscV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgKGludDh4MTZfdClfX3JldjIsIDQyKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGZsb2F0NjR4MV90IHZic2xfZjY0KHVpbnQ2NHgxX3QgX19wMCwgZmxvYXQ2NHgxX3QgX19wMSwgZmxvYXQ2NHgxX3QgX19wMikgewotICBmbG9hdDY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3Zic2xfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIChpbnQ4eDhfdClfX3AyLCAxMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGZsb2F0NjR4MV90IHZic2xfZjY0KHVpbnQ2NHgxX3QgX19wMCwgZmxvYXQ2NHgxX3QgX19wMSwgZmxvYXQ2NHgxX3QgX19wMikgewotICBmbG9hdDY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3Zic2xfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIChpbnQ4eDhfdClfX3AyLCAxMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDY0eDJfdCB2Y2FnZXFfZjY0KGZsb2F0NjR4Ml90IF9fcDAsIGZsb2F0NjR4Ml90IF9fcDEpIHsKLSAgdWludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdmNhZ2VxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDUxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDY0eDJfdCB2Y2FnZXFfZjY0KGZsb2F0NjR4Ml90IF9fcDAsIGZsb2F0NjR4Ml90IF9fcDEpIHsKLSAgZmxvYXQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIGZsb2F0NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOwotICB1aW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y2FnZXFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDUxKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ2NHgxX3QgdmNhZ2VfZjY0KGZsb2F0NjR4MV90IF9fcDAsIGZsb2F0NjR4MV90IF9fcDEpIHsKLSAgdWludDY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDY0eDFfdCkgX19idWlsdGluX25lb25fdmNhZ2VfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDE5KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDY0eDFfdCB2Y2FnZV9mNjQoZmxvYXQ2NHgxX3QgX19wMCwgZmxvYXQ2NHgxX3QgX19wMSkgewotICB1aW50NjR4MV90IF9fcmV0OwotICBfX3JldCA9ICh1aW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92Y2FnZV92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTkpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ2NF90IHZjYWdlZF9mNjQoZmxvYXQ2NF90IF9fcDAsIGZsb2F0NjRfdCBfX3AxKSB7Ci0gIHVpbnQ2NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50NjRfdCkgX19idWlsdGluX25lb25fdmNhZ2VkX2Y2NChfX3AwLCBfX3AxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDY0X3QgdmNhZ2VkX2Y2NChmbG9hdDY0X3QgX19wMCwgZmxvYXQ2NF90IF9fcDEpIHsKLSAgdWludDY0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Y2FnZWRfZjY0KF9fcDAsIF9fcDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQzMl90IHZjYWdlc19mMzIoZmxvYXQzMl90IF9fcDAsIGZsb2F0MzJfdCBfX3AxKSB7Ci0gIHVpbnQzMl90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJfdCkgX19idWlsdGluX25lb25fdmNhZ2VzX2YzMihfX3AwLCBfX3AxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDMyX3QgdmNhZ2VzX2YzMihmbG9hdDMyX3QgX19wMCwgZmxvYXQzMl90IF9fcDEpIHsKLSAgdWludDMyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92Y2FnZXNfZjMyKF9fcDAsIF9fcDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ2NHgyX3QgdmNhZ3RxX2Y2NChmbG9hdDY0eDJfdCBfX3AwLCBmbG9hdDY0eDJfdCBfX3AxKSB7Ci0gIHVpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjYWd0cV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA1MSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ2NHgyX3QgdmNhZ3RxX2Y2NChmbG9hdDY0eDJfdCBfX3AwLCBmbG9hdDY0eDJfdCBfX3AxKSB7Ci0gIGZsb2F0NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICBmbG9hdDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKLSAgdWludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdmNhZ3RxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA1MSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50NjR4MV90IHZjYWd0X2Y2NChmbG9hdDY0eDFfdCBfX3AwLCBmbG9hdDY0eDFfdCBfX3AxKSB7Ci0gIHVpbnQ2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZjYWd0X3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxOSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ2NHgxX3QgdmNhZ3RfZjY0KGZsb2F0NjR4MV90IF9fcDAsIGZsb2F0NjR4MV90IF9fcDEpIHsKLSAgdWludDY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDY0eDFfdCkgX19idWlsdGluX25lb25fdmNhZ3RfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDE5KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50NjRfdCB2Y2FndGRfZjY0KGZsb2F0NjRfdCBfX3AwLCBmbG9hdDY0X3QgX19wMSkgewotICB1aW50NjRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjYWd0ZF9mNjQoX19wMCwgX19wMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ2NF90IHZjYWd0ZF9mNjQoZmxvYXQ2NF90IF9fcDAsIGZsb2F0NjRfdCBfX3AxKSB7Ci0gIHVpbnQ2NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50NjRfdCkgX19idWlsdGluX25lb25fdmNhZ3RkX2Y2NChfX3AwLCBfX3AxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MzJfdCB2Y2FndHNfZjMyKGZsb2F0MzJfdCBfX3AwLCBmbG9hdDMyX3QgX19wMSkgewotICB1aW50MzJfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjYWd0c19mMzIoX19wMCwgX19wMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQzMl90IHZjYWd0c19mMzIoZmxvYXQzMl90IF9fcDAsIGZsb2F0MzJfdCBfX3AxKSB7Ci0gIHVpbnQzMl90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJfdCkgX19idWlsdGluX25lb25fdmNhZ3RzX2YzMihfX3AwLCBfX3AxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50NjR4Ml90IHZjYWxlcV9mNjQoZmxvYXQ2NHgyX3QgX19wMCwgZmxvYXQ2NHgyX3QgX19wMSkgewotICB1aW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y2FsZXFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNTEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50NjR4Ml90IHZjYWxlcV9mNjQoZmxvYXQ2NHgyX3QgX19wMCwgZmxvYXQ2NHgyX3QgX19wMSkgewotICBmbG9hdDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgZmxvYXQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7Ci0gIHVpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjYWxlcV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNTEpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDY0eDFfdCB2Y2FsZV9mNjQoZmxvYXQ2NHgxX3QgX19wMCwgZmxvYXQ2NHgxX3QgX19wMSkgewotICB1aW50NjR4MV90IF9fcmV0OwotICBfX3JldCA9ICh1aW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92Y2FsZV92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTkpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50NjR4MV90IHZjYWxlX2Y2NChmbG9hdDY0eDFfdCBfX3AwLCBmbG9hdDY0eDFfdCBfX3AxKSB7Ci0gIHVpbnQ2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZjYWxlX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxOSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDY0X3QgdmNhbGVkX2Y2NChmbG9hdDY0X3QgX19wMCwgZmxvYXQ2NF90IF9fcDEpIHsKLSAgdWludDY0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Y2FsZWRfZjY0KF9fcDAsIF9fcDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50NjRfdCB2Y2FsZWRfZjY0KGZsb2F0NjRfdCBfX3AwLCBmbG9hdDY0X3QgX19wMSkgewotICB1aW50NjRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjYWxlZF9mNjQoX19wMCwgX19wMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDMyX3QgdmNhbGVzX2YzMihmbG9hdDMyX3QgX19wMCwgZmxvYXQzMl90IF9fcDEpIHsKLSAgdWludDMyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92Y2FsZXNfZjMyKF9fcDAsIF9fcDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MzJfdCB2Y2FsZXNfZjMyKGZsb2F0MzJfdCBfX3AwLCBmbG9hdDMyX3QgX19wMSkgewotICB1aW50MzJfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjYWxlc19mMzIoX19wMCwgX19wMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDY0eDJfdCB2Y2FsdHFfZjY0KGZsb2F0NjR4Ml90IF9fcDAsIGZsb2F0NjR4Ml90IF9fcDEpIHsKLSAgdWludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdmNhbHRxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDUxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDY0eDJfdCB2Y2FsdHFfZjY0KGZsb2F0NjR4Ml90IF9fcDAsIGZsb2F0NjR4Ml90IF9fcDEpIHsKLSAgZmxvYXQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIGZsb2F0NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOwotICB1aW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y2FsdHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDUxKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ2NHgxX3QgdmNhbHRfZjY0KGZsb2F0NjR4MV90IF9fcDAsIGZsb2F0NjR4MV90IF9fcDEpIHsKLSAgdWludDY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDY0eDFfdCkgX19idWlsdGluX25lb25fdmNhbHRfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDE5KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDY0eDFfdCB2Y2FsdF9mNjQoZmxvYXQ2NHgxX3QgX19wMCwgZmxvYXQ2NHgxX3QgX19wMSkgewotICB1aW50NjR4MV90IF9fcmV0OwotICBfX3JldCA9ICh1aW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92Y2FsdF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTkpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ2NF90IHZjYWx0ZF9mNjQoZmxvYXQ2NF90IF9fcDAsIGZsb2F0NjRfdCBfX3AxKSB7Ci0gIHVpbnQ2NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50NjRfdCkgX19idWlsdGluX25lb25fdmNhbHRkX2Y2NChfX3AwLCBfX3AxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDY0X3QgdmNhbHRkX2Y2NChmbG9hdDY0X3QgX19wMCwgZmxvYXQ2NF90IF9fcDEpIHsKLSAgdWludDY0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Y2FsdGRfZjY0KF9fcDAsIF9fcDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQzMl90IHZjYWx0c19mMzIoZmxvYXQzMl90IF9fcDAsIGZsb2F0MzJfdCBfX3AxKSB7Ci0gIHVpbnQzMl90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJfdCkgX19idWlsdGluX25lb25fdmNhbHRzX2YzMihfX3AwLCBfX3AxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDMyX3QgdmNhbHRzX2YzMihmbG9hdDMyX3QgX19wMCwgZmxvYXQzMl90IF9fcDEpIHsKLSAgdWludDMyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92Y2FsdHNfZjMyKF9fcDAsIF9fcDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ2NHgxX3QgdmNlcV9wNjQocG9seTY0eDFfdCBfX3AwLCBwb2x5NjR4MV90IF9fcDEpIHsKLSAgdWludDY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDY0eDFfdCkoX19wMCA9PSBfX3AxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDY0eDFfdCB2Y2VxX3A2NChwb2x5NjR4MV90IF9fcDAsIHBvbHk2NHgxX3QgX19wMSkgewotICB1aW50NjR4MV90IF9fcmV0OwotICBfX3JldCA9ICh1aW50NjR4MV90KShfX3AwID09IF9fcDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ2NHgyX3QgdmNlcXFfcDY0KHBvbHk2NHgyX3QgX19wMCwgcG9seTY0eDJfdCBfX3AxKSB7Ci0gIHVpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NHgyX3QpKF9fcDAgPT0gX19wMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ2NHgyX3QgdmNlcXFfcDY0KHBvbHk2NHgyX3QgX19wMCwgcG9seTY0eDJfdCBfX3AxKSB7Ci0gIHBvbHk2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIHBvbHk2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7Ci0gIHVpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NHgyX3QpKF9fcmV2MCA9PSBfX3JldjEpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDY0eDJfdCB2Y2VxcV91NjQodWludDY0eDJfdCBfX3AwLCB1aW50NjR4Ml90IF9fcDEpIHsKLSAgdWludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDY0eDJfdCkoX19wMCA9PSBfX3AxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDY0eDJfdCB2Y2VxcV91NjQodWludDY0eDJfdCBfX3AwLCB1aW50NjR4Ml90IF9fcDEpIHsKLSAgdWludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgdWludDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKLSAgdWludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDY0eDJfdCkoX19yZXYwID09IF9fcmV2MSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50NjR4Ml90IHZjZXFxX2Y2NChmbG9hdDY0eDJfdCBfX3AwLCBmbG9hdDY0eDJfdCBfX3AxKSB7Ci0gIHVpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NHgyX3QpKF9fcDAgPT0gX19wMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ2NHgyX3QgdmNlcXFfZjY0KGZsb2F0NjR4Ml90IF9fcDAsIGZsb2F0NjR4Ml90IF9fcDEpIHsKLSAgZmxvYXQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIGZsb2F0NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOwotICB1aW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9ICh1aW50NjR4Ml90KShfX3JldjAgPT0gX19yZXYxKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ2NHgyX3QgdmNlcXFfczY0KGludDY0eDJfdCBfX3AwLCBpbnQ2NHgyX3QgX19wMSkgewotICB1aW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9ICh1aW50NjR4Ml90KShfX3AwID09IF9fcDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50NjR4Ml90IHZjZXFxX3M2NChpbnQ2NHgyX3QgX19wMCwgaW50NjR4Ml90IF9fcDEpIHsKLSAgaW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICBpbnQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7Ci0gIHVpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NHgyX3QpKF9fcmV2MCA9PSBfX3JldjEpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDY0eDFfdCB2Y2VxX3U2NCh1aW50NjR4MV90IF9fcDAsIHVpbnQ2NHgxX3QgX19wMSkgewotICB1aW50NjR4MV90IF9fcmV0OwotICBfX3JldCA9ICh1aW50NjR4MV90KShfX3AwID09IF9fcDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50NjR4MV90IHZjZXFfdTY0KHVpbnQ2NHgxX3QgX19wMCwgdWludDY0eDFfdCBfX3AxKSB7Ci0gIHVpbnQ2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NHgxX3QpKF9fcDAgPT0gX19wMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDY0eDFfdCB2Y2VxX2Y2NChmbG9hdDY0eDFfdCBfX3AwLCBmbG9hdDY0eDFfdCBfX3AxKSB7Ci0gIHVpbnQ2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NHgxX3QpKF9fcDAgPT0gX19wMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ2NHgxX3QgdmNlcV9mNjQoZmxvYXQ2NHgxX3QgX19wMCwgZmxvYXQ2NHgxX3QgX19wMSkgewotICB1aW50NjR4MV90IF9fcmV0OwotICBfX3JldCA9ICh1aW50NjR4MV90KShfX3AwID09IF9fcDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ2NHgxX3QgdmNlcV9zNjQoaW50NjR4MV90IF9fcDAsIGludDY0eDFfdCBfX3AxKSB7Ci0gIHVpbnQ2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NHgxX3QpKF9fcDAgPT0gX19wMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ2NHgxX3QgdmNlcV9zNjQoaW50NjR4MV90IF9fcDAsIGludDY0eDFfdCBfX3AxKSB7Ci0gIHVpbnQ2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NHgxX3QpKF9fcDAgPT0gX19wMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDY0X3QgdmNlcWRfdTY0KHVpbnQ2NF90IF9fcDAsIHVpbnQ2NF90IF9fcDEpIHsKLSAgdWludDY0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Y2VxZF91NjQoX19wMCwgX19wMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ2NF90IHZjZXFkX3U2NCh1aW50NjRfdCBfX3AwLCB1aW50NjRfdCBfX3AxKSB7Ci0gIHVpbnQ2NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50NjRfdCkgX19idWlsdGluX25lb25fdmNlcWRfdTY0KF9fcDAsIF9fcDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDY0X3QgdmNlcWRfczY0KGludDY0X3QgX19wMCwgaW50NjRfdCBfX3AxKSB7Ci0gIGludDY0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjZXFkX3M2NChfX3AwLCBfX3AxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50NjRfdCB2Y2VxZF9zNjQoaW50NjRfdCBfX3AwLCBpbnQ2NF90IF9fcDEpIHsKLSAgaW50NjRfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdmNlcWRfczY0KF9fcDAsIF9fcDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ2NF90IHZjZXFkX2Y2NChmbG9hdDY0X3QgX19wMCwgZmxvYXQ2NF90IF9fcDEpIHsKLSAgdWludDY0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Y2VxZF9mNjQoX19wMCwgX19wMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ2NF90IHZjZXFkX2Y2NChmbG9hdDY0X3QgX19wMCwgZmxvYXQ2NF90IF9fcDEpIHsKLSAgdWludDY0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Y2VxZF9mNjQoX19wMCwgX19wMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDMyX3QgdmNlcXNfZjMyKGZsb2F0MzJfdCBfX3AwLCBmbG9hdDMyX3QgX19wMSkgewotICB1aW50MzJfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjZXFzX2YzMihfX3AwLCBfX3AxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDMyX3QgdmNlcXNfZjMyKGZsb2F0MzJfdCBfX3AwLCBmbG9hdDMyX3QgX19wMSkgewotICB1aW50MzJfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjZXFzX2YzMihfX3AwLCBfX3AxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50OHg4X3QgdmNlcXpfcDgocG9seTh4OF90IF9fcDApIHsKLSAgdWludDh4OF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZjZXF6X3YoKGludDh4OF90KV9fcDAsIDE2KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDh4OF90IHZjZXF6X3A4KHBvbHk4eDhfdCBfX3AwKSB7Ci0gIHBvbHk4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDh4OF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZjZXF6X3YoKGludDh4OF90KV9fcmV2MCwgMTYpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDY0eDFfdCB2Y2Vxel9wNjQocG9seTY0eDFfdCBfX3AwKSB7Ci0gIHVpbnQ2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZjZXF6X3YoKGludDh4OF90KV9fcDAsIDE5KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDY0eDFfdCB2Y2Vxel9wNjQocG9seTY0eDFfdCBfX3AwKSB7Ci0gIHVpbnQ2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZjZXF6X3YoKGludDh4OF90KV9fcDAsIDE5KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MTZ4NF90IHZjZXF6X3AxNihwb2x5MTZ4NF90IF9fcDApIHsKLSAgdWludDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdmNlcXpfdigoaW50OHg4X3QpX19wMCwgMTcpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MTZ4NF90IHZjZXF6X3AxNihwb2x5MTZ4NF90IF9fcDApIHsKLSAgcG9seTE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgdWludDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdmNlcXpfdigoaW50OHg4X3QpX19yZXYwLCAxNyk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50OHgxNl90IHZjZXF6cV9wOChwb2x5OHgxNl90IF9fcDApIHsKLSAgdWludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdmNlcXpxX3YoKGludDh4MTZfdClfX3AwLCA0OCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ4eDE2X3QgdmNlcXpxX3A4KHBvbHk4eDE2X3QgX19wMCkgewotICBwb2x5OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50OHgxNl90IF9fcmV0OwotICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92Y2VxenFfdigoaW50OHgxNl90KV9fcmV2MCwgNDgpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDY0eDJfdCB2Y2VxenFfcDY0KHBvbHk2NHgyX3QgX19wMCkgewotICB1aW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y2VxenFfdigoaW50OHgxNl90KV9fcDAsIDUxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDY0eDJfdCB2Y2VxenFfcDY0KHBvbHk2NHgyX3QgX19wMCkgewotICBwb2x5NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICB1aW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y2VxenFfdigoaW50OHgxNl90KV9fcmV2MCwgNTEpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDE2eDhfdCB2Y2VxenFfcDE2KHBvbHkxNng4X3QgX19wMCkgewotICB1aW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92Y2VxenFfdigoaW50OHgxNl90KV9fcDAsIDQ5KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDE2eDhfdCB2Y2VxenFfcDE2KHBvbHkxNng4X3QgX19wMCkgewotICBwb2x5MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92Y2VxenFfdigoaW50OHgxNl90KV9fcmV2MCwgNDkpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDh4MTZfdCB2Y2VxenFfdTgodWludDh4MTZfdCBfX3AwKSB7Ci0gIHVpbnQ4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZjZXF6cV92KChpbnQ4eDE2X3QpX19wMCwgNDgpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50OHgxNl90IHZjZXF6cV91OCh1aW50OHgxNl90IF9fcDApIHsKLSAgdWludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdmNlcXpxX3YoKGludDh4MTZfdClfX3JldjAsIDQ4KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQzMng0X3QgdmNlcXpxX3UzMih1aW50MzJ4NF90IF9fcDApIHsKLSAgdWludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdmNlcXpxX3YoKGludDh4MTZfdClfX3AwLCA1MCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQzMng0X3QgdmNlcXpxX3UzMih1aW50MzJ4NF90IF9fcDApIHsKLSAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgdWludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdmNlcXpxX3YoKGludDh4MTZfdClfX3JldjAsIDUwKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ2NHgyX3QgdmNlcXpxX3U2NCh1aW50NjR4Ml90IF9fcDApIHsKLSAgdWludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdmNlcXpxX3YoKGludDh4MTZfdClfX3AwLCA1MSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ2NHgyX3QgdmNlcXpxX3U2NCh1aW50NjR4Ml90IF9fcDApIHsKLSAgdWludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgdWludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdmNlcXpxX3YoKGludDh4MTZfdClfX3JldjAsIDUxKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQxNng4X3QgdmNlcXpxX3UxNih1aW50MTZ4OF90IF9fcDApIHsKLSAgdWludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDE2eDhfdCkgX19idWlsdGluX25lb25fdmNlcXpxX3YoKGludDh4MTZfdClfX3AwLCA0OSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQxNng4X3QgdmNlcXpxX3UxNih1aW50MTZ4OF90IF9fcDApIHsKLSAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDE2eDhfdCkgX19idWlsdGluX25lb25fdmNlcXpxX3YoKGludDh4MTZfdClfX3JldjAsIDQ5KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ4eDE2X3QgdmNlcXpxX3M4KGludDh4MTZfdCBfX3AwKSB7Ci0gIHVpbnQ4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZjZXF6cV92KChpbnQ4eDE2X3QpX19wMCwgNDgpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50OHgxNl90IHZjZXF6cV9zOChpbnQ4eDE2X3QgX19wMCkgewotICBpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQ4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZjZXF6cV92KChpbnQ4eDE2X3QpX19yZXYwLCA0OCk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50NjR4Ml90IHZjZXF6cV9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgewotICB1aW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y2VxenFfdigoaW50OHgxNl90KV9fcDAsIDUxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDY0eDJfdCB2Y2VxenFfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKLSAgZmxvYXQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIHVpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjZXF6cV92KChpbnQ4eDE2X3QpX19yZXYwLCA1MSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MzJ4NF90IHZjZXF6cV9mMzIoZmxvYXQzMng0X3QgX19wMCkgewotICB1aW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92Y2VxenFfdigoaW50OHgxNl90KV9fcDAsIDUwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDMyeDRfdCB2Y2VxenFfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKLSAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjZXF6cV92KChpbnQ4eDE2X3QpX19yZXYwLCA1MCk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MzJ4NF90IHZjZXF6cV9zMzIoaW50MzJ4NF90IF9fcDApIHsKLSAgdWludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdmNlcXpxX3YoKGludDh4MTZfdClfX3AwLCA1MCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQzMng0X3QgdmNlcXpxX3MzMihpbnQzMng0X3QgX19wMCkgewotICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjZXF6cV92KChpbnQ4eDE2X3QpX19yZXYwLCA1MCk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50NjR4Ml90IHZjZXF6cV9zNjQoaW50NjR4Ml90IF9fcDApIHsKLSAgdWludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdmNlcXpxX3YoKGludDh4MTZfdClfX3AwLCA1MSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ2NHgyX3QgdmNlcXpxX3M2NChpbnQ2NHgyX3QgX19wMCkgewotICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIHVpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjZXF6cV92KChpbnQ4eDE2X3QpX19yZXYwLCA1MSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MTZ4OF90IHZjZXF6cV9zMTYoaW50MTZ4OF90IF9fcDApIHsKLSAgdWludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDE2eDhfdCkgX19idWlsdGluX25lb25fdmNlcXpxX3YoKGludDh4MTZfdClfX3AwLCA0OSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQxNng4X3QgdmNlcXpxX3MxNihpbnQxNng4X3QgX19wMCkgewotICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZjZXF6cV92KChpbnQ4eDE2X3QpX19yZXYwLCA0OSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50OHg4X3QgdmNlcXpfdTgodWludDh4OF90IF9fcDApIHsKLSAgdWludDh4OF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZjZXF6X3YoKGludDh4OF90KV9fcDAsIDE2KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDh4OF90IHZjZXF6X3U4KHVpbnQ4eDhfdCBfX3AwKSB7Ci0gIHVpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDh4OF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZjZXF6X3YoKGludDh4OF90KV9fcmV2MCwgMTYpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDMyeDJfdCB2Y2Vxel91MzIodWludDMyeDJfdCBfX3AwKSB7Ci0gIHVpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjZXF6X3YoKGludDh4OF90KV9fcDAsIDE4KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDMyeDJfdCB2Y2Vxel91MzIodWludDMyeDJfdCBfX3AwKSB7Ci0gIHVpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIHVpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjZXF6X3YoKGludDh4OF90KV9fcmV2MCwgMTgpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDY0eDFfdCB2Y2Vxel91NjQodWludDY0eDFfdCBfX3AwKSB7Ci0gIHVpbnQ2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZjZXF6X3YoKGludDh4OF90KV9fcDAsIDE5KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDY0eDFfdCB2Y2Vxel91NjQodWludDY0eDFfdCBfX3AwKSB7Ci0gIHVpbnQ2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZjZXF6X3YoKGludDh4OF90KV9fcDAsIDE5KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MTZ4NF90IHZjZXF6X3UxNih1aW50MTZ4NF90IF9fcDApIHsKLSAgdWludDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdmNlcXpfdigoaW50OHg4X3QpX19wMCwgMTcpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MTZ4NF90IHZjZXF6X3UxNih1aW50MTZ4NF90IF9fcDApIHsKLSAgdWludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgdWludDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdmNlcXpfdigoaW50OHg4X3QpX19yZXYwLCAxNyk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50OHg4X3QgdmNlcXpfczgoaW50OHg4X3QgX19wMCkgewotICB1aW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdmNlcXpfdigoaW50OHg4X3QpX19wMCwgMTYpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50OHg4X3QgdmNlcXpfczgoaW50OHg4X3QgX19wMCkgewotICBpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDh4OF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZjZXF6X3YoKGludDh4OF90KV9fcmV2MCwgMTYpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDY0eDFfdCB2Y2Vxel9mNjQoZmxvYXQ2NHgxX3QgX19wMCkgewotICB1aW50NjR4MV90IF9fcmV0OwotICBfX3JldCA9ICh1aW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92Y2Vxel92KChpbnQ4eDhfdClfX3AwLCAxOSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ2NHgxX3QgdmNlcXpfZjY0KGZsb2F0NjR4MV90IF9fcDApIHsKLSAgdWludDY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDY0eDFfdCkgX19idWlsdGluX25lb25fdmNlcXpfdigoaW50OHg4X3QpX19wMCwgMTkpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQzMngyX3QgdmNlcXpfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKLSAgdWludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdmNlcXpfdigoaW50OHg4X3QpX19wMCwgMTgpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MzJ4Ml90IHZjZXF6X2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7Ci0gIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICB1aW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y2Vxel92KChpbnQ4eDhfdClfX3JldjAsIDE4KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQzMngyX3QgdmNlcXpfczMyKGludDMyeDJfdCBfX3AwKSB7Ci0gIHVpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjZXF6X3YoKGludDh4OF90KV9fcDAsIDE4KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDMyeDJfdCB2Y2Vxel9zMzIoaW50MzJ4Ml90IF9fcDApIHsKLSAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICB1aW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y2Vxel92KChpbnQ4eDhfdClfX3JldjAsIDE4KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ2NHgxX3QgdmNlcXpfczY0KGludDY0eDFfdCBfX3AwKSB7Ci0gIHVpbnQ2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZjZXF6X3YoKGludDh4OF90KV9fcDAsIDE5KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDY0eDFfdCB2Y2Vxel9zNjQoaW50NjR4MV90IF9fcDApIHsKLSAgdWludDY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDY0eDFfdCkgX19idWlsdGluX25lb25fdmNlcXpfdigoaW50OHg4X3QpX19wMCwgMTkpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQxNng0X3QgdmNlcXpfczE2KGludDE2eDRfdCBfX3AwKSB7Ci0gIHVpbnQxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjZXF6X3YoKGludDh4OF90KV9fcDAsIDE3KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDE2eDRfdCB2Y2Vxel9zMTYoaW50MTZ4NF90IF9fcDApIHsKLSAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICB1aW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92Y2Vxel92KChpbnQ4eDhfdClfX3JldjAsIDE3KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ2NF90IHZjZXF6ZF91NjQodWludDY0X3QgX19wMCkgewotICB1aW50NjRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjZXF6ZF91NjQoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ2NF90IHZjZXF6ZF91NjQodWludDY0X3QgX19wMCkgewotICB1aW50NjRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjZXF6ZF91NjQoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50NjRfdCB2Y2VxemRfczY0KGludDY0X3QgX19wMCkgewotICBpbnQ2NF90IF9fcmV0OwotICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Y2VxemRfczY0KF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQ2NF90IHZjZXF6ZF9zNjQoaW50NjRfdCBfX3AwKSB7Ci0gIGludDY0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjZXF6ZF9zNjQoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDY0X3QgdmNlcXpkX2Y2NChmbG9hdDY0X3QgX19wMCkgewotICB1aW50NjRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjZXF6ZF9mNjQoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ2NF90IHZjZXF6ZF9mNjQoZmxvYXQ2NF90IF9fcDApIHsKLSAgdWludDY0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Y2VxemRfZjY0KF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQzMl90IHZjZXF6c19mMzIoZmxvYXQzMl90IF9fcDApIHsKLSAgdWludDMyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92Y2VxenNfZjMyKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MzJfdCB2Y2VxenNfZjMyKGZsb2F0MzJfdCBfX3AwKSB7Ci0gIHVpbnQzMl90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJfdCkgX19idWlsdGluX25lb25fdmNlcXpzX2YzMihfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50NjR4Ml90IHZjZ2VxX3U2NCh1aW50NjR4Ml90IF9fcDAsIHVpbnQ2NHgyX3QgX19wMSkgewotICB1aW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9ICh1aW50NjR4Ml90KShfX3AwID49IF9fcDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50NjR4Ml90IHZjZ2VxX3U2NCh1aW50NjR4Ml90IF9fcDAsIHVpbnQ2NHgyX3QgX19wMSkgewotICB1aW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICB1aW50NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOwotICB1aW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9ICh1aW50NjR4Ml90KShfX3JldjAgPj0gX19yZXYxKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ2NHgyX3QgdmNnZXFfZjY0KGZsb2F0NjR4Ml90IF9fcDAsIGZsb2F0NjR4Ml90IF9fcDEpIHsKLSAgdWludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDY0eDJfdCkoX19wMCA+PSBfX3AxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDY0eDJfdCB2Y2dlcV9mNjQoZmxvYXQ2NHgyX3QgX19wMCwgZmxvYXQ2NHgyX3QgX19wMSkgewotICBmbG9hdDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgZmxvYXQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7Ci0gIHVpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NHgyX3QpKF9fcmV2MCA+PSBfX3JldjEpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDY0eDJfdCB2Y2dlcV9zNjQoaW50NjR4Ml90IF9fcDAsIGludDY0eDJfdCBfX3AxKSB7Ci0gIHVpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NHgyX3QpKF9fcDAgPj0gX19wMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ2NHgyX3QgdmNnZXFfczY0KGludDY0eDJfdCBfX3AwLCBpbnQ2NHgyX3QgX19wMSkgewotICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIGludDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKLSAgdWludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDY0eDJfdCkoX19yZXYwID49IF9fcmV2MSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50NjR4MV90IHZjZ2VfdTY0KHVpbnQ2NHgxX3QgX19wMCwgdWludDY0eDFfdCBfX3AxKSB7Ci0gIHVpbnQ2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NHgxX3QpKF9fcDAgPj0gX19wMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ2NHgxX3QgdmNnZV91NjQodWludDY0eDFfdCBfX3AwLCB1aW50NjR4MV90IF9fcDEpIHsKLSAgdWludDY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDY0eDFfdCkoX19wMCA+PSBfX3AxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50NjR4MV90IHZjZ2VfZjY0KGZsb2F0NjR4MV90IF9fcDAsIGZsb2F0NjR4MV90IF9fcDEpIHsKLSAgdWludDY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDY0eDFfdCkoX19wMCA+PSBfX3AxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDY0eDFfdCB2Y2dlX2Y2NChmbG9hdDY0eDFfdCBfX3AwLCBmbG9hdDY0eDFfdCBfX3AxKSB7Ci0gIHVpbnQ2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NHgxX3QpKF9fcDAgPj0gX19wMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDY0eDFfdCB2Y2dlX3M2NChpbnQ2NHgxX3QgX19wMCwgaW50NjR4MV90IF9fcDEpIHsKLSAgdWludDY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDY0eDFfdCkoX19wMCA+PSBfX3AxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDY0eDFfdCB2Y2dlX3M2NChpbnQ2NHgxX3QgX19wMCwgaW50NjR4MV90IF9fcDEpIHsKLSAgdWludDY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDY0eDFfdCkoX19wMCA+PSBfX3AxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ2NF90IHZjZ2VkX3M2NChpbnQ2NF90IF9fcDAsIGludDY0X3QgX19wMSkgewotICBpbnQ2NF90IF9fcmV0OwotICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Y2dlZF9zNjQoX19wMCwgX19wMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDY0X3QgdmNnZWRfczY0KGludDY0X3QgX19wMCwgaW50NjRfdCBfX3AxKSB7Ci0gIGludDY0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjZ2VkX3M2NChfX3AwLCBfX3AxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50NjRfdCB2Y2dlZF91NjQodWludDY0X3QgX19wMCwgdWludDY0X3QgX19wMSkgewotICB1aW50NjRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjZ2VkX3U2NChfX3AwLCBfX3AxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDY0X3QgdmNnZWRfdTY0KHVpbnQ2NF90IF9fcDAsIHVpbnQ2NF90IF9fcDEpIHsKLSAgdWludDY0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Y2dlZF91NjQoX19wMCwgX19wMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDY0X3QgdmNnZWRfZjY0KGZsb2F0NjRfdCBfX3AwLCBmbG9hdDY0X3QgX19wMSkgewotICB1aW50NjRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjZ2VkX2Y2NChfX3AwLCBfX3AxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDY0X3QgdmNnZWRfZjY0KGZsb2F0NjRfdCBfX3AwLCBmbG9hdDY0X3QgX19wMSkgewotICB1aW50NjRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjZ2VkX2Y2NChfX3AwLCBfX3AxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MzJfdCB2Y2dlc19mMzIoZmxvYXQzMl90IF9fcDAsIGZsb2F0MzJfdCBfX3AxKSB7Ci0gIHVpbnQzMl90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJfdCkgX19idWlsdGluX25lb25fdmNnZXNfZjMyKF9fcDAsIF9fcDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MzJfdCB2Y2dlc19mMzIoZmxvYXQzMl90IF9fcDAsIGZsb2F0MzJfdCBfX3AxKSB7Ci0gIHVpbnQzMl90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJfdCkgX19idWlsdGluX25lb25fdmNnZXNfZjMyKF9fcDAsIF9fcDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ4eDE2X3QgdmNnZXpxX3M4KGludDh4MTZfdCBfX3AwKSB7Ci0gIHVpbnQ4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZjZ2V6cV92KChpbnQ4eDE2X3QpX19wMCwgNDgpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50OHgxNl90IHZjZ2V6cV9zOChpbnQ4eDE2X3QgX19wMCkgewotICBpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQ4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZjZ2V6cV92KChpbnQ4eDE2X3QpX19yZXYwLCA0OCk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50NjR4Ml90IHZjZ2V6cV9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgewotICB1aW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y2dlenFfdigoaW50OHgxNl90KV9fcDAsIDUxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDY0eDJfdCB2Y2dlenFfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKLSAgZmxvYXQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIHVpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjZ2V6cV92KChpbnQ4eDE2X3QpX19yZXYwLCA1MSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MzJ4NF90IHZjZ2V6cV9mMzIoZmxvYXQzMng0X3QgX19wMCkgewotICB1aW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92Y2dlenFfdigoaW50OHgxNl90KV9fcDAsIDUwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDMyeDRfdCB2Y2dlenFfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKLSAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjZ2V6cV92KChpbnQ4eDE2X3QpX19yZXYwLCA1MCk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MzJ4NF90IHZjZ2V6cV9zMzIoaW50MzJ4NF90IF9fcDApIHsKLSAgdWludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdmNnZXpxX3YoKGludDh4MTZfdClfX3AwLCA1MCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQzMng0X3QgdmNnZXpxX3MzMihpbnQzMng0X3QgX19wMCkgewotICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjZ2V6cV92KChpbnQ4eDE2X3QpX19yZXYwLCA1MCk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50NjR4Ml90IHZjZ2V6cV9zNjQoaW50NjR4Ml90IF9fcDApIHsKLSAgdWludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdmNnZXpxX3YoKGludDh4MTZfdClfX3AwLCA1MSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ2NHgyX3QgdmNnZXpxX3M2NChpbnQ2NHgyX3QgX19wMCkgewotICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIHVpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjZ2V6cV92KChpbnQ4eDE2X3QpX19yZXYwLCA1MSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MTZ4OF90IHZjZ2V6cV9zMTYoaW50MTZ4OF90IF9fcDApIHsKLSAgdWludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDE2eDhfdCkgX19idWlsdGluX25lb25fdmNnZXpxX3YoKGludDh4MTZfdClfX3AwLCA0OSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQxNng4X3QgdmNnZXpxX3MxNihpbnQxNng4X3QgX19wMCkgewotICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZjZ2V6cV92KChpbnQ4eDE2X3QpX19yZXYwLCA0OSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50OHg4X3QgdmNnZXpfczgoaW50OHg4X3QgX19wMCkgewotICB1aW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdmNnZXpfdigoaW50OHg4X3QpX19wMCwgMTYpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50OHg4X3QgdmNnZXpfczgoaW50OHg4X3QgX19wMCkgewotICBpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDh4OF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZjZ2V6X3YoKGludDh4OF90KV9fcmV2MCwgMTYpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDY0eDFfdCB2Y2dlel9mNjQoZmxvYXQ2NHgxX3QgX19wMCkgewotICB1aW50NjR4MV90IF9fcmV0OwotICBfX3JldCA9ICh1aW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92Y2dlel92KChpbnQ4eDhfdClfX3AwLCAxOSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ2NHgxX3QgdmNnZXpfZjY0KGZsb2F0NjR4MV90IF9fcDApIHsKLSAgdWludDY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDY0eDFfdCkgX19idWlsdGluX25lb25fdmNnZXpfdigoaW50OHg4X3QpX19wMCwgMTkpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQzMngyX3QgdmNnZXpfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKLSAgdWludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdmNnZXpfdigoaW50OHg4X3QpX19wMCwgMTgpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MzJ4Ml90IHZjZ2V6X2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7Ci0gIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICB1aW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y2dlel92KChpbnQ4eDhfdClfX3JldjAsIDE4KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQzMngyX3QgdmNnZXpfczMyKGludDMyeDJfdCBfX3AwKSB7Ci0gIHVpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjZ2V6X3YoKGludDh4OF90KV9fcDAsIDE4KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDMyeDJfdCB2Y2dlel9zMzIoaW50MzJ4Ml90IF9fcDApIHsKLSAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICB1aW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y2dlel92KChpbnQ4eDhfdClfX3JldjAsIDE4KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ2NHgxX3QgdmNnZXpfczY0KGludDY0eDFfdCBfX3AwKSB7Ci0gIHVpbnQ2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZjZ2V6X3YoKGludDh4OF90KV9fcDAsIDE5KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDY0eDFfdCB2Y2dlel9zNjQoaW50NjR4MV90IF9fcDApIHsKLSAgdWludDY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDY0eDFfdCkgX19idWlsdGluX25lb25fdmNnZXpfdigoaW50OHg4X3QpX19wMCwgMTkpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQxNng0X3QgdmNnZXpfczE2KGludDE2eDRfdCBfX3AwKSB7Ci0gIHVpbnQxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjZ2V6X3YoKGludDh4OF90KV9fcDAsIDE3KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDE2eDRfdCB2Y2dlel9zMTYoaW50MTZ4NF90IF9fcDApIHsKLSAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICB1aW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92Y2dlel92KChpbnQ4eDhfdClfX3JldjAsIDE3KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDY0X3QgdmNnZXpkX3M2NChpbnQ2NF90IF9fcDApIHsKLSAgaW50NjRfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdmNnZXpkX3M2NChfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50NjRfdCB2Y2dlemRfczY0KGludDY0X3QgX19wMCkgewotICBpbnQ2NF90IF9fcmV0OwotICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Y2dlemRfczY0KF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ2NF90IHZjZ2V6ZF9mNjQoZmxvYXQ2NF90IF9fcDApIHsKLSAgdWludDY0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Y2dlemRfZjY0KF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50NjRfdCB2Y2dlemRfZjY0KGZsb2F0NjRfdCBfX3AwKSB7Ci0gIHVpbnQ2NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50NjRfdCkgX19idWlsdGluX25lb25fdmNnZXpkX2Y2NChfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MzJfdCB2Y2dlenNfZjMyKGZsb2F0MzJfdCBfX3AwKSB7Ci0gIHVpbnQzMl90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJfdCkgX19idWlsdGluX25lb25fdmNnZXpzX2YzMihfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDMyX3QgdmNnZXpzX2YzMihmbG9hdDMyX3QgX19wMCkgewotICB1aW50MzJfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjZ2V6c19mMzIoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDY0eDJfdCB2Y2d0cV91NjQodWludDY0eDJfdCBfX3AwLCB1aW50NjR4Ml90IF9fcDEpIHsKLSAgdWludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDY0eDJfdCkoX19wMCA+IF9fcDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50NjR4Ml90IHZjZ3RxX3U2NCh1aW50NjR4Ml90IF9fcDAsIHVpbnQ2NHgyX3QgX19wMSkgewotICB1aW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICB1aW50NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOwotICB1aW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9ICh1aW50NjR4Ml90KShfX3JldjAgPiBfX3JldjEpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDY0eDJfdCB2Y2d0cV9mNjQoZmxvYXQ2NHgyX3QgX19wMCwgZmxvYXQ2NHgyX3QgX19wMSkgewotICB1aW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9ICh1aW50NjR4Ml90KShfX3AwID4gX19wMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ2NHgyX3QgdmNndHFfZjY0KGZsb2F0NjR4Ml90IF9fcDAsIGZsb2F0NjR4Ml90IF9fcDEpIHsKLSAgZmxvYXQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIGZsb2F0NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOwotICB1aW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9ICh1aW50NjR4Ml90KShfX3JldjAgPiBfX3JldjEpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDY0eDJfdCB2Y2d0cV9zNjQoaW50NjR4Ml90IF9fcDAsIGludDY0eDJfdCBfX3AxKSB7Ci0gIHVpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NHgyX3QpKF9fcDAgPiBfX3AxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDY0eDJfdCB2Y2d0cV9zNjQoaW50NjR4Ml90IF9fcDAsIGludDY0eDJfdCBfX3AxKSB7Ci0gIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgaW50NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOwotICB1aW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9ICh1aW50NjR4Ml90KShfX3JldjAgPiBfX3JldjEpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDY0eDFfdCB2Y2d0X3U2NCh1aW50NjR4MV90IF9fcDAsIHVpbnQ2NHgxX3QgX19wMSkgewotICB1aW50NjR4MV90IF9fcmV0OwotICBfX3JldCA9ICh1aW50NjR4MV90KShfX3AwID4gX19wMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ2NHgxX3QgdmNndF91NjQodWludDY0eDFfdCBfX3AwLCB1aW50NjR4MV90IF9fcDEpIHsKLSAgdWludDY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDY0eDFfdCkoX19wMCA+IF9fcDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ2NHgxX3QgdmNndF9mNjQoZmxvYXQ2NHgxX3QgX19wMCwgZmxvYXQ2NHgxX3QgX19wMSkgewotICB1aW50NjR4MV90IF9fcmV0OwotICBfX3JldCA9ICh1aW50NjR4MV90KShfX3AwID4gX19wMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ2NHgxX3QgdmNndF9mNjQoZmxvYXQ2NHgxX3QgX19wMCwgZmxvYXQ2NHgxX3QgX19wMSkgewotICB1aW50NjR4MV90IF9fcmV0OwotICBfX3JldCA9ICh1aW50NjR4MV90KShfX3AwID4gX19wMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDY0eDFfdCB2Y2d0X3M2NChpbnQ2NHgxX3QgX19wMCwgaW50NjR4MV90IF9fcDEpIHsKLSAgdWludDY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDY0eDFfdCkoX19wMCA+IF9fcDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50NjR4MV90IHZjZ3RfczY0KGludDY0eDFfdCBfX3AwLCBpbnQ2NHgxX3QgX19wMSkgewotICB1aW50NjR4MV90IF9fcmV0OwotICBfX3JldCA9ICh1aW50NjR4MV90KShfX3AwID4gX19wMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50NjRfdCB2Y2d0ZF9zNjQoaW50NjRfdCBfX3AwLCBpbnQ2NF90IF9fcDEpIHsKLSAgaW50NjRfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdmNndGRfczY0KF9fcDAsIF9fcDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQ2NF90IHZjZ3RkX3M2NChpbnQ2NF90IF9fcDAsIGludDY0X3QgX19wMSkgewotICBpbnQ2NF90IF9fcmV0OwotICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Y2d0ZF9zNjQoX19wMCwgX19wMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDY0X3QgdmNndGRfdTY0KHVpbnQ2NF90IF9fcDAsIHVpbnQ2NF90IF9fcDEpIHsKLSAgdWludDY0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Y2d0ZF91NjQoX19wMCwgX19wMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ2NF90IHZjZ3RkX3U2NCh1aW50NjRfdCBfX3AwLCB1aW50NjRfdCBfX3AxKSB7Ci0gIHVpbnQ2NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50NjRfdCkgX19idWlsdGluX25lb25fdmNndGRfdTY0KF9fcDAsIF9fcDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ2NF90IHZjZ3RkX2Y2NChmbG9hdDY0X3QgX19wMCwgZmxvYXQ2NF90IF9fcDEpIHsKLSAgdWludDY0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Y2d0ZF9mNjQoX19wMCwgX19wMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ2NF90IHZjZ3RkX2Y2NChmbG9hdDY0X3QgX19wMCwgZmxvYXQ2NF90IF9fcDEpIHsKLSAgdWludDY0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Y2d0ZF9mNjQoX19wMCwgX19wMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDMyX3QgdmNndHNfZjMyKGZsb2F0MzJfdCBfX3AwLCBmbG9hdDMyX3QgX19wMSkgewotICB1aW50MzJfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjZ3RzX2YzMihfX3AwLCBfX3AxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDMyX3QgdmNndHNfZjMyKGZsb2F0MzJfdCBfX3AwLCBmbG9hdDMyX3QgX19wMSkgewotICB1aW50MzJfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjZ3RzX2YzMihfX3AwLCBfX3AxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50OHgxNl90IHZjZ3R6cV9zOChpbnQ4eDE2X3QgX19wMCkgewotICB1aW50OHgxNl90IF9fcmV0OwotICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92Y2d0enFfdigoaW50OHgxNl90KV9fcDAsIDQ4KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDh4MTZfdCB2Y2d0enFfczgoaW50OHgxNl90IF9fcDApIHsKLSAgaW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50OHgxNl90IF9fcmV0OwotICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92Y2d0enFfdigoaW50OHgxNl90KV9fcmV2MCwgNDgpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDY0eDJfdCB2Y2d0enFfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKLSAgdWludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdmNndHpxX3YoKGludDh4MTZfdClfX3AwLCA1MSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ2NHgyX3QgdmNndHpxX2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7Ci0gIGZsb2F0NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICB1aW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y2d0enFfdigoaW50OHgxNl90KV9fcmV2MCwgNTEpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDMyeDRfdCB2Y2d0enFfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKLSAgdWludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdmNndHpxX3YoKGludDh4MTZfdClfX3AwLCA1MCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQzMng0X3QgdmNndHpxX2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7Ci0gIGZsb2F0MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICB1aW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92Y2d0enFfdigoaW50OHgxNl90KV9fcmV2MCwgNTApOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDMyeDRfdCB2Y2d0enFfczMyKGludDMyeDRfdCBfX3AwKSB7Ci0gIHVpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjZ3R6cV92KChpbnQ4eDE2X3QpX19wMCwgNTApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MzJ4NF90IHZjZ3R6cV9zMzIoaW50MzJ4NF90IF9fcDApIHsKLSAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICB1aW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92Y2d0enFfdigoaW50OHgxNl90KV9fcmV2MCwgNTApOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDY0eDJfdCB2Y2d0enFfczY0KGludDY0eDJfdCBfX3AwKSB7Ci0gIHVpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjZ3R6cV92KChpbnQ4eDE2X3QpX19wMCwgNTEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50NjR4Ml90IHZjZ3R6cV9zNjQoaW50NjR4Ml90IF9fcDApIHsKLSAgaW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICB1aW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y2d0enFfdigoaW50OHgxNl90KV9fcmV2MCwgNTEpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDE2eDhfdCB2Y2d0enFfczE2KGludDE2eDhfdCBfX3AwKSB7Ci0gIHVpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZjZ3R6cV92KChpbnQ4eDE2X3QpX19wMCwgNDkpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MTZ4OF90IHZjZ3R6cV9zMTYoaW50MTZ4OF90IF9fcDApIHsKLSAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92Y2d0enFfdigoaW50OHgxNl90KV9fcmV2MCwgNDkpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDh4OF90IHZjZ3R6X3M4KGludDh4OF90IF9fcDApIHsKLSAgdWludDh4OF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZjZ3R6X3YoKGludDh4OF90KV9fcDAsIDE2KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDh4OF90IHZjZ3R6X3M4KGludDh4OF90IF9fcDApIHsKLSAgaW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92Y2d0el92KChpbnQ4eDhfdClfX3JldjAsIDE2KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ2NHgxX3QgdmNndHpfZjY0KGZsb2F0NjR4MV90IF9fcDApIHsKLSAgdWludDY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDY0eDFfdCkgX19idWlsdGluX25lb25fdmNndHpfdigoaW50OHg4X3QpX19wMCwgMTkpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50NjR4MV90IHZjZ3R6X2Y2NChmbG9hdDY0eDFfdCBfX3AwKSB7Ci0gIHVpbnQ2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZjZ3R6X3YoKGludDh4OF90KV9fcDAsIDE5KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MzJ4Ml90IHZjZ3R6X2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7Ci0gIHVpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjZ3R6X3YoKGludDh4OF90KV9fcDAsIDE4KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDMyeDJfdCB2Y2d0el9mMzIoZmxvYXQzMngyX3QgX19wMCkgewotICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgdWludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdmNndHpfdigoaW50OHg4X3QpX19yZXYwLCAxOCk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MzJ4Ml90IHZjZ3R6X3MzMihpbnQzMngyX3QgX19wMCkgewotICB1aW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y2d0el92KChpbnQ4eDhfdClfX3AwLCAxOCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQzMngyX3QgdmNndHpfczMyKGludDMyeDJfdCBfX3AwKSB7Ci0gIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgdWludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdmNndHpfdigoaW50OHg4X3QpX19yZXYwLCAxOCk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50NjR4MV90IHZjZ3R6X3M2NChpbnQ2NHgxX3QgX19wMCkgewotICB1aW50NjR4MV90IF9fcmV0OwotICBfX3JldCA9ICh1aW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92Y2d0el92KChpbnQ4eDhfdClfX3AwLCAxOSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ2NHgxX3QgdmNndHpfczY0KGludDY0eDFfdCBfX3AwKSB7Ci0gIHVpbnQ2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZjZ3R6X3YoKGludDh4OF90KV9fcDAsIDE5KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MTZ4NF90IHZjZ3R6X3MxNihpbnQxNng0X3QgX19wMCkgewotICB1aW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92Y2d0el92KChpbnQ4eDhfdClfX3AwLCAxNyk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQxNng0X3QgdmNndHpfczE2KGludDE2eDRfdCBfX3AwKSB7Ci0gIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgdWludDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdmNndHpfdigoaW50OHg4X3QpX19yZXYwLCAxNyk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ2NF90IHZjZ3R6ZF9zNjQoaW50NjRfdCBfX3AwKSB7Ci0gIGludDY0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjZ3R6ZF9zNjQoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDY0X3QgdmNndHpkX3M2NChpbnQ2NF90IF9fcDApIHsKLSAgaW50NjRfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdmNndHpkX3M2NChfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50NjRfdCB2Y2d0emRfZjY0KGZsb2F0NjRfdCBfX3AwKSB7Ci0gIHVpbnQ2NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50NjRfdCkgX19idWlsdGluX25lb25fdmNndHpkX2Y2NChfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDY0X3QgdmNndHpkX2Y2NChmbG9hdDY0X3QgX19wMCkgewotICB1aW50NjRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjZ3R6ZF9mNjQoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDMyX3QgdmNndHpzX2YzMihmbG9hdDMyX3QgX19wMCkgewotICB1aW50MzJfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjZ3R6c19mMzIoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQzMl90IHZjZ3R6c19mMzIoZmxvYXQzMl90IF9fcDApIHsKLSAgdWludDMyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92Y2d0enNfZjMyKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ2NHgyX3QgdmNsZXFfdTY0KHVpbnQ2NHgyX3QgX19wMCwgdWludDY0eDJfdCBfX3AxKSB7Ci0gIHVpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NHgyX3QpKF9fcDAgPD0gX19wMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ2NHgyX3QgdmNsZXFfdTY0KHVpbnQ2NHgyX3QgX19wMCwgdWludDY0eDJfdCBfX3AxKSB7Ci0gIHVpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIHVpbnQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7Ci0gIHVpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NHgyX3QpKF9fcmV2MCA8PSBfX3JldjEpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDY0eDJfdCB2Y2xlcV9mNjQoZmxvYXQ2NHgyX3QgX19wMCwgZmxvYXQ2NHgyX3QgX19wMSkgewotICB1aW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9ICh1aW50NjR4Ml90KShfX3AwIDw9IF9fcDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50NjR4Ml90IHZjbGVxX2Y2NChmbG9hdDY0eDJfdCBfX3AwLCBmbG9hdDY0eDJfdCBfX3AxKSB7Ci0gIGZsb2F0NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICBmbG9hdDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKLSAgdWludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDY0eDJfdCkoX19yZXYwIDw9IF9fcmV2MSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50NjR4Ml90IHZjbGVxX3M2NChpbnQ2NHgyX3QgX19wMCwgaW50NjR4Ml90IF9fcDEpIHsKLSAgdWludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDY0eDJfdCkoX19wMCA8PSBfX3AxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDY0eDJfdCB2Y2xlcV9zNjQoaW50NjR4Ml90IF9fcDAsIGludDY0eDJfdCBfX3AxKSB7Ci0gIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgaW50NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOwotICB1aW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9ICh1aW50NjR4Ml90KShfX3JldjAgPD0gX19yZXYxKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ2NHgxX3QgdmNsZV91NjQodWludDY0eDFfdCBfX3AwLCB1aW50NjR4MV90IF9fcDEpIHsKLSAgdWludDY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDY0eDFfdCkoX19wMCA8PSBfX3AxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDY0eDFfdCB2Y2xlX3U2NCh1aW50NjR4MV90IF9fcDAsIHVpbnQ2NHgxX3QgX19wMSkgewotICB1aW50NjR4MV90IF9fcmV0OwotICBfX3JldCA9ICh1aW50NjR4MV90KShfX3AwIDw9IF9fcDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ2NHgxX3QgdmNsZV9mNjQoZmxvYXQ2NHgxX3QgX19wMCwgZmxvYXQ2NHgxX3QgX19wMSkgewotICB1aW50NjR4MV90IF9fcmV0OwotICBfX3JldCA9ICh1aW50NjR4MV90KShfX3AwIDw9IF9fcDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50NjR4MV90IHZjbGVfZjY0KGZsb2F0NjR4MV90IF9fcDAsIGZsb2F0NjR4MV90IF9fcDEpIHsKLSAgdWludDY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDY0eDFfdCkoX19wMCA8PSBfX3AxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50NjR4MV90IHZjbGVfczY0KGludDY0eDFfdCBfX3AwLCBpbnQ2NHgxX3QgX19wMSkgewotICB1aW50NjR4MV90IF9fcmV0OwotICBfX3JldCA9ICh1aW50NjR4MV90KShfX3AwIDw9IF9fcDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50NjR4MV90IHZjbGVfczY0KGludDY0eDFfdCBfX3AwLCBpbnQ2NHgxX3QgX19wMSkgewotICB1aW50NjR4MV90IF9fcmV0OwotICBfX3JldCA9ICh1aW50NjR4MV90KShfX3AwIDw9IF9fcDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ2NF90IHZjbGVkX3U2NCh1aW50NjRfdCBfX3AwLCB1aW50NjRfdCBfX3AxKSB7Ci0gIHVpbnQ2NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50NjRfdCkgX19idWlsdGluX25lb25fdmNsZWRfdTY0KF9fcDAsIF9fcDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50NjRfdCB2Y2xlZF91NjQodWludDY0X3QgX19wMCwgdWludDY0X3QgX19wMSkgewotICB1aW50NjRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjbGVkX3U2NChfX3AwLCBfX3AxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ2NF90IHZjbGVkX3M2NChpbnQ2NF90IF9fcDAsIGludDY0X3QgX19wMSkgewotICBpbnQ2NF90IF9fcmV0OwotICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Y2xlZF9zNjQoX19wMCwgX19wMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDY0X3QgdmNsZWRfczY0KGludDY0X3QgX19wMCwgaW50NjRfdCBfX3AxKSB7Ci0gIGludDY0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjbGVkX3M2NChfX3AwLCBfX3AxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50NjRfdCB2Y2xlZF9mNjQoZmxvYXQ2NF90IF9fcDAsIGZsb2F0NjRfdCBfX3AxKSB7Ci0gIHVpbnQ2NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50NjRfdCkgX19idWlsdGluX25lb25fdmNsZWRfZjY0KF9fcDAsIF9fcDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50NjRfdCB2Y2xlZF9mNjQoZmxvYXQ2NF90IF9fcDAsIGZsb2F0NjRfdCBfX3AxKSB7Ci0gIHVpbnQ2NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50NjRfdCkgX19idWlsdGluX25lb25fdmNsZWRfZjY0KF9fcDAsIF9fcDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQzMl90IHZjbGVzX2YzMihmbG9hdDMyX3QgX19wMCwgZmxvYXQzMl90IF9fcDEpIHsKLSAgdWludDMyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92Y2xlc19mMzIoX19wMCwgX19wMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQzMl90IHZjbGVzX2YzMihmbG9hdDMyX3QgX19wMCwgZmxvYXQzMl90IF9fcDEpIHsKLSAgdWludDMyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92Y2xlc19mMzIoX19wMCwgX19wMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDh4MTZfdCB2Y2xlenFfczgoaW50OHgxNl90IF9fcDApIHsKLSAgdWludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdmNsZXpxX3YoKGludDh4MTZfdClfX3AwLCA0OCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ4eDE2X3QgdmNsZXpxX3M4KGludDh4MTZfdCBfX3AwKSB7Ci0gIGludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdmNsZXpxX3YoKGludDh4MTZfdClfX3JldjAsIDQ4KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ2NHgyX3QgdmNsZXpxX2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7Ci0gIHVpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjbGV6cV92KChpbnQ4eDE2X3QpX19wMCwgNTEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50NjR4Ml90IHZjbGV6cV9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgewotICBmbG9hdDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgdWludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdmNsZXpxX3YoKGludDh4MTZfdClfX3JldjAsIDUxKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQzMng0X3QgdmNsZXpxX2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7Ci0gIHVpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjbGV6cV92KChpbnQ4eDE2X3QpX19wMCwgNTApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MzJ4NF90IHZjbGV6cV9mMzIoZmxvYXQzMng0X3QgX19wMCkgewotICBmbG9hdDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgdWludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdmNsZXpxX3YoKGludDh4MTZfdClfX3JldjAsIDUwKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQzMng0X3QgdmNsZXpxX3MzMihpbnQzMng0X3QgX19wMCkgewotICB1aW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92Y2xlenFfdigoaW50OHgxNl90KV9fcDAsIDUwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDMyeDRfdCB2Y2xlenFfczMyKGludDMyeDRfdCBfX3AwKSB7Ci0gIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgdWludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdmNsZXpxX3YoKGludDh4MTZfdClfX3JldjAsIDUwKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ2NHgyX3QgdmNsZXpxX3M2NChpbnQ2NHgyX3QgX19wMCkgewotICB1aW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y2xlenFfdigoaW50OHgxNl90KV9fcDAsIDUxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDY0eDJfdCB2Y2xlenFfczY0KGludDY0eDJfdCBfX3AwKSB7Ci0gIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgdWludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdmNsZXpxX3YoKGludDh4MTZfdClfX3JldjAsIDUxKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQxNng4X3QgdmNsZXpxX3MxNihpbnQxNng4X3QgX19wMCkgewotICB1aW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92Y2xlenFfdigoaW50OHgxNl90KV9fcDAsIDQ5KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDE2eDhfdCB2Y2xlenFfczE2KGludDE2eDhfdCBfX3AwKSB7Ci0gIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDE2eDhfdCkgX19idWlsdGluX25lb25fdmNsZXpxX3YoKGludDh4MTZfdClfX3JldjAsIDQ5KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ4eDhfdCB2Y2xlel9zOChpbnQ4eDhfdCBfX3AwKSB7Ci0gIHVpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92Y2xlel92KChpbnQ4eDhfdClfX3AwLCAxNik7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ4eDhfdCB2Y2xlel9zOChpbnQ4eDhfdCBfX3AwKSB7Ci0gIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdmNsZXpfdigoaW50OHg4X3QpX19yZXYwLCAxNik7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50NjR4MV90IHZjbGV6X2Y2NChmbG9hdDY0eDFfdCBfX3AwKSB7Ci0gIHVpbnQ2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZjbGV6X3YoKGludDh4OF90KV9fcDAsIDE5KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDY0eDFfdCB2Y2xlel9mNjQoZmxvYXQ2NHgxX3QgX19wMCkgewotICB1aW50NjR4MV90IF9fcmV0OwotICBfX3JldCA9ICh1aW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92Y2xlel92KChpbnQ4eDhfdClfX3AwLCAxOSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDMyeDJfdCB2Y2xlel9mMzIoZmxvYXQzMngyX3QgX19wMCkgewotICB1aW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y2xlel92KChpbnQ4eDhfdClfX3AwLCAxOCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQzMngyX3QgdmNsZXpfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKLSAgZmxvYXQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIHVpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjbGV6X3YoKGludDh4OF90KV9fcmV2MCwgMTgpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDMyeDJfdCB2Y2xlel9zMzIoaW50MzJ4Ml90IF9fcDApIHsKLSAgdWludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdmNsZXpfdigoaW50OHg4X3QpX19wMCwgMTgpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MzJ4Ml90IHZjbGV6X3MzMihpbnQzMngyX3QgX19wMCkgewotICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIHVpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjbGV6X3YoKGludDh4OF90KV9fcmV2MCwgMTgpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDY0eDFfdCB2Y2xlel9zNjQoaW50NjR4MV90IF9fcDApIHsKLSAgdWludDY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDY0eDFfdCkgX19idWlsdGluX25lb25fdmNsZXpfdigoaW50OHg4X3QpX19wMCwgMTkpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50NjR4MV90IHZjbGV6X3M2NChpbnQ2NHgxX3QgX19wMCkgewotICB1aW50NjR4MV90IF9fcmV0OwotICBfX3JldCA9ICh1aW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92Y2xlel92KChpbnQ4eDhfdClfX3AwLCAxOSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDE2eDRfdCB2Y2xlel9zMTYoaW50MTZ4NF90IF9fcDApIHsKLSAgdWludDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdmNsZXpfdigoaW50OHg4X3QpX19wMCwgMTcpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MTZ4NF90IHZjbGV6X3MxNihpbnQxNng0X3QgX19wMCkgewotICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjbGV6X3YoKGludDh4OF90KV9fcmV2MCwgMTcpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50NjRfdCB2Y2xlemRfczY0KGludDY0X3QgX19wMCkgewotICBpbnQ2NF90IF9fcmV0OwotICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Y2xlemRfczY0KF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQ2NF90IHZjbGV6ZF9zNjQoaW50NjRfdCBfX3AwKSB7Ci0gIGludDY0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjbGV6ZF9zNjQoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDY0X3QgdmNsZXpkX2Y2NChmbG9hdDY0X3QgX19wMCkgewotICB1aW50NjRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjbGV6ZF9mNjQoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ2NF90IHZjbGV6ZF9mNjQoZmxvYXQ2NF90IF9fcDApIHsKLSAgdWludDY0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Y2xlemRfZjY0KF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQzMl90IHZjbGV6c19mMzIoZmxvYXQzMl90IF9fcDApIHsKLSAgdWludDMyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92Y2xlenNfZjMyKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MzJfdCB2Y2xlenNfZjMyKGZsb2F0MzJfdCBfX3AwKSB7Ci0gIHVpbnQzMl90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJfdCkgX19idWlsdGluX25lb25fdmNsZXpzX2YzMihfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50NjR4Ml90IHZjbHRxX3U2NCh1aW50NjR4Ml90IF9fcDAsIHVpbnQ2NHgyX3QgX19wMSkgewotICB1aW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9ICh1aW50NjR4Ml90KShfX3AwIDwgX19wMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ2NHgyX3QgdmNsdHFfdTY0KHVpbnQ2NHgyX3QgX19wMCwgdWludDY0eDJfdCBfX3AxKSB7Ci0gIHVpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIHVpbnQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7Ci0gIHVpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NHgyX3QpKF9fcmV2MCA8IF9fcmV2MSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50NjR4Ml90IHZjbHRxX2Y2NChmbG9hdDY0eDJfdCBfX3AwLCBmbG9hdDY0eDJfdCBfX3AxKSB7Ci0gIHVpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NHgyX3QpKF9fcDAgPCBfX3AxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDY0eDJfdCB2Y2x0cV9mNjQoZmxvYXQ2NHgyX3QgX19wMCwgZmxvYXQ2NHgyX3QgX19wMSkgewotICBmbG9hdDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgZmxvYXQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7Ci0gIHVpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NHgyX3QpKF9fcmV2MCA8IF9fcmV2MSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50NjR4Ml90IHZjbHRxX3M2NChpbnQ2NHgyX3QgX19wMCwgaW50NjR4Ml90IF9fcDEpIHsKLSAgdWludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDY0eDJfdCkoX19wMCA8IF9fcDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50NjR4Ml90IHZjbHRxX3M2NChpbnQ2NHgyX3QgX19wMCwgaW50NjR4Ml90IF9fcDEpIHsKLSAgaW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICBpbnQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7Ci0gIHVpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NHgyX3QpKF9fcmV2MCA8IF9fcmV2MSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50NjR4MV90IHZjbHRfdTY0KHVpbnQ2NHgxX3QgX19wMCwgdWludDY0eDFfdCBfX3AxKSB7Ci0gIHVpbnQ2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NHgxX3QpKF9fcDAgPCBfX3AxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDY0eDFfdCB2Y2x0X3U2NCh1aW50NjR4MV90IF9fcDAsIHVpbnQ2NHgxX3QgX19wMSkgewotICB1aW50NjR4MV90IF9fcmV0OwotICBfX3JldCA9ICh1aW50NjR4MV90KShfX3AwIDwgX19wMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDY0eDFfdCB2Y2x0X2Y2NChmbG9hdDY0eDFfdCBfX3AwLCBmbG9hdDY0eDFfdCBfX3AxKSB7Ci0gIHVpbnQ2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NHgxX3QpKF9fcDAgPCBfX3AxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDY0eDFfdCB2Y2x0X2Y2NChmbG9hdDY0eDFfdCBfX3AwLCBmbG9hdDY0eDFfdCBfX3AxKSB7Ci0gIHVpbnQ2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NHgxX3QpKF9fcDAgPCBfX3AxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50NjR4MV90IHZjbHRfczY0KGludDY0eDFfdCBfX3AwLCBpbnQ2NHgxX3QgX19wMSkgewotICB1aW50NjR4MV90IF9fcmV0OwotICBfX3JldCA9ICh1aW50NjR4MV90KShfX3AwIDwgX19wMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ2NHgxX3QgdmNsdF9zNjQoaW50NjR4MV90IF9fcDAsIGludDY0eDFfdCBfX3AxKSB7Ci0gIHVpbnQ2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NHgxX3QpKF9fcDAgPCBfX3AxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50NjRfdCB2Y2x0ZF91NjQodWludDY0X3QgX19wMCwgdWludDY0X3QgX19wMSkgewotICB1aW50NjRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjbHRkX3U2NChfX3AwLCBfX3AxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDY0X3QgdmNsdGRfdTY0KHVpbnQ2NF90IF9fcDAsIHVpbnQ2NF90IF9fcDEpIHsKLSAgdWludDY0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Y2x0ZF91NjQoX19wMCwgX19wMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50NjRfdCB2Y2x0ZF9zNjQoaW50NjRfdCBfX3AwLCBpbnQ2NF90IF9fcDEpIHsKLSAgaW50NjRfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdmNsdGRfczY0KF9fcDAsIF9fcDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQ2NF90IHZjbHRkX3M2NChpbnQ2NF90IF9fcDAsIGludDY0X3QgX19wMSkgewotICBpbnQ2NF90IF9fcmV0OwotICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Y2x0ZF9zNjQoX19wMCwgX19wMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDY0X3QgdmNsdGRfZjY0KGZsb2F0NjRfdCBfX3AwLCBmbG9hdDY0X3QgX19wMSkgewotICB1aW50NjRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjbHRkX2Y2NChfX3AwLCBfX3AxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDY0X3QgdmNsdGRfZjY0KGZsb2F0NjRfdCBfX3AwLCBmbG9hdDY0X3QgX19wMSkgewotICB1aW50NjRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjbHRkX2Y2NChfX3AwLCBfX3AxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MzJfdCB2Y2x0c19mMzIoZmxvYXQzMl90IF9fcDAsIGZsb2F0MzJfdCBfX3AxKSB7Ci0gIHVpbnQzMl90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJfdCkgX19idWlsdGluX25lb25fdmNsdHNfZjMyKF9fcDAsIF9fcDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MzJfdCB2Y2x0c19mMzIoZmxvYXQzMl90IF9fcDAsIGZsb2F0MzJfdCBfX3AxKSB7Ci0gIHVpbnQzMl90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJfdCkgX19idWlsdGluX25lb25fdmNsdHNfZjMyKF9fcDAsIF9fcDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ4eDE2X3QgdmNsdHpxX3M4KGludDh4MTZfdCBfX3AwKSB7Ci0gIHVpbnQ4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZjbHR6cV92KChpbnQ4eDE2X3QpX19wMCwgNDgpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50OHgxNl90IHZjbHR6cV9zOChpbnQ4eDE2X3QgX19wMCkgewotICBpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQ4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZjbHR6cV92KChpbnQ4eDE2X3QpX19yZXYwLCA0OCk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50NjR4Ml90IHZjbHR6cV9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgewotICB1aW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y2x0enFfdigoaW50OHgxNl90KV9fcDAsIDUxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDY0eDJfdCB2Y2x0enFfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKLSAgZmxvYXQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIHVpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjbHR6cV92KChpbnQ4eDE2X3QpX19yZXYwLCA1MSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MzJ4NF90IHZjbHR6cV9mMzIoZmxvYXQzMng0X3QgX19wMCkgewotICB1aW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92Y2x0enFfdigoaW50OHgxNl90KV9fcDAsIDUwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDMyeDRfdCB2Y2x0enFfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKLSAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjbHR6cV92KChpbnQ4eDE2X3QpX19yZXYwLCA1MCk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MzJ4NF90IHZjbHR6cV9zMzIoaW50MzJ4NF90IF9fcDApIHsKLSAgdWludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdmNsdHpxX3YoKGludDh4MTZfdClfX3AwLCA1MCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQzMng0X3QgdmNsdHpxX3MzMihpbnQzMng0X3QgX19wMCkgewotICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjbHR6cV92KChpbnQ4eDE2X3QpX19yZXYwLCA1MCk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50NjR4Ml90IHZjbHR6cV9zNjQoaW50NjR4Ml90IF9fcDApIHsKLSAgdWludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdmNsdHpxX3YoKGludDh4MTZfdClfX3AwLCA1MSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ2NHgyX3QgdmNsdHpxX3M2NChpbnQ2NHgyX3QgX19wMCkgewotICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIHVpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjbHR6cV92KChpbnQ4eDE2X3QpX19yZXYwLCA1MSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MTZ4OF90IHZjbHR6cV9zMTYoaW50MTZ4OF90IF9fcDApIHsKLSAgdWludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDE2eDhfdCkgX19idWlsdGluX25lb25fdmNsdHpxX3YoKGludDh4MTZfdClfX3AwLCA0OSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQxNng4X3QgdmNsdHpxX3MxNihpbnQxNng4X3QgX19wMCkgewotICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZjbHR6cV92KChpbnQ4eDE2X3QpX19yZXYwLCA0OSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50OHg4X3QgdmNsdHpfczgoaW50OHg4X3QgX19wMCkgewotICB1aW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdmNsdHpfdigoaW50OHg4X3QpX19wMCwgMTYpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50OHg4X3QgdmNsdHpfczgoaW50OHg4X3QgX19wMCkgewotICBpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDh4OF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZjbHR6X3YoKGludDh4OF90KV9fcmV2MCwgMTYpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDY0eDFfdCB2Y2x0el9mNjQoZmxvYXQ2NHgxX3QgX19wMCkgewotICB1aW50NjR4MV90IF9fcmV0OwotICBfX3JldCA9ICh1aW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92Y2x0el92KChpbnQ4eDhfdClfX3AwLCAxOSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ2NHgxX3QgdmNsdHpfZjY0KGZsb2F0NjR4MV90IF9fcDApIHsKLSAgdWludDY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDY0eDFfdCkgX19idWlsdGluX25lb25fdmNsdHpfdigoaW50OHg4X3QpX19wMCwgMTkpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQzMngyX3QgdmNsdHpfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKLSAgdWludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdmNsdHpfdigoaW50OHg4X3QpX19wMCwgMTgpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MzJ4Ml90IHZjbHR6X2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7Ci0gIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICB1aW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y2x0el92KChpbnQ4eDhfdClfX3JldjAsIDE4KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQzMngyX3QgdmNsdHpfczMyKGludDMyeDJfdCBfX3AwKSB7Ci0gIHVpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjbHR6X3YoKGludDh4OF90KV9fcDAsIDE4KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDMyeDJfdCB2Y2x0el9zMzIoaW50MzJ4Ml90IF9fcDApIHsKLSAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICB1aW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y2x0el92KChpbnQ4eDhfdClfX3JldjAsIDE4KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ2NHgxX3QgdmNsdHpfczY0KGludDY0eDFfdCBfX3AwKSB7Ci0gIHVpbnQ2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZjbHR6X3YoKGludDh4OF90KV9fcDAsIDE5KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDY0eDFfdCB2Y2x0el9zNjQoaW50NjR4MV90IF9fcDApIHsKLSAgdWludDY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDY0eDFfdCkgX19idWlsdGluX25lb25fdmNsdHpfdigoaW50OHg4X3QpX19wMCwgMTkpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQxNng0X3QgdmNsdHpfczE2KGludDE2eDRfdCBfX3AwKSB7Ci0gIHVpbnQxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjbHR6X3YoKGludDh4OF90KV9fcDAsIDE3KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDE2eDRfdCB2Y2x0el9zMTYoaW50MTZ4NF90IF9fcDApIHsKLSAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICB1aW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92Y2x0el92KChpbnQ4eDhfdClfX3JldjAsIDE3KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDY0X3QgdmNsdHpkX3M2NChpbnQ2NF90IF9fcDApIHsKLSAgaW50NjRfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdmNsdHpkX3M2NChfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50NjRfdCB2Y2x0emRfczY0KGludDY0X3QgX19wMCkgewotICBpbnQ2NF90IF9fcmV0OwotICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Y2x0emRfczY0KF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ2NF90IHZjbHR6ZF9mNjQoZmxvYXQ2NF90IF9fcDApIHsKLSAgdWludDY0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Y2x0emRfZjY0KF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50NjRfdCB2Y2x0emRfZjY0KGZsb2F0NjRfdCBfX3AwKSB7Ci0gIHVpbnQ2NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50NjRfdCkgX19idWlsdGluX25lb25fdmNsdHpkX2Y2NChfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MzJfdCB2Y2x0enNfZjMyKGZsb2F0MzJfdCBfX3AwKSB7Ci0gIHVpbnQzMl90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJfdCkgX19idWlsdGluX25lb25fdmNsdHpzX2YzMihfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDMyX3QgdmNsdHpzX2YzMihmbG9hdDMyX3QgX19wMCkgewotICB1aW50MzJfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjbHR6c19mMzIoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgcG9seTY0eDJfdCB2Y29tYmluZV9wNjQocG9seTY0eDFfdCBfX3AwLCBwb2x5NjR4MV90IF9fcDEpIHsKLSAgcG9seTY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAwLCAxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgcG9seTY0eDJfdCB2Y29tYmluZV9wNjQocG9seTY0eDFfdCBfX3AwLCBwb2x5NjR4MV90IF9fcDEpIHsKLSAgcG9seTY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAwLCAxKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGZsb2F0NjR4Ml90IHZjb21iaW5lX2Y2NChmbG9hdDY0eDFfdCBfX3AwLCBmbG9hdDY0eDFfdCBfX3AxKSB7Ci0gIGZsb2F0NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDAsIDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBmbG9hdDY0eDJfdCB2Y29tYmluZV9mNjQoZmxvYXQ2NHgxX3QgX19wMCwgZmxvYXQ2NHgxX3QgX19wMSkgewotICBmbG9hdDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAwLCAxKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZjb3B5cV9sYW5lX3A4KF9fcDBfMCwgX19wMV8wLCBfX3AyXzAsIF9fcDNfMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHk4eDE2X3QgX19zMF8wID0gX19wMF8wOyBcCi0gIHBvbHk4eDhfdCBfX3MyXzAgPSBfX3AyXzA7IFwKLSAgcG9seTh4MTZfdCBfX3JldF8wOyBcCi0gIF9fcmV0XzAgPSB2c2V0cV9sYW5lX3A4KHZnZXRfbGFuZV9wOChfX3MyXzAsIF9fcDNfMCksIF9fczBfMCwgX19wMV8wKTsgXAotICBfX3JldF8wOyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmNvcHlxX2xhbmVfcDgoX19wMF8xLCBfX3AxXzEsIF9fcDJfMSwgX19wM18xKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTh4MTZfdCBfX3MwXzEgPSBfX3AwXzE7IFwKLSAgcG9seTh4OF90IF9fczJfMSA9IF9fcDJfMTsgXAotICBwb2x5OHgxNl90IF9fcmV2MF8xOyAgX19yZXYwXzEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwXzEsIF9fczBfMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgcG9seTh4OF90IF9fcmV2Ml8xOyAgX19yZXYyXzEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyXzEsIF9fczJfMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgcG9seTh4MTZfdCBfX3JldF8xOyBcCi0gIF9fcmV0XzEgPSBfX25vc3dhcF92c2V0cV9sYW5lX3A4KF9fbm9zd2FwX3ZnZXRfbGFuZV9wOChfX3JldjJfMSwgX19wM18xKSwgX19yZXYwXzEsIF9fcDFfMSk7IFwKLSAgX19yZXRfMSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0XzEsIF9fcmV0XzEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0XzE7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZjb3B5cV9sYW5lX3AxNihfX3AwXzIsIF9fcDFfMiwgX19wMl8yLCBfX3AzXzIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBwb2x5MTZ4OF90IF9fczBfMiA9IF9fcDBfMjsgXAotICBwb2x5MTZ4NF90IF9fczJfMiA9IF9fcDJfMjsgXAotICBwb2x5MTZ4OF90IF9fcmV0XzI7IFwKLSAgX19yZXRfMiA9IHZzZXRxX2xhbmVfcDE2KHZnZXRfbGFuZV9wMTYoX19zMl8yLCBfX3AzXzIpLCBfX3MwXzIsIF9fcDFfMik7IFwKLSAgX19yZXRfMjsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZjb3B5cV9sYW5lX3AxNihfX3AwXzMsIF9fcDFfMywgX19wMl8zLCBfX3AzXzMpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBwb2x5MTZ4OF90IF9fczBfMyA9IF9fcDBfMzsgXAotICBwb2x5MTZ4NF90IF9fczJfMyA9IF9fcDJfMzsgXAotICBwb2x5MTZ4OF90IF9fcmV2MF8zOyAgX19yZXYwXzMgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwXzMsIF9fczBfMywgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgcG9seTE2eDRfdCBfX3JldjJfMzsgIF9fcmV2Ml8zID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMl8zLCBfX3MyXzMsIDMsIDIsIDEsIDApOyBcCi0gIHBvbHkxNng4X3QgX19yZXRfMzsgXAotICBfX3JldF8zID0gX19ub3N3YXBfdnNldHFfbGFuZV9wMTYoX19ub3N3YXBfdmdldF9sYW5lX3AxNihfX3JldjJfMywgX19wM18zKSwgX19yZXYwXzMsIF9fcDFfMyk7IFwKLSAgX19yZXRfMyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0XzMsIF9fcmV0XzMsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0XzM7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZjb3B5cV9sYW5lX3U4KF9fcDBfNCwgX19wMV80LCBfX3AyXzQsIF9fcDNfNCkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ4eDE2X3QgX19zMF80ID0gX19wMF80OyBcCi0gIHVpbnQ4eDhfdCBfX3MyXzQgPSBfX3AyXzQ7IFwKLSAgdWludDh4MTZfdCBfX3JldF80OyBcCi0gIF9fcmV0XzQgPSB2c2V0cV9sYW5lX3U4KHZnZXRfbGFuZV91OChfX3MyXzQsIF9fcDNfNCksIF9fczBfNCwgX19wMV80KTsgXAotICBfX3JldF80OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmNvcHlxX2xhbmVfdTgoX19wMF81LCBfX3AxXzUsIF9fcDJfNSwgX19wM181KSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDh4MTZfdCBfX3MwXzUgPSBfX3AwXzU7IFwKLSAgdWludDh4OF90IF9fczJfNSA9IF9fcDJfNTsgXAotICB1aW50OHgxNl90IF9fcmV2MF81OyAgX19yZXYwXzUgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwXzUsIF9fczBfNSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgdWludDh4OF90IF9fcmV2Ml81OyAgX19yZXYyXzUgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyXzUsIF9fczJfNSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgdWludDh4MTZfdCBfX3JldF81OyBcCi0gIF9fcmV0XzUgPSBfX25vc3dhcF92c2V0cV9sYW5lX3U4KF9fbm9zd2FwX3ZnZXRfbGFuZV91OChfX3JldjJfNSwgX19wM181KSwgX19yZXYwXzUsIF9fcDFfNSk7IFwKLSAgX19yZXRfNSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0XzUsIF9fcmV0XzUsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0XzU7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZjb3B5cV9sYW5lX3UzMihfX3AwXzYsIF9fcDFfNiwgX19wMl82LCBfX3AzXzYpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MzJ4NF90IF9fczBfNiA9IF9fcDBfNjsgXAotICB1aW50MzJ4Ml90IF9fczJfNiA9IF9fcDJfNjsgXAotICB1aW50MzJ4NF90IF9fcmV0XzY7IFwKLSAgX19yZXRfNiA9IHZzZXRxX2xhbmVfdTMyKHZnZXRfbGFuZV91MzIoX19zMl82LCBfX3AzXzYpLCBfX3MwXzYsIF9fcDFfNik7IFwKLSAgX19yZXRfNjsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZjb3B5cV9sYW5lX3UzMihfX3AwXzcsIF9fcDFfNywgX19wMl83LCBfX3AzXzcpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MzJ4NF90IF9fczBfNyA9IF9fcDBfNzsgXAotICB1aW50MzJ4Ml90IF9fczJfNyA9IF9fcDJfNzsgXAotICB1aW50MzJ4NF90IF9fcmV2MF83OyAgX19yZXYwXzcgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwXzcsIF9fczBfNywgMywgMiwgMSwgMCk7IFwKLSAgdWludDMyeDJfdCBfX3JldjJfNzsgIF9fcmV2Ml83ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMl83LCBfX3MyXzcsIDEsIDApOyBcCi0gIHVpbnQzMng0X3QgX19yZXRfNzsgXAotICBfX3JldF83ID0gX19ub3N3YXBfdnNldHFfbGFuZV91MzIoX19ub3N3YXBfdmdldF9sYW5lX3UzMihfX3JldjJfNywgX19wM183KSwgX19yZXYwXzcsIF9fcDFfNyk7IFwKLSAgX19yZXRfNyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0XzcsIF9fcmV0XzcsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0Xzc7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZjb3B5cV9sYW5lX3U2NChfX3AwXzgsIF9fcDFfOCwgX19wMl84LCBfX3AzXzgpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50NjR4Ml90IF9fczBfOCA9IF9fcDBfODsgXAotICB1aW50NjR4MV90IF9fczJfOCA9IF9fcDJfODsgXAotICB1aW50NjR4Ml90IF9fcmV0Xzg7IFwKLSAgX19yZXRfOCA9IHZzZXRxX2xhbmVfdTY0KHZnZXRfbGFuZV91NjQoX19zMl84LCBfX3AzXzgpLCBfX3MwXzgsIF9fcDFfOCk7IFwKLSAgX19yZXRfODsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZjb3B5cV9sYW5lX3U2NChfX3AwXzksIF9fcDFfOSwgX19wMl85LCBfX3AzXzkpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50NjR4Ml90IF9fczBfOSA9IF9fcDBfOTsgXAotICB1aW50NjR4MV90IF9fczJfOSA9IF9fcDJfOTsgXAotICB1aW50NjR4Ml90IF9fcmV2MF85OyAgX19yZXYwXzkgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwXzksIF9fczBfOSwgMSwgMCk7IFwKLSAgdWludDY0eDJfdCBfX3JldF85OyBcCi0gIF9fcmV0XzkgPSBfX25vc3dhcF92c2V0cV9sYW5lX3U2NChfX25vc3dhcF92Z2V0X2xhbmVfdTY0KF9fczJfOSwgX19wM185KSwgX19yZXYwXzksIF9fcDFfOSk7IFwKLSAgX19yZXRfOSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0XzksIF9fcmV0XzksIDEsIDApOyBcCi0gIF9fcmV0Xzk7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZjb3B5cV9sYW5lX3UxNihfX3AwXzEwLCBfX3AxXzEwLCBfX3AyXzEwLCBfX3AzXzEwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDE2eDhfdCBfX3MwXzEwID0gX19wMF8xMDsgXAotICB1aW50MTZ4NF90IF9fczJfMTAgPSBfX3AyXzEwOyBcCi0gIHVpbnQxNng4X3QgX19yZXRfMTA7IFwKLSAgX19yZXRfMTAgPSB2c2V0cV9sYW5lX3UxNih2Z2V0X2xhbmVfdTE2KF9fczJfMTAsIF9fcDNfMTApLCBfX3MwXzEwLCBfX3AxXzEwKTsgXAotICBfX3JldF8xMDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZjb3B5cV9sYW5lX3UxNihfX3AwXzExLCBfX3AxXzExLCBfX3AyXzExLCBfX3AzXzExKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDE2eDhfdCBfX3MwXzExID0gX19wMF8xMTsgXAotICB1aW50MTZ4NF90IF9fczJfMTEgPSBfX3AyXzExOyBcCi0gIHVpbnQxNng4X3QgX19yZXYwXzExOyAgX19yZXYwXzExID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMF8xMSwgX19zMF8xMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgdWludDE2eDRfdCBfX3JldjJfMTE7ICBfX3JldjJfMTEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyXzExLCBfX3MyXzExLCAzLCAyLCAxLCAwKTsgXAotICB1aW50MTZ4OF90IF9fcmV0XzExOyBcCi0gIF9fcmV0XzExID0gX19ub3N3YXBfdnNldHFfbGFuZV91MTYoX19ub3N3YXBfdmdldF9sYW5lX3UxNihfX3JldjJfMTEsIF9fcDNfMTEpLCBfX3JldjBfMTEsIF9fcDFfMTEpOyBcCi0gIF9fcmV0XzExID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXRfMTEsIF9fcmV0XzExLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldF8xMTsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmNvcHlxX2xhbmVfczgoX19wMF8xMiwgX19wMV8xMiwgX19wMl8xMiwgX19wM18xMikgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDh4MTZfdCBfX3MwXzEyID0gX19wMF8xMjsgXAotICBpbnQ4eDhfdCBfX3MyXzEyID0gX19wMl8xMjsgXAotICBpbnQ4eDE2X3QgX19yZXRfMTI7IFwKLSAgX19yZXRfMTIgPSB2c2V0cV9sYW5lX3M4KHZnZXRfbGFuZV9zOChfX3MyXzEyLCBfX3AzXzEyKSwgX19zMF8xMiwgX19wMV8xMik7IFwKLSAgX19yZXRfMTI7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2Y29weXFfbGFuZV9zOChfX3AwXzEzLCBfX3AxXzEzLCBfX3AyXzEzLCBfX3AzXzEzKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50OHgxNl90IF9fczBfMTMgPSBfX3AwXzEzOyBcCi0gIGludDh4OF90IF9fczJfMTMgPSBfX3AyXzEzOyBcCi0gIGludDh4MTZfdCBfX3JldjBfMTM7ICBfX3JldjBfMTMgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwXzEzLCBfX3MwXzEzLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBpbnQ4eDhfdCBfX3JldjJfMTM7ICBfX3JldjJfMTMgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyXzEzLCBfX3MyXzEzLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBpbnQ4eDE2X3QgX19yZXRfMTM7IFwKLSAgX19yZXRfMTMgPSBfX25vc3dhcF92c2V0cV9sYW5lX3M4KF9fbm9zd2FwX3ZnZXRfbGFuZV9zOChfX3JldjJfMTMsIF9fcDNfMTMpLCBfX3JldjBfMTMsIF9fcDFfMTMpOyBcCi0gIF9fcmV0XzEzID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXRfMTMsIF9fcmV0XzEzLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldF8xMzsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmNvcHlxX2xhbmVfZjMyKF9fcDBfMTQsIF9fcDFfMTQsIF9fcDJfMTQsIF9fcDNfMTQpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDMyeDRfdCBfX3MwXzE0ID0gX19wMF8xNDsgXAotICBmbG9hdDMyeDJfdCBfX3MyXzE0ID0gX19wMl8xNDsgXAotICBmbG9hdDMyeDRfdCBfX3JldF8xNDsgXAotICBfX3JldF8xNCA9IHZzZXRxX2xhbmVfZjMyKHZnZXRfbGFuZV9mMzIoX19zMl8xNCwgX19wM18xNCksIF9fczBfMTQsIF9fcDFfMTQpOyBcCi0gIF9fcmV0XzE0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmNvcHlxX2xhbmVfZjMyKF9fcDBfMTUsIF9fcDFfMTUsIF9fcDJfMTUsIF9fcDNfMTUpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDMyeDRfdCBfX3MwXzE1ID0gX19wMF8xNTsgXAotICBmbG9hdDMyeDJfdCBfX3MyXzE1ID0gX19wMl8xNTsgXAotICBmbG9hdDMyeDRfdCBfX3JldjBfMTU7ICBfX3JldjBfMTUgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwXzE1LCBfX3MwXzE1LCAzLCAyLCAxLCAwKTsgXAotICBmbG9hdDMyeDJfdCBfX3JldjJfMTU7ICBfX3JldjJfMTUgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyXzE1LCBfX3MyXzE1LCAxLCAwKTsgXAotICBmbG9hdDMyeDRfdCBfX3JldF8xNTsgXAotICBfX3JldF8xNSA9IF9fbm9zd2FwX3ZzZXRxX2xhbmVfZjMyKF9fbm9zd2FwX3ZnZXRfbGFuZV9mMzIoX19yZXYyXzE1LCBfX3AzXzE1KSwgX19yZXYwXzE1LCBfX3AxXzE1KTsgXAotICBfX3JldF8xNSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0XzE1LCBfX3JldF8xNSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXRfMTU7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZjb3B5cV9sYW5lX3MzMihfX3AwXzE2LCBfX3AxXzE2LCBfX3AyXzE2LCBfX3AzXzE2KSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MzJ4NF90IF9fczBfMTYgPSBfX3AwXzE2OyBcCi0gIGludDMyeDJfdCBfX3MyXzE2ID0gX19wMl8xNjsgXAotICBpbnQzMng0X3QgX19yZXRfMTY7IFwKLSAgX19yZXRfMTYgPSB2c2V0cV9sYW5lX3MzMih2Z2V0X2xhbmVfczMyKF9fczJfMTYsIF9fcDNfMTYpLCBfX3MwXzE2LCBfX3AxXzE2KTsgXAotICBfX3JldF8xNjsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZjb3B5cV9sYW5lX3MzMihfX3AwXzE3LCBfX3AxXzE3LCBfX3AyXzE3LCBfX3AzXzE3KSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MzJ4NF90IF9fczBfMTcgPSBfX3AwXzE3OyBcCi0gIGludDMyeDJfdCBfX3MyXzE3ID0gX19wMl8xNzsgXAotICBpbnQzMng0X3QgX19yZXYwXzE3OyAgX19yZXYwXzE3ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMF8xNywgX19zMF8xNywgMywgMiwgMSwgMCk7IFwKLSAgaW50MzJ4Ml90IF9fcmV2Ml8xNzsgIF9fcmV2Ml8xNyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczJfMTcsIF9fczJfMTcsIDEsIDApOyBcCi0gIGludDMyeDRfdCBfX3JldF8xNzsgXAotICBfX3JldF8xNyA9IF9fbm9zd2FwX3ZzZXRxX2xhbmVfczMyKF9fbm9zd2FwX3ZnZXRfbGFuZV9zMzIoX19yZXYyXzE3LCBfX3AzXzE3KSwgX19yZXYwXzE3LCBfX3AxXzE3KTsgXAotICBfX3JldF8xNyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0XzE3LCBfX3JldF8xNywgMywgMiwgMSwgMCk7IFwKLSAgX19yZXRfMTc7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZjb3B5cV9sYW5lX3M2NChfX3AwXzE4LCBfX3AxXzE4LCBfX3AyXzE4LCBfX3AzXzE4KSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50NjR4Ml90IF9fczBfMTggPSBfX3AwXzE4OyBcCi0gIGludDY0eDFfdCBfX3MyXzE4ID0gX19wMl8xODsgXAotICBpbnQ2NHgyX3QgX19yZXRfMTg7IFwKLSAgX19yZXRfMTggPSB2c2V0cV9sYW5lX3M2NCh2Z2V0X2xhbmVfczY0KF9fczJfMTgsIF9fcDNfMTgpLCBfX3MwXzE4LCBfX3AxXzE4KTsgXAotICBfX3JldF8xODsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZjb3B5cV9sYW5lX3M2NChfX3AwXzE5LCBfX3AxXzE5LCBfX3AyXzE5LCBfX3AzXzE5KSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50NjR4Ml90IF9fczBfMTkgPSBfX3AwXzE5OyBcCi0gIGludDY0eDFfdCBfX3MyXzE5ID0gX19wMl8xOTsgXAotICBpbnQ2NHgyX3QgX19yZXYwXzE5OyAgX19yZXYwXzE5ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMF8xOSwgX19zMF8xOSwgMSwgMCk7IFwKLSAgaW50NjR4Ml90IF9fcmV0XzE5OyBcCi0gIF9fcmV0XzE5ID0gX19ub3N3YXBfdnNldHFfbGFuZV9zNjQoX19ub3N3YXBfdmdldF9sYW5lX3M2NChfX3MyXzE5LCBfX3AzXzE5KSwgX19yZXYwXzE5LCBfX3AxXzE5KTsgXAotICBfX3JldF8xOSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0XzE5LCBfX3JldF8xOSwgMSwgMCk7IFwKLSAgX19yZXRfMTk7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZjb3B5cV9sYW5lX3MxNihfX3AwXzIwLCBfX3AxXzIwLCBfX3AyXzIwLCBfX3AzXzIwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MTZ4OF90IF9fczBfMjAgPSBfX3AwXzIwOyBcCi0gIGludDE2eDRfdCBfX3MyXzIwID0gX19wMl8yMDsgXAotICBpbnQxNng4X3QgX19yZXRfMjA7IFwKLSAgX19yZXRfMjAgPSB2c2V0cV9sYW5lX3MxNih2Z2V0X2xhbmVfczE2KF9fczJfMjAsIF9fcDNfMjApLCBfX3MwXzIwLCBfX3AxXzIwKTsgXAotICBfX3JldF8yMDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZjb3B5cV9sYW5lX3MxNihfX3AwXzIxLCBfX3AxXzIxLCBfX3AyXzIxLCBfX3AzXzIxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MTZ4OF90IF9fczBfMjEgPSBfX3AwXzIxOyBcCi0gIGludDE2eDRfdCBfX3MyXzIxID0gX19wMl8yMTsgXAotICBpbnQxNng4X3QgX19yZXYwXzIxOyAgX19yZXYwXzIxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMF8yMSwgX19zMF8yMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgaW50MTZ4NF90IF9fcmV2Ml8yMTsgIF9fcmV2Ml8yMSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczJfMjEsIF9fczJfMjEsIDMsIDIsIDEsIDApOyBcCi0gIGludDE2eDhfdCBfX3JldF8yMTsgXAotICBfX3JldF8yMSA9IF9fbm9zd2FwX3ZzZXRxX2xhbmVfczE2KF9fbm9zd2FwX3ZnZXRfbGFuZV9zMTYoX19yZXYyXzIxLCBfX3AzXzIxKSwgX19yZXYwXzIxLCBfX3AxXzIxKTsgXAotICBfX3JldF8yMSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0XzIxLCBfX3JldF8yMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXRfMjE7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZjb3B5X2xhbmVfcDgoX19wMF8yMiwgX19wMV8yMiwgX19wMl8yMiwgX19wM18yMikgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHk4eDhfdCBfX3MwXzIyID0gX19wMF8yMjsgXAotICBwb2x5OHg4X3QgX19zMl8yMiA9IF9fcDJfMjI7IFwKLSAgcG9seTh4OF90IF9fcmV0XzIyOyBcCi0gIF9fcmV0XzIyID0gdnNldF9sYW5lX3A4KHZnZXRfbGFuZV9wOChfX3MyXzIyLCBfX3AzXzIyKSwgX19zMF8yMiwgX19wMV8yMik7IFwKLSAgX19yZXRfMjI7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2Y29weV9sYW5lX3A4KF9fcDBfMjMsIF9fcDFfMjMsIF9fcDJfMjMsIF9fcDNfMjMpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBwb2x5OHg4X3QgX19zMF8yMyA9IF9fcDBfMjM7IFwKLSAgcG9seTh4OF90IF9fczJfMjMgPSBfX3AyXzIzOyBcCi0gIHBvbHk4eDhfdCBfX3JldjBfMjM7ICBfX3JldjBfMjMgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwXzIzLCBfX3MwXzIzLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBwb2x5OHg4X3QgX19yZXYyXzIzOyAgX19yZXYyXzIzID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMl8yMywgX19zMl8yMywgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgcG9seTh4OF90IF9fcmV0XzIzOyBcCi0gIF9fcmV0XzIzID0gX19ub3N3YXBfdnNldF9sYW5lX3A4KF9fbm9zd2FwX3ZnZXRfbGFuZV9wOChfX3JldjJfMjMsIF9fcDNfMjMpLCBfX3JldjBfMjMsIF9fcDFfMjMpOyBcCi0gIF9fcmV0XzIzID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXRfMjMsIF9fcmV0XzIzLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldF8yMzsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmNvcHlfbGFuZV9wMTYoX19wMF8yNCwgX19wMV8yNCwgX19wMl8yNCwgX19wM18yNCkgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHkxNng0X3QgX19zMF8yNCA9IF9fcDBfMjQ7IFwKLSAgcG9seTE2eDRfdCBfX3MyXzI0ID0gX19wMl8yNDsgXAotICBwb2x5MTZ4NF90IF9fcmV0XzI0OyBcCi0gIF9fcmV0XzI0ID0gdnNldF9sYW5lX3AxNih2Z2V0X2xhbmVfcDE2KF9fczJfMjQsIF9fcDNfMjQpLCBfX3MwXzI0LCBfX3AxXzI0KTsgXAotICBfX3JldF8yNDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZjb3B5X2xhbmVfcDE2KF9fcDBfMjUsIF9fcDFfMjUsIF9fcDJfMjUsIF9fcDNfMjUpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBwb2x5MTZ4NF90IF9fczBfMjUgPSBfX3AwXzI1OyBcCi0gIHBvbHkxNng0X3QgX19zMl8yNSA9IF9fcDJfMjU7IFwKLSAgcG9seTE2eDRfdCBfX3JldjBfMjU7ICBfX3JldjBfMjUgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwXzI1LCBfX3MwXzI1LCAzLCAyLCAxLCAwKTsgXAotICBwb2x5MTZ4NF90IF9fcmV2Ml8yNTsgIF9fcmV2Ml8yNSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczJfMjUsIF9fczJfMjUsIDMsIDIsIDEsIDApOyBcCi0gIHBvbHkxNng0X3QgX19yZXRfMjU7IFwKLSAgX19yZXRfMjUgPSBfX25vc3dhcF92c2V0X2xhbmVfcDE2KF9fbm9zd2FwX3ZnZXRfbGFuZV9wMTYoX19yZXYyXzI1LCBfX3AzXzI1KSwgX19yZXYwXzI1LCBfX3AxXzI1KTsgXAotICBfX3JldF8yNSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0XzI1LCBfX3JldF8yNSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXRfMjU7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZjb3B5X2xhbmVfdTgoX19wMF8yNiwgX19wMV8yNiwgX19wMl8yNiwgX19wM18yNikgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ4eDhfdCBfX3MwXzI2ID0gX19wMF8yNjsgXAotICB1aW50OHg4X3QgX19zMl8yNiA9IF9fcDJfMjY7IFwKLSAgdWludDh4OF90IF9fcmV0XzI2OyBcCi0gIF9fcmV0XzI2ID0gdnNldF9sYW5lX3U4KHZnZXRfbGFuZV91OChfX3MyXzI2LCBfX3AzXzI2KSwgX19zMF8yNiwgX19wMV8yNik7IFwKLSAgX19yZXRfMjY7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2Y29weV9sYW5lX3U4KF9fcDBfMjcsIF9fcDFfMjcsIF9fcDJfMjcsIF9fcDNfMjcpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50OHg4X3QgX19zMF8yNyA9IF9fcDBfMjc7IFwKLSAgdWludDh4OF90IF9fczJfMjcgPSBfX3AyXzI3OyBcCi0gIHVpbnQ4eDhfdCBfX3JldjBfMjc7ICBfX3JldjBfMjcgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwXzI3LCBfX3MwXzI3LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICB1aW50OHg4X3QgX19yZXYyXzI3OyAgX19yZXYyXzI3ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMl8yNywgX19zMl8yNywgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgdWludDh4OF90IF9fcmV0XzI3OyBcCi0gIF9fcmV0XzI3ID0gX19ub3N3YXBfdnNldF9sYW5lX3U4KF9fbm9zd2FwX3ZnZXRfbGFuZV91OChfX3JldjJfMjcsIF9fcDNfMjcpLCBfX3JldjBfMjcsIF9fcDFfMjcpOyBcCi0gIF9fcmV0XzI3ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXRfMjcsIF9fcmV0XzI3LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldF8yNzsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmNvcHlfbGFuZV91MzIoX19wMF8yOCwgX19wMV8yOCwgX19wMl8yOCwgX19wM18yOCkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQzMngyX3QgX19zMF8yOCA9IF9fcDBfMjg7IFwKLSAgdWludDMyeDJfdCBfX3MyXzI4ID0gX19wMl8yODsgXAotICB1aW50MzJ4Ml90IF9fcmV0XzI4OyBcCi0gIF9fcmV0XzI4ID0gdnNldF9sYW5lX3UzMih2Z2V0X2xhbmVfdTMyKF9fczJfMjgsIF9fcDNfMjgpLCBfX3MwXzI4LCBfX3AxXzI4KTsgXAotICBfX3JldF8yODsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZjb3B5X2xhbmVfdTMyKF9fcDBfMjksIF9fcDFfMjksIF9fcDJfMjksIF9fcDNfMjkpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MzJ4Ml90IF9fczBfMjkgPSBfX3AwXzI5OyBcCi0gIHVpbnQzMngyX3QgX19zMl8yOSA9IF9fcDJfMjk7IFwKLSAgdWludDMyeDJfdCBfX3JldjBfMjk7ICBfX3JldjBfMjkgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwXzI5LCBfX3MwXzI5LCAxLCAwKTsgXAotICB1aW50MzJ4Ml90IF9fcmV2Ml8yOTsgIF9fcmV2Ml8yOSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczJfMjksIF9fczJfMjksIDEsIDApOyBcCi0gIHVpbnQzMngyX3QgX19yZXRfMjk7IFwKLSAgX19yZXRfMjkgPSBfX25vc3dhcF92c2V0X2xhbmVfdTMyKF9fbm9zd2FwX3ZnZXRfbGFuZV91MzIoX19yZXYyXzI5LCBfX3AzXzI5KSwgX19yZXYwXzI5LCBfX3AxXzI5KTsgXAotICBfX3JldF8yOSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0XzI5LCBfX3JldF8yOSwgMSwgMCk7IFwKLSAgX19yZXRfMjk7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZjb3B5X2xhbmVfdTY0KF9fcDBfMzAsIF9fcDFfMzAsIF9fcDJfMzAsIF9fcDNfMzApIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50NjR4MV90IF9fczBfMzAgPSBfX3AwXzMwOyBcCi0gIHVpbnQ2NHgxX3QgX19zMl8zMCA9IF9fcDJfMzA7IFwKLSAgdWludDY0eDFfdCBfX3JldF8zMDsgXAotICBfX3JldF8zMCA9IHZzZXRfbGFuZV91NjQodmdldF9sYW5lX3U2NChfX3MyXzMwLCBfX3AzXzMwKSwgX19zMF8zMCwgX19wMV8zMCk7IFwKLSAgX19yZXRfMzA7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2Y29weV9sYW5lX3U2NChfX3AwXzMxLCBfX3AxXzMxLCBfX3AyXzMxLCBfX3AzXzMxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDY0eDFfdCBfX3MwXzMxID0gX19wMF8zMTsgXAotICB1aW50NjR4MV90IF9fczJfMzEgPSBfX3AyXzMxOyBcCi0gIHVpbnQ2NHgxX3QgX19yZXRfMzE7IFwKLSAgX19yZXRfMzEgPSBfX25vc3dhcF92c2V0X2xhbmVfdTY0KF9fbm9zd2FwX3ZnZXRfbGFuZV91NjQoX19zMl8zMSwgX19wM18zMSksIF9fczBfMzEsIF9fcDFfMzEpOyBcCi0gIF9fcmV0XzMxOyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2Y29weV9sYW5lX3UxNihfX3AwXzMyLCBfX3AxXzMyLCBfX3AyXzMyLCBfX3AzXzMyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDE2eDRfdCBfX3MwXzMyID0gX19wMF8zMjsgXAotICB1aW50MTZ4NF90IF9fczJfMzIgPSBfX3AyXzMyOyBcCi0gIHVpbnQxNng0X3QgX19yZXRfMzI7IFwKLSAgX19yZXRfMzIgPSB2c2V0X2xhbmVfdTE2KHZnZXRfbGFuZV91MTYoX19zMl8zMiwgX19wM18zMiksIF9fczBfMzIsIF9fcDFfMzIpOyBcCi0gIF9fcmV0XzMyOyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmNvcHlfbGFuZV91MTYoX19wMF8zMywgX19wMV8zMywgX19wMl8zMywgX19wM18zMykgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQxNng0X3QgX19zMF8zMyA9IF9fcDBfMzM7IFwKLSAgdWludDE2eDRfdCBfX3MyXzMzID0gX19wMl8zMzsgXAotICB1aW50MTZ4NF90IF9fcmV2MF8zMzsgIF9fcmV2MF8zMyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczBfMzMsIF9fczBfMzMsIDMsIDIsIDEsIDApOyBcCi0gIHVpbnQxNng0X3QgX19yZXYyXzMzOyAgX19yZXYyXzMzID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMl8zMywgX19zMl8zMywgMywgMiwgMSwgMCk7IFwKLSAgdWludDE2eDRfdCBfX3JldF8zMzsgXAotICBfX3JldF8zMyA9IF9fbm9zd2FwX3ZzZXRfbGFuZV91MTYoX19ub3N3YXBfdmdldF9sYW5lX3UxNihfX3JldjJfMzMsIF9fcDNfMzMpLCBfX3JldjBfMzMsIF9fcDFfMzMpOyBcCi0gIF9fcmV0XzMzID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXRfMzMsIF9fcmV0XzMzLCAzLCAyLCAxLCAwKTsgXAotICBfX3JldF8zMzsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmNvcHlfbGFuZV9zOChfX3AwXzM0LCBfX3AxXzM0LCBfX3AyXzM0LCBfX3AzXzM0KSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50OHg4X3QgX19zMF8zNCA9IF9fcDBfMzQ7IFwKLSAgaW50OHg4X3QgX19zMl8zNCA9IF9fcDJfMzQ7IFwKLSAgaW50OHg4X3QgX19yZXRfMzQ7IFwKLSAgX19yZXRfMzQgPSB2c2V0X2xhbmVfczgodmdldF9sYW5lX3M4KF9fczJfMzQsIF9fcDNfMzQpLCBfX3MwXzM0LCBfX3AxXzM0KTsgXAotICBfX3JldF8zNDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZjb3B5X2xhbmVfczgoX19wMF8zNSwgX19wMV8zNSwgX19wMl8zNSwgX19wM18zNSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDh4OF90IF9fczBfMzUgPSBfX3AwXzM1OyBcCi0gIGludDh4OF90IF9fczJfMzUgPSBfX3AyXzM1OyBcCi0gIGludDh4OF90IF9fcmV2MF8zNTsgIF9fcmV2MF8zNSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczBfMzUsIF9fczBfMzUsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIGludDh4OF90IF9fcmV2Ml8zNTsgIF9fcmV2Ml8zNSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczJfMzUsIF9fczJfMzUsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIGludDh4OF90IF9fcmV0XzM1OyBcCi0gIF9fcmV0XzM1ID0gX19ub3N3YXBfdnNldF9sYW5lX3M4KF9fbm9zd2FwX3ZnZXRfbGFuZV9zOChfX3JldjJfMzUsIF9fcDNfMzUpLCBfX3JldjBfMzUsIF9fcDFfMzUpOyBcCi0gIF9fcmV0XzM1ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXRfMzUsIF9fcmV0XzM1LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldF8zNTsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmNvcHlfbGFuZV9mMzIoX19wMF8zNiwgX19wMV8zNiwgX19wMl8zNiwgX19wM18zNikgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0MzJ4Ml90IF9fczBfMzYgPSBfX3AwXzM2OyBcCi0gIGZsb2F0MzJ4Ml90IF9fczJfMzYgPSBfX3AyXzM2OyBcCi0gIGZsb2F0MzJ4Ml90IF9fcmV0XzM2OyBcCi0gIF9fcmV0XzM2ID0gdnNldF9sYW5lX2YzMih2Z2V0X2xhbmVfZjMyKF9fczJfMzYsIF9fcDNfMzYpLCBfX3MwXzM2LCBfX3AxXzM2KTsgXAotICBfX3JldF8zNjsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZjb3B5X2xhbmVfZjMyKF9fcDBfMzcsIF9fcDFfMzcsIF9fcDJfMzcsIF9fcDNfMzcpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDMyeDJfdCBfX3MwXzM3ID0gX19wMF8zNzsgXAotICBmbG9hdDMyeDJfdCBfX3MyXzM3ID0gX19wMl8zNzsgXAotICBmbG9hdDMyeDJfdCBfX3JldjBfMzc7ICBfX3JldjBfMzcgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwXzM3LCBfX3MwXzM3LCAxLCAwKTsgXAotICBmbG9hdDMyeDJfdCBfX3JldjJfMzc7ICBfX3JldjJfMzcgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyXzM3LCBfX3MyXzM3LCAxLCAwKTsgXAotICBmbG9hdDMyeDJfdCBfX3JldF8zNzsgXAotICBfX3JldF8zNyA9IF9fbm9zd2FwX3ZzZXRfbGFuZV9mMzIoX19ub3N3YXBfdmdldF9sYW5lX2YzMihfX3JldjJfMzcsIF9fcDNfMzcpLCBfX3JldjBfMzcsIF9fcDFfMzcpOyBcCi0gIF9fcmV0XzM3ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXRfMzcsIF9fcmV0XzM3LCAxLCAwKTsgXAotICBfX3JldF8zNzsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmNvcHlfbGFuZV9zMzIoX19wMF8zOCwgX19wMV8zOCwgX19wMl8zOCwgX19wM18zOCkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDMyeDJfdCBfX3MwXzM4ID0gX19wMF8zODsgXAotICBpbnQzMngyX3QgX19zMl8zOCA9IF9fcDJfMzg7IFwKLSAgaW50MzJ4Ml90IF9fcmV0XzM4OyBcCi0gIF9fcmV0XzM4ID0gdnNldF9sYW5lX3MzMih2Z2V0X2xhbmVfczMyKF9fczJfMzgsIF9fcDNfMzgpLCBfX3MwXzM4LCBfX3AxXzM4KTsgXAotICBfX3JldF8zODsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZjb3B5X2xhbmVfczMyKF9fcDBfMzksIF9fcDFfMzksIF9fcDJfMzksIF9fcDNfMzkpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQzMngyX3QgX19zMF8zOSA9IF9fcDBfMzk7IFwKLSAgaW50MzJ4Ml90IF9fczJfMzkgPSBfX3AyXzM5OyBcCi0gIGludDMyeDJfdCBfX3JldjBfMzk7ICBfX3JldjBfMzkgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwXzM5LCBfX3MwXzM5LCAxLCAwKTsgXAotICBpbnQzMngyX3QgX19yZXYyXzM5OyAgX19yZXYyXzM5ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMl8zOSwgX19zMl8zOSwgMSwgMCk7IFwKLSAgaW50MzJ4Ml90IF9fcmV0XzM5OyBcCi0gIF9fcmV0XzM5ID0gX19ub3N3YXBfdnNldF9sYW5lX3MzMihfX25vc3dhcF92Z2V0X2xhbmVfczMyKF9fcmV2Ml8zOSwgX19wM18zOSksIF9fcmV2MF8zOSwgX19wMV8zOSk7IFwKLSAgX19yZXRfMzkgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldF8zOSwgX19yZXRfMzksIDEsIDApOyBcCi0gIF9fcmV0XzM5OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2Y29weV9sYW5lX3M2NChfX3AwXzQwLCBfX3AxXzQwLCBfX3AyXzQwLCBfX3AzXzQwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50NjR4MV90IF9fczBfNDAgPSBfX3AwXzQwOyBcCi0gIGludDY0eDFfdCBfX3MyXzQwID0gX19wMl80MDsgXAotICBpbnQ2NHgxX3QgX19yZXRfNDA7IFwKLSAgX19yZXRfNDAgPSB2c2V0X2xhbmVfczY0KHZnZXRfbGFuZV9zNjQoX19zMl80MCwgX19wM180MCksIF9fczBfNDAsIF9fcDFfNDApOyBcCi0gIF9fcmV0XzQwOyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmNvcHlfbGFuZV9zNjQoX19wMF80MSwgX19wMV80MSwgX19wMl80MSwgX19wM180MSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDY0eDFfdCBfX3MwXzQxID0gX19wMF80MTsgXAotICBpbnQ2NHgxX3QgX19zMl80MSA9IF9fcDJfNDE7IFwKLSAgaW50NjR4MV90IF9fcmV0XzQxOyBcCi0gIF9fcmV0XzQxID0gX19ub3N3YXBfdnNldF9sYW5lX3M2NChfX25vc3dhcF92Z2V0X2xhbmVfczY0KF9fczJfNDEsIF9fcDNfNDEpLCBfX3MwXzQxLCBfX3AxXzQxKTsgXAotICBfX3JldF80MTsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmNvcHlfbGFuZV9zMTYoX19wMF80MiwgX19wMV80MiwgX19wMl80MiwgX19wM180MikgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDE2eDRfdCBfX3MwXzQyID0gX19wMF80MjsgXAotICBpbnQxNng0X3QgX19zMl80MiA9IF9fcDJfNDI7IFwKLSAgaW50MTZ4NF90IF9fcmV0XzQyOyBcCi0gIF9fcmV0XzQyID0gdnNldF9sYW5lX3MxNih2Z2V0X2xhbmVfczE2KF9fczJfNDIsIF9fcDNfNDIpLCBfX3MwXzQyLCBfX3AxXzQyKTsgXAotICBfX3JldF80MjsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZjb3B5X2xhbmVfczE2KF9fcDBfNDMsIF9fcDFfNDMsIF9fcDJfNDMsIF9fcDNfNDMpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQxNng0X3QgX19zMF80MyA9IF9fcDBfNDM7IFwKLSAgaW50MTZ4NF90IF9fczJfNDMgPSBfX3AyXzQzOyBcCi0gIGludDE2eDRfdCBfX3JldjBfNDM7ICBfX3JldjBfNDMgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwXzQzLCBfX3MwXzQzLCAzLCAyLCAxLCAwKTsgXAotICBpbnQxNng0X3QgX19yZXYyXzQzOyAgX19yZXYyXzQzID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMl80MywgX19zMl80MywgMywgMiwgMSwgMCk7IFwKLSAgaW50MTZ4NF90IF9fcmV0XzQzOyBcCi0gIF9fcmV0XzQzID0gX19ub3N3YXBfdnNldF9sYW5lX3MxNihfX25vc3dhcF92Z2V0X2xhbmVfczE2KF9fcmV2Ml80MywgX19wM180MyksIF9fcmV2MF80MywgX19wMV80Myk7IFwKLSAgX19yZXRfNDMgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldF80MywgX19yZXRfNDMsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0XzQzOyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2Y29weXFfbGFuZXFfcDgoX19wMF80NCwgX19wMV80NCwgX19wMl80NCwgX19wM180NCkgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHk4eDE2X3QgX19zMF80NCA9IF9fcDBfNDQ7IFwKLSAgcG9seTh4MTZfdCBfX3MyXzQ0ID0gX19wMl80NDsgXAotICBwb2x5OHgxNl90IF9fcmV0XzQ0OyBcCi0gIF9fcmV0XzQ0ID0gdnNldHFfbGFuZV9wOCh2Z2V0cV9sYW5lX3A4KF9fczJfNDQsIF9fcDNfNDQpLCBfX3MwXzQ0LCBfX3AxXzQ0KTsgXAotICBfX3JldF80NDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZjb3B5cV9sYW5lcV9wOChfX3AwXzQ1LCBfX3AxXzQ1LCBfX3AyXzQ1LCBfX3AzXzQ1KSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTh4MTZfdCBfX3MwXzQ1ID0gX19wMF80NTsgXAotICBwb2x5OHgxNl90IF9fczJfNDUgPSBfX3AyXzQ1OyBcCi0gIHBvbHk4eDE2X3QgX19yZXYwXzQ1OyAgX19yZXYwXzQ1ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMF80NSwgX19zMF80NSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgcG9seTh4MTZfdCBfX3JldjJfNDU7ICBfX3JldjJfNDUgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyXzQ1LCBfX3MyXzQ1LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBwb2x5OHgxNl90IF9fcmV0XzQ1OyBcCi0gIF9fcmV0XzQ1ID0gX19ub3N3YXBfdnNldHFfbGFuZV9wOChfX25vc3dhcF92Z2V0cV9sYW5lX3A4KF9fcmV2Ml80NSwgX19wM180NSksIF9fcmV2MF80NSwgX19wMV80NSk7IFwKLSAgX19yZXRfNDUgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldF80NSwgX19yZXRfNDUsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0XzQ1OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2Y29weXFfbGFuZXFfcDE2KF9fcDBfNDYsIF9fcDFfNDYsIF9fcDJfNDYsIF9fcDNfNDYpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBwb2x5MTZ4OF90IF9fczBfNDYgPSBfX3AwXzQ2OyBcCi0gIHBvbHkxNng4X3QgX19zMl80NiA9IF9fcDJfNDY7IFwKLSAgcG9seTE2eDhfdCBfX3JldF80NjsgXAotICBfX3JldF80NiA9IHZzZXRxX2xhbmVfcDE2KHZnZXRxX2xhbmVfcDE2KF9fczJfNDYsIF9fcDNfNDYpLCBfX3MwXzQ2LCBfX3AxXzQ2KTsgXAotICBfX3JldF80NjsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZjb3B5cV9sYW5lcV9wMTYoX19wMF80NywgX19wMV80NywgX19wMl80NywgX19wM180NykgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHkxNng4X3QgX19zMF80NyA9IF9fcDBfNDc7IFwKLSAgcG9seTE2eDhfdCBfX3MyXzQ3ID0gX19wMl80NzsgXAotICBwb2x5MTZ4OF90IF9fcmV2MF80NzsgIF9fcmV2MF80NyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczBfNDcsIF9fczBfNDcsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIHBvbHkxNng4X3QgX19yZXYyXzQ3OyAgX19yZXYyXzQ3ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMl80NywgX19zMl80NywgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgcG9seTE2eDhfdCBfX3JldF80NzsgXAotICBfX3JldF80NyA9IF9fbm9zd2FwX3ZzZXRxX2xhbmVfcDE2KF9fbm9zd2FwX3ZnZXRxX2xhbmVfcDE2KF9fcmV2Ml80NywgX19wM180NyksIF9fcmV2MF80NywgX19wMV80Nyk7IFwKLSAgX19yZXRfNDcgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldF80NywgX19yZXRfNDcsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0XzQ3OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2Y29weXFfbGFuZXFfdTgoX19wMF80OCwgX19wMV80OCwgX19wMl80OCwgX19wM180OCkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ4eDE2X3QgX19zMF80OCA9IF9fcDBfNDg7IFwKLSAgdWludDh4MTZfdCBfX3MyXzQ4ID0gX19wMl80ODsgXAotICB1aW50OHgxNl90IF9fcmV0XzQ4OyBcCi0gIF9fcmV0XzQ4ID0gdnNldHFfbGFuZV91OCh2Z2V0cV9sYW5lX3U4KF9fczJfNDgsIF9fcDNfNDgpLCBfX3MwXzQ4LCBfX3AxXzQ4KTsgXAotICBfX3JldF80ODsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZjb3B5cV9sYW5lcV91OChfX3AwXzQ5LCBfX3AxXzQ5LCBfX3AyXzQ5LCBfX3AzXzQ5KSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDh4MTZfdCBfX3MwXzQ5ID0gX19wMF80OTsgXAotICB1aW50OHgxNl90IF9fczJfNDkgPSBfX3AyXzQ5OyBcCi0gIHVpbnQ4eDE2X3QgX19yZXYwXzQ5OyAgX19yZXYwXzQ5ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMF80OSwgX19zMF80OSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgdWludDh4MTZfdCBfX3JldjJfNDk7ICBfX3JldjJfNDkgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyXzQ5LCBfX3MyXzQ5LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICB1aW50OHgxNl90IF9fcmV0XzQ5OyBcCi0gIF9fcmV0XzQ5ID0gX19ub3N3YXBfdnNldHFfbGFuZV91OChfX25vc3dhcF92Z2V0cV9sYW5lX3U4KF9fcmV2Ml80OSwgX19wM180OSksIF9fcmV2MF80OSwgX19wMV80OSk7IFwKLSAgX19yZXRfNDkgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldF80OSwgX19yZXRfNDksIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0XzQ5OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2Y29weXFfbGFuZXFfdTMyKF9fcDBfNTAsIF9fcDFfNTAsIF9fcDJfNTAsIF9fcDNfNTApIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MzJ4NF90IF9fczBfNTAgPSBfX3AwXzUwOyBcCi0gIHVpbnQzMng0X3QgX19zMl81MCA9IF9fcDJfNTA7IFwKLSAgdWludDMyeDRfdCBfX3JldF81MDsgXAotICBfX3JldF81MCA9IHZzZXRxX2xhbmVfdTMyKHZnZXRxX2xhbmVfdTMyKF9fczJfNTAsIF9fcDNfNTApLCBfX3MwXzUwLCBfX3AxXzUwKTsgXAotICBfX3JldF81MDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZjb3B5cV9sYW5lcV91MzIoX19wMF81MSwgX19wMV81MSwgX19wMl81MSwgX19wM181MSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQzMng0X3QgX19zMF81MSA9IF9fcDBfNTE7IFwKLSAgdWludDMyeDRfdCBfX3MyXzUxID0gX19wMl81MTsgXAotICB1aW50MzJ4NF90IF9fcmV2MF81MTsgIF9fcmV2MF81MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczBfNTEsIF9fczBfNTEsIDMsIDIsIDEsIDApOyBcCi0gIHVpbnQzMng0X3QgX19yZXYyXzUxOyAgX19yZXYyXzUxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMl81MSwgX19zMl81MSwgMywgMiwgMSwgMCk7IFwKLSAgdWludDMyeDRfdCBfX3JldF81MTsgXAotICBfX3JldF81MSA9IF9fbm9zd2FwX3ZzZXRxX2xhbmVfdTMyKF9fbm9zd2FwX3ZnZXRxX2xhbmVfdTMyKF9fcmV2Ml81MSwgX19wM181MSksIF9fcmV2MF81MSwgX19wMV81MSk7IFwKLSAgX19yZXRfNTEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldF81MSwgX19yZXRfNTEsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0XzUxOyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2Y29weXFfbGFuZXFfdTY0KF9fcDBfNTIsIF9fcDFfNTIsIF9fcDJfNTIsIF9fcDNfNTIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50NjR4Ml90IF9fczBfNTIgPSBfX3AwXzUyOyBcCi0gIHVpbnQ2NHgyX3QgX19zMl81MiA9IF9fcDJfNTI7IFwKLSAgdWludDY0eDJfdCBfX3JldF81MjsgXAotICBfX3JldF81MiA9IHZzZXRxX2xhbmVfdTY0KHZnZXRxX2xhbmVfdTY0KF9fczJfNTIsIF9fcDNfNTIpLCBfX3MwXzUyLCBfX3AxXzUyKTsgXAotICBfX3JldF81MjsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZjb3B5cV9sYW5lcV91NjQoX19wMF81MywgX19wMV81MywgX19wMl81MywgX19wM181MykgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ2NHgyX3QgX19zMF81MyA9IF9fcDBfNTM7IFwKLSAgdWludDY0eDJfdCBfX3MyXzUzID0gX19wMl81MzsgXAotICB1aW50NjR4Ml90IF9fcmV2MF81MzsgIF9fcmV2MF81MyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczBfNTMsIF9fczBfNTMsIDEsIDApOyBcCi0gIHVpbnQ2NHgyX3QgX19yZXYyXzUzOyAgX19yZXYyXzUzID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMl81MywgX19zMl81MywgMSwgMCk7IFwKLSAgdWludDY0eDJfdCBfX3JldF81MzsgXAotICBfX3JldF81MyA9IF9fbm9zd2FwX3ZzZXRxX2xhbmVfdTY0KF9fbm9zd2FwX3ZnZXRxX2xhbmVfdTY0KF9fcmV2Ml81MywgX19wM181MyksIF9fcmV2MF81MywgX19wMV81Myk7IFwKLSAgX19yZXRfNTMgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldF81MywgX19yZXRfNTMsIDEsIDApOyBcCi0gIF9fcmV0XzUzOyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2Y29weXFfbGFuZXFfdTE2KF9fcDBfNTQsIF9fcDFfNTQsIF9fcDJfNTQsIF9fcDNfNTQpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MTZ4OF90IF9fczBfNTQgPSBfX3AwXzU0OyBcCi0gIHVpbnQxNng4X3QgX19zMl81NCA9IF9fcDJfNTQ7IFwKLSAgdWludDE2eDhfdCBfX3JldF81NDsgXAotICBfX3JldF81NCA9IHZzZXRxX2xhbmVfdTE2KHZnZXRxX2xhbmVfdTE2KF9fczJfNTQsIF9fcDNfNTQpLCBfX3MwXzU0LCBfX3AxXzU0KTsgXAotICBfX3JldF81NDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZjb3B5cV9sYW5lcV91MTYoX19wMF81NSwgX19wMV81NSwgX19wMl81NSwgX19wM181NSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQxNng4X3QgX19zMF81NSA9IF9fcDBfNTU7IFwKLSAgdWludDE2eDhfdCBfX3MyXzU1ID0gX19wMl81NTsgXAotICB1aW50MTZ4OF90IF9fcmV2MF81NTsgIF9fcmV2MF81NSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczBfNTUsIF9fczBfNTUsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIHVpbnQxNng4X3QgX19yZXYyXzU1OyAgX19yZXYyXzU1ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMl81NSwgX19zMl81NSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgdWludDE2eDhfdCBfX3JldF81NTsgXAotICBfX3JldF81NSA9IF9fbm9zd2FwX3ZzZXRxX2xhbmVfdTE2KF9fbm9zd2FwX3ZnZXRxX2xhbmVfdTE2KF9fcmV2Ml81NSwgX19wM181NSksIF9fcmV2MF81NSwgX19wMV81NSk7IFwKLSAgX19yZXRfNTUgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldF81NSwgX19yZXRfNTUsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0XzU1OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2Y29weXFfbGFuZXFfczgoX19wMF81NiwgX19wMV81NiwgX19wMl81NiwgX19wM181NikgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDh4MTZfdCBfX3MwXzU2ID0gX19wMF81NjsgXAotICBpbnQ4eDE2X3QgX19zMl81NiA9IF9fcDJfNTY7IFwKLSAgaW50OHgxNl90IF9fcmV0XzU2OyBcCi0gIF9fcmV0XzU2ID0gdnNldHFfbGFuZV9zOCh2Z2V0cV9sYW5lX3M4KF9fczJfNTYsIF9fcDNfNTYpLCBfX3MwXzU2LCBfX3AxXzU2KTsgXAotICBfX3JldF81NjsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZjb3B5cV9sYW5lcV9zOChfX3AwXzU3LCBfX3AxXzU3LCBfX3AyXzU3LCBfX3AzXzU3KSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50OHgxNl90IF9fczBfNTcgPSBfX3AwXzU3OyBcCi0gIGludDh4MTZfdCBfX3MyXzU3ID0gX19wMl81NzsgXAotICBpbnQ4eDE2X3QgX19yZXYwXzU3OyAgX19yZXYwXzU3ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMF81NywgX19zMF81NywgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgaW50OHgxNl90IF9fcmV2Ml81NzsgIF9fcmV2Ml81NyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczJfNTcsIF9fczJfNTcsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIGludDh4MTZfdCBfX3JldF81NzsgXAotICBfX3JldF81NyA9IF9fbm9zd2FwX3ZzZXRxX2xhbmVfczgoX19ub3N3YXBfdmdldHFfbGFuZV9zOChfX3JldjJfNTcsIF9fcDNfNTcpLCBfX3JldjBfNTcsIF9fcDFfNTcpOyBcCi0gIF9fcmV0XzU3ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXRfNTcsIF9fcmV0XzU3LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldF81NzsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmNvcHlxX2xhbmVxX2YzMihfX3AwXzU4LCBfX3AxXzU4LCBfX3AyXzU4LCBfX3AzXzU4KSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQzMng0X3QgX19zMF81OCA9IF9fcDBfNTg7IFwKLSAgZmxvYXQzMng0X3QgX19zMl81OCA9IF9fcDJfNTg7IFwKLSAgZmxvYXQzMng0X3QgX19yZXRfNTg7IFwKLSAgX19yZXRfNTggPSB2c2V0cV9sYW5lX2YzMih2Z2V0cV9sYW5lX2YzMihfX3MyXzU4LCBfX3AzXzU4KSwgX19zMF81OCwgX19wMV81OCk7IFwKLSAgX19yZXRfNTg7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2Y29weXFfbGFuZXFfZjMyKF9fcDBfNTksIF9fcDFfNTksIF9fcDJfNTksIF9fcDNfNTkpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDMyeDRfdCBfX3MwXzU5ID0gX19wMF81OTsgXAotICBmbG9hdDMyeDRfdCBfX3MyXzU5ID0gX19wMl81OTsgXAotICBmbG9hdDMyeDRfdCBfX3JldjBfNTk7ICBfX3JldjBfNTkgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwXzU5LCBfX3MwXzU5LCAzLCAyLCAxLCAwKTsgXAotICBmbG9hdDMyeDRfdCBfX3JldjJfNTk7ICBfX3JldjJfNTkgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyXzU5LCBfX3MyXzU5LCAzLCAyLCAxLCAwKTsgXAotICBmbG9hdDMyeDRfdCBfX3JldF81OTsgXAotICBfX3JldF81OSA9IF9fbm9zd2FwX3ZzZXRxX2xhbmVfZjMyKF9fbm9zd2FwX3ZnZXRxX2xhbmVfZjMyKF9fcmV2Ml81OSwgX19wM181OSksIF9fcmV2MF81OSwgX19wMV81OSk7IFwKLSAgX19yZXRfNTkgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldF81OSwgX19yZXRfNTksIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0XzU5OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2Y29weXFfbGFuZXFfczMyKF9fcDBfNjAsIF9fcDFfNjAsIF9fcDJfNjAsIF9fcDNfNjApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQzMng0X3QgX19zMF82MCA9IF9fcDBfNjA7IFwKLSAgaW50MzJ4NF90IF9fczJfNjAgPSBfX3AyXzYwOyBcCi0gIGludDMyeDRfdCBfX3JldF82MDsgXAotICBfX3JldF82MCA9IHZzZXRxX2xhbmVfczMyKHZnZXRxX2xhbmVfczMyKF9fczJfNjAsIF9fcDNfNjApLCBfX3MwXzYwLCBfX3AxXzYwKTsgXAotICBfX3JldF82MDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZjb3B5cV9sYW5lcV9zMzIoX19wMF82MSwgX19wMV82MSwgX19wMl82MSwgX19wM182MSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDMyeDRfdCBfX3MwXzYxID0gX19wMF82MTsgXAotICBpbnQzMng0X3QgX19zMl82MSA9IF9fcDJfNjE7IFwKLSAgaW50MzJ4NF90IF9fcmV2MF82MTsgIF9fcmV2MF82MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczBfNjEsIF9fczBfNjEsIDMsIDIsIDEsIDApOyBcCi0gIGludDMyeDRfdCBfX3JldjJfNjE7ICBfX3JldjJfNjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyXzYxLCBfX3MyXzYxLCAzLCAyLCAxLCAwKTsgXAotICBpbnQzMng0X3QgX19yZXRfNjE7IFwKLSAgX19yZXRfNjEgPSBfX25vc3dhcF92c2V0cV9sYW5lX3MzMihfX25vc3dhcF92Z2V0cV9sYW5lX3MzMihfX3JldjJfNjEsIF9fcDNfNjEpLCBfX3JldjBfNjEsIF9fcDFfNjEpOyBcCi0gIF9fcmV0XzYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXRfNjEsIF9fcmV0XzYxLCAzLCAyLCAxLCAwKTsgXAotICBfX3JldF82MTsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmNvcHlxX2xhbmVxX3M2NChfX3AwXzYyLCBfX3AxXzYyLCBfX3AyXzYyLCBfX3AzXzYyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50NjR4Ml90IF9fczBfNjIgPSBfX3AwXzYyOyBcCi0gIGludDY0eDJfdCBfX3MyXzYyID0gX19wMl82MjsgXAotICBpbnQ2NHgyX3QgX19yZXRfNjI7IFwKLSAgX19yZXRfNjIgPSB2c2V0cV9sYW5lX3M2NCh2Z2V0cV9sYW5lX3M2NChfX3MyXzYyLCBfX3AzXzYyKSwgX19zMF82MiwgX19wMV82Mik7IFwKLSAgX19yZXRfNjI7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2Y29weXFfbGFuZXFfczY0KF9fcDBfNjMsIF9fcDFfNjMsIF9fcDJfNjMsIF9fcDNfNjMpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ2NHgyX3QgX19zMF82MyA9IF9fcDBfNjM7IFwKLSAgaW50NjR4Ml90IF9fczJfNjMgPSBfX3AyXzYzOyBcCi0gIGludDY0eDJfdCBfX3JldjBfNjM7ICBfX3JldjBfNjMgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwXzYzLCBfX3MwXzYzLCAxLCAwKTsgXAotICBpbnQ2NHgyX3QgX19yZXYyXzYzOyAgX19yZXYyXzYzID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMl82MywgX19zMl82MywgMSwgMCk7IFwKLSAgaW50NjR4Ml90IF9fcmV0XzYzOyBcCi0gIF9fcmV0XzYzID0gX19ub3N3YXBfdnNldHFfbGFuZV9zNjQoX19ub3N3YXBfdmdldHFfbGFuZV9zNjQoX19yZXYyXzYzLCBfX3AzXzYzKSwgX19yZXYwXzYzLCBfX3AxXzYzKTsgXAotICBfX3JldF82MyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0XzYzLCBfX3JldF82MywgMSwgMCk7IFwKLSAgX19yZXRfNjM7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZjb3B5cV9sYW5lcV9zMTYoX19wMF82NCwgX19wMV82NCwgX19wMl82NCwgX19wM182NCkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDE2eDhfdCBfX3MwXzY0ID0gX19wMF82NDsgXAotICBpbnQxNng4X3QgX19zMl82NCA9IF9fcDJfNjQ7IFwKLSAgaW50MTZ4OF90IF9fcmV0XzY0OyBcCi0gIF9fcmV0XzY0ID0gdnNldHFfbGFuZV9zMTYodmdldHFfbGFuZV9zMTYoX19zMl82NCwgX19wM182NCksIF9fczBfNjQsIF9fcDFfNjQpOyBcCi0gIF9fcmV0XzY0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmNvcHlxX2xhbmVxX3MxNihfX3AwXzY1LCBfX3AxXzY1LCBfX3AyXzY1LCBfX3AzXzY1KSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MTZ4OF90IF9fczBfNjUgPSBfX3AwXzY1OyBcCi0gIGludDE2eDhfdCBfX3MyXzY1ID0gX19wMl82NTsgXAotICBpbnQxNng4X3QgX19yZXYwXzY1OyAgX19yZXYwXzY1ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMF82NSwgX19zMF82NSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgaW50MTZ4OF90IF9fcmV2Ml82NTsgIF9fcmV2Ml82NSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczJfNjUsIF9fczJfNjUsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIGludDE2eDhfdCBfX3JldF82NTsgXAotICBfX3JldF82NSA9IF9fbm9zd2FwX3ZzZXRxX2xhbmVfczE2KF9fbm9zd2FwX3ZnZXRxX2xhbmVfczE2KF9fcmV2Ml82NSwgX19wM182NSksIF9fcmV2MF82NSwgX19wMV82NSk7IFwKLSAgX19yZXRfNjUgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldF82NSwgX19yZXRfNjUsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0XzY1OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2Y29weV9sYW5lcV9wOChfX3AwXzY2LCBfX3AxXzY2LCBfX3AyXzY2LCBfX3AzXzY2KSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTh4OF90IF9fczBfNjYgPSBfX3AwXzY2OyBcCi0gIHBvbHk4eDE2X3QgX19zMl82NiA9IF9fcDJfNjY7IFwKLSAgcG9seTh4OF90IF9fcmV0XzY2OyBcCi0gIF9fcmV0XzY2ID0gdnNldF9sYW5lX3A4KHZnZXRxX2xhbmVfcDgoX19zMl82NiwgX19wM182NiksIF9fczBfNjYsIF9fcDFfNjYpOyBcCi0gIF9fcmV0XzY2OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmNvcHlfbGFuZXFfcDgoX19wMF82NywgX19wMV82NywgX19wMl82NywgX19wM182NykgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHk4eDhfdCBfX3MwXzY3ID0gX19wMF82NzsgXAotICBwb2x5OHgxNl90IF9fczJfNjcgPSBfX3AyXzY3OyBcCi0gIHBvbHk4eDhfdCBfX3JldjBfNjc7ICBfX3JldjBfNjcgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwXzY3LCBfX3MwXzY3LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBwb2x5OHgxNl90IF9fcmV2Ml82NzsgIF9fcmV2Ml82NyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczJfNjcsIF9fczJfNjcsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIHBvbHk4eDhfdCBfX3JldF82NzsgXAotICBfX3JldF82NyA9IF9fbm9zd2FwX3ZzZXRfbGFuZV9wOChfX25vc3dhcF92Z2V0cV9sYW5lX3A4KF9fcmV2Ml82NywgX19wM182NyksIF9fcmV2MF82NywgX19wMV82Nyk7IFwKLSAgX19yZXRfNjcgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldF82NywgX19yZXRfNjcsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0XzY3OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2Y29weV9sYW5lcV9wMTYoX19wMF82OCwgX19wMV82OCwgX19wMl82OCwgX19wM182OCkgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHkxNng0X3QgX19zMF82OCA9IF9fcDBfNjg7IFwKLSAgcG9seTE2eDhfdCBfX3MyXzY4ID0gX19wMl82ODsgXAotICBwb2x5MTZ4NF90IF9fcmV0XzY4OyBcCi0gIF9fcmV0XzY4ID0gdnNldF9sYW5lX3AxNih2Z2V0cV9sYW5lX3AxNihfX3MyXzY4LCBfX3AzXzY4KSwgX19zMF82OCwgX19wMV82OCk7IFwKLSAgX19yZXRfNjg7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2Y29weV9sYW5lcV9wMTYoX19wMF82OSwgX19wMV82OSwgX19wMl82OSwgX19wM182OSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHkxNng0X3QgX19zMF82OSA9IF9fcDBfNjk7IFwKLSAgcG9seTE2eDhfdCBfX3MyXzY5ID0gX19wMl82OTsgXAotICBwb2x5MTZ4NF90IF9fcmV2MF82OTsgIF9fcmV2MF82OSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczBfNjksIF9fczBfNjksIDMsIDIsIDEsIDApOyBcCi0gIHBvbHkxNng4X3QgX19yZXYyXzY5OyAgX19yZXYyXzY5ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMl82OSwgX19zMl82OSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgcG9seTE2eDRfdCBfX3JldF82OTsgXAotICBfX3JldF82OSA9IF9fbm9zd2FwX3ZzZXRfbGFuZV9wMTYoX19ub3N3YXBfdmdldHFfbGFuZV9wMTYoX19yZXYyXzY5LCBfX3AzXzY5KSwgX19yZXYwXzY5LCBfX3AxXzY5KTsgXAotICBfX3JldF82OSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0XzY5LCBfX3JldF82OSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXRfNjk7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZjb3B5X2xhbmVxX3U4KF9fcDBfNzAsIF9fcDFfNzAsIF9fcDJfNzAsIF9fcDNfNzApIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50OHg4X3QgX19zMF83MCA9IF9fcDBfNzA7IFwKLSAgdWludDh4MTZfdCBfX3MyXzcwID0gX19wMl83MDsgXAotICB1aW50OHg4X3QgX19yZXRfNzA7IFwKLSAgX19yZXRfNzAgPSB2c2V0X2xhbmVfdTgodmdldHFfbGFuZV91OChfX3MyXzcwLCBfX3AzXzcwKSwgX19zMF83MCwgX19wMV83MCk7IFwKLSAgX19yZXRfNzA7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2Y29weV9sYW5lcV91OChfX3AwXzcxLCBfX3AxXzcxLCBfX3AyXzcxLCBfX3AzXzcxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDh4OF90IF9fczBfNzEgPSBfX3AwXzcxOyBcCi0gIHVpbnQ4eDE2X3QgX19zMl83MSA9IF9fcDJfNzE7IFwKLSAgdWludDh4OF90IF9fcmV2MF83MTsgIF9fcmV2MF83MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczBfNzEsIF9fczBfNzEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIHVpbnQ4eDE2X3QgX19yZXYyXzcxOyAgX19yZXYyXzcxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMl83MSwgX19zMl83MSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgdWludDh4OF90IF9fcmV0XzcxOyBcCi0gIF9fcmV0XzcxID0gX19ub3N3YXBfdnNldF9sYW5lX3U4KF9fbm9zd2FwX3ZnZXRxX2xhbmVfdTgoX19yZXYyXzcxLCBfX3AzXzcxKSwgX19yZXYwXzcxLCBfX3AxXzcxKTsgXAotICBfX3JldF83MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0XzcxLCBfX3JldF83MSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXRfNzE7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZjb3B5X2xhbmVxX3UzMihfX3AwXzcyLCBfX3AxXzcyLCBfX3AyXzcyLCBfX3AzXzcyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDMyeDJfdCBfX3MwXzcyID0gX19wMF83MjsgXAotICB1aW50MzJ4NF90IF9fczJfNzIgPSBfX3AyXzcyOyBcCi0gIHVpbnQzMngyX3QgX19yZXRfNzI7IFwKLSAgX19yZXRfNzIgPSB2c2V0X2xhbmVfdTMyKHZnZXRxX2xhbmVfdTMyKF9fczJfNzIsIF9fcDNfNzIpLCBfX3MwXzcyLCBfX3AxXzcyKTsgXAotICBfX3JldF83MjsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZjb3B5X2xhbmVxX3UzMihfX3AwXzczLCBfX3AxXzczLCBfX3AyXzczLCBfX3AzXzczKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDMyeDJfdCBfX3MwXzczID0gX19wMF83MzsgXAotICB1aW50MzJ4NF90IF9fczJfNzMgPSBfX3AyXzczOyBcCi0gIHVpbnQzMngyX3QgX19yZXYwXzczOyAgX19yZXYwXzczID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMF83MywgX19zMF83MywgMSwgMCk7IFwKLSAgdWludDMyeDRfdCBfX3JldjJfNzM7ICBfX3JldjJfNzMgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyXzczLCBfX3MyXzczLCAzLCAyLCAxLCAwKTsgXAotICB1aW50MzJ4Ml90IF9fcmV0XzczOyBcCi0gIF9fcmV0XzczID0gX19ub3N3YXBfdnNldF9sYW5lX3UzMihfX25vc3dhcF92Z2V0cV9sYW5lX3UzMihfX3JldjJfNzMsIF9fcDNfNzMpLCBfX3JldjBfNzMsIF9fcDFfNzMpOyBcCi0gIF9fcmV0XzczID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXRfNzMsIF9fcmV0XzczLCAxLCAwKTsgXAotICBfX3JldF83MzsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmNvcHlfbGFuZXFfdTY0KF9fcDBfNzQsIF9fcDFfNzQsIF9fcDJfNzQsIF9fcDNfNzQpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50NjR4MV90IF9fczBfNzQgPSBfX3AwXzc0OyBcCi0gIHVpbnQ2NHgyX3QgX19zMl83NCA9IF9fcDJfNzQ7IFwKLSAgdWludDY0eDFfdCBfX3JldF83NDsgXAotICBfX3JldF83NCA9IHZzZXRfbGFuZV91NjQodmdldHFfbGFuZV91NjQoX19zMl83NCwgX19wM183NCksIF9fczBfNzQsIF9fcDFfNzQpOyBcCi0gIF9fcmV0Xzc0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmNvcHlfbGFuZXFfdTY0KF9fcDBfNzUsIF9fcDFfNzUsIF9fcDJfNzUsIF9fcDNfNzUpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50NjR4MV90IF9fczBfNzUgPSBfX3AwXzc1OyBcCi0gIHVpbnQ2NHgyX3QgX19zMl83NSA9IF9fcDJfNzU7IFwKLSAgdWludDY0eDJfdCBfX3JldjJfNzU7ICBfX3JldjJfNzUgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyXzc1LCBfX3MyXzc1LCAxLCAwKTsgXAotICB1aW50NjR4MV90IF9fcmV0Xzc1OyBcCi0gIF9fcmV0Xzc1ID0gX19ub3N3YXBfdnNldF9sYW5lX3U2NChfX25vc3dhcF92Z2V0cV9sYW5lX3U2NChfX3JldjJfNzUsIF9fcDNfNzUpLCBfX3MwXzc1LCBfX3AxXzc1KTsgXAotICBfX3JldF83NTsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmNvcHlfbGFuZXFfdTE2KF9fcDBfNzYsIF9fcDFfNzYsIF9fcDJfNzYsIF9fcDNfNzYpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MTZ4NF90IF9fczBfNzYgPSBfX3AwXzc2OyBcCi0gIHVpbnQxNng4X3QgX19zMl83NiA9IF9fcDJfNzY7IFwKLSAgdWludDE2eDRfdCBfX3JldF83NjsgXAotICBfX3JldF83NiA9IHZzZXRfbGFuZV91MTYodmdldHFfbGFuZV91MTYoX19zMl83NiwgX19wM183NiksIF9fczBfNzYsIF9fcDFfNzYpOyBcCi0gIF9fcmV0Xzc2OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmNvcHlfbGFuZXFfdTE2KF9fcDBfNzcsIF9fcDFfNzcsIF9fcDJfNzcsIF9fcDNfNzcpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MTZ4NF90IF9fczBfNzcgPSBfX3AwXzc3OyBcCi0gIHVpbnQxNng4X3QgX19zMl83NyA9IF9fcDJfNzc7IFwKLSAgdWludDE2eDRfdCBfX3JldjBfNzc7ICBfX3JldjBfNzcgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwXzc3LCBfX3MwXzc3LCAzLCAyLCAxLCAwKTsgXAotICB1aW50MTZ4OF90IF9fcmV2Ml83NzsgIF9fcmV2Ml83NyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczJfNzcsIF9fczJfNzcsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIHVpbnQxNng0X3QgX19yZXRfNzc7IFwKLSAgX19yZXRfNzcgPSBfX25vc3dhcF92c2V0X2xhbmVfdTE2KF9fbm9zd2FwX3ZnZXRxX2xhbmVfdTE2KF9fcmV2Ml83NywgX19wM183NyksIF9fcmV2MF83NywgX19wMV83Nyk7IFwKLSAgX19yZXRfNzcgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldF83NywgX19yZXRfNzcsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0Xzc3OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2Y29weV9sYW5lcV9zOChfX3AwXzc4LCBfX3AxXzc4LCBfX3AyXzc4LCBfX3AzXzc4KSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50OHg4X3QgX19zMF83OCA9IF9fcDBfNzg7IFwKLSAgaW50OHgxNl90IF9fczJfNzggPSBfX3AyXzc4OyBcCi0gIGludDh4OF90IF9fcmV0Xzc4OyBcCi0gIF9fcmV0Xzc4ID0gdnNldF9sYW5lX3M4KHZnZXRxX2xhbmVfczgoX19zMl83OCwgX19wM183OCksIF9fczBfNzgsIF9fcDFfNzgpOyBcCi0gIF9fcmV0Xzc4OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmNvcHlfbGFuZXFfczgoX19wMF83OSwgX19wMV83OSwgX19wMl83OSwgX19wM183OSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDh4OF90IF9fczBfNzkgPSBfX3AwXzc5OyBcCi0gIGludDh4MTZfdCBfX3MyXzc5ID0gX19wMl83OTsgXAotICBpbnQ4eDhfdCBfX3JldjBfNzk7ICBfX3JldjBfNzkgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwXzc5LCBfX3MwXzc5LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBpbnQ4eDE2X3QgX19yZXYyXzc5OyAgX19yZXYyXzc5ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMl83OSwgX19zMl83OSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgaW50OHg4X3QgX19yZXRfNzk7IFwKLSAgX19yZXRfNzkgPSBfX25vc3dhcF92c2V0X2xhbmVfczgoX19ub3N3YXBfdmdldHFfbGFuZV9zOChfX3JldjJfNzksIF9fcDNfNzkpLCBfX3JldjBfNzksIF9fcDFfNzkpOyBcCi0gIF9fcmV0Xzc5ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXRfNzksIF9fcmV0Xzc5LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldF83OTsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmNvcHlfbGFuZXFfZjMyKF9fcDBfODAsIF9fcDFfODAsIF9fcDJfODAsIF9fcDNfODApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDMyeDJfdCBfX3MwXzgwID0gX19wMF84MDsgXAotICBmbG9hdDMyeDRfdCBfX3MyXzgwID0gX19wMl84MDsgXAotICBmbG9hdDMyeDJfdCBfX3JldF84MDsgXAotICBfX3JldF84MCA9IHZzZXRfbGFuZV9mMzIodmdldHFfbGFuZV9mMzIoX19zMl84MCwgX19wM184MCksIF9fczBfODAsIF9fcDFfODApOyBcCi0gIF9fcmV0XzgwOyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmNvcHlfbGFuZXFfZjMyKF9fcDBfODEsIF9fcDFfODEsIF9fcDJfODEsIF9fcDNfODEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDMyeDJfdCBfX3MwXzgxID0gX19wMF84MTsgXAotICBmbG9hdDMyeDRfdCBfX3MyXzgxID0gX19wMl84MTsgXAotICBmbG9hdDMyeDJfdCBfX3JldjBfODE7ICBfX3JldjBfODEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwXzgxLCBfX3MwXzgxLCAxLCAwKTsgXAotICBmbG9hdDMyeDRfdCBfX3JldjJfODE7ICBfX3JldjJfODEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyXzgxLCBfX3MyXzgxLCAzLCAyLCAxLCAwKTsgXAotICBmbG9hdDMyeDJfdCBfX3JldF84MTsgXAotICBfX3JldF84MSA9IF9fbm9zd2FwX3ZzZXRfbGFuZV9mMzIoX19ub3N3YXBfdmdldHFfbGFuZV9mMzIoX19yZXYyXzgxLCBfX3AzXzgxKSwgX19yZXYwXzgxLCBfX3AxXzgxKTsgXAotICBfX3JldF84MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0XzgxLCBfX3JldF84MSwgMSwgMCk7IFwKLSAgX19yZXRfODE7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZjb3B5X2xhbmVxX3MzMihfX3AwXzgyLCBfX3AxXzgyLCBfX3AyXzgyLCBfX3AzXzgyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MzJ4Ml90IF9fczBfODIgPSBfX3AwXzgyOyBcCi0gIGludDMyeDRfdCBfX3MyXzgyID0gX19wMl84MjsgXAotICBpbnQzMngyX3QgX19yZXRfODI7IFwKLSAgX19yZXRfODIgPSB2c2V0X2xhbmVfczMyKHZnZXRxX2xhbmVfczMyKF9fczJfODIsIF9fcDNfODIpLCBfX3MwXzgyLCBfX3AxXzgyKTsgXAotICBfX3JldF84MjsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZjb3B5X2xhbmVxX3MzMihfX3AwXzgzLCBfX3AxXzgzLCBfX3AyXzgzLCBfX3AzXzgzKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MzJ4Ml90IF9fczBfODMgPSBfX3AwXzgzOyBcCi0gIGludDMyeDRfdCBfX3MyXzgzID0gX19wMl84MzsgXAotICBpbnQzMngyX3QgX19yZXYwXzgzOyAgX19yZXYwXzgzID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMF84MywgX19zMF84MywgMSwgMCk7IFwKLSAgaW50MzJ4NF90IF9fcmV2Ml84MzsgIF9fcmV2Ml84MyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczJfODMsIF9fczJfODMsIDMsIDIsIDEsIDApOyBcCi0gIGludDMyeDJfdCBfX3JldF84MzsgXAotICBfX3JldF84MyA9IF9fbm9zd2FwX3ZzZXRfbGFuZV9zMzIoX19ub3N3YXBfdmdldHFfbGFuZV9zMzIoX19yZXYyXzgzLCBfX3AzXzgzKSwgX19yZXYwXzgzLCBfX3AxXzgzKTsgXAotICBfX3JldF84MyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0XzgzLCBfX3JldF84MywgMSwgMCk7IFwKLSAgX19yZXRfODM7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZjb3B5X2xhbmVxX3M2NChfX3AwXzg0LCBfX3AxXzg0LCBfX3AyXzg0LCBfX3AzXzg0KSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50NjR4MV90IF9fczBfODQgPSBfX3AwXzg0OyBcCi0gIGludDY0eDJfdCBfX3MyXzg0ID0gX19wMl84NDsgXAotICBpbnQ2NHgxX3QgX19yZXRfODQ7IFwKLSAgX19yZXRfODQgPSB2c2V0X2xhbmVfczY0KHZnZXRxX2xhbmVfczY0KF9fczJfODQsIF9fcDNfODQpLCBfX3MwXzg0LCBfX3AxXzg0KTsgXAotICBfX3JldF84NDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZjb3B5X2xhbmVxX3M2NChfX3AwXzg1LCBfX3AxXzg1LCBfX3AyXzg1LCBfX3AzXzg1KSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50NjR4MV90IF9fczBfODUgPSBfX3AwXzg1OyBcCi0gIGludDY0eDJfdCBfX3MyXzg1ID0gX19wMl84NTsgXAotICBpbnQ2NHgyX3QgX19yZXYyXzg1OyAgX19yZXYyXzg1ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMl84NSwgX19zMl84NSwgMSwgMCk7IFwKLSAgaW50NjR4MV90IF9fcmV0Xzg1OyBcCi0gIF9fcmV0Xzg1ID0gX19ub3N3YXBfdnNldF9sYW5lX3M2NChfX25vc3dhcF92Z2V0cV9sYW5lX3M2NChfX3JldjJfODUsIF9fcDNfODUpLCBfX3MwXzg1LCBfX3AxXzg1KTsgXAotICBfX3JldF84NTsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmNvcHlfbGFuZXFfczE2KF9fcDBfODYsIF9fcDFfODYsIF9fcDJfODYsIF9fcDNfODYpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQxNng0X3QgX19zMF84NiA9IF9fcDBfODY7IFwKLSAgaW50MTZ4OF90IF9fczJfODYgPSBfX3AyXzg2OyBcCi0gIGludDE2eDRfdCBfX3JldF84NjsgXAotICBfX3JldF84NiA9IHZzZXRfbGFuZV9zMTYodmdldHFfbGFuZV9zMTYoX19zMl84NiwgX19wM184NiksIF9fczBfODYsIF9fcDFfODYpOyBcCi0gIF9fcmV0Xzg2OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmNvcHlfbGFuZXFfczE2KF9fcDBfODcsIF9fcDFfODcsIF9fcDJfODcsIF9fcDNfODcpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQxNng0X3QgX19zMF84NyA9IF9fcDBfODc7IFwKLSAgaW50MTZ4OF90IF9fczJfODcgPSBfX3AyXzg3OyBcCi0gIGludDE2eDRfdCBfX3JldjBfODc7ICBfX3JldjBfODcgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwXzg3LCBfX3MwXzg3LCAzLCAyLCAxLCAwKTsgXAotICBpbnQxNng4X3QgX19yZXYyXzg3OyAgX19yZXYyXzg3ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMl84NywgX19zMl84NywgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgaW50MTZ4NF90IF9fcmV0Xzg3OyBcCi0gIF9fcmV0Xzg3ID0gX19ub3N3YXBfdnNldF9sYW5lX3MxNihfX25vc3dhcF92Z2V0cV9sYW5lX3MxNihfX3JldjJfODcsIF9fcDNfODcpLCBfX3JldjBfODcsIF9fcDFfODcpOyBcCi0gIF9fcmV0Xzg3ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXRfODcsIF9fcmV0Xzg3LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldF84NzsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgcG9seTY0eDFfdCB2Y3JlYXRlX3A2NCh1aW50NjRfdCBfX3AwKSB7Ci0gIHBvbHk2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHBvbHk2NHgxX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBwb2x5NjR4MV90IHZjcmVhdGVfcDY0KHVpbnQ2NF90IF9fcDApIHsKLSAgcG9seTY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSAocG9seTY0eDFfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgZmxvYXQ2NHgxX3QgdmNyZWF0ZV9mNjQodWludDY0X3QgX19wMCkgewotICBmbG9hdDY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBmbG9hdDY0eDFfdCB2Y3JlYXRlX2Y2NCh1aW50NjRfdCBfX3AwKSB7Ci0gIGZsb2F0NjR4MV90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDY0eDFfdCkoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgZmxvYXQzMl90IHZjdnRzX2YzMl9zMzIoaW50MzJfdCBfX3AwKSB7Ci0gIGZsb2F0MzJfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQzMl90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0c19mMzJfczMyKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBmbG9hdDMyX3QgdmN2dHNfZjMyX3MzMihpbnQzMl90IF9fcDApIHsKLSAgZmxvYXQzMl90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRzX2YzMl9zMzIoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgZmxvYXQzMl90IHZjdnRzX2YzMl91MzIodWludDMyX3QgX19wMCkgewotICBmbG9hdDMyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0MzJfdCkgX19idWlsdGluX25lb25fdmN2dHNfZjMyX3UzMihfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgZmxvYXQzMl90IHZjdnRzX2YzMl91MzIodWludDMyX3QgX19wMCkgewotICBmbG9hdDMyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0MzJfdCkgX19idWlsdGluX25lb25fdmN2dHNfZjMyX3UzMihfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBmbG9hdDMyeDJfdCB2Y3Z0X2YzMl9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgewotICBmbG9hdDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRfZjMyX2Y2NCgoaW50OHgxNl90KV9fcDAsIDkpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBmbG9hdDMyeDJfdCB2Y3Z0X2YzMl9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgewotICBmbG9hdDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgZmxvYXQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0X2YzMl9mNjQoKGludDh4MTZfdClfX3JldjAsIDkpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLV9fYWkgZmxvYXQzMngyX3QgX19ub3N3YXBfdmN2dF9mMzJfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKLSAgZmxvYXQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0X2YzMl9mNjQoKGludDh4MTZfdClfX3AwLCA5KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBmbG9hdDY0X3QgdmN2dGRfZjY0X3M2NChpbnQ2NF90IF9fcDApIHsKLSAgZmxvYXQ2NF90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRkX2Y2NF9zNjQoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGZsb2F0NjRfdCB2Y3Z0ZF9mNjRfczY0KGludDY0X3QgX19wMCkgewotICBmbG9hdDY0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0NjRfdCkgX19idWlsdGluX25lb25fdmN2dGRfZjY0X3M2NChfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBmbG9hdDY0X3QgdmN2dGRfZjY0X3U2NCh1aW50NjRfdCBfX3AwKSB7Ci0gIGZsb2F0NjRfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0ZF9mNjRfdTY0KF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBmbG9hdDY0X3QgdmN2dGRfZjY0X3U2NCh1aW50NjRfdCBfX3AwKSB7Ci0gIGZsb2F0NjRfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0ZF9mNjRfdTY0KF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGZsb2F0NjR4Ml90IHZjdnRxX2Y2NF91NjQodWludDY0eDJfdCBfX3AwKSB7Ci0gIGZsb2F0NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDY0eDJfdCkgX19idWlsdGluX25lb25fdmN2dHFfZjY0X3YoKGludDh4MTZfdClfX3AwLCA1MSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGZsb2F0NjR4Ml90IHZjdnRxX2Y2NF91NjQodWludDY0eDJfdCBfX3AwKSB7Ci0gIHVpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIGZsb2F0NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDY0eDJfdCkgX19idWlsdGluX25lb25fdmN2dHFfZjY0X3YoKGludDh4MTZfdClfX3JldjAsIDUxKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGZsb2F0NjR4Ml90IHZjdnRxX2Y2NF9zNjQoaW50NjR4Ml90IF9fcDApIHsKLSAgZmxvYXQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0cV9mNjRfdigoaW50OHgxNl90KV9fcDAsIDM1KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgZmxvYXQ2NHgyX3QgdmN2dHFfZjY0X3M2NChpbnQ2NHgyX3QgX19wMCkgewotICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIGZsb2F0NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDY0eDJfdCkgX19idWlsdGluX25lb25fdmN2dHFfZjY0X3YoKGludDh4MTZfdClfX3JldjAsIDM1KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGZsb2F0NjR4MV90IHZjdnRfZjY0X3U2NCh1aW50NjR4MV90IF9fcDApIHsKLSAgZmxvYXQ2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0X2Y2NF92KChpbnQ4eDhfdClfX3AwLCAxOSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGZsb2F0NjR4MV90IHZjdnRfZjY0X3U2NCh1aW50NjR4MV90IF9fcDApIHsKLSAgZmxvYXQ2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0X2Y2NF92KChpbnQ4eDhfdClfX3AwLCAxOSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgZmxvYXQ2NHgxX3QgdmN2dF9mNjRfczY0KGludDY0eDFfdCBfX3AwKSB7Ci0gIGZsb2F0NjR4MV90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDY0eDFfdCkgX19idWlsdGluX25lb25fdmN2dF9mNjRfdigoaW50OHg4X3QpX19wMCwgMyk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGZsb2F0NjR4MV90IHZjdnRfZjY0X3M2NChpbnQ2NHgxX3QgX19wMCkgewotICBmbG9hdDY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRfZjY0X3YoKGludDh4OF90KV9fcDAsIDMpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGZsb2F0NjR4Ml90IHZjdnRfZjY0X2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7Ci0gIGZsb2F0NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDY0eDJfdCkgX19idWlsdGluX25lb25fdmN2dF9mNjRfZjMyKChpbnQ4eDhfdClfX3AwLCA0Mik7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGZsb2F0NjR4Ml90IHZjdnRfZjY0X2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7Ci0gIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICBmbG9hdDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRfZjY0X2YzMigoaW50OHg4X3QpX19yZXYwLCA0Mik7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotX19haSBmbG9hdDY0eDJfdCBfX25vc3dhcF92Y3Z0X2Y2NF9mMzIoZmxvYXQzMngyX3QgX19wMCkgewotICBmbG9hdDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRfZjY0X2YzMigoaW50OHg4X3QpX19wMCwgNDIpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGZsb2F0MTZ4OF90IHZjdnRfaGlnaF9mMTZfZjMyKGZsb2F0MTZ4NF90IF9fcDAsIGZsb2F0MzJ4NF90IF9fcDEpIHsKLSAgZmxvYXQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gdmNvbWJpbmVfZjE2KF9fcDAsIHZjdnRfZjE2X2YzMihfX3AxKSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGZsb2F0MTZ4OF90IHZjdnRfaGlnaF9mMTZfZjMyKGZsb2F0MTZ4NF90IF9fcDAsIGZsb2F0MzJ4NF90IF9fcDEpIHsKLSAgZmxvYXQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIGZsb2F0MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOwotICBmbG9hdDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSBfX25vc3dhcF92Y29tYmluZV9mMTYoX19yZXYwLCBfX25vc3dhcF92Y3Z0X2YxNl9mMzIoX19yZXYxKSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBmbG9hdDMyeDRfdCB2Y3Z0X2hpZ2hfZjMyX2YxNihmbG9hdDE2eDhfdCBfX3AwKSB7Ci0gIGZsb2F0MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IHZjdnRfZjMyX2YxNih2Z2V0X2hpZ2hfZjE2KF9fcDApKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgZmxvYXQzMng0X3QgdmN2dF9oaWdoX2YzMl9mMTYoZmxvYXQxNng4X3QgX19wMCkgewotICBmbG9hdDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgZmxvYXQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19ub3N3YXBfdmN2dF9mMzJfZjE2KF9fbm9zd2FwX3ZnZXRfaGlnaF9mMTYoX19yZXYwKSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBmbG9hdDMyeDRfdCB2Y3Z0X2hpZ2hfZjMyX2Y2NChmbG9hdDMyeDJfdCBfX3AwLCBmbG9hdDY0eDJfdCBfX3AxKSB7Ci0gIGZsb2F0MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IHZjb21iaW5lX2YzMihfX3AwLCB2Y3Z0X2YzMl9mNjQoX19wMSkpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBmbG9hdDMyeDRfdCB2Y3Z0X2hpZ2hfZjMyX2Y2NChmbG9hdDMyeDJfdCBfX3AwLCBmbG9hdDY0eDJfdCBfX3AxKSB7Ci0gIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICBmbG9hdDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKLSAgZmxvYXQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19ub3N3YXBfdmNvbWJpbmVfZjMyKF9fcmV2MCwgX19ub3N3YXBfdmN2dF9mMzJfZjY0KF9fcmV2MSkpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgZmxvYXQ2NHgyX3QgdmN2dF9oaWdoX2Y2NF9mMzIoZmxvYXQzMng0X3QgX19wMCkgewotICBmbG9hdDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSB2Y3Z0X2Y2NF9mMzIodmdldF9oaWdoX2YzMihfX3AwKSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGZsb2F0NjR4Ml90IHZjdnRfaGlnaF9mNjRfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKLSAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIGZsb2F0NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IF9fbm9zd2FwX3ZjdnRfZjY0X2YzMihfX25vc3dhcF92Z2V0X2hpZ2hfZjMyKF9fcmV2MCkpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmN2dHNfbl9mMzJfdTMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MzJfdCBfX3MwID0gX19wMDsgXAotICBmbG9hdDMyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoZmxvYXQzMl90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0c19uX2YzMl91MzIoX19zMCwgX19wMSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2Y3Z0c19uX2YzMl91MzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQzMl90IF9fczAgPSBfX3AwOyBcCi0gIGZsb2F0MzJfdCBfX3JldDsgXAotICBfX3JldCA9IChmbG9hdDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRzX25fZjMyX3UzMihfX3MwLCBfX3AxKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmN2dHNfbl9mMzJfczMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQzMl90IF9fczAgPSBfX3AwOyBcCi0gIGZsb2F0MzJfdCBfX3JldDsgXAotICBfX3JldCA9IChmbG9hdDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRzX25fZjMyX3MzMihfX3MwLCBfX3AxKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZjdnRzX25fZjMyX3MzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MzJfdCBfX3MwID0gX19wMDsgXAotICBmbG9hdDMyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoZmxvYXQzMl90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0c19uX2YzMl9zMzIoX19zMCwgX19wMSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZjdnRxX25fZjY0X3U2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDY0eDJfdCBfX3MwID0gX19wMDsgXAotICBmbG9hdDY0eDJfdCBfX3JldDsgXAotICBfX3JldCA9IChmbG9hdDY0eDJfdCkgX19idWlsdGluX25lb25fdmN2dHFfbl9mNjRfdigoaW50OHgxNl90KV9fczAsIF9fcDEsIDUxKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZjdnRxX25fZjY0X3U2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDY0eDJfdCBfX3MwID0gX19wMDsgXAotICB1aW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCi0gIGZsb2F0NjR4Ml90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGZsb2F0NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0cV9uX2Y2NF92KChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxLCA1MSk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2Y3Z0cV9uX2Y2NF9zNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDY0eDJfdCBfX3MwID0gX19wMDsgXAotICBmbG9hdDY0eDJfdCBfX3JldDsgXAotICBfX3JldCA9IChmbG9hdDY0eDJfdCkgX19idWlsdGluX25lb25fdmN2dHFfbl9mNjRfdigoaW50OHgxNl90KV9fczAsIF9fcDEsIDM1KTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZjdnRxX25fZjY0X3M2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCi0gIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAotICBmbG9hdDY0eDJfdCBfX3JldDsgXAotICBfX3JldCA9IChmbG9hdDY0eDJfdCkgX19idWlsdGluX25lb25fdmN2dHFfbl9mNjRfdigoaW50OHgxNl90KV9fcmV2MCwgX19wMSwgMzUpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmN2dF9uX2Y2NF91NjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ2NHgxX3QgX19zMCA9IF9fcDA7IFwKLSAgZmxvYXQ2NHgxX3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRfbl9mNjRfdigoaW50OHg4X3QpX19zMCwgX19wMSwgMTkpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmN2dF9uX2Y2NF91NjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ2NHgxX3QgX19zMCA9IF9fcDA7IFwKLSAgZmxvYXQ2NHgxX3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRfbl9mNjRfdigoaW50OHg4X3QpX19zMCwgX19wMSwgMTkpOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2Y3Z0X25fZjY0X3M2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50NjR4MV90IF9fczAgPSBfX3AwOyBcCi0gIGZsb2F0NjR4MV90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGZsb2F0NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0X25fZjY0X3YoKGludDh4OF90KV9fczAsIF9fcDEsIDMpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmN2dF9uX2Y2NF9zNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDY0eDFfdCBfX3MwID0gX19wMDsgXAotICBmbG9hdDY0eDFfdCBfX3JldDsgXAotICBfX3JldCA9IChmbG9hdDY0eDFfdCkgX19idWlsdGluX25lb25fdmN2dF9uX2Y2NF92KChpbnQ4eDhfdClfX3MwLCBfX3AxLCAzKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmN2dGRfbl9mNjRfdTY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50NjRfdCBfX3MwID0gX19wMDsgXAotICBmbG9hdDY0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoZmxvYXQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0ZF9uX2Y2NF91NjQoX19zMCwgX19wMSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2Y3Z0ZF9uX2Y2NF91NjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ2NF90IF9fczAgPSBfX3AwOyBcCi0gIGZsb2F0NjRfdCBfX3JldDsgXAotICBfX3JldCA9IChmbG9hdDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRkX25fZjY0X3U2NChfX3MwLCBfX3AxKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmN2dGRfbl9mNjRfczY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ2NF90IF9fczAgPSBfX3AwOyBcCi0gIGZsb2F0NjRfdCBfX3JldDsgXAotICBfX3JldCA9IChmbG9hdDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRkX25fZjY0X3M2NChfX3MwLCBfX3AxKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZjdnRkX25fZjY0X3M2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50NjRfdCBfX3MwID0gX19wMDsgXAotICBmbG9hdDY0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoZmxvYXQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0ZF9uX2Y2NF9zNjQoX19zMCwgX19wMSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZjdnRzX25fczMyX2YzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQzMl90IF9fczAgPSBfX3AwOyBcCi0gIGludDMyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoaW50MzJfdCkgX19idWlsdGluX25lb25fdmN2dHNfbl9zMzJfZjMyKF9fczAsIF9fcDEpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmN2dHNfbl9zMzJfZjMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDMyX3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MzJfdCBfX3JldDsgXAotICBfX3JldCA9IChpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0c19uX3MzMl9mMzIoX19zMCwgX19wMSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZjdnRxX25fczY0X2Y2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKLSAgaW50NjR4Ml90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGludDY0eDJfdCkgX19idWlsdGluX25lb25fdmN2dHFfbl9zNjRfdigoaW50OHgxNl90KV9fczAsIF9fcDEsIDM1KTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZjdnRxX25fczY0X2Y2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKLSAgZmxvYXQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKLSAgaW50NjR4Ml90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGludDY0eDJfdCkgX19idWlsdGluX25lb25fdmN2dHFfbl9zNjRfdigoaW50OHgxNl90KV9fcmV2MCwgX19wMSwgMzUpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmN2dF9uX3M2NF9mNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0NjR4MV90IF9fczAgPSBfX3AwOyBcCi0gIGludDY0eDFfdCBfX3JldDsgXAotICBfX3JldCA9IChpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRfbl9zNjRfdigoaW50OHg4X3QpX19zMCwgX19wMSwgMyk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2Y3Z0X25fczY0X2Y2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQ2NHgxX3QgX19zMCA9IF9fcDA7IFwKLSAgaW50NjR4MV90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGludDY0eDFfdCkgX19idWlsdGluX25lb25fdmN2dF9uX3M2NF92KChpbnQ4eDhfdClfX3MwLCBfX3AxLCAzKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmN2dGRfbl9zNjRfZjY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDY0X3QgX19zMCA9IF9fcDA7IFwKLSAgaW50NjRfdCBfX3JldDsgXAotICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0ZF9uX3M2NF9mNjQoX19zMCwgX19wMSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2Y3Z0ZF9uX3M2NF9mNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0NjRfdCBfX3MwID0gX19wMDsgXAotICBpbnQ2NF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRkX25fczY0X2Y2NChfX3MwLCBfX3AxKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmN2dHNfbl91MzJfZjMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDMyX3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDMyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSAodWludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRzX25fdTMyX2YzMihfX3MwLCBfX3AxKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZjdnRzX25fdTMyX2YzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQzMl90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQzMl90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHVpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0c19uX3UzMl9mMzIoX19zMCwgX19wMSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZjdnRxX25fdTY0X2Y2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDY0eDJfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0cV9uX3U2NF92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgNTEpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmN2dHFfbl91NjRfZjY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDY0eDJfdCBfX3MwID0gX19wMDsgXAotICBmbG9hdDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAotICB1aW50NjR4Ml90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRxX25fdTY0X3YoKGludDh4MTZfdClfX3JldjAsIF9fcDEsIDUxKTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZjdnRfbl91NjRfZjY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDY0eDFfdCBfX3MwID0gX19wMDsgXAotICB1aW50NjR4MV90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRfbl91NjRfdigoaW50OHg4X3QpX19zMCwgX19wMSwgMTkpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmN2dF9uX3U2NF9mNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0NjR4MV90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQ2NHgxX3QgX19yZXQ7IFwKLSAgX19yZXQgPSAodWludDY0eDFfdCkgX19idWlsdGluX25lb25fdmN2dF9uX3U2NF92KChpbnQ4eDhfdClfX3MwLCBfX3AxLCAxOSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZjdnRkX25fdTY0X2Y2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQ2NF90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQ2NF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0ZF9uX3U2NF9mNjQoX19zMCwgX19wMSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2Y3Z0ZF9uX3U2NF9mNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0NjRfdCBfX3MwID0gX19wMDsgXAotICB1aW50NjRfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50NjRfdCkgX19idWlsdGluX25lb25fdmN2dGRfbl91NjRfZjY0KF9fczAsIF9fcDEpOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQzMl90IHZjdnRzX3MzMl9mMzIoZmxvYXQzMl90IF9fcDApIHsKLSAgaW50MzJfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MzJfdCkgX19idWlsdGluX25lb25fdmN2dHNfczMyX2YzMihfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MzJfdCB2Y3Z0c19zMzJfZjMyKGZsb2F0MzJfdCBfX3AwKSB7Ci0gIGludDMyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRzX3MzMl9mMzIoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50NjRfdCB2Y3Z0ZF9zNjRfZjY0KGZsb2F0NjRfdCBfX3AwKSB7Ci0gIGludDY0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRkX3M2NF9mNjQoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDY0X3QgdmN2dGRfczY0X2Y2NChmbG9hdDY0X3QgX19wMCkgewotICBpbnQ2NF90IF9fcmV0OwotICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0ZF9zNjRfZjY0KF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDY0eDJfdCB2Y3Z0cV9zNjRfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKLSAgaW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRxX3M2NF92KChpbnQ4eDE2X3QpX19wMCwgMzUpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQ2NHgyX3QgdmN2dHFfczY0X2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7Ci0gIGZsb2F0NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICBpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDY0eDJfdCkgX19idWlsdGluX25lb25fdmN2dHFfczY0X3YoKGludDh4MTZfdClfX3JldjAsIDM1KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDY0eDFfdCB2Y3Z0X3M2NF9mNjQoZmxvYXQ2NHgxX3QgX19wMCkgewotICBpbnQ2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDY0eDFfdCkgX19idWlsdGluX25lb25fdmN2dF9zNjRfdigoaW50OHg4X3QpX19wMCwgMyk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDY0eDFfdCB2Y3Z0X3M2NF9mNjQoZmxvYXQ2NHgxX3QgX19wMCkgewotICBpbnQ2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDY0eDFfdCkgX19idWlsdGluX25lb25fdmN2dF9zNjRfdigoaW50OHg4X3QpX19wMCwgMyk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDMyX3QgdmN2dHNfdTMyX2YzMihmbG9hdDMyX3QgX19wMCkgewotICB1aW50MzJfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRzX3UzMl9mMzIoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQzMl90IHZjdnRzX3UzMl9mMzIoZmxvYXQzMl90IF9fcDApIHsKLSAgdWludDMyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0c191MzJfZjMyKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ2NF90IHZjdnRkX3U2NF9mNjQoZmxvYXQ2NF90IF9fcDApIHsKLSAgdWludDY0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0ZF91NjRfZjY0KF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50NjRfdCB2Y3Z0ZF91NjRfZjY0KGZsb2F0NjRfdCBfX3AwKSB7Ci0gIHVpbnQ2NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50NjRfdCkgX19idWlsdGluX25lb25fdmN2dGRfdTY0X2Y2NChfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50NjR4Ml90IHZjdnRxX3U2NF9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgewotICB1aW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0cV91NjRfdigoaW50OHgxNl90KV9fcDAsIDUxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDY0eDJfdCB2Y3Z0cV91NjRfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKLSAgZmxvYXQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIHVpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRxX3U2NF92KChpbnQ4eDE2X3QpX19yZXYwLCA1MSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50NjR4MV90IHZjdnRfdTY0X2Y2NChmbG9hdDY0eDFfdCBfX3AwKSB7Ci0gIHVpbnQ2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRfdTY0X3YoKGludDh4OF90KV9fcDAsIDE5KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDY0eDFfdCB2Y3Z0X3U2NF9mNjQoZmxvYXQ2NHgxX3QgX19wMCkgewotICB1aW50NjR4MV90IF9fcmV0OwotICBfX3JldCA9ICh1aW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0X3U2NF92KChpbnQ4eDhfdClfX3AwLCAxOSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MzJfdCB2Y3Z0YXNfczMyX2YzMihmbG9hdDMyX3QgX19wMCkgewotICBpbnQzMl90IF9fcmV0OwotICBfX3JldCA9IChpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0YXNfczMyX2YzMihfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MzJfdCB2Y3Z0YXNfczMyX2YzMihmbG9hdDMyX3QgX19wMCkgewotICBpbnQzMl90IF9fcmV0OwotICBfX3JldCA9IChpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0YXNfczMyX2YzMihfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ2NF90IHZjdnRhZF9zNjRfZjY0KGZsb2F0NjRfdCBfX3AwKSB7Ci0gIGludDY0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRhZF9zNjRfZjY0KF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQ2NF90IHZjdnRhZF9zNjRfZjY0KGZsb2F0NjRfdCBfX3AwKSB7Ci0gIGludDY0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRhZF9zNjRfZjY0KF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQzMl90IHZjdnRhc191MzJfZjMyKGZsb2F0MzJfdCBfX3AwKSB7Ci0gIHVpbnQzMl90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJfdCkgX19idWlsdGluX25lb25fdmN2dGFzX3UzMl9mMzIoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQzMl90IHZjdnRhc191MzJfZjMyKGZsb2F0MzJfdCBfX3AwKSB7Ci0gIHVpbnQzMl90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJfdCkgX19idWlsdGluX25lb25fdmN2dGFzX3UzMl9mMzIoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDY0X3QgdmN2dGFkX3U2NF9mNjQoZmxvYXQ2NF90IF9fcDApIHsKLSAgdWludDY0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0YWRfdTY0X2Y2NChfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDY0X3QgdmN2dGFkX3U2NF9mNjQoZmxvYXQ2NF90IF9fcDApIHsKLSAgdWludDY0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0YWRfdTY0X2Y2NChfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQzMl90IHZjdnRtc19zMzJfZjMyKGZsb2F0MzJfdCBfX3AwKSB7Ci0gIGludDMyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRtc19zMzJfZjMyKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQzMl90IHZjdnRtc19zMzJfZjMyKGZsb2F0MzJfdCBfX3AwKSB7Ci0gIGludDMyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRtc19zMzJfZjMyKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDY0X3QgdmN2dG1kX3M2NF9mNjQoZmxvYXQ2NF90IF9fcDApIHsKLSAgaW50NjRfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdmN2dG1kX3M2NF9mNjQoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDY0X3QgdmN2dG1kX3M2NF9mNjQoZmxvYXQ2NF90IF9fcDApIHsKLSAgaW50NjRfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdmN2dG1kX3M2NF9mNjQoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDMyX3QgdmN2dG1zX3UzMl9mMzIoZmxvYXQzMl90IF9fcDApIHsKLSAgdWludDMyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0bXNfdTMyX2YzMihfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDMyX3QgdmN2dG1zX3UzMl9mMzIoZmxvYXQzMl90IF9fcDApIHsKLSAgdWludDMyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0bXNfdTMyX2YzMihfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50NjRfdCB2Y3Z0bWRfdTY0X2Y2NChmbG9hdDY0X3QgX19wMCkgewotICB1aW50NjRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRtZF91NjRfZjY0KF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50NjRfdCB2Y3Z0bWRfdTY0X2Y2NChmbG9hdDY0X3QgX19wMCkgewotICB1aW50NjRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRtZF91NjRfZjY0KF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDMyX3QgdmN2dG5zX3MzMl9mMzIoZmxvYXQzMl90IF9fcDApIHsKLSAgaW50MzJfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MzJfdCkgX19idWlsdGluX25lb25fdmN2dG5zX3MzMl9mMzIoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDMyX3QgdmN2dG5zX3MzMl9mMzIoZmxvYXQzMl90IF9fcDApIHsKLSAgaW50MzJfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MzJfdCkgX19idWlsdGluX25lb25fdmN2dG5zX3MzMl9mMzIoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50NjRfdCB2Y3Z0bmRfczY0X2Y2NChmbG9hdDY0X3QgX19wMCkgewotICBpbnQ2NF90IF9fcmV0OwotICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0bmRfczY0X2Y2NChfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50NjRfdCB2Y3Z0bmRfczY0X2Y2NChmbG9hdDY0X3QgX19wMCkgewotICBpbnQ2NF90IF9fcmV0OwotICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0bmRfczY0X2Y2NChfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MzJfdCB2Y3Z0bnNfdTMyX2YzMihmbG9hdDMyX3QgX19wMCkgewotICB1aW50MzJfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRuc191MzJfZjMyKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MzJfdCB2Y3Z0bnNfdTMyX2YzMihmbG9hdDMyX3QgX19wMCkgewotICB1aW50MzJfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRuc191MzJfZjMyKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ2NF90IHZjdnRuZF91NjRfZjY0KGZsb2F0NjRfdCBfX3AwKSB7Ci0gIHVpbnQ2NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50NjRfdCkgX19idWlsdGluX25lb25fdmN2dG5kX3U2NF9mNjQoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ2NF90IHZjdnRuZF91NjRfZjY0KGZsb2F0NjRfdCBfX3AwKSB7Ci0gIHVpbnQ2NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50NjRfdCkgX19idWlsdGluX25lb25fdmN2dG5kX3U2NF9mNjQoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MzJfdCB2Y3Z0cHNfczMyX2YzMihmbG9hdDMyX3QgX19wMCkgewotICBpbnQzMl90IF9fcmV0OwotICBfX3JldCA9IChpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0cHNfczMyX2YzMihfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MzJfdCB2Y3Z0cHNfczMyX2YzMihmbG9hdDMyX3QgX19wMCkgewotICBpbnQzMl90IF9fcmV0OwotICBfX3JldCA9IChpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0cHNfczMyX2YzMihfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ2NF90IHZjdnRwZF9zNjRfZjY0KGZsb2F0NjRfdCBfX3AwKSB7Ci0gIGludDY0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRwZF9zNjRfZjY0KF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQ2NF90IHZjdnRwZF9zNjRfZjY0KGZsb2F0NjRfdCBfX3AwKSB7Ci0gIGludDY0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRwZF9zNjRfZjY0KF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQzMl90IHZjdnRwc191MzJfZjMyKGZsb2F0MzJfdCBfX3AwKSB7Ci0gIHVpbnQzMl90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJfdCkgX19idWlsdGluX25lb25fdmN2dHBzX3UzMl9mMzIoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQzMl90IHZjdnRwc191MzJfZjMyKGZsb2F0MzJfdCBfX3AwKSB7Ci0gIHVpbnQzMl90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJfdCkgX19idWlsdGluX25lb25fdmN2dHBzX3UzMl9mMzIoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDY0X3QgdmN2dHBkX3U2NF9mNjQoZmxvYXQ2NF90IF9fcDApIHsKLSAgdWludDY0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0cGRfdTY0X2Y2NChfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDY0X3QgdmN2dHBkX3U2NF9mNjQoZmxvYXQ2NF90IF9fcDApIHsKLSAgdWludDY0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0cGRfdTY0X2Y2NChfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBmbG9hdDMyX3QgdmN2dHhkX2YzMl9mNjQoZmxvYXQ2NF90IF9fcDApIHsKLSAgZmxvYXQzMl90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnR4ZF9mMzJfZjY0KF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBmbG9hdDMyX3QgdmN2dHhkX2YzMl9mNjQoZmxvYXQ2NF90IF9fcDApIHsKLSAgZmxvYXQzMl90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnR4ZF9mMzJfZjY0KF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGZsb2F0MzJ4Ml90IHZjdnR4X2YzMl9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgewotICBmbG9hdDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnR4X2YzMl92KChpbnQ4eDE2X3QpX19wMCwgNDIpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBmbG9hdDMyeDJfdCB2Y3Z0eF9mMzJfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKLSAgZmxvYXQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIGZsb2F0MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDMyeDJfdCkgX19idWlsdGluX25lb25fdmN2dHhfZjMyX3YoKGludDh4MTZfdClfX3JldjAsIDQyKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci1fX2FpIGZsb2F0MzJ4Ml90IF9fbm9zd2FwX3ZjdnR4X2YzMl9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgewotICBmbG9hdDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnR4X2YzMl92KChpbnQ4eDE2X3QpX19wMCwgNDIpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGZsb2F0MzJ4NF90IHZjdnR4X2hpZ2hfZjMyX2Y2NChmbG9hdDMyeDJfdCBfX3AwLCBmbG9hdDY0eDJfdCBfX3AxKSB7Ci0gIGZsb2F0MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IHZjb21iaW5lX2YzMihfX3AwLCB2Y3Z0eF9mMzJfZjY0KF9fcDEpKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgZmxvYXQzMng0X3QgdmN2dHhfaGlnaF9mMzJfZjY0KGZsb2F0MzJ4Ml90IF9fcDAsIGZsb2F0NjR4Ml90IF9fcDEpIHsKLSAgZmxvYXQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIGZsb2F0NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOwotICBmbG9hdDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSBfX25vc3dhcF92Y29tYmluZV9mMzIoX19yZXYwLCBfX25vc3dhcF92Y3Z0eF9mMzJfZjY0KF9fcmV2MSkpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgZmxvYXQ2NHgyX3QgdmRpdnFfZjY0KGZsb2F0NjR4Ml90IF9fcDAsIGZsb2F0NjR4Ml90IF9fcDEpIHsKLSAgZmxvYXQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19wMCAvIF9fcDE7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGZsb2F0NjR4Ml90IHZkaXZxX2Y2NChmbG9hdDY0eDJfdCBfX3AwLCBmbG9hdDY0eDJfdCBfX3AxKSB7Ci0gIGZsb2F0NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICBmbG9hdDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKLSAgZmxvYXQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19yZXYwIC8gX19yZXYxOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgZmxvYXQzMng0X3QgdmRpdnFfZjMyKGZsb2F0MzJ4NF90IF9fcDAsIGZsb2F0MzJ4NF90IF9fcDEpIHsKLSAgZmxvYXQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19wMCAvIF9fcDE7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGZsb2F0MzJ4NF90IHZkaXZxX2YzMihmbG9hdDMyeDRfdCBfX3AwLCBmbG9hdDMyeDRfdCBfX3AxKSB7Ci0gIGZsb2F0MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICBmbG9hdDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKLSAgZmxvYXQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19yZXYwIC8gX19yZXYxOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgZmxvYXQ2NHgxX3QgdmRpdl9mNjQoZmxvYXQ2NHgxX3QgX19wMCwgZmxvYXQ2NHgxX3QgX19wMSkgewotICBmbG9hdDY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSBfX3AwIC8gX19wMTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgZmxvYXQ2NHgxX3QgdmRpdl9mNjQoZmxvYXQ2NHgxX3QgX19wMCwgZmxvYXQ2NHgxX3QgX19wMSkgewotICBmbG9hdDY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSBfX3AwIC8gX19wMTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBmbG9hdDMyeDJfdCB2ZGl2X2YzMihmbG9hdDMyeDJfdCBfX3AwLCBmbG9hdDMyeDJfdCBfX3AxKSB7Ci0gIGZsb2F0MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IF9fcDAgLyBfX3AxOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBmbG9hdDMyeDJfdCB2ZGl2X2YzMihmbG9hdDMyeDJfdCBfX3AwLCBmbG9hdDMyeDJfdCBfX3AxKSB7Ci0gIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICBmbG9hdDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKLSAgZmxvYXQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19yZXYwIC8gX19yZXYxOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmR1cGJfbGFuZV9wOChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTh4OF90IF9fczAgPSBfX3AwOyBcCi0gIHBvbHk4X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAocG9seThfdCkgX19idWlsdGluX25lb25fdmR1cGJfbGFuZV9pOCgoaW50OHg4X3QpX19zMCwgX19wMSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2ZHVwYl9sYW5lX3A4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBwb2x5OHg4X3QgX19zMCA9IF9fcDA7IFwKLSAgcG9seTh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIHBvbHk4X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAocG9seThfdCkgX19idWlsdGluX25lb25fdmR1cGJfbGFuZV9pOCgoaW50OHg4X3QpX19yZXYwLCBfX3AxKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmR1cGhfbGFuZV9wMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHkxNng0X3QgX19zMCA9IF9fcDA7IFwKLSAgcG9seTE2X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAocG9seTE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZkdXBoX2xhbmVfaTE2KChpbnQ4eDhfdClfX3MwLCBfX3AxKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZkdXBoX2xhbmVfcDE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBwb2x5MTZ4NF90IF9fczAgPSBfX3AwOyBcCi0gIHBvbHkxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKLSAgcG9seTE2X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAocG9seTE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZkdXBoX2xhbmVfaTE2KChpbnQ4eDhfdClfX3JldjAsIF9fcDEpOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2ZHVwYl9sYW5lX3U4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50OHg4X3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDhfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50OF90KSBfX2J1aWx0aW5fbmVvbl92ZHVwYl9sYW5lX2k4KChpbnQ4eDhfdClfX3MwLCBfX3AxKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZkdXBiX2xhbmVfdTgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ4eDhfdCBfX3MwID0gX19wMDsgXAotICB1aW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgdWludDhfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50OF90KSBfX2J1aWx0aW5fbmVvbl92ZHVwYl9sYW5lX2k4KChpbnQ4eDhfdClfX3JldjAsIF9fcDEpOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2ZHVwc19sYW5lX3UzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDMyeDJfdCBfX3MwID0gX19wMDsgXAotICB1aW50MzJfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50MzJfdCkgX19idWlsdGluX25lb25fdmR1cHNfbGFuZV9pMzIoKGludDh4OF90KV9fczAsIF9fcDEpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmR1cHNfbGFuZV91MzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAotICB1aW50MzJfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50MzJfdCkgX19idWlsdGluX25lb25fdmR1cHNfbGFuZV9pMzIoKGludDh4OF90KV9fcmV2MCwgX19wMSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZkdXBkX2xhbmVfdTY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50NjR4MV90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQ2NF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92ZHVwZF9sYW5lX2k2NCgoaW50OHg4X3QpX19zMCwgX19wMSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2ZHVwZF9sYW5lX3U2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDY0eDFfdCBfX3MwID0gX19wMDsgXAotICB1aW50NjRfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50NjRfdCkgX19idWlsdGluX25lb25fdmR1cGRfbGFuZV9pNjQoKGludDh4OF90KV9fczAsIF9fcDEpOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2ZHVwaF9sYW5lX3UxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDE2eDRfdCBfX3MwID0gX19wMDsgXAotICB1aW50MTZfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50MTZfdCkgX19idWlsdGluX25lb25fdmR1cGhfbGFuZV9pMTYoKGludDh4OF90KV9fczAsIF9fcDEpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmR1cGhfbGFuZV91MTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAotICB1aW50MTZfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50MTZfdCkgX19idWlsdGluX25lb25fdmR1cGhfbGFuZV9pMTYoKGludDh4OF90KV9fcmV2MCwgX19wMSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZkdXBiX2xhbmVfczgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDh4OF90IF9fczAgPSBfX3AwOyBcCi0gIGludDhfdCBfX3JldDsgXAotICBfX3JldCA9IChpbnQ4X3QpIF9fYnVpbHRpbl9uZW9uX3ZkdXBiX2xhbmVfaTgoKGludDh4OF90KV9fczAsIF9fcDEpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmR1cGJfbGFuZV9zOChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50OHg4X3QgX19zMCA9IF9fcDA7IFwKLSAgaW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgaW50OF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGludDhfdCkgX19idWlsdGluX25lb25fdmR1cGJfbGFuZV9pOCgoaW50OHg4X3QpX19yZXYwLCBfX3AxKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmR1cGRfbGFuZV9mNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0NjR4MV90IF9fczAgPSBfX3AwOyBcCi0gIGZsb2F0NjRfdCBfX3JldDsgXAotICBfX3JldCA9IChmbG9hdDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZkdXBkX2xhbmVfZjY0KChpbnQ4eDhfdClfX3MwLCBfX3AxKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZkdXBkX2xhbmVfZjY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDY0eDFfdCBfX3MwID0gX19wMDsgXAotICBmbG9hdDY0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoZmxvYXQ2NF90KSBfX2J1aWx0aW5fbmVvbl92ZHVwZF9sYW5lX2Y2NCgoaW50OHg4X3QpX19zMCwgX19wMSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZkdXBzX2xhbmVfZjMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDMyeDJfdCBfX3MwID0gX19wMDsgXAotICBmbG9hdDMyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoZmxvYXQzMl90KSBfX2J1aWx0aW5fbmVvbl92ZHVwc19sYW5lX2YzMigoaW50OHg4X3QpX19zMCwgX19wMSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2ZHVwc19sYW5lX2YzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQzMngyX3QgX19zMCA9IF9fcDA7IFwKLSAgZmxvYXQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKLSAgZmxvYXQzMl90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGZsb2F0MzJfdCkgX19idWlsdGluX25lb25fdmR1cHNfbGFuZV9mMzIoKGludDh4OF90KV9fcmV2MCwgX19wMSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZkdXBzX2xhbmVfczMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MzJfdCBfX3JldDsgXAotICBfX3JldCA9IChpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92ZHVwc19sYW5lX2kzMigoaW50OHg4X3QpX19zMCwgX19wMSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2ZHVwc19sYW5lX3MzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCi0gIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAotICBpbnQzMl90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZkdXBzX2xhbmVfaTMyKChpbnQ4eDhfdClfX3JldjAsIF9fcDEpOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2ZHVwZF9sYW5lX3M2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50NjR4MV90IF9fczAgPSBfX3AwOyBcCi0gIGludDY0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdmR1cGRfbGFuZV9pNjQoKGludDh4OF90KV9fczAsIF9fcDEpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmR1cGRfbGFuZV9zNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDY0eDFfdCBfX3MwID0gX19wMDsgXAotICBpbnQ2NF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZkdXBkX2xhbmVfaTY0KChpbnQ4eDhfdClfX3MwLCBfX3AxKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmR1cGhfbGFuZV9zMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDE2eDRfdCBfX3MwID0gX19wMDsgXAotICBpbnQxNl90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGludDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZkdXBoX2xhbmVfaTE2KChpbnQ4eDhfdClfX3MwLCBfX3AxKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZkdXBoX2xhbmVfczE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCi0gIGludDE2X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoaW50MTZfdCkgX19idWlsdGluX25lb25fdmR1cGhfbGFuZV9pMTYoKGludDh4OF90KV9fcmV2MCwgX19wMSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZkdXBfbGFuZV9wNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHk2NHgxX3QgX19zMCA9IF9fcDA7IFwKLSAgcG9seTY0eDFfdCBfX3JldDsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIF9fcDEpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmR1cF9sYW5lX3A2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTY0eDFfdCBfX3MwID0gX19wMDsgXAotICBwb2x5NjR4MV90IF9fcmV0OyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgX19wMSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZkdXBxX2xhbmVfcDY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBwb2x5NjR4MV90IF9fczAgPSBfX3AwOyBcCi0gIHBvbHk2NHgyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCBfX3AxLCBfX3AxKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZkdXBxX2xhbmVfcDY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBwb2x5NjR4MV90IF9fczAgPSBfX3AwOyBcCi0gIHBvbHk2NHgyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCBfX3AxLCBfX3AxKTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZkdXBxX2xhbmVfZjY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDY0eDFfdCBfX3MwID0gX19wMDsgXAotICBmbG9hdDY0eDJfdCBfX3JldDsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIF9fcDEsIF9fcDEpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmR1cHFfbGFuZV9mNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0NjR4MV90IF9fczAgPSBfX3AwOyBcCi0gIGZsb2F0NjR4Ml90IF9fcmV0OyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgX19wMSwgX19wMSk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2ZHVwcV9sYW5lX2YxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQxNng0X3QgX19zMCA9IF9fcDA7IFwKLSAgZmxvYXQxNng4X3QgX19yZXQ7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZkdXBxX2xhbmVfZjE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDE2eDRfdCBfX3MwID0gX19wMDsgXAotICBmbG9hdDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAotICBmbG9hdDE2eDhfdCBfX3JldDsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxKTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZkdXBfbGFuZV9mNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0NjR4MV90IF9fczAgPSBfX3AwOyBcCi0gIGZsb2F0NjR4MV90IF9fcmV0OyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgX19wMSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2ZHVwX2xhbmVfZjY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDY0eDFfdCBfX3MwID0gX19wMDsgXAotICBmbG9hdDY0eDFfdCBfX3JldDsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIF9fcDEpOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2ZHVwX2xhbmVfZjE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDE2eDRfdCBfX3MwID0gX19wMDsgXAotICBmbG9hdDE2eDRfdCBfX3JldDsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmR1cF9sYW5lX2YxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQxNng0X3QgX19zMCA9IF9fcDA7IFwKLSAgZmxvYXQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKLSAgZmxvYXQxNng0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgX19wMSwgX19wMSwgX19wMSwgX19wMSk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2ZHVwYl9sYW5lcV9wOChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTh4MTZfdCBfX3MwID0gX19wMDsgXAotICBwb2x5OF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHBvbHk4X3QpIF9fYnVpbHRpbl9uZW9uX3ZkdXBiX2xhbmVxX2k4KChpbnQ4eDE2X3QpX19zMCwgX19wMSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2ZHVwYl9sYW5lcV9wOChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTh4MTZfdCBfX3MwID0gX19wMDsgXAotICBwb2x5OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIHBvbHk4X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAocG9seThfdCkgX19idWlsdGluX25lb25fdmR1cGJfbGFuZXFfaTgoKGludDh4MTZfdClfX3JldjAsIF9fcDEpOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2ZHVwaF9sYW5lcV9wMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHkxNng4X3QgX19zMCA9IF9fcDA7IFwKLSAgcG9seTE2X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAocG9seTE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZkdXBoX2xhbmVxX2kxNigoaW50OHgxNl90KV9fczAsIF9fcDEpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmR1cGhfbGFuZXFfcDE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBwb2x5MTZ4OF90IF9fczAgPSBfX3AwOyBcCi0gIHBvbHkxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgcG9seTE2X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAocG9seTE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZkdXBoX2xhbmVxX2kxNigoaW50OHgxNl90KV9fcmV2MCwgX19wMSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZkdXBiX2xhbmVxX3U4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50OHgxNl90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQ4X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAodWludDhfdCkgX19idWlsdGluX25lb25fdmR1cGJfbGFuZXFfaTgoKGludDh4MTZfdClfX3MwLCBfX3AxKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZkdXBiX2xhbmVxX3U4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50OHgxNl90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgdWludDhfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50OF90KSBfX2J1aWx0aW5fbmVvbl92ZHVwYl9sYW5lcV9pOCgoaW50OHgxNl90KV9fcmV2MCwgX19wMSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZkdXBzX2xhbmVxX3UzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDMyeDRfdCBfX3MwID0gX19wMDsgXAotICB1aW50MzJfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50MzJfdCkgX19idWlsdGluX25lb25fdmR1cHNfbGFuZXFfaTMyKChpbnQ4eDE2X3QpX19zMCwgX19wMSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2ZHVwc19sYW5lcV91MzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAotICB1aW50MzJfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50MzJfdCkgX19idWlsdGluX25lb25fdmR1cHNfbGFuZXFfaTMyKChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmR1cGRfbGFuZXFfdTY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQ2NF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92ZHVwZF9sYW5lcV9pNjQoKGludDh4MTZfdClfX3MwLCBfX3AxKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZkdXBkX2xhbmVxX3U2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDY0eDJfdCBfX3MwID0gX19wMDsgXAotICB1aW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCi0gIHVpbnQ2NF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92ZHVwZF9sYW5lcV9pNjQoKGludDh4MTZfdClfX3JldjAsIF9fcDEpOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2ZHVwaF9sYW5lcV91MTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDE2X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAodWludDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZkdXBoX2xhbmVxX2kxNigoaW50OHgxNl90KV9fczAsIF9fcDEpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmR1cGhfbGFuZXFfdTE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgdWludDE2X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAodWludDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZkdXBoX2xhbmVxX2kxNigoaW50OHgxNl90KV9fcmV2MCwgX19wMSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZkdXBiX2xhbmVxX3M4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ4eDE2X3QgX19zMCA9IF9fcDA7IFwKLSAgaW50OF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGludDhfdCkgX19idWlsdGluX25lb25fdmR1cGJfbGFuZXFfaTgoKGludDh4MTZfdClfX3MwLCBfX3AxKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZkdXBiX2xhbmVxX3M4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ4eDE2X3QgX19zMCA9IF9fcDA7IFwKLSAgaW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIGludDhfdCBfX3JldDsgXAotICBfX3JldCA9IChpbnQ4X3QpIF9fYnVpbHRpbl9uZW9uX3ZkdXBiX2xhbmVxX2k4KChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmR1cGRfbGFuZXFfZjY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDY0eDJfdCBfX3MwID0gX19wMDsgXAotICBmbG9hdDY0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoZmxvYXQ2NF90KSBfX2J1aWx0aW5fbmVvbl92ZHVwZF9sYW5lcV9mNjQoKGludDh4MTZfdClfX3MwLCBfX3AxKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZkdXBkX2xhbmVxX2Y2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKLSAgZmxvYXQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKLSAgZmxvYXQ2NF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGZsb2F0NjRfdCkgX19idWlsdGluX25lb25fdmR1cGRfbGFuZXFfZjY0KChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmR1cHNfbGFuZXFfZjMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDMyeDRfdCBfX3MwID0gX19wMDsgXAotICBmbG9hdDMyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoZmxvYXQzMl90KSBfX2J1aWx0aW5fbmVvbl92ZHVwc19sYW5lcV9mMzIoKGludDh4MTZfdClfX3MwLCBfX3AxKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZkdXBzX2xhbmVxX2YzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQzMng0X3QgX19zMCA9IF9fcDA7IFwKLSAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKLSAgZmxvYXQzMl90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGZsb2F0MzJfdCkgX19idWlsdGluX25lb25fdmR1cHNfbGFuZXFfZjMyKChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmR1cHNfbGFuZXFfczMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MzJfdCBfX3JldDsgXAotICBfX3JldCA9IChpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92ZHVwc19sYW5lcV9pMzIoKGludDh4MTZfdClfX3MwLCBfX3AxKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZkdXBzX2xhbmVxX3MzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCi0gIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAotICBpbnQzMl90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZkdXBzX2xhbmVxX2kzMigoaW50OHgxNl90KV9fcmV2MCwgX19wMSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZkdXBkX2xhbmVxX3M2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCi0gIGludDY0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdmR1cGRfbGFuZXFfaTY0KChpbnQ4eDE2X3QpX19zMCwgX19wMSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2ZHVwZF9sYW5lcV9zNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDY0eDJfdCBfX3MwID0gX19wMDsgXAotICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKLSAgaW50NjRfdCBfX3JldDsgXAotICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92ZHVwZF9sYW5lcV9pNjQoKGludDh4MTZfdClfX3JldjAsIF9fcDEpOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2ZHVwaF9sYW5lcV9zMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDE2eDhfdCBfX3MwID0gX19wMDsgXAotICBpbnQxNl90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGludDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZkdXBoX2xhbmVxX2kxNigoaW50OHgxNl90KV9fczAsIF9fcDEpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmR1cGhfbGFuZXFfczE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIGludDE2X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoaW50MTZfdCkgX19idWlsdGluX25lb25fdmR1cGhfbGFuZXFfaTE2KChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmR1cF9sYW5lcV9wOChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTh4MTZfdCBfX3MwID0gX19wMDsgXAotICBwb2x5OHg4X3QgX19yZXQ7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZkdXBfbGFuZXFfcDgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHk4eDE2X3QgX19zMCA9IF9fcDA7IFwKLSAgcG9seTh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBwb2x5OHg4X3QgX19yZXQ7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2ZHVwX2xhbmVxX3A2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTY0eDJfdCBfX3MwID0gX19wMDsgXAotICBwb2x5NjR4MV90IF9fcmV0OyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgX19wMSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2ZHVwX2xhbmVxX3A2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTY0eDJfdCBfX3MwID0gX19wMDsgXAotICBwb2x5NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCi0gIHBvbHk2NHgxX3QgX19yZXQ7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgX19wMSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZkdXBfbGFuZXFfcDE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBwb2x5MTZ4OF90IF9fczAgPSBfX3AwOyBcCi0gIHBvbHkxNng0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZkdXBfbGFuZXFfcDE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBwb2x5MTZ4OF90IF9fczAgPSBfX3AwOyBcCi0gIHBvbHkxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgcG9seTE2eDRfdCBfX3JldDsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxKTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZkdXBxX2xhbmVxX3A4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBwb2x5OHgxNl90IF9fczAgPSBfX3AwOyBcCi0gIHBvbHk4eDE2X3QgX19yZXQ7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZkdXBxX2xhbmVxX3A4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBwb2x5OHgxNl90IF9fczAgPSBfX3AwOyBcCi0gIHBvbHk4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgcG9seTh4MTZfdCBfX3JldDsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxKTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZkdXBxX2xhbmVxX3A2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTY0eDJfdCBfX3MwID0gX19wMDsgXAotICBwb2x5NjR4Ml90IF9fcmV0OyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgX19wMSwgX19wMSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2ZHVwcV9sYW5lcV9wNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHk2NHgyX3QgX19zMCA9IF9fcDA7IFwKLSAgcG9seTY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAotICBwb2x5NjR4Ml90IF9fcmV0OyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIF9fcDEsIF9fcDEpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmR1cHFfbGFuZXFfcDE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBwb2x5MTZ4OF90IF9fczAgPSBfX3AwOyBcCi0gIHBvbHkxNng4X3QgX19yZXQ7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZkdXBxX2xhbmVxX3AxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTE2eDhfdCBfX3MwID0gX19wMDsgXAotICBwb2x5MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIHBvbHkxNng4X3QgX19yZXQ7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2ZHVwcV9sYW5lcV91OChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDh4MTZfdCBfX3MwID0gX19wMDsgXAotICB1aW50OHgxNl90IF9fcmV0OyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2ZHVwcV9sYW5lcV91OChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDh4MTZfdCBfX3MwID0gX19wMDsgXAotICB1aW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIHVpbnQ4eDE2X3QgX19yZXQ7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2ZHVwcV9sYW5lcV91MzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDMyeDRfdCBfX3JldDsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmR1cHFfbGFuZXFfdTMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKLSAgdWludDMyeDRfdCBfX3JldDsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxKTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZkdXBxX2xhbmVxX3U2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDY0eDJfdCBfX3MwID0gX19wMDsgXAotICB1aW50NjR4Ml90IF9fcmV0OyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgX19wMSwgX19wMSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2ZHVwcV9sYW5lcV91NjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAotICB1aW50NjR4Ml90IF9fcmV0OyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIF9fcDEsIF9fcDEpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmR1cHFfbGFuZXFfdTE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQxNng4X3QgX19yZXQ7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZkdXBxX2xhbmVxX3UxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDE2eDhfdCBfX3MwID0gX19wMDsgXAotICB1aW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIHVpbnQxNng4X3QgX19yZXQ7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2ZHVwcV9sYW5lcV9zOChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50OHgxNl90IF9fczAgPSBfX3AwOyBcCi0gIGludDh4MTZfdCBfX3JldDsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmR1cHFfbGFuZXFfczgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDh4MTZfdCBfX3MwID0gX19wMDsgXAotICBpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgaW50OHgxNl90IF9fcmV0OyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmR1cHFfbGFuZXFfZjY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDY0eDJfdCBfX3MwID0gX19wMDsgXAotICBmbG9hdDY0eDJfdCBfX3JldDsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIF9fcDEsIF9fcDEpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmR1cHFfbGFuZXFfZjY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDY0eDJfdCBfX3MwID0gX19wMDsgXAotICBmbG9hdDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAotICBmbG9hdDY0eDJfdCBfX3JldDsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCBfX3AxLCBfX3AxKTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZkdXBxX2xhbmVxX2YzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQzMng0X3QgX19zMCA9IF9fcDA7IFwKLSAgZmxvYXQzMng0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZkdXBxX2xhbmVxX2YzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQzMng0X3QgX19zMCA9IF9fcDA7IFwKLSAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKLSAgZmxvYXQzMng0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgX19wMSwgX19wMSwgX19wMSwgX19wMSk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2ZHVwcV9sYW5lcV9mMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0MTZ4OF90IF9fczAgPSBfX3AwOyBcCi0gIGZsb2F0MTZ4OF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2ZHVwcV9sYW5lcV9mMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0MTZ4OF90IF9fczAgPSBfX3AwOyBcCi0gIGZsb2F0MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIGZsb2F0MTZ4OF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmR1cHFfbGFuZXFfczMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MzJ4NF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgX19wMSwgX19wMSwgX19wMSwgX19wMSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2ZHVwcV9sYW5lcV9zMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAotICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKLSAgaW50MzJ4NF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmR1cHFfbGFuZXFfczY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKLSAgaW50NjR4Ml90IF9fcmV0OyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgX19wMSwgX19wMSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2ZHVwcV9sYW5lcV9zNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDY0eDJfdCBfX3MwID0gX19wMDsgXAotICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKLSAgaW50NjR4Ml90IF9fcmV0OyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIF9fcDEsIF9fcDEpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmR1cHFfbGFuZXFfczE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MTZ4OF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2ZHVwcV9sYW5lcV9zMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDE2eDhfdCBfX3MwID0gX19wMDsgXAotICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgaW50MTZ4OF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmR1cF9sYW5lcV91OChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDh4MTZfdCBfX3MwID0gX19wMDsgXAotICB1aW50OHg4X3QgX19yZXQ7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZkdXBfbGFuZXFfdTgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ4eDE2X3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICB1aW50OHg4X3QgX19yZXQ7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2ZHVwX2xhbmVxX3UzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDMyeDRfdCBfX3MwID0gX19wMDsgXAotICB1aW50MzJ4Ml90IF9fcmV0OyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgX19wMSwgX19wMSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2ZHVwX2xhbmVxX3UzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDMyeDRfdCBfX3MwID0gX19wMDsgXAotICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCi0gIHVpbnQzMngyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgX19wMSwgX19wMSk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2ZHVwX2xhbmVxX3U2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDY0eDJfdCBfX3MwID0gX19wMDsgXAotICB1aW50NjR4MV90IF9fcmV0OyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgX19wMSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2ZHVwX2xhbmVxX3U2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDY0eDJfdCBfX3MwID0gX19wMDsgXAotICB1aW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCi0gIHVpbnQ2NHgxX3QgX19yZXQ7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgX19wMSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZkdXBfbGFuZXFfdTE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQxNng0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZkdXBfbGFuZXFfdTE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgdWludDE2eDRfdCBfX3JldDsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxKTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZkdXBfbGFuZXFfczgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDh4MTZfdCBfX3MwID0gX19wMDsgXAotICBpbnQ4eDhfdCBfX3JldDsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmR1cF9sYW5lcV9zOChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50OHgxNl90IF9fczAgPSBfX3AwOyBcCi0gIGludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBpbnQ4eDhfdCBfX3JldDsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxKTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZkdXBfbGFuZXFfZjY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDY0eDJfdCBfX3MwID0gX19wMDsgXAotICBmbG9hdDY0eDFfdCBfX3JldDsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIF9fcDEpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmR1cF9sYW5lcV9mNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0NjR4Ml90IF9fczAgPSBfX3AwOyBcCi0gIGZsb2F0NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCi0gIGZsb2F0NjR4MV90IF9fcmV0OyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIF9fcDEpOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2ZHVwX2xhbmVxX2YzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQzMng0X3QgX19zMCA9IF9fcDA7IFwKLSAgZmxvYXQzMngyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCBfX3AxLCBfX3AxKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZkdXBfbGFuZXFfZjMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDMyeDRfdCBfX3MwID0gX19wMDsgXAotICBmbG9hdDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAotICBmbG9hdDMyeDJfdCBfX3JldDsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCBfX3AxLCBfX3AxKTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZkdXBfbGFuZXFfZjE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDE2eDhfdCBfX3MwID0gX19wMDsgXAotICBmbG9hdDE2eDRfdCBfX3JldDsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmR1cF9sYW5lcV9mMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0MTZ4OF90IF9fczAgPSBfX3AwOyBcCi0gIGZsb2F0MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIGZsb2F0MTZ4NF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmR1cF9sYW5lcV9zMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAotICBpbnQzMngyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCBfX3AxLCBfX3AxKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZkdXBfbGFuZXFfczMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCi0gIGludDMyeDJfdCBfX3JldDsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCBfX3AxLCBfX3AxKTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZkdXBfbGFuZXFfczY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKLSAgaW50NjR4MV90IF9fcmV0OyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgX19wMSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2ZHVwX2xhbmVxX3M2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCi0gIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAotICBpbnQ2NHgxX3QgX19yZXQ7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgX19wMSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZkdXBfbGFuZXFfczE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MTZ4NF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgX19wMSwgX19wMSwgX19wMSwgX19wMSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2ZHVwX2xhbmVxX3MxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCi0gIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBpbnQxNng0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgX19wMSwgX19wMSwgX19wMSwgX19wMSk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBwb2x5NjR4MV90IHZkdXBfbl9wNjQocG9seTY0X3QgX19wMCkgewotICBwb2x5NjR4MV90IF9fcmV0OwotICBfX3JldCA9IChwb2x5NjR4MV90KSB7X19wMH07Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHBvbHk2NHgxX3QgdmR1cF9uX3A2NChwb2x5NjRfdCBfX3AwKSB7Ci0gIHBvbHk2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHBvbHk2NHgxX3QpIHtfX3AwfTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBwb2x5NjR4Ml90IHZkdXBxX25fcDY0KHBvbHk2NF90IF9fcDApIHsKLSAgcG9seTY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSAocG9seTY0eDJfdCkge19fcDAsIF9fcDB9OwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBwb2x5NjR4Ml90IHZkdXBxX25fcDY0KHBvbHk2NF90IF9fcDApIHsKLSAgcG9seTY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSAocG9seTY0eDJfdCkge19fcDAsIF9fcDB9OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgZmxvYXQ2NHgyX3QgdmR1cHFfbl9mNjQoZmxvYXQ2NF90IF9fcDApIHsKLSAgZmxvYXQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0NjR4Ml90KSB7X19wMCwgX19wMH07Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGZsb2F0NjR4Ml90IHZkdXBxX25fZjY0KGZsb2F0NjRfdCBfX3AwKSB7Ci0gIGZsb2F0NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDY0eDJfdCkge19fcDAsIF9fcDB9OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgZmxvYXQ2NHgxX3QgdmR1cF9uX2Y2NChmbG9hdDY0X3QgX19wMCkgewotICBmbG9hdDY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpIHtfX3AwfTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgZmxvYXQ2NHgxX3QgdmR1cF9uX2Y2NChmbG9hdDY0X3QgX19wMCkgewotICBmbG9hdDY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpIHtfX3AwfTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2ZXh0X3A2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTY0eDFfdCBfX3MwID0gX19wMDsgXAotICBwb2x5NjR4MV90IF9fczEgPSBfX3AxOyBcCi0gIHBvbHk2NHgxX3QgX19yZXQ7IFwKLSAgX19yZXQgPSAocG9seTY0eDFfdCkgX19idWlsdGluX25lb25fdmV4dF92KChpbnQ4eDhfdClfX3MwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgNik7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2ZXh0X3A2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTY0eDFfdCBfX3MwID0gX19wMDsgXAotICBwb2x5NjR4MV90IF9fczEgPSBfX3AxOyBcCi0gIHBvbHk2NHgxX3QgX19yZXQ7IFwKLSAgX19yZXQgPSAocG9seTY0eDFfdCkgX19idWlsdGluX25lb25fdmV4dF92KChpbnQ4eDhfdClfX3MwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgNik7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZleHRxX3A2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTY0eDJfdCBfX3MwID0gX19wMDsgXAotICBwb2x5NjR4Ml90IF9fczEgPSBfX3AxOyBcCi0gIHBvbHk2NHgyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSAocG9seTY0eDJfdCkgX19idWlsdGluX25lb25fdmV4dHFfdigoaW50OHgxNl90KV9fczAsIChpbnQ4eDE2X3QpX19zMSwgX19wMiwgMzgpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmV4dHFfcDY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBwb2x5NjR4Ml90IF9fczAgPSBfX3AwOyBcCi0gIHBvbHk2NHgyX3QgX19zMSA9IF9fcDE7IFwKLSAgcG9seTY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAotICBwb2x5NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCi0gIHBvbHk2NHgyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSAocG9seTY0eDJfdCkgX19idWlsdGluX25lb25fdmV4dHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIF9fcDIsIDM4KTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZleHRxX2Y2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKLSAgZmxvYXQ2NHgyX3QgX19zMSA9IF9fcDE7IFwKLSAgZmxvYXQ2NHgyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZleHRxX3YoKGludDh4MTZfdClfX3MwLCAoaW50OHgxNl90KV9fczEsIF9fcDIsIDQyKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZleHRxX2Y2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKLSAgZmxvYXQ2NHgyX3QgX19zMSA9IF9fcDE7IFwKLSAgZmxvYXQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKLSAgZmxvYXQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMSwgMCk7IFwKLSAgZmxvYXQ2NHgyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZleHRxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCBfX3AyLCA0Mik7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2ZXh0X2Y2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQ2NHgxX3QgX19zMCA9IF9fcDA7IFwKLSAgZmxvYXQ2NHgxX3QgX19zMSA9IF9fcDE7IFwKLSAgZmxvYXQ2NHgxX3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZleHRfdigoaW50OHg4X3QpX19zMCwgKGludDh4OF90KV9fczEsIF9fcDIsIDEwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZleHRfZjY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDY0eDFfdCBfX3MwID0gX19wMDsgXAotICBmbG9hdDY0eDFfdCBfX3MxID0gX19wMTsgXAotICBmbG9hdDY0eDFfdCBfX3JldDsgXAotICBfX3JldCA9IChmbG9hdDY0eDFfdCkgX19idWlsdGluX25lb25fdmV4dF92KChpbnQ4eDhfdClfX3MwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgMTApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBmbG9hdDY0eDJfdCB2Zm1hcV9mNjQoZmxvYXQ2NHgyX3QgX19wMCwgZmxvYXQ2NHgyX3QgX19wMSwgZmxvYXQ2NHgyX3QgX19wMikgewotICBmbG9hdDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZmbWFxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIChpbnQ4eDE2X3QpX19wMiwgNDIpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBmbG9hdDY0eDJfdCB2Zm1hcV9mNjQoZmxvYXQ2NHgyX3QgX19wMCwgZmxvYXQ2NHgyX3QgX19wMSwgZmxvYXQ2NHgyX3QgX19wMikgewotICBmbG9hdDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgZmxvYXQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7Ci0gIGZsb2F0NjR4Ml90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDEsIDApOwotICBmbG9hdDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZmbWFxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAoaW50OHgxNl90KV9fcmV2MiwgNDIpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLV9fYWkgZmxvYXQ2NHgyX3QgX19ub3N3YXBfdmZtYXFfZjY0KGZsb2F0NjR4Ml90IF9fcDAsIGZsb2F0NjR4Ml90IF9fcDEsIGZsb2F0NjR4Ml90IF9fcDIpIHsKLSAgZmxvYXQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92Zm1hcV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAoaW50OHgxNl90KV9fcDIsIDQyKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBmbG9hdDY0eDFfdCB2Zm1hX2Y2NChmbG9hdDY0eDFfdCBfX3AwLCBmbG9hdDY0eDFfdCBfX3AxLCBmbG9hdDY0eDFfdCBfX3AyKSB7Ci0gIGZsb2F0NjR4MV90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDY0eDFfdCkgX19idWlsdGluX25lb25fdmZtYV92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgKGludDh4OF90KV9fcDIsIDEwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgZmxvYXQ2NHgxX3QgdmZtYV9mNjQoZmxvYXQ2NHgxX3QgX19wMCwgZmxvYXQ2NHgxX3QgX19wMSwgZmxvYXQ2NHgxX3QgX19wMikgewotICBmbG9hdDY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZmbWFfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIChpbnQ4eDhfdClfX3AyLCAxMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmZtYWRfbGFuZV9mNjQoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0NjRfdCBfX3MwID0gX19wMDsgXAotICBmbG9hdDY0X3QgX19zMSA9IF9fcDE7IFwKLSAgZmxvYXQ2NHgxX3QgX19zMiA9IF9fcDI7IFwKLSAgZmxvYXQ2NF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGZsb2F0NjRfdCkgX19idWlsdGluX25lb25fdmZtYWRfbGFuZV9mNjQoX19zMCwgX19zMSwgKGludDh4OF90KV9fczIsIF9fcDMpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmZtYWRfbGFuZV9mNjQoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0NjRfdCBfX3MwID0gX19wMDsgXAotICBmbG9hdDY0X3QgX19zMSA9IF9fcDE7IFwKLSAgZmxvYXQ2NHgxX3QgX19zMiA9IF9fcDI7IFwKLSAgZmxvYXQ2NF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGZsb2F0NjRfdCkgX19idWlsdGluX25lb25fdmZtYWRfbGFuZV9mNjQoX19zMCwgX19zMSwgKGludDh4OF90KV9fczIsIF9fcDMpOyBcCi0gIF9fcmV0OyBcCi19KQotI2RlZmluZSBfX25vc3dhcF92Zm1hZF9sYW5lX2Y2NChfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQ2NF90IF9fczAgPSBfX3AwOyBcCi0gIGZsb2F0NjRfdCBfX3MxID0gX19wMTsgXAotICBmbG9hdDY0eDFfdCBfX3MyID0gX19wMjsgXAotICBmbG9hdDY0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoZmxvYXQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Zm1hZF9sYW5lX2Y2NChfX3MwLCBfX3MxLCAoaW50OHg4X3QpX19zMiwgX19wMyk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZmbWFzX2xhbmVfZjMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDMyX3QgX19zMCA9IF9fcDA7IFwKLSAgZmxvYXQzMl90IF9fczEgPSBfX3AxOyBcCi0gIGZsb2F0MzJ4Ml90IF9fczIgPSBfX3AyOyBcCi0gIGZsb2F0MzJfdCBfX3JldDsgXAotICBfX3JldCA9IChmbG9hdDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZmbWFzX2xhbmVfZjMyKF9fczAsIF9fczEsIChpbnQ4eDhfdClfX3MyLCBfX3AzKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZmbWFzX2xhbmVfZjMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDMyX3QgX19zMCA9IF9fcDA7IFwKLSAgZmxvYXQzMl90IF9fczEgPSBfX3AxOyBcCi0gIGZsb2F0MzJ4Ml90IF9fczIgPSBfX3AyOyBcCi0gIGZsb2F0MzJ4Ml90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDEsIDApOyBcCi0gIGZsb2F0MzJfdCBfX3JldDsgXAotICBfX3JldCA9IChmbG9hdDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZmbWFzX2xhbmVfZjMyKF9fczAsIF9fczEsIChpbnQ4eDhfdClfX3JldjIsIF9fcDMpOyBcCi0gIF9fcmV0OyBcCi19KQotI2RlZmluZSBfX25vc3dhcF92Zm1hc19sYW5lX2YzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQzMl90IF9fczAgPSBfX3AwOyBcCi0gIGZsb2F0MzJfdCBfX3MxID0gX19wMTsgXAotICBmbG9hdDMyeDJfdCBfX3MyID0gX19wMjsgXAotICBmbG9hdDMyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoZmxvYXQzMl90KSBfX2J1aWx0aW5fbmVvbl92Zm1hc19sYW5lX2YzMihfX3MwLCBfX3MxLCAoaW50OHg4X3QpX19zMiwgX19wMyk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZmbWFxX2xhbmVfZjY0KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDY0eDJfdCBfX3MwID0gX19wMDsgXAotICBmbG9hdDY0eDJfdCBfX3MxID0gX19wMTsgXAotICBmbG9hdDY0eDFfdCBfX3MyID0gX19wMjsgXAotICBmbG9hdDY0eDJfdCBfX3JldDsgXAotICBfX3JldCA9IChmbG9hdDY0eDJfdCkgX19idWlsdGluX25lb25fdmZtYXFfbGFuZV92KChpbnQ4eDE2X3QpX19zMCwgKGludDh4MTZfdClfX3MxLCAoaW50OHg4X3QpX19zMiwgX19wMywgNDIpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmZtYXFfbGFuZV9mNjQoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0NjR4Ml90IF9fczAgPSBfX3AwOyBcCi0gIGZsb2F0NjR4Ml90IF9fczEgPSBfX3AxOyBcCi0gIGZsb2F0NjR4MV90IF9fczIgPSBfX3AyOyBcCi0gIGZsb2F0NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCi0gIGZsb2F0NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCi0gIGZsb2F0NjR4Ml90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGZsb2F0NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92Zm1hcV9sYW5lX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAoaW50OHg4X3QpX19zMiwgX19wMywgNDIpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNkZWZpbmUgX19ub3N3YXBfdmZtYXFfbGFuZV9mNjQoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0NjR4Ml90IF9fczAgPSBfX3AwOyBcCi0gIGZsb2F0NjR4Ml90IF9fczEgPSBfX3AxOyBcCi0gIGZsb2F0NjR4MV90IF9fczIgPSBfX3AyOyBcCi0gIGZsb2F0NjR4Ml90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGZsb2F0NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92Zm1hcV9sYW5lX3YoKGludDh4MTZfdClfX3MwLCAoaW50OHgxNl90KV9fczEsIChpbnQ4eDhfdClfX3MyLCBfX3AzLCA0Mik7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZmbWFxX2xhbmVfZjMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDMyeDRfdCBfX3MwID0gX19wMDsgXAotICBmbG9hdDMyeDRfdCBfX3MxID0gX19wMTsgXAotICBmbG9hdDMyeDJfdCBfX3MyID0gX19wMjsgXAotICBmbG9hdDMyeDRfdCBfX3JldDsgXAotICBfX3JldCA9IChmbG9hdDMyeDRfdCkgX19idWlsdGluX25lb25fdmZtYXFfbGFuZV92KChpbnQ4eDE2X3QpX19zMCwgKGludDh4MTZfdClfX3MxLCAoaW50OHg4X3QpX19zMiwgX19wMywgNDEpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmZtYXFfbGFuZV9mMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0MzJ4NF90IF9fczAgPSBfX3AwOyBcCi0gIGZsb2F0MzJ4NF90IF9fczEgPSBfX3AxOyBcCi0gIGZsb2F0MzJ4Ml90IF9fczIgPSBfX3AyOyBcCi0gIGZsb2F0MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCi0gIGZsb2F0MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCi0gIGZsb2F0MzJ4Ml90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDEsIDApOyBcCi0gIGZsb2F0MzJ4NF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGZsb2F0MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92Zm1hcV9sYW5lX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAoaW50OHg4X3QpX19yZXYyLCBfX3AzLCA0MSk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2RlZmluZSBfX25vc3dhcF92Zm1hcV9sYW5lX2YzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQzMng0X3QgX19zMCA9IF9fcDA7IFwKLSAgZmxvYXQzMng0X3QgX19zMSA9IF9fcDE7IFwKLSAgZmxvYXQzMngyX3QgX19zMiA9IF9fcDI7IFwKLSAgZmxvYXQzMng0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoZmxvYXQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZmbWFxX2xhbmVfdigoaW50OHgxNl90KV9fczAsIChpbnQ4eDE2X3QpX19zMSwgKGludDh4OF90KV9fczIsIF9fcDMsIDQxKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmZtYV9sYW5lX2Y2NChfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQ2NHgxX3QgX19zMCA9IF9fcDA7IFwKLSAgZmxvYXQ2NHgxX3QgX19zMSA9IF9fcDE7IFwKLSAgZmxvYXQ2NHgxX3QgX19zMiA9IF9fcDI7IFwKLSAgZmxvYXQ2NHgxX3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZmbWFfbGFuZV92KChpbnQ4eDhfdClfX3MwLCAoaW50OHg4X3QpX19zMSwgKGludDh4OF90KV9fczIsIF9fcDMsIDEwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZmbWFfbGFuZV9mNjQoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0NjR4MV90IF9fczAgPSBfX3AwOyBcCi0gIGZsb2F0NjR4MV90IF9fczEgPSBfX3AxOyBcCi0gIGZsb2F0NjR4MV90IF9fczIgPSBfX3AyOyBcCi0gIGZsb2F0NjR4MV90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGZsb2F0NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92Zm1hX2xhbmVfdigoaW50OHg4X3QpX19zMCwgKGludDh4OF90KV9fczEsIChpbnQ4eDhfdClfX3MyLCBfX3AzLCAxMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZGVmaW5lIF9fbm9zd2FwX3ZmbWFfbGFuZV9mNjQoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0NjR4MV90IF9fczAgPSBfX3AwOyBcCi0gIGZsb2F0NjR4MV90IF9fczEgPSBfX3AxOyBcCi0gIGZsb2F0NjR4MV90IF9fczIgPSBfX3AyOyBcCi0gIGZsb2F0NjR4MV90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGZsb2F0NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92Zm1hX2xhbmVfdigoaW50OHg4X3QpX19zMCwgKGludDh4OF90KV9fczEsIChpbnQ4eDhfdClfX3MyLCBfX3AzLCAxMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZmbWFfbGFuZV9mMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0MzJ4Ml90IF9fczAgPSBfX3AwOyBcCi0gIGZsb2F0MzJ4Ml90IF9fczEgPSBfX3AxOyBcCi0gIGZsb2F0MzJ4Ml90IF9fczIgPSBfX3AyOyBcCi0gIGZsb2F0MzJ4Ml90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92Zm1hX2xhbmVfdigoaW50OHg4X3QpX19zMCwgKGludDh4OF90KV9fczEsIChpbnQ4eDhfdClfX3MyLCBfX3AzLCA5KTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZmbWFfbGFuZV9mMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0MzJ4Ml90IF9fczAgPSBfX3AwOyBcCi0gIGZsb2F0MzJ4Ml90IF9fczEgPSBfX3AxOyBcCi0gIGZsb2F0MzJ4Ml90IF9fczIgPSBfX3AyOyBcCi0gIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCi0gIGZsb2F0MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCi0gIGZsb2F0MzJ4Ml90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDEsIDApOyBcCi0gIGZsb2F0MzJ4Ml90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92Zm1hX2xhbmVfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAoaW50OHg4X3QpX19yZXYyLCBfX3AzLCA5KTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZGVmaW5lIF9fbm9zd2FwX3ZmbWFfbGFuZV9mMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0MzJ4Ml90IF9fczAgPSBfX3AwOyBcCi0gIGZsb2F0MzJ4Ml90IF9fczEgPSBfX3AxOyBcCi0gIGZsb2F0MzJ4Ml90IF9fczIgPSBfX3AyOyBcCi0gIGZsb2F0MzJ4Ml90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92Zm1hX2xhbmVfdigoaW50OHg4X3QpX19zMCwgKGludDh4OF90KV9fczEsIChpbnQ4eDhfdClfX3MyLCBfX3AzLCA5KTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmZtYWRfbGFuZXFfZjY0KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDY0X3QgX19zMCA9IF9fcDA7IFwKLSAgZmxvYXQ2NF90IF9fczEgPSBfX3AxOyBcCi0gIGZsb2F0NjR4Ml90IF9fczIgPSBfX3AyOyBcCi0gIGZsb2F0NjRfdCBfX3JldDsgXAotICBfX3JldCA9IChmbG9hdDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZmbWFkX2xhbmVxX2Y2NChfX3MwLCBfX3MxLCAoaW50OHgxNl90KV9fczIsIF9fcDMpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmZtYWRfbGFuZXFfZjY0KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDY0X3QgX19zMCA9IF9fcDA7IFwKLSAgZmxvYXQ2NF90IF9fczEgPSBfX3AxOyBcCi0gIGZsb2F0NjR4Ml90IF9fczIgPSBfX3AyOyBcCi0gIGZsb2F0NjR4Ml90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDEsIDApOyBcCi0gIGZsb2F0NjRfdCBfX3JldDsgXAotICBfX3JldCA9IChmbG9hdDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZmbWFkX2xhbmVxX2Y2NChfX3MwLCBfX3MxLCAoaW50OHgxNl90KV9fcmV2MiwgX19wMyk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZGVmaW5lIF9fbm9zd2FwX3ZmbWFkX2xhbmVxX2Y2NChfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQ2NF90IF9fczAgPSBfX3AwOyBcCi0gIGZsb2F0NjRfdCBfX3MxID0gX19wMTsgXAotICBmbG9hdDY0eDJfdCBfX3MyID0gX19wMjsgXAotICBmbG9hdDY0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoZmxvYXQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Zm1hZF9sYW5lcV9mNjQoX19zMCwgX19zMSwgKGludDh4MTZfdClfX3MyLCBfX3AzKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmZtYXNfbGFuZXFfZjMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDMyX3QgX19zMCA9IF9fcDA7IFwKLSAgZmxvYXQzMl90IF9fczEgPSBfX3AxOyBcCi0gIGZsb2F0MzJ4NF90IF9fczIgPSBfX3AyOyBcCi0gIGZsb2F0MzJfdCBfX3JldDsgXAotICBfX3JldCA9IChmbG9hdDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZmbWFzX2xhbmVxX2YzMihfX3MwLCBfX3MxLCAoaW50OHgxNl90KV9fczIsIF9fcDMpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmZtYXNfbGFuZXFfZjMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDMyX3QgX19zMCA9IF9fcDA7IFwKLSAgZmxvYXQzMl90IF9fczEgPSBfX3AxOyBcCi0gIGZsb2F0MzJ4NF90IF9fczIgPSBfX3AyOyBcCi0gIGZsb2F0MzJ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDMsIDIsIDEsIDApOyBcCi0gIGZsb2F0MzJfdCBfX3JldDsgXAotICBfX3JldCA9IChmbG9hdDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZmbWFzX2xhbmVxX2YzMihfX3MwLCBfX3MxLCAoaW50OHgxNl90KV9fcmV2MiwgX19wMyk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZGVmaW5lIF9fbm9zd2FwX3ZmbWFzX2xhbmVxX2YzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQzMl90IF9fczAgPSBfX3AwOyBcCi0gIGZsb2F0MzJfdCBfX3MxID0gX19wMTsgXAotICBmbG9hdDMyeDRfdCBfX3MyID0gX19wMjsgXAotICBmbG9hdDMyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoZmxvYXQzMl90KSBfX2J1aWx0aW5fbmVvbl92Zm1hc19sYW5lcV9mMzIoX19zMCwgX19zMSwgKGludDh4MTZfdClfX3MyLCBfX3AzKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmZtYXFfbGFuZXFfZjY0KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDY0eDJfdCBfX3MwID0gX19wMDsgXAotICBmbG9hdDY0eDJfdCBfX3MxID0gX19wMTsgXAotICBmbG9hdDY0eDJfdCBfX3MyID0gX19wMjsgXAotICBmbG9hdDY0eDJfdCBfX3JldDsgXAotICBfX3JldCA9IChmbG9hdDY0eDJfdCkgX19idWlsdGluX25lb25fdmZtYXFfbGFuZXFfdigoaW50OHgxNl90KV9fczAsIChpbnQ4eDE2X3QpX19zMSwgKGludDh4MTZfdClfX3MyLCBfX3AzLCA0Mik7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2Zm1hcV9sYW5lcV9mNjQoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0NjR4Ml90IF9fczAgPSBfX3AwOyBcCi0gIGZsb2F0NjR4Ml90IF9fczEgPSBfX3AxOyBcCi0gIGZsb2F0NjR4Ml90IF9fczIgPSBfX3AyOyBcCi0gIGZsb2F0NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCi0gIGZsb2F0NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCi0gIGZsb2F0NjR4Ml90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDEsIDApOyBcCi0gIGZsb2F0NjR4Ml90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGZsb2F0NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92Zm1hcV9sYW5lcV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgKGludDh4MTZfdClfX3JldjIsIF9fcDMsIDQyKTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZGVmaW5lIF9fbm9zd2FwX3ZmbWFxX2xhbmVxX2Y2NChfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKLSAgZmxvYXQ2NHgyX3QgX19zMSA9IF9fcDE7IFwKLSAgZmxvYXQ2NHgyX3QgX19zMiA9IF9fcDI7IFwKLSAgZmxvYXQ2NHgyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZmbWFxX2xhbmVxX3YoKGludDh4MTZfdClfX3MwLCAoaW50OHgxNl90KV9fczEsIChpbnQ4eDE2X3QpX19zMiwgX19wMywgNDIpOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2Zm1hcV9sYW5lcV9mMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0MzJ4NF90IF9fczAgPSBfX3AwOyBcCi0gIGZsb2F0MzJ4NF90IF9fczEgPSBfX3AxOyBcCi0gIGZsb2F0MzJ4NF90IF9fczIgPSBfX3AyOyBcCi0gIGZsb2F0MzJ4NF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGZsb2F0MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92Zm1hcV9sYW5lcV92KChpbnQ4eDE2X3QpX19zMCwgKGludDh4MTZfdClfX3MxLCAoaW50OHgxNl90KV9fczIsIF9fcDMsIDQxKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZmbWFxX2xhbmVxX2YzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQzMng0X3QgX19zMCA9IF9fcDA7IFwKLSAgZmxvYXQzMng0X3QgX19zMSA9IF9fcDE7IFwKLSAgZmxvYXQzMng0X3QgX19zMiA9IF9fcDI7IFwKLSAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKLSAgZmxvYXQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKLSAgZmxvYXQzMng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgMywgMiwgMSwgMCk7IFwKLSAgZmxvYXQzMng0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoZmxvYXQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZmbWFxX2xhbmVxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAoaW50OHgxNl90KV9fcmV2MiwgX19wMywgNDEpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNkZWZpbmUgX19ub3N3YXBfdmZtYXFfbGFuZXFfZjMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDMyeDRfdCBfX3MwID0gX19wMDsgXAotICBmbG9hdDMyeDRfdCBfX3MxID0gX19wMTsgXAotICBmbG9hdDMyeDRfdCBfX3MyID0gX19wMjsgXAotICBmbG9hdDMyeDRfdCBfX3JldDsgXAotICBfX3JldCA9IChmbG9hdDMyeDRfdCkgX19idWlsdGluX25lb25fdmZtYXFfbGFuZXFfdigoaW50OHgxNl90KV9fczAsIChpbnQ4eDE2X3QpX19zMSwgKGludDh4MTZfdClfX3MyLCBfX3AzLCA0MSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZmbWFfbGFuZXFfZjY0KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDY0eDFfdCBfX3MwID0gX19wMDsgXAotICBmbG9hdDY0eDFfdCBfX3MxID0gX19wMTsgXAotICBmbG9hdDY0eDJfdCBfX3MyID0gX19wMjsgXAotICBmbG9hdDY0eDFfdCBfX3JldDsgXAotICBfX3JldCA9IChmbG9hdDY0eDFfdCkgX19idWlsdGluX25lb25fdmZtYV9sYW5lcV92KChpbnQ4eDhfdClfX3MwLCAoaW50OHg4X3QpX19zMSwgKGludDh4MTZfdClfX3MyLCBfX3AzLCAxMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2Zm1hX2xhbmVxX2Y2NChfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQ2NHgxX3QgX19zMCA9IF9fcDA7IFwKLSAgZmxvYXQ2NHgxX3QgX19zMSA9IF9fcDE7IFwKLSAgZmxvYXQ2NHgyX3QgX19zMiA9IF9fcDI7IFwKLSAgZmxvYXQ2NHgyX3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgMSwgMCk7IFwKLSAgZmxvYXQ2NHgxX3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZmbWFfbGFuZXFfdigoaW50OHg4X3QpX19zMCwgKGludDh4OF90KV9fczEsIChpbnQ4eDE2X3QpX19yZXYyLCBfX3AzLCAxMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZGVmaW5lIF9fbm9zd2FwX3ZmbWFfbGFuZXFfZjY0KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDY0eDFfdCBfX3MwID0gX19wMDsgXAotICBmbG9hdDY0eDFfdCBfX3MxID0gX19wMTsgXAotICBmbG9hdDY0eDJfdCBfX3MyID0gX19wMjsgXAotICBmbG9hdDY0eDFfdCBfX3JldDsgXAotICBfX3JldCA9IChmbG9hdDY0eDFfdCkgX19idWlsdGluX25lb25fdmZtYV9sYW5lcV92KChpbnQ4eDhfdClfX3MwLCAoaW50OHg4X3QpX19zMSwgKGludDh4MTZfdClfX3MyLCBfX3AzLCAxMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZmbWFfbGFuZXFfZjMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDMyeDJfdCBfX3MwID0gX19wMDsgXAotICBmbG9hdDMyeDJfdCBfX3MxID0gX19wMTsgXAotICBmbG9hdDMyeDRfdCBfX3MyID0gX19wMjsgXAotICBmbG9hdDMyeDJfdCBfX3JldDsgXAotICBfX3JldCA9IChmbG9hdDMyeDJfdCkgX19idWlsdGluX25lb25fdmZtYV9sYW5lcV92KChpbnQ4eDhfdClfX3MwLCAoaW50OHg4X3QpX19zMSwgKGludDh4MTZfdClfX3MyLCBfX3AzLCA5KTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZmbWFfbGFuZXFfZjMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDMyeDJfdCBfX3MwID0gX19wMDsgXAotICBmbG9hdDMyeDJfdCBfX3MxID0gX19wMTsgXAotICBmbG9hdDMyeDRfdCBfX3MyID0gX19wMjsgXAotICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAotICBmbG9hdDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxLCAwKTsgXAotICBmbG9hdDMyeDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCAzLCAyLCAxLCAwKTsgXAotICBmbG9hdDMyeDJfdCBfX3JldDsgXAotICBfX3JldCA9IChmbG9hdDMyeDJfdCkgX19idWlsdGluX25lb25fdmZtYV9sYW5lcV92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIChpbnQ4eDE2X3QpX19yZXYyLCBfX3AzLCA5KTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZGVmaW5lIF9fbm9zd2FwX3ZmbWFfbGFuZXFfZjMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDMyeDJfdCBfX3MwID0gX19wMDsgXAotICBmbG9hdDMyeDJfdCBfX3MxID0gX19wMTsgXAotICBmbG9hdDMyeDRfdCBfX3MyID0gX19wMjsgXAotICBmbG9hdDMyeDJfdCBfX3JldDsgXAotICBfX3JldCA9IChmbG9hdDMyeDJfdCkgX19idWlsdGluX25lb25fdmZtYV9sYW5lcV92KChpbnQ4eDhfdClfX3MwLCAoaW50OHg4X3QpX19zMSwgKGludDh4MTZfdClfX3MyLCBfX3AzLCA5KTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgZmxvYXQ2NHgyX3QgdmZtYXFfbl9mNjQoZmxvYXQ2NHgyX3QgX19wMCwgZmxvYXQ2NHgyX3QgX19wMSwgZmxvYXQ2NF90IF9fcDIpIHsKLSAgZmxvYXQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gdmZtYXFfZjY0KF9fcDAsIF9fcDEsIChmbG9hdDY0eDJfdCkge19fcDIsIF9fcDJ9KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgZmxvYXQ2NHgyX3QgdmZtYXFfbl9mNjQoZmxvYXQ2NHgyX3QgX19wMCwgZmxvYXQ2NHgyX3QgX19wMSwgZmxvYXQ2NF90IF9fcDIpIHsKLSAgZmxvYXQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIGZsb2F0NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOwotICBmbG9hdDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSBfX25vc3dhcF92Zm1hcV9mNjQoX19yZXYwLCBfX3JldjEsIChmbG9hdDY0eDJfdCkge19fcDIsIF9fcDJ9KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGZsb2F0MzJ4NF90IHZmbWFxX25fZjMyKGZsb2F0MzJ4NF90IF9fcDAsIGZsb2F0MzJ4NF90IF9fcDEsIGZsb2F0MzJfdCBfX3AyKSB7Ci0gIGZsb2F0MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IHZmbWFxX2YzMihfX3AwLCBfX3AxLCAoZmxvYXQzMng0X3QpIHtfX3AyLCBfX3AyLCBfX3AyLCBfX3AyfSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGZsb2F0MzJ4NF90IHZmbWFxX25fZjMyKGZsb2F0MzJ4NF90IF9fcDAsIGZsb2F0MzJ4NF90IF9fcDEsIGZsb2F0MzJfdCBfX3AyKSB7Ci0gIGZsb2F0MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICBmbG9hdDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKLSAgZmxvYXQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19ub3N3YXBfdmZtYXFfZjMyKF9fcmV2MCwgX19yZXYxLCAoZmxvYXQzMng0X3QpIHtfX3AyLCBfX3AyLCBfX3AyLCBfX3AyfSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBmbG9hdDMyeDJfdCB2Zm1hX25fZjMyKGZsb2F0MzJ4Ml90IF9fcDAsIGZsb2F0MzJ4Ml90IF9fcDEsIGZsb2F0MzJfdCBfX3AyKSB7Ci0gIGZsb2F0MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IHZmbWFfZjMyKF9fcDAsIF9fcDEsIChmbG9hdDMyeDJfdCkge19fcDIsIF9fcDJ9KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgZmxvYXQzMngyX3QgdmZtYV9uX2YzMihmbG9hdDMyeDJfdCBfX3AwLCBmbG9hdDMyeDJfdCBfX3AxLCBmbG9hdDMyX3QgX19wMikgewotICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgZmxvYXQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7Ci0gIGZsb2F0MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IF9fbm9zd2FwX3ZmbWFfZjMyKF9fcmV2MCwgX19yZXYxLCAoZmxvYXQzMngyX3QpIHtfX3AyLCBfX3AyfSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBmbG9hdDY0eDJfdCB2Zm1zcV9mNjQoZmxvYXQ2NHgyX3QgX19wMCwgZmxvYXQ2NHgyX3QgX19wMSwgZmxvYXQ2NHgyX3QgX19wMikgewotICBmbG9hdDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZmbXNxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIChpbnQ4eDE2X3QpX19wMiwgNDIpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBmbG9hdDY0eDJfdCB2Zm1zcV9mNjQoZmxvYXQ2NHgyX3QgX19wMCwgZmxvYXQ2NHgyX3QgX19wMSwgZmxvYXQ2NHgyX3QgX19wMikgewotICBmbG9hdDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgZmxvYXQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7Ci0gIGZsb2F0NjR4Ml90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDEsIDApOwotICBmbG9hdDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZmbXNxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAoaW50OHgxNl90KV9fcmV2MiwgNDIpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLV9fYWkgZmxvYXQ2NHgyX3QgX19ub3N3YXBfdmZtc3FfZjY0KGZsb2F0NjR4Ml90IF9fcDAsIGZsb2F0NjR4Ml90IF9fcDEsIGZsb2F0NjR4Ml90IF9fcDIpIHsKLSAgZmxvYXQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92Zm1zcV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAoaW50OHgxNl90KV9fcDIsIDQyKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBmbG9hdDMyeDRfdCB2Zm1zcV9mMzIoZmxvYXQzMng0X3QgX19wMCwgZmxvYXQzMng0X3QgX19wMSwgZmxvYXQzMng0X3QgX19wMikgewotICBmbG9hdDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZmbXNxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIChpbnQ4eDE2X3QpX19wMiwgNDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBmbG9hdDMyeDRfdCB2Zm1zcV9mMzIoZmxvYXQzMng0X3QgX19wMCwgZmxvYXQzMng0X3QgX19wMSwgZmxvYXQzMng0X3QgX19wMikgewotICBmbG9hdDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgZmxvYXQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7Ci0gIGZsb2F0MzJ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDMsIDIsIDEsIDApOwotICBmbG9hdDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZmbXNxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAoaW50OHgxNl90KV9fcmV2MiwgNDEpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLV9fYWkgZmxvYXQzMng0X3QgX19ub3N3YXBfdmZtc3FfZjMyKGZsb2F0MzJ4NF90IF9fcDAsIGZsb2F0MzJ4NF90IF9fcDEsIGZsb2F0MzJ4NF90IF9fcDIpIHsKLSAgZmxvYXQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92Zm1zcV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAoaW50OHgxNl90KV9fcDIsIDQxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBmbG9hdDY0eDFfdCB2Zm1zX2Y2NChmbG9hdDY0eDFfdCBfX3AwLCBmbG9hdDY0eDFfdCBfX3AxLCBmbG9hdDY0eDFfdCBfX3AyKSB7Ci0gIGZsb2F0NjR4MV90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDY0eDFfdCkgX19idWlsdGluX25lb25fdmZtc192KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgKGludDh4OF90KV9fcDIsIDEwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgZmxvYXQ2NHgxX3QgdmZtc19mNjQoZmxvYXQ2NHgxX3QgX19wMCwgZmxvYXQ2NHgxX3QgX19wMSwgZmxvYXQ2NHgxX3QgX19wMikgewotICBmbG9hdDY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZmbXNfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIChpbnQ4eDhfdClfX3AyLCAxMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgZmxvYXQzMngyX3QgdmZtc19mMzIoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSwgZmxvYXQzMngyX3QgX19wMikgewotICBmbG9hdDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZmbXNfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIChpbnQ4eDhfdClfX3AyLCA5KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgZmxvYXQzMngyX3QgdmZtc19mMzIoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSwgZmxvYXQzMngyX3QgX19wMikgewotICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgZmxvYXQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7Ci0gIGZsb2F0MzJ4Ml90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDEsIDApOwotICBmbG9hdDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZmbXNfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAoaW50OHg4X3QpX19yZXYyLCA5KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci1fX2FpIGZsb2F0MzJ4Ml90IF9fbm9zd2FwX3ZmbXNfZjMyKGZsb2F0MzJ4Ml90IF9fcDAsIGZsb2F0MzJ4Ml90IF9fcDEsIGZsb2F0MzJ4Ml90IF9fcDIpIHsKLSAgZmxvYXQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92Zm1zX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAoaW50OHg4X3QpX19wMiwgOSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmZtc2RfbGFuZV9mNjQoX19wMF84OCwgX19wMV84OCwgX19wMl84OCwgX19wM184OCkgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0NjRfdCBfX3MwXzg4ID0gX19wMF84ODsgXAotICBmbG9hdDY0X3QgX19zMV84OCA9IF9fcDFfODg7IFwKLSAgZmxvYXQ2NHgxX3QgX19zMl84OCA9IF9fcDJfODg7IFwKLSAgZmxvYXQ2NF90IF9fcmV0Xzg4OyBcCi0gIF9fcmV0Xzg4ID0gdmZtYWRfbGFuZV9mNjQoX19zMF84OCwgX19zMV84OCwgLV9fczJfODgsIF9fcDNfODgpOyBcCi0gIF9fcmV0Xzg4OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmZtc2RfbGFuZV9mNjQoX19wMF84OSwgX19wMV84OSwgX19wMl84OSwgX19wM184OSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0NjRfdCBfX3MwXzg5ID0gX19wMF84OTsgXAotICBmbG9hdDY0X3QgX19zMV84OSA9IF9fcDFfODk7IFwKLSAgZmxvYXQ2NHgxX3QgX19zMl84OSA9IF9fcDJfODk7IFwKLSAgZmxvYXQ2NF90IF9fcmV0Xzg5OyBcCi0gIF9fcmV0Xzg5ID0gX19ub3N3YXBfdmZtYWRfbGFuZV9mNjQoX19zMF84OSwgX19zMV84OSwgLV9fczJfODksIF9fcDNfODkpOyBcCi0gIF9fcmV0Xzg5OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2Zm1zc19sYW5lX2YzMihfX3AwXzkwLCBfX3AxXzkwLCBfX3AyXzkwLCBfX3AzXzkwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQzMl90IF9fczBfOTAgPSBfX3AwXzkwOyBcCi0gIGZsb2F0MzJfdCBfX3MxXzkwID0gX19wMV85MDsgXAotICBmbG9hdDMyeDJfdCBfX3MyXzkwID0gX19wMl85MDsgXAotICBmbG9hdDMyX3QgX19yZXRfOTA7IFwKLSAgX19yZXRfOTAgPSB2Zm1hc19sYW5lX2YzMihfX3MwXzkwLCBfX3MxXzkwLCAtX19zMl85MCwgX19wM185MCk7IFwKLSAgX19yZXRfOTA7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2Zm1zc19sYW5lX2YzMihfX3AwXzkxLCBfX3AxXzkxLCBfX3AyXzkxLCBfX3AzXzkxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQzMl90IF9fczBfOTEgPSBfX3AwXzkxOyBcCi0gIGZsb2F0MzJfdCBfX3MxXzkxID0gX19wMV85MTsgXAotICBmbG9hdDMyeDJfdCBfX3MyXzkxID0gX19wMl85MTsgXAotICBmbG9hdDMyeDJfdCBfX3JldjJfOTE7ICBfX3JldjJfOTEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyXzkxLCBfX3MyXzkxLCAxLCAwKTsgXAotICBmbG9hdDMyX3QgX19yZXRfOTE7IFwKLSAgX19yZXRfOTEgPSBfX25vc3dhcF92Zm1hc19sYW5lX2YzMihfX3MwXzkxLCBfX3MxXzkxLCAtX19yZXYyXzkxLCBfX3AzXzkxKTsgXAotICBfX3JldF85MTsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmZtc3FfbGFuZV9mNjQoX19wMF85MiwgX19wMV85MiwgX19wMl85MiwgX19wM185MikgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0NjR4Ml90IF9fczBfOTIgPSBfX3AwXzkyOyBcCi0gIGZsb2F0NjR4Ml90IF9fczFfOTIgPSBfX3AxXzkyOyBcCi0gIGZsb2F0NjR4MV90IF9fczJfOTIgPSBfX3AyXzkyOyBcCi0gIGZsb2F0NjR4Ml90IF9fcmV0XzkyOyBcCi0gIF9fcmV0XzkyID0gdmZtYXFfbGFuZV9mNjQoX19zMF85MiwgX19zMV85MiwgLV9fczJfOTIsIF9fcDNfOTIpOyBcCi0gIF9fcmV0XzkyOyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmZtc3FfbGFuZV9mNjQoX19wMF85MywgX19wMV85MywgX19wMl85MywgX19wM185MykgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0NjR4Ml90IF9fczBfOTMgPSBfX3AwXzkzOyBcCi0gIGZsb2F0NjR4Ml90IF9fczFfOTMgPSBfX3AxXzkzOyBcCi0gIGZsb2F0NjR4MV90IF9fczJfOTMgPSBfX3AyXzkzOyBcCi0gIGZsb2F0NjR4Ml90IF9fcmV2MF85MzsgIF9fcmV2MF85MyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczBfOTMsIF9fczBfOTMsIDEsIDApOyBcCi0gIGZsb2F0NjR4Ml90IF9fcmV2MV85MzsgIF9fcmV2MV85MyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczFfOTMsIF9fczFfOTMsIDEsIDApOyBcCi0gIGZsb2F0NjR4Ml90IF9fcmV0XzkzOyBcCi0gIF9fcmV0XzkzID0gX19ub3N3YXBfdmZtYXFfbGFuZV9mNjQoX19yZXYwXzkzLCBfX3JldjFfOTMsIC1fX3MyXzkzLCBfX3AzXzkzKTsgXAotICBfX3JldF85MyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0XzkzLCBfX3JldF85MywgMSwgMCk7IFwKLSAgX19yZXRfOTM7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZmbXNxX2xhbmVfZjMyKF9fcDBfOTQsIF9fcDFfOTQsIF9fcDJfOTQsIF9fcDNfOTQpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDMyeDRfdCBfX3MwXzk0ID0gX19wMF85NDsgXAotICBmbG9hdDMyeDRfdCBfX3MxXzk0ID0gX19wMV85NDsgXAotICBmbG9hdDMyeDJfdCBfX3MyXzk0ID0gX19wMl85NDsgXAotICBmbG9hdDMyeDRfdCBfX3JldF85NDsgXAotICBfX3JldF85NCA9IHZmbWFxX2xhbmVfZjMyKF9fczBfOTQsIF9fczFfOTQsIC1fX3MyXzk0LCBfX3AzXzk0KTsgXAotICBfX3JldF85NDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZmbXNxX2xhbmVfZjMyKF9fcDBfOTUsIF9fcDFfOTUsIF9fcDJfOTUsIF9fcDNfOTUpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDMyeDRfdCBfX3MwXzk1ID0gX19wMF85NTsgXAotICBmbG9hdDMyeDRfdCBfX3MxXzk1ID0gX19wMV85NTsgXAotICBmbG9hdDMyeDJfdCBfX3MyXzk1ID0gX19wMl85NTsgXAotICBmbG9hdDMyeDRfdCBfX3JldjBfOTU7ICBfX3JldjBfOTUgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwXzk1LCBfX3MwXzk1LCAzLCAyLCAxLCAwKTsgXAotICBmbG9hdDMyeDRfdCBfX3JldjFfOTU7ICBfX3JldjFfOTUgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxXzk1LCBfX3MxXzk1LCAzLCAyLCAxLCAwKTsgXAotICBmbG9hdDMyeDJfdCBfX3JldjJfOTU7ICBfX3JldjJfOTUgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyXzk1LCBfX3MyXzk1LCAxLCAwKTsgXAotICBmbG9hdDMyeDRfdCBfX3JldF85NTsgXAotICBfX3JldF85NSA9IF9fbm9zd2FwX3ZmbWFxX2xhbmVfZjMyKF9fcmV2MF85NSwgX19yZXYxXzk1LCAtX19yZXYyXzk1LCBfX3AzXzk1KTsgXAotICBfX3JldF85NSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0Xzk1LCBfX3JldF85NSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXRfOTU7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZmbXNfbGFuZV9mNjQoX19wMF85NiwgX19wMV85NiwgX19wMl85NiwgX19wM185NikgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0NjR4MV90IF9fczBfOTYgPSBfX3AwXzk2OyBcCi0gIGZsb2F0NjR4MV90IF9fczFfOTYgPSBfX3AxXzk2OyBcCi0gIGZsb2F0NjR4MV90IF9fczJfOTYgPSBfX3AyXzk2OyBcCi0gIGZsb2F0NjR4MV90IF9fcmV0Xzk2OyBcCi0gIF9fcmV0Xzk2ID0gdmZtYV9sYW5lX2Y2NChfX3MwXzk2LCBfX3MxXzk2LCAtX19zMl85NiwgX19wM185Nik7IFwKLSAgX19yZXRfOTY7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2Zm1zX2xhbmVfZjY0KF9fcDBfOTcsIF9fcDFfOTcsIF9fcDJfOTcsIF9fcDNfOTcpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDY0eDFfdCBfX3MwXzk3ID0gX19wMF85NzsgXAotICBmbG9hdDY0eDFfdCBfX3MxXzk3ID0gX19wMV85NzsgXAotICBmbG9hdDY0eDFfdCBfX3MyXzk3ID0gX19wMl85NzsgXAotICBmbG9hdDY0eDFfdCBfX3JldF85NzsgXAotICBfX3JldF85NyA9IF9fbm9zd2FwX3ZmbWFfbGFuZV9mNjQoX19zMF85NywgX19zMV85NywgLV9fczJfOTcsIF9fcDNfOTcpOyBcCi0gIF9fcmV0Xzk3OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2Zm1zX2xhbmVfZjMyKF9fcDBfOTgsIF9fcDFfOTgsIF9fcDJfOTgsIF9fcDNfOTgpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDMyeDJfdCBfX3MwXzk4ID0gX19wMF85ODsgXAotICBmbG9hdDMyeDJfdCBfX3MxXzk4ID0gX19wMV85ODsgXAotICBmbG9hdDMyeDJfdCBfX3MyXzk4ID0gX19wMl85ODsgXAotICBmbG9hdDMyeDJfdCBfX3JldF85ODsgXAotICBfX3JldF85OCA9IHZmbWFfbGFuZV9mMzIoX19zMF85OCwgX19zMV85OCwgLV9fczJfOTgsIF9fcDNfOTgpOyBcCi0gIF9fcmV0Xzk4OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmZtc19sYW5lX2YzMihfX3AwXzk5LCBfX3AxXzk5LCBfX3AyXzk5LCBfX3AzXzk5KSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQzMngyX3QgX19zMF85OSA9IF9fcDBfOTk7IFwKLSAgZmxvYXQzMngyX3QgX19zMV85OSA9IF9fcDFfOTk7IFwKLSAgZmxvYXQzMngyX3QgX19zMl85OSA9IF9fcDJfOTk7IFwKLSAgZmxvYXQzMngyX3QgX19yZXYwXzk5OyAgX19yZXYwXzk5ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMF85OSwgX19zMF85OSwgMSwgMCk7IFwKLSAgZmxvYXQzMngyX3QgX19yZXYxXzk5OyAgX19yZXYxXzk5ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMV85OSwgX19zMV85OSwgMSwgMCk7IFwKLSAgZmxvYXQzMngyX3QgX19yZXYyXzk5OyAgX19yZXYyXzk5ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMl85OSwgX19zMl85OSwgMSwgMCk7IFwKLSAgZmxvYXQzMngyX3QgX19yZXRfOTk7IFwKLSAgX19yZXRfOTkgPSBfX25vc3dhcF92Zm1hX2xhbmVfZjMyKF9fcmV2MF85OSwgX19yZXYxXzk5LCAtX19yZXYyXzk5LCBfX3AzXzk5KTsgXAotICBfX3JldF85OSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0Xzk5LCBfX3JldF85OSwgMSwgMCk7IFwKLSAgX19yZXRfOTk7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZmbXNkX2xhbmVxX2Y2NChfX3AwXzEwMCwgX19wMV8xMDAsIF9fcDJfMTAwLCBfX3AzXzEwMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0NjRfdCBfX3MwXzEwMCA9IF9fcDBfMTAwOyBcCi0gIGZsb2F0NjRfdCBfX3MxXzEwMCA9IF9fcDFfMTAwOyBcCi0gIGZsb2F0NjR4Ml90IF9fczJfMTAwID0gX19wMl8xMDA7IFwKLSAgZmxvYXQ2NF90IF9fcmV0XzEwMDsgXAotICBfX3JldF8xMDAgPSB2Zm1hZF9sYW5lcV9mNjQoX19zMF8xMDAsIF9fczFfMTAwLCAtX19zMl8xMDAsIF9fcDNfMTAwKTsgXAotICBfX3JldF8xMDA7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2Zm1zZF9sYW5lcV9mNjQoX19wMF8xMDEsIF9fcDFfMTAxLCBfX3AyXzEwMSwgX19wM18xMDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDY0X3QgX19zMF8xMDEgPSBfX3AwXzEwMTsgXAotICBmbG9hdDY0X3QgX19zMV8xMDEgPSBfX3AxXzEwMTsgXAotICBmbG9hdDY0eDJfdCBfX3MyXzEwMSA9IF9fcDJfMTAxOyBcCi0gIGZsb2F0NjR4Ml90IF9fcmV2Ml8xMDE7ICBfX3JldjJfMTAxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMl8xMDEsIF9fczJfMTAxLCAxLCAwKTsgXAotICBmbG9hdDY0X3QgX19yZXRfMTAxOyBcCi0gIF9fcmV0XzEwMSA9IF9fbm9zd2FwX3ZmbWFkX2xhbmVxX2Y2NChfX3MwXzEwMSwgX19zMV8xMDEsIC1fX3JldjJfMTAxLCBfX3AzXzEwMSk7IFwKLSAgX19yZXRfMTAxOyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2Zm1zc19sYW5lcV9mMzIoX19wMF8xMDIsIF9fcDFfMTAyLCBfX3AyXzEwMiwgX19wM18xMDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDMyX3QgX19zMF8xMDIgPSBfX3AwXzEwMjsgXAotICBmbG9hdDMyX3QgX19zMV8xMDIgPSBfX3AxXzEwMjsgXAotICBmbG9hdDMyeDRfdCBfX3MyXzEwMiA9IF9fcDJfMTAyOyBcCi0gIGZsb2F0MzJfdCBfX3JldF8xMDI7IFwKLSAgX19yZXRfMTAyID0gdmZtYXNfbGFuZXFfZjMyKF9fczBfMTAyLCBfX3MxXzEwMiwgLV9fczJfMTAyLCBfX3AzXzEwMik7IFwKLSAgX19yZXRfMTAyOyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmZtc3NfbGFuZXFfZjMyKF9fcDBfMTAzLCBfX3AxXzEwMywgX19wMl8xMDMsIF9fcDNfMTAzKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQzMl90IF9fczBfMTAzID0gX19wMF8xMDM7IFwKLSAgZmxvYXQzMl90IF9fczFfMTAzID0gX19wMV8xMDM7IFwKLSAgZmxvYXQzMng0X3QgX19zMl8xMDMgPSBfX3AyXzEwMzsgXAotICBmbG9hdDMyeDRfdCBfX3JldjJfMTAzOyAgX19yZXYyXzEwMyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczJfMTAzLCBfX3MyXzEwMywgMywgMiwgMSwgMCk7IFwKLSAgZmxvYXQzMl90IF9fcmV0XzEwMzsgXAotICBfX3JldF8xMDMgPSBfX25vc3dhcF92Zm1hc19sYW5lcV9mMzIoX19zMF8xMDMsIF9fczFfMTAzLCAtX19yZXYyXzEwMywgX19wM18xMDMpOyBcCi0gIF9fcmV0XzEwMzsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmZtc3FfbGFuZXFfZjY0KF9fcDBfMTA0LCBfX3AxXzEwNCwgX19wMl8xMDQsIF9fcDNfMTA0KSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQ2NHgyX3QgX19zMF8xMDQgPSBfX3AwXzEwNDsgXAotICBmbG9hdDY0eDJfdCBfX3MxXzEwNCA9IF9fcDFfMTA0OyBcCi0gIGZsb2F0NjR4Ml90IF9fczJfMTA0ID0gX19wMl8xMDQ7IFwKLSAgZmxvYXQ2NHgyX3QgX19yZXRfMTA0OyBcCi0gIF9fcmV0XzEwNCA9IHZmbWFxX2xhbmVxX2Y2NChfX3MwXzEwNCwgX19zMV8xMDQsIC1fX3MyXzEwNCwgX19wM18xMDQpOyBcCi0gIF9fcmV0XzEwNDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZmbXNxX2xhbmVxX2Y2NChfX3AwXzEwNSwgX19wMV8xMDUsIF9fcDJfMTA1LCBfX3AzXzEwNSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0NjR4Ml90IF9fczBfMTA1ID0gX19wMF8xMDU7IFwKLSAgZmxvYXQ2NHgyX3QgX19zMV8xMDUgPSBfX3AxXzEwNTsgXAotICBmbG9hdDY0eDJfdCBfX3MyXzEwNSA9IF9fcDJfMTA1OyBcCi0gIGZsb2F0NjR4Ml90IF9fcmV2MF8xMDU7ICBfX3JldjBfMTA1ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMF8xMDUsIF9fczBfMTA1LCAxLCAwKTsgXAotICBmbG9hdDY0eDJfdCBfX3JldjFfMTA1OyAgX19yZXYxXzEwNSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczFfMTA1LCBfX3MxXzEwNSwgMSwgMCk7IFwKLSAgZmxvYXQ2NHgyX3QgX19yZXYyXzEwNTsgIF9fcmV2Ml8xMDUgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyXzEwNSwgX19zMl8xMDUsIDEsIDApOyBcCi0gIGZsb2F0NjR4Ml90IF9fcmV0XzEwNTsgXAotICBfX3JldF8xMDUgPSBfX25vc3dhcF92Zm1hcV9sYW5lcV9mNjQoX19yZXYwXzEwNSwgX19yZXYxXzEwNSwgLV9fcmV2Ml8xMDUsIF9fcDNfMTA1KTsgXAotICBfX3JldF8xMDUgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldF8xMDUsIF9fcmV0XzEwNSwgMSwgMCk7IFwKLSAgX19yZXRfMTA1OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2Zm1zcV9sYW5lcV9mMzIoX19wMF8xMDYsIF9fcDFfMTA2LCBfX3AyXzEwNiwgX19wM18xMDYpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDMyeDRfdCBfX3MwXzEwNiA9IF9fcDBfMTA2OyBcCi0gIGZsb2F0MzJ4NF90IF9fczFfMTA2ID0gX19wMV8xMDY7IFwKLSAgZmxvYXQzMng0X3QgX19zMl8xMDYgPSBfX3AyXzEwNjsgXAotICBmbG9hdDMyeDRfdCBfX3JldF8xMDY7IFwKLSAgX19yZXRfMTA2ID0gdmZtYXFfbGFuZXFfZjMyKF9fczBfMTA2LCBfX3MxXzEwNiwgLV9fczJfMTA2LCBfX3AzXzEwNik7IFwKLSAgX19yZXRfMTA2OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmZtc3FfbGFuZXFfZjMyKF9fcDBfMTA3LCBfX3AxXzEwNywgX19wMl8xMDcsIF9fcDNfMTA3KSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQzMng0X3QgX19zMF8xMDcgPSBfX3AwXzEwNzsgXAotICBmbG9hdDMyeDRfdCBfX3MxXzEwNyA9IF9fcDFfMTA3OyBcCi0gIGZsb2F0MzJ4NF90IF9fczJfMTA3ID0gX19wMl8xMDc7IFwKLSAgZmxvYXQzMng0X3QgX19yZXYwXzEwNzsgIF9fcmV2MF8xMDcgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwXzEwNywgX19zMF8xMDcsIDMsIDIsIDEsIDApOyBcCi0gIGZsb2F0MzJ4NF90IF9fcmV2MV8xMDc7ICBfX3JldjFfMTA3ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMV8xMDcsIF9fczFfMTA3LCAzLCAyLCAxLCAwKTsgXAotICBmbG9hdDMyeDRfdCBfX3JldjJfMTA3OyAgX19yZXYyXzEwNyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczJfMTA3LCBfX3MyXzEwNywgMywgMiwgMSwgMCk7IFwKLSAgZmxvYXQzMng0X3QgX19yZXRfMTA3OyBcCi0gIF9fcmV0XzEwNyA9IF9fbm9zd2FwX3ZmbWFxX2xhbmVxX2YzMihfX3JldjBfMTA3LCBfX3JldjFfMTA3LCAtX19yZXYyXzEwNywgX19wM18xMDcpOyBcCi0gIF9fcmV0XzEwNyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0XzEwNywgX19yZXRfMTA3LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldF8xMDc7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZmbXNfbGFuZXFfZjY0KF9fcDBfMTA4LCBfX3AxXzEwOCwgX19wMl8xMDgsIF9fcDNfMTA4KSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQ2NHgxX3QgX19zMF8xMDggPSBfX3AwXzEwODsgXAotICBmbG9hdDY0eDFfdCBfX3MxXzEwOCA9IF9fcDFfMTA4OyBcCi0gIGZsb2F0NjR4Ml90IF9fczJfMTA4ID0gX19wMl8xMDg7IFwKLSAgZmxvYXQ2NHgxX3QgX19yZXRfMTA4OyBcCi0gIF9fcmV0XzEwOCA9IHZmbWFfbGFuZXFfZjY0KF9fczBfMTA4LCBfX3MxXzEwOCwgLV9fczJfMTA4LCBfX3AzXzEwOCk7IFwKLSAgX19yZXRfMTA4OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmZtc19sYW5lcV9mNjQoX19wMF8xMDksIF9fcDFfMTA5LCBfX3AyXzEwOSwgX19wM18xMDkpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDY0eDFfdCBfX3MwXzEwOSA9IF9fcDBfMTA5OyBcCi0gIGZsb2F0NjR4MV90IF9fczFfMTA5ID0gX19wMV8xMDk7IFwKLSAgZmxvYXQ2NHgyX3QgX19zMl8xMDkgPSBfX3AyXzEwOTsgXAotICBmbG9hdDY0eDJfdCBfX3JldjJfMTA5OyAgX19yZXYyXzEwOSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczJfMTA5LCBfX3MyXzEwOSwgMSwgMCk7IFwKLSAgZmxvYXQ2NHgxX3QgX19yZXRfMTA5OyBcCi0gIF9fcmV0XzEwOSA9IF9fbm9zd2FwX3ZmbWFfbGFuZXFfZjY0KF9fczBfMTA5LCBfX3MxXzEwOSwgLV9fcmV2Ml8xMDksIF9fcDNfMTA5KTsgXAotICBfX3JldF8xMDk7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZmbXNfbGFuZXFfZjMyKF9fcDBfMTEwLCBfX3AxXzExMCwgX19wMl8xMTAsIF9fcDNfMTEwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQzMngyX3QgX19zMF8xMTAgPSBfX3AwXzExMDsgXAotICBmbG9hdDMyeDJfdCBfX3MxXzExMCA9IF9fcDFfMTEwOyBcCi0gIGZsb2F0MzJ4NF90IF9fczJfMTEwID0gX19wMl8xMTA7IFwKLSAgZmxvYXQzMngyX3QgX19yZXRfMTEwOyBcCi0gIF9fcmV0XzExMCA9IHZmbWFfbGFuZXFfZjMyKF9fczBfMTEwLCBfX3MxXzExMCwgLV9fczJfMTEwLCBfX3AzXzExMCk7IFwKLSAgX19yZXRfMTEwOyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmZtc19sYW5lcV9mMzIoX19wMF8xMTEsIF9fcDFfMTExLCBfX3AyXzExMSwgX19wM18xMTEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDMyeDJfdCBfX3MwXzExMSA9IF9fcDBfMTExOyBcCi0gIGZsb2F0MzJ4Ml90IF9fczFfMTExID0gX19wMV8xMTE7IFwKLSAgZmxvYXQzMng0X3QgX19zMl8xMTEgPSBfX3AyXzExMTsgXAotICBmbG9hdDMyeDJfdCBfX3JldjBfMTExOyAgX19yZXYwXzExMSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczBfMTExLCBfX3MwXzExMSwgMSwgMCk7IFwKLSAgZmxvYXQzMngyX3QgX19yZXYxXzExMTsgIF9fcmV2MV8xMTEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxXzExMSwgX19zMV8xMTEsIDEsIDApOyBcCi0gIGZsb2F0MzJ4NF90IF9fcmV2Ml8xMTE7ICBfX3JldjJfMTExID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMl8xMTEsIF9fczJfMTExLCAzLCAyLCAxLCAwKTsgXAotICBmbG9hdDMyeDJfdCBfX3JldF8xMTE7IFwKLSAgX19yZXRfMTExID0gX19ub3N3YXBfdmZtYV9sYW5lcV9mMzIoX19yZXYwXzExMSwgX19yZXYxXzExMSwgLV9fcmV2Ml8xMTEsIF9fcDNfMTExKTsgXAotICBfX3JldF8xMTEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldF8xMTEsIF9fcmV0XzExMSwgMSwgMCk7IFwKLSAgX19yZXRfMTExOyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBmbG9hdDY0eDJfdCB2Zm1zcV9uX2Y2NChmbG9hdDY0eDJfdCBfX3AwLCBmbG9hdDY0eDJfdCBfX3AxLCBmbG9hdDY0X3QgX19wMikgewotICBmbG9hdDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSB2Zm1zcV9mNjQoX19wMCwgX19wMSwgKGZsb2F0NjR4Ml90KSB7X19wMiwgX19wMn0pOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBmbG9hdDY0eDJfdCB2Zm1zcV9uX2Y2NChmbG9hdDY0eDJfdCBfX3AwLCBmbG9hdDY0eDJfdCBfX3AxLCBmbG9hdDY0X3QgX19wMikgewotICBmbG9hdDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgZmxvYXQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7Ci0gIGZsb2F0NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IF9fbm9zd2FwX3ZmbXNxX2Y2NChfX3JldjAsIF9fcmV2MSwgKGZsb2F0NjR4Ml90KSB7X19wMiwgX19wMn0pOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgZmxvYXQzMng0X3QgdmZtc3Ffbl9mMzIoZmxvYXQzMng0X3QgX19wMCwgZmxvYXQzMng0X3QgX19wMSwgZmxvYXQzMl90IF9fcDIpIHsKLSAgZmxvYXQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gdmZtc3FfZjMyKF9fcDAsIF9fcDEsIChmbG9hdDMyeDRfdCkge19fcDIsIF9fcDIsIF9fcDIsIF9fcDJ9KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgZmxvYXQzMng0X3QgdmZtc3Ffbl9mMzIoZmxvYXQzMng0X3QgX19wMCwgZmxvYXQzMng0X3QgX19wMSwgZmxvYXQzMl90IF9fcDIpIHsKLSAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIGZsb2F0MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOwotICBmbG9hdDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSBfX25vc3dhcF92Zm1zcV9mMzIoX19yZXYwLCBfX3JldjEsIChmbG9hdDMyeDRfdCkge19fcDIsIF9fcDIsIF9fcDIsIF9fcDJ9KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGZsb2F0MzJ4Ml90IHZmbXNfbl9mMzIoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSwgZmxvYXQzMl90IF9fcDIpIHsKLSAgZmxvYXQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gdmZtc19mMzIoX19wMCwgX19wMSwgKGZsb2F0MzJ4Ml90KSB7X19wMiwgX19wMn0pOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBmbG9hdDMyeDJfdCB2Zm1zX25fZjMyKGZsb2F0MzJ4Ml90IF9fcDAsIGZsb2F0MzJ4Ml90IF9fcDEsIGZsb2F0MzJfdCBfX3AyKSB7Ci0gIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICBmbG9hdDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKLSAgZmxvYXQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19ub3N3YXBfdmZtc19mMzIoX19yZXYwLCBfX3JldjEsIChmbG9hdDMyeDJfdCkge19fcDIsIF9fcDJ9KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHBvbHk2NHgxX3QgdmdldF9oaWdoX3A2NChwb2x5NjR4Ml90IF9fcDApIHsKLSAgcG9seTY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgcG9seTY0eDFfdCB2Z2V0X2hpZ2hfcDY0KHBvbHk2NHgyX3QgX19wMCkgewotICBwb2x5NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICBwb2x5NjR4MV90IF9fcmV0OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCAxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotX19haSBwb2x5NjR4MV90IF9fbm9zd2FwX3ZnZXRfaGlnaF9wNjQocG9seTY0eDJfdCBfX3AwKSB7Ci0gIHBvbHk2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgZmxvYXQ2NHgxX3QgdmdldF9oaWdoX2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7Ci0gIGZsb2F0NjR4MV90IF9fcmV0OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBmbG9hdDY0eDFfdCB2Z2V0X2hpZ2hfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKLSAgZmxvYXQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIGZsb2F0NjR4MV90IF9fcmV0OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCAxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2Z2V0X2xhbmVfcDY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBwb2x5NjR4MV90IF9fczAgPSBfX3AwOyBcCi0gIHBvbHk2NF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHBvbHk2NF90KSBfX2J1aWx0aW5fbmVvbl92Z2V0X2xhbmVfaTY0KChpbnQ4eDhfdClfX3MwLCBfX3AxKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZnZXRfbGFuZV9wNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHk2NHgxX3QgX19zMCA9IF9fcDA7IFwKLSAgcG9seTY0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAocG9seTY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZnZXRfbGFuZV9pNjQoKGludDh4OF90KV9fczAsIF9fcDEpOyBcCi0gIF9fcmV0OyBcCi19KQotI2RlZmluZSBfX25vc3dhcF92Z2V0X2xhbmVfcDY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBwb2x5NjR4MV90IF9fczAgPSBfX3AwOyBcCi0gIHBvbHk2NF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHBvbHk2NF90KSBfX2J1aWx0aW5fbmVvbl92Z2V0X2xhbmVfaTY0KChpbnQ4eDhfdClfX3MwLCBfX3AxKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmdldHFfbGFuZV9wNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHk2NHgyX3QgX19zMCA9IF9fcDA7IFwKLSAgcG9seTY0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAocG9seTY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZnZXRxX2xhbmVfaTY0KChpbnQ4eDE2X3QpX19zMCwgX19wMSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2Z2V0cV9sYW5lX3A2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTY0eDJfdCBfX3MwID0gX19wMDsgXAotICBwb2x5NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCi0gIHBvbHk2NF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHBvbHk2NF90KSBfX2J1aWx0aW5fbmVvbl92Z2V0cV9sYW5lX2k2NCgoaW50OHgxNl90KV9fcmV2MCwgX19wMSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZGVmaW5lIF9fbm9zd2FwX3ZnZXRxX2xhbmVfcDY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBwb2x5NjR4Ml90IF9fczAgPSBfX3AwOyBcCi0gIHBvbHk2NF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHBvbHk2NF90KSBfX2J1aWx0aW5fbmVvbl92Z2V0cV9sYW5lX2k2NCgoaW50OHgxNl90KV9fczAsIF9fcDEpOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2Z2V0cV9sYW5lX2Y2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKLSAgZmxvYXQ2NF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGZsb2F0NjRfdCkgX19idWlsdGluX25lb25fdmdldHFfbGFuZV9mNjQoKGludDh4MTZfdClfX3MwLCBfX3AxKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZnZXRxX2xhbmVfZjY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDY0eDJfdCBfX3MwID0gX19wMDsgXAotICBmbG9hdDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAotICBmbG9hdDY0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoZmxvYXQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Z2V0cV9sYW5lX2Y2NCgoaW50OHgxNl90KV9fcmV2MCwgX19wMSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZGVmaW5lIF9fbm9zd2FwX3ZnZXRxX2xhbmVfZjY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDY0eDJfdCBfX3MwID0gX19wMDsgXAotICBmbG9hdDY0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoZmxvYXQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Z2V0cV9sYW5lX2Y2NCgoaW50OHgxNl90KV9fczAsIF9fcDEpOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2Z2V0X2xhbmVfZjY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDY0eDFfdCBfX3MwID0gX19wMDsgXAotICBmbG9hdDY0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoZmxvYXQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Z2V0X2xhbmVfZjY0KChpbnQ4eDhfdClfX3MwLCBfX3AxKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZnZXRfbGFuZV9mNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0NjR4MV90IF9fczAgPSBfX3AwOyBcCi0gIGZsb2F0NjRfdCBfX3JldDsgXAotICBfX3JldCA9IChmbG9hdDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZnZXRfbGFuZV9mNjQoKGludDh4OF90KV9fczAsIF9fcDEpOyBcCi0gIF9fcmV0OyBcCi19KQotI2RlZmluZSBfX25vc3dhcF92Z2V0X2xhbmVfZjY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDY0eDFfdCBfX3MwID0gX19wMDsgXAotICBmbG9hdDY0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoZmxvYXQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Z2V0X2xhbmVfZjY0KChpbnQ4eDhfdClfX3MwLCBfX3AxKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgcG9seTY0eDFfdCB2Z2V0X2xvd19wNjQocG9seTY0eDJfdCBfX3AwKSB7Ci0gIHBvbHk2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHBvbHk2NHgxX3QgdmdldF9sb3dfcDY0KHBvbHk2NHgyX3QgX19wMCkgewotICBwb2x5NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICBwb2x5NjR4MV90IF9fcmV0OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBmbG9hdDY0eDFfdCB2Z2V0X2xvd19mNjQoZmxvYXQ2NHgyX3QgX19wMCkgewotICBmbG9hdDY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgZmxvYXQ2NHgxX3QgdmdldF9sb3dfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKLSAgZmxvYXQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIGZsb2F0NjR4MV90IF9fcmV0OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQxX3A2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTY0eDFfdCBfX3JldDsgXAotICBfX3JldCA9IChwb2x5NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92bGQxX3YoX19wMCwgNik7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQxX3A2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTY0eDFfdCBfX3JldDsgXAotICBfX3JldCA9IChwb2x5NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92bGQxX3YoX19wMCwgNik7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZsZDFxX3A2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTY0eDJfdCBfX3JldDsgXAotICBfX3JldCA9IChwb2x5NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92bGQxcV92KF9fcDAsIDM4KTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDFxX3A2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTY0eDJfdCBfX3JldDsgXAotICBfX3JldCA9IChwb2x5NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92bGQxcV92KF9fcDAsIDM4KTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZsZDFxX2Y2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQ2NHgyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX3YoX19wMCwgNDIpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmxkMXFfZjY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDY0eDJfdCBfX3JldDsgXAotICBfX3JldCA9IChmbG9hdDY0eDJfdCkgX19idWlsdGluX25lb25fdmxkMXFfdihfX3AwLCA0Mik7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQxX2Y2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQ2NHgxX3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFfdihfX3AwLCAxMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQxX2Y2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQ2NHgxX3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFfdihfX3AwLCAxMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZsZDFfZHVwX3A2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTY0eDFfdCBfX3JldDsgXAotICBfX3JldCA9IChwb2x5NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92bGQxX2R1cF92KF9fcDAsIDYpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmxkMV9kdXBfcDY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBwb2x5NjR4MV90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHBvbHk2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFfZHVwX3YoX19wMCwgNik7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZsZDFxX2R1cF9wNjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHk2NHgyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSAocG9seTY0eDJfdCkgX19idWlsdGluX25lb25fdmxkMXFfZHVwX3YoX19wMCwgMzgpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmxkMXFfZHVwX3A2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTY0eDJfdCBfX3JldDsgXAotICBfX3JldCA9IChwb2x5NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92bGQxcV9kdXBfdihfX3AwLCAzOCk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQxcV9kdXBfZjY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDY0eDJfdCBfX3JldDsgXAotICBfX3JldCA9IChmbG9hdDY0eDJfdCkgX19idWlsdGluX25lb25fdmxkMXFfZHVwX3YoX19wMCwgNDIpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmxkMXFfZHVwX2Y2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQ2NHgyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX2R1cF92KF9fcDAsIDQyKTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZsZDFfZHVwX2Y2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQ2NHgxX3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFfZHVwX3YoX19wMCwgMTApOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmxkMV9kdXBfZjY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDY0eDFfdCBfX3JldDsgXAotICBfX3JldCA9IChmbG9hdDY0eDFfdCkgX19idWlsdGluX25lb25fdmxkMV9kdXBfdihfX3AwLCAxMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZsZDFfbGFuZV9wNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHk2NHgxX3QgX19zMSA9IF9fcDE7IFwKLSAgcG9seTY0eDFfdCBfX3JldDsgXAotICBfX3JldCA9IChwb2x5NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92bGQxX2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgNik7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQxX2xhbmVfcDY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBwb2x5NjR4MV90IF9fczEgPSBfX3AxOyBcCi0gIHBvbHk2NHgxX3QgX19yZXQ7IFwKLSAgX19yZXQgPSAocG9seTY0eDFfdCkgX19idWlsdGluX25lb25fdmxkMV9sYW5lX3YoX19wMCwgKGludDh4OF90KV9fczEsIF9fcDIsIDYpOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQxcV9sYW5lX3A2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTY0eDJfdCBfX3MxID0gX19wMTsgXAotICBwb2x5NjR4Ml90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHBvbHk2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX2xhbmVfdihfX3AwLCAoaW50OHgxNl90KV9fczEsIF9fcDIsIDM4KTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDFxX2xhbmVfcDY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBwb2x5NjR4Ml90IF9fczEgPSBfX3AxOyBcCi0gIHBvbHk2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMSwgMCk7IFwKLSAgcG9seTY0eDJfdCBfX3JldDsgXAotICBfX3JldCA9IChwb2x5NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92bGQxcV9sYW5lX3YoX19wMCwgKGludDh4MTZfdClfX3JldjEsIF9fcDIsIDM4KTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZsZDFxX2xhbmVfZjY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDY0eDJfdCBfX3MxID0gX19wMTsgXAotICBmbG9hdDY0eDJfdCBfX3JldDsgXAotICBfX3JldCA9IChmbG9hdDY0eDJfdCkgX19idWlsdGluX25lb25fdmxkMXFfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19zMSwgX19wMiwgNDIpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmxkMXFfbGFuZV9mNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0NjR4Ml90IF9fczEgPSBfX3AxOyBcCi0gIGZsb2F0NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCi0gIGZsb2F0NjR4Ml90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGZsb2F0NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92bGQxcV9sYW5lX3YoX19wMCwgKGludDh4MTZfdClfX3JldjEsIF9fcDIsIDQyKTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZsZDFfbGFuZV9mNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0NjR4MV90IF9fczEgPSBfX3AxOyBcCi0gIGZsb2F0NjR4MV90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGZsb2F0NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92bGQxX2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgMTApOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmxkMV9sYW5lX2Y2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQ2NHgxX3QgX19zMSA9IF9fcDE7IFwKLSAgZmxvYXQ2NHgxX3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFfbGFuZV92KF9fcDAsIChpbnQ4eDhfdClfX3MxLCBfX3AyLCAxMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZsZDFfcDhfeDIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHk4eDh4Ml90IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDFfeDJfdigmX19yZXQsIF9fcDAsIDQpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmxkMV9wOF94MihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTh4OHgyX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkMV94Ml92KCZfX3JldCwgX19wMCwgNCk7IFwKLSBcCi0gIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZsZDFfcDY0X3gyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBwb2x5NjR4MXgyX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkMV94Ml92KCZfX3JldCwgX19wMCwgNik7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQxX3A2NF94MihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTY0eDF4Ml90IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDFfeDJfdigmX19yZXQsIF9fcDAsIDYpOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQxX3AxNl94MihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTE2eDR4Ml90IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDFfeDJfdigmX19yZXQsIF9fcDAsIDUpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmxkMV9wMTZfeDIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHkxNng0eDJfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQxX3gyX3YoJl9fcmV0LCBfX3AwLCA1KTsgXAotIFwKLSAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkMXFfcDhfeDIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHk4eDE2eDJfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQxcV94Ml92KCZfX3JldCwgX19wMCwgMzYpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmxkMXFfcDhfeDIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHk4eDE2eDJfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQxcV94Ml92KCZfX3JldCwgX19wMCwgMzYpOyBcCi0gXAotICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQxcV9wNjRfeDIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHk2NHgyeDJfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQxcV94Ml92KCZfX3JldCwgX19wMCwgMzgpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmxkMXFfcDY0X3gyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBwb2x5NjR4MngyX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkMXFfeDJfdigmX19yZXQsIF9fcDAsIDM4KTsgXAotIFwKLSAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkMXFfcDE2X3gyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBwb2x5MTZ4OHgyX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkMXFfeDJfdigmX19yZXQsIF9fcDAsIDM3KTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDFxX3AxNl94MihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTE2eDh4Ml90IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX3gyX3YoJl9fcmV0LCBfX3AwLCAzNyk7IFwKLSBcCi0gIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZsZDFxX3U4X3gyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50OHgxNngyX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkMXFfeDJfdigmX19yZXQsIF9fcDAsIDQ4KTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDFxX3U4X3gyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50OHgxNngyX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkMXFfeDJfdigmX19yZXQsIF9fcDAsIDQ4KTsgXAotIFwKLSAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkMXFfdTMyX3gyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MzJ4NHgyX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkMXFfeDJfdigmX19yZXQsIF9fcDAsIDUwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDFxX3UzMl94MihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDMyeDR4Ml90IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX3gyX3YoJl9fcmV0LCBfX3AwLCA1MCk7IFwKLSBcCi0gIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAotICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZsZDFxX3U2NF94MihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDY0eDJ4Ml90IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX3gyX3YoJl9fcmV0LCBfX3AwLCA1MSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQxcV91NjRfeDIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ2NHgyeDJfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQxcV94Ml92KCZfX3JldCwgX19wMCwgNTEpOyBcCi0gXAotICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQxcV91MTZfeDIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQxNng4eDJfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQxcV94Ml92KCZfX3JldCwgX19wMCwgNDkpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmxkMXFfdTE2X3gyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MTZ4OHgyX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkMXFfeDJfdigmX19yZXQsIF9fcDAsIDQ5KTsgXAotIFwKLSAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkMXFfczhfeDIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDh4MTZ4Ml90IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX3gyX3YoJl9fcmV0LCBfX3AwLCAzMik7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQxcV9zOF94MihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50OHgxNngyX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkMXFfeDJfdigmX19yZXQsIF9fcDAsIDMyKTsgXAotIFwKLSAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkMXFfZjY0X3gyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDY0eDJ4Ml90IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX3gyX3YoJl9fcmV0LCBfX3AwLCA0Mik7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQxcV9mNjRfeDIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0NjR4MngyX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkMXFfeDJfdigmX19yZXQsIF9fcDAsIDQyKTsgXAotIFwKLSAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkMXFfZjMyX3gyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDMyeDR4Ml90IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX3gyX3YoJl9fcmV0LCBfX3AwLCA0MSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQxcV9mMzJfeDIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0MzJ4NHgyX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkMXFfeDJfdigmX19yZXQsIF9fcDAsIDQxKTsgXAotIFwKLSAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkMXFfZjE2X3gyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDE2eDh4Ml90IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX3gyX3YoJl9fcmV0LCBfX3AwLCA0MCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQxcV9mMTZfeDIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0MTZ4OHgyX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkMXFfeDJfdigmX19yZXQsIF9fcDAsIDQwKTsgXAotIFwKLSAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkMXFfczMyX3gyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQzMng0eDJfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQxcV94Ml92KCZfX3JldCwgX19wMCwgMzQpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmxkMXFfczMyX3gyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQzMng0eDJfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQxcV94Ml92KCZfX3JldCwgX19wMCwgMzQpOyBcCi0gXAotICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQxcV9zNjRfeDIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDY0eDJ4Ml90IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX3gyX3YoJl9fcmV0LCBfX3AwLCAzNSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQxcV9zNjRfeDIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDY0eDJ4Ml90IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX3gyX3YoJl9fcmV0LCBfX3AwLCAzNSk7IFwKLSBcCi0gIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxLCAwKTsgXAotICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZsZDFxX3MxNl94MihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MTZ4OHgyX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkMXFfeDJfdigmX19yZXQsIF9fcDAsIDMzKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDFxX3MxNl94MihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MTZ4OHgyX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkMXFfeDJfdigmX19yZXQsIF9fcDAsIDMzKTsgXAotIFwKLSAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkMV91OF94MihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDh4OHgyX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkMV94Ml92KCZfX3JldCwgX19wMCwgMTYpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmxkMV91OF94MihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDh4OHgyX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkMV94Ml92KCZfX3JldCwgX19wMCwgMTYpOyBcCi0gXAotICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQxX3UzMl94MihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDMyeDJ4Ml90IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDFfeDJfdigmX19yZXQsIF9fcDAsIDE4KTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDFfdTMyX3gyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MzJ4MngyX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkMV94Ml92KCZfX3JldCwgX19wMCwgMTgpOyBcCi0gXAotICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQxX3U2NF94MihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDY0eDF4Ml90IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDFfeDJfdigmX19yZXQsIF9fcDAsIDE5KTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDFfdTY0X3gyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50NjR4MXgyX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkMV94Ml92KCZfX3JldCwgX19wMCwgMTkpOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQxX3UxNl94MihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDE2eDR4Ml90IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDFfeDJfdigmX19yZXQsIF9fcDAsIDE3KTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDFfdTE2X3gyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MTZ4NHgyX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkMV94Ml92KCZfX3JldCwgX19wMCwgMTcpOyBcCi0gXAotICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQxX3M4X3gyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ4eDh4Ml90IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDFfeDJfdigmX19yZXQsIF9fcDAsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmxkMV9zOF94MihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50OHg4eDJfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQxX3gyX3YoJl9fcmV0LCBfX3AwLCAwKTsgXAotIFwKLSAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkMV9mNjRfeDIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0NjR4MXgyX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkMV94Ml92KCZfX3JldCwgX19wMCwgMTApOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmxkMV9mNjRfeDIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0NjR4MXgyX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkMV94Ml92KCZfX3JldCwgX19wMCwgMTApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQxX2YzMl94MihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQzMngyeDJfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQxX3gyX3YoJl9fcmV0LCBfX3AwLCA5KTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDFfZjMyX3gyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDMyeDJ4Ml90IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDFfeDJfdigmX19yZXQsIF9fcDAsIDkpOyBcCi0gXAotICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQxX2YxNl94MihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQxNng0eDJfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQxX3gyX3YoJl9fcmV0LCBfX3AwLCA4KTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDFfZjE2X3gyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDE2eDR4Ml90IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDFfeDJfdigmX19yZXQsIF9fcDAsIDgpOyBcCi0gXAotICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQxX3MzMl94MihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MzJ4MngyX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkMV94Ml92KCZfX3JldCwgX19wMCwgMik7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQxX3MzMl94MihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MzJ4MngyX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkMV94Ml92KCZfX3JldCwgX19wMCwgMik7IFwKLSBcCi0gIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxLCAwKTsgXAotICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZsZDFfczY0X3gyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ2NHgxeDJfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQxX3gyX3YoJl9fcmV0LCBfX3AwLCAzKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDFfczY0X3gyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ2NHgxeDJfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQxX3gyX3YoJl9fcmV0LCBfX3AwLCAzKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkMV9zMTZfeDIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDE2eDR4Ml90IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDFfeDJfdigmX19yZXQsIF9fcDAsIDEpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmxkMV9zMTZfeDIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDE2eDR4Ml90IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDFfeDJfdigmX19yZXQsIF9fcDAsIDEpOyBcCi0gXAotICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQxX3A4X3gzKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBwb2x5OHg4eDNfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQxX3gzX3YoJl9fcmV0LCBfX3AwLCA0KTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDFfcDhfeDMoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHk4eDh4M190IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDFfeDNfdigmX19yZXQsIF9fcDAsIDQpOyBcCi0gXAotICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkMV9wNjRfeDMoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHk2NHgxeDNfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQxX3gzX3YoJl9fcmV0LCBfX3AwLCA2KTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDFfcDY0X3gzKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBwb2x5NjR4MXgzX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkMV94M192KCZfX3JldCwgX19wMCwgNik7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZsZDFfcDE2X3gzKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBwb2x5MTZ4NHgzX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkMV94M192KCZfX3JldCwgX19wMCwgNSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQxX3AxNl94MyhfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTE2eDR4M190IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDFfeDNfdigmX19yZXQsIF9fcDAsIDUpOyBcCi0gXAotICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkMXFfcDhfeDMoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHk4eDE2eDNfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQxcV94M192KCZfX3JldCwgX19wMCwgMzYpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmxkMXFfcDhfeDMoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHk4eDE2eDNfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQxcV94M192KCZfX3JldCwgX19wMCwgMzYpOyBcCi0gXAotICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkMXFfcDY0X3gzKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBwb2x5NjR4MngzX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkMXFfeDNfdigmX19yZXQsIF9fcDAsIDM4KTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDFxX3A2NF94MyhfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTY0eDJ4M190IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX3gzX3YoJl9fcmV0LCBfX3AwLCAzOCk7IFwKLSBcCi0gIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxLCAwKTsgXAotICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQxcV9wMTZfeDMoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHkxNng4eDNfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQxcV94M192KCZfX3JldCwgX19wMCwgMzcpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmxkMXFfcDE2X3gzKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBwb2x5MTZ4OHgzX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkMXFfeDNfdigmX19yZXQsIF9fcDAsIDM3KTsgXAotIFwKLSAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZsZDFxX3U4X3gzKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50OHgxNngzX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkMXFfeDNfdigmX19yZXQsIF9fcDAsIDQ4KTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDFxX3U4X3gzKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50OHgxNngzX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkMXFfeDNfdigmX19yZXQsIF9fcDAsIDQ4KTsgXAotIFwKLSAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZsZDFxX3UzMl94MyhfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDMyeDR4M190IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX3gzX3YoJl9fcmV0LCBfX3AwLCA1MCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQxcV91MzJfeDMoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQzMng0eDNfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQxcV94M192KCZfX3JldCwgX19wMCwgNTApOyBcCi0gXAotICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkMXFfdTY0X3gzKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50NjR4MngzX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkMXFfeDNfdigmX19yZXQsIF9fcDAsIDUxKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDFxX3U2NF94MyhfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDY0eDJ4M190IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX3gzX3YoJl9fcmV0LCBfX3AwLCA1MSk7IFwKLSBcCi0gIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxLCAwKTsgXAotICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQxcV91MTZfeDMoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQxNng4eDNfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQxcV94M192KCZfX3JldCwgX19wMCwgNDkpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmxkMXFfdTE2X3gzKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MTZ4OHgzX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkMXFfeDNfdigmX19yZXQsIF9fcDAsIDQ5KTsgXAotIFwKLSAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZsZDFxX3M4X3gzKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ4eDE2eDNfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQxcV94M192KCZfX3JldCwgX19wMCwgMzIpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmxkMXFfczhfeDMoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDh4MTZ4M190IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX3gzX3YoJl9fcmV0LCBfX3AwLCAzMik7IFwKLSBcCi0gIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQxcV9mNjRfeDMoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0NjR4MngzX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkMXFfeDNfdigmX19yZXQsIF9fcDAsIDQyKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDFxX2Y2NF94MyhfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQ2NHgyeDNfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQxcV94M192KCZfX3JldCwgX19wMCwgNDIpOyBcCi0gXAotICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkMXFfZjMyX3gzKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDMyeDR4M190IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX3gzX3YoJl9fcmV0LCBfX3AwLCA0MSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQxcV9mMzJfeDMoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0MzJ4NHgzX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkMXFfeDNfdigmX19yZXQsIF9fcDAsIDQxKTsgXAotIFwKLSAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAotICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZsZDFxX2YxNl94MyhfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQxNng4eDNfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQxcV94M192KCZfX3JldCwgX19wMCwgNDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmxkMXFfZjE2X3gzKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDE2eDh4M190IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX3gzX3YoJl9fcmV0LCBfX3AwLCA0MCk7IFwKLSBcCi0gIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQxcV9zMzJfeDMoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDMyeDR4M190IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX3gzX3YoJl9fcmV0LCBfX3AwLCAzNCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQxcV9zMzJfeDMoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDMyeDR4M190IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX3gzX3YoJl9fcmV0LCBfX3AwLCAzNCk7IFwKLSBcCi0gIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAotICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQxcV9zNjRfeDMoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDY0eDJ4M190IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX3gzX3YoJl9fcmV0LCBfX3AwLCAzNSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQxcV9zNjRfeDMoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDY0eDJ4M190IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX3gzX3YoJl9fcmV0LCBfX3AwLCAzNSk7IFwKLSBcCi0gIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxLCAwKTsgXAotICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQxcV9zMTZfeDMoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDE2eDh4M190IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX3gzX3YoJl9fcmV0LCBfX3AwLCAzMyk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQxcV9zMTZfeDMoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDE2eDh4M190IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX3gzX3YoJl9fcmV0LCBfX3AwLCAzMyk7IFwKLSBcCi0gIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQxX3U4X3gzKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50OHg4eDNfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQxX3gzX3YoJl9fcmV0LCBfX3AwLCAxNik7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQxX3U4X3gzKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50OHg4eDNfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQxX3gzX3YoJl9fcmV0LCBfX3AwLCAxNik7IFwKLSBcCi0gIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQxX3UzMl94MyhfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDMyeDJ4M190IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDFfeDNfdigmX19yZXQsIF9fcDAsIDE4KTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDFfdTMyX3gzKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MzJ4MngzX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkMV94M192KCZfX3JldCwgX19wMCwgMTgpOyBcCi0gXAotICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkMV91NjRfeDMoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ2NHgxeDNfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQxX3gzX3YoJl9fcmV0LCBfX3AwLCAxOSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQxX3U2NF94MyhfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDY0eDF4M190IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDFfeDNfdigmX19yZXQsIF9fcDAsIDE5KTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkMV91MTZfeDMoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQxNng0eDNfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQxX3gzX3YoJl9fcmV0LCBfX3AwLCAxNyk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQxX3UxNl94MyhfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDE2eDR4M190IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDFfeDNfdigmX19yZXQsIF9fcDAsIDE3KTsgXAotIFwKLSAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAotICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZsZDFfczhfeDMoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDh4OHgzX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkMV94M192KCZfX3JldCwgX19wMCwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQxX3M4X3gzKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ4eDh4M190IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDFfeDNfdigmX19yZXQsIF9fcDAsIDApOyBcCi0gXAotICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkMV9mNjRfeDMoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0NjR4MXgzX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkMV94M192KCZfX3JldCwgX19wMCwgMTApOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmxkMV9mNjRfeDMoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0NjR4MXgzX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkMV94M192KCZfX3JldCwgX19wMCwgMTApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQxX2YzMl94MyhfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQzMngyeDNfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQxX3gzX3YoJl9fcmV0LCBfX3AwLCA5KTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDFfZjMyX3gzKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDMyeDJ4M190IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDFfeDNfdigmX19yZXQsIF9fcDAsIDkpOyBcCi0gXAotICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkMV9mMTZfeDMoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0MTZ4NHgzX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkMV94M192KCZfX3JldCwgX19wMCwgOCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQxX2YxNl94MyhfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQxNng0eDNfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQxX3gzX3YoJl9fcmV0LCBfX3AwLCA4KTsgXAotIFwKLSAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAotICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZsZDFfczMyX3gzKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQzMngyeDNfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQxX3gzX3YoJl9fcmV0LCBfX3AwLCAyKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDFfczMyX3gzKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQzMngyeDNfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQxX3gzX3YoJl9fcmV0LCBfX3AwLCAyKTsgXAotIFwKLSAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxLCAwKTsgXAotICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZsZDFfczY0X3gzKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ2NHgxeDNfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQxX3gzX3YoJl9fcmV0LCBfX3AwLCAzKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDFfczY0X3gzKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ2NHgxeDNfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQxX3gzX3YoJl9fcmV0LCBfX3AwLCAzKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkMV9zMTZfeDMoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDE2eDR4M190IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDFfeDNfdigmX19yZXQsIF9fcDAsIDEpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmxkMV9zMTZfeDMoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDE2eDR4M190IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDFfeDNfdigmX19yZXQsIF9fcDAsIDEpOyBcCi0gXAotICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkMV9wOF94NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTh4OHg0X3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkMV94NF92KCZfX3JldCwgX19wMCwgNCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQxX3A4X3g0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBwb2x5OHg4eDRfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQxX3g0X3YoJl9fcmV0LCBfX3AwLCA0KTsgXAotIFwKLSAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzNdLCBfX3JldC52YWxbM10sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQxX3A2NF94NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTY0eDF4NF90IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDFfeDRfdigmX19yZXQsIF9fcDAsIDYpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmxkMV9wNjRfeDQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHk2NHgxeDRfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQxX3g0X3YoJl9fcmV0LCBfX3AwLCA2KTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkMV9wMTZfeDQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHkxNng0eDRfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQxX3g0X3YoJl9fcmV0LCBfX3AwLCA1KTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDFfcDE2X3g0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBwb2x5MTZ4NHg0X3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkMV94NF92KCZfX3JldCwgX19wMCwgNSk7IFwKLSBcCi0gIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAotICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0LnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFszXSwgX19yZXQudmFsWzNdLCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkMXFfcDhfeDQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHk4eDE2eDRfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQxcV94NF92KCZfX3JldCwgX19wMCwgMzYpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmxkMXFfcDhfeDQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHk4eDE2eDRfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQxcV94NF92KCZfX3JldCwgX19wMCwgMzYpOyBcCi0gXAotICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbM10sIF9fcmV0LnZhbFszXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZsZDFxX3A2NF94NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTY0eDJ4NF90IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX3g0X3YoJl9fcmV0LCBfX3AwLCAzOCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQxcV9wNjRfeDQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHk2NHgyeDRfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQxcV94NF92KCZfX3JldCwgX19wMCwgMzgpOyBcCi0gXAotICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAxLCAwKTsgXAotICBfX3JldC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbM10sIF9fcmV0LnZhbFszXSwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZsZDFxX3AxNl94NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTE2eDh4NF90IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX3g0X3YoJl9fcmV0LCBfX3AwLCAzNyk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQxcV9wMTZfeDQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHkxNng4eDRfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQxcV94NF92KCZfX3JldCwgX19wMCwgMzcpOyBcCi0gXAotICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbM10sIF9fcmV0LnZhbFszXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZsZDFxX3U4X3g0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50OHgxNng0X3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkMXFfeDRfdigmX19yZXQsIF9fcDAsIDQ4KTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDFxX3U4X3g0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50OHgxNng0X3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkMXFfeDRfdigmX19yZXQsIF9fcDAsIDQ4KTsgXAotIFwKLSAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzNdLCBfX3JldC52YWxbM10sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQxcV91MzJfeDQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQzMng0eDRfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQxcV94NF92KCZfX3JldCwgX19wMCwgNTApOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmxkMXFfdTMyX3g0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MzJ4NHg0X3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkMXFfeDRfdigmX19yZXQsIF9fcDAsIDUwKTsgXAotIFwKLSAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAotICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzNdLCBfX3JldC52YWxbM10sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQxcV91NjRfeDQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ2NHgyeDRfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQxcV94NF92KCZfX3JldCwgX19wMCwgNTEpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmxkMXFfdTY0X3g0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50NjR4Mng0X3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkMXFfeDRfdigmX19yZXQsIF9fcDAsIDUxKTsgXAotIFwKLSAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxLCAwKTsgXAotICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzNdLCBfX3JldC52YWxbM10sIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQxcV91MTZfeDQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQxNng4eDRfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQxcV94NF92KCZfX3JldCwgX19wMCwgNDkpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmxkMXFfdTE2X3g0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MTZ4OHg0X3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkMXFfeDRfdigmX19yZXQsIF9fcDAsIDQ5KTsgXAotIFwKLSAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzNdLCBfX3JldC52YWxbM10sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQxcV9zOF94NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50OHgxNng0X3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkMXFfeDRfdigmX19yZXQsIF9fcDAsIDMyKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDFxX3M4X3g0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ4eDE2eDRfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQxcV94NF92KCZfX3JldCwgX19wMCwgMzIpOyBcCi0gXAotICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbM10sIF9fcmV0LnZhbFszXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZsZDFxX2Y2NF94NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQ2NHgyeDRfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQxcV94NF92KCZfX3JldCwgX19wMCwgNDIpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmxkMXFfZjY0X3g0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDY0eDJ4NF90IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX3g0X3YoJl9fcmV0LCBfX3AwLCA0Mik7IFwKLSBcCi0gIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxLCAwKTsgXAotICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDEsIDApOyBcCi0gIF9fcmV0LnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFszXSwgX19yZXQudmFsWzNdLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkMXFfZjMyX3g0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDMyeDR4NF90IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX3g0X3YoJl9fcmV0LCBfX3AwLCA0MSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQxcV9mMzJfeDQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0MzJ4NHg0X3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkMXFfeDRfdigmX19yZXQsIF9fcDAsIDQxKTsgXAotIFwKLSAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAotICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzNdLCBfX3JldC52YWxbM10sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQxcV9mMTZfeDQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0MTZ4OHg0X3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkMXFfeDRfdigmX19yZXQsIF9fcDAsIDQwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDFxX2YxNl94NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQxNng4eDRfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQxcV94NF92KCZfX3JldCwgX19wMCwgNDApOyBcCi0gXAotICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbM10sIF9fcmV0LnZhbFszXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZsZDFxX3MzMl94NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MzJ4NHg0X3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkMXFfeDRfdigmX19yZXQsIF9fcDAsIDM0KTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDFxX3MzMl94NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MzJ4NHg0X3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkMXFfeDRfdigmX19yZXQsIF9fcDAsIDM0KTsgXAotIFwKLSAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAotICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzNdLCBfX3JldC52YWxbM10sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQxcV9zNjRfeDQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDY0eDJ4NF90IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX3g0X3YoJl9fcmV0LCBfX3AwLCAzNSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQxcV9zNjRfeDQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDY0eDJ4NF90IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX3g0X3YoJl9fcmV0LCBfX3AwLCAzNSk7IFwKLSBcCi0gIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxLCAwKTsgXAotICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDEsIDApOyBcCi0gIF9fcmV0LnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFszXSwgX19yZXQudmFsWzNdLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkMXFfczE2X3g0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQxNng4eDRfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQxcV94NF92KCZfX3JldCwgX19wMCwgMzMpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmxkMXFfczE2X3g0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQxNng4eDRfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQxcV94NF92KCZfX3JldCwgX19wMCwgMzMpOyBcCi0gXAotICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbM10sIF9fcmV0LnZhbFszXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZsZDFfdThfeDQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ4eDh4NF90IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDFfeDRfdigmX19yZXQsIF9fcDAsIDE2KTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDFfdThfeDQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ4eDh4NF90IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDFfeDRfdigmX19yZXQsIF9fcDAsIDE2KTsgXAotIFwKLSAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzNdLCBfX3JldC52YWxbM10sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQxX3UzMl94NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDMyeDJ4NF90IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDFfeDRfdigmX19yZXQsIF9fcDAsIDE4KTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDFfdTMyX3g0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MzJ4Mng0X3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkMV94NF92KCZfX3JldCwgX19wMCwgMTgpOyBcCi0gXAotICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAxLCAwKTsgXAotICBfX3JldC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbM10sIF9fcmV0LnZhbFszXSwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZsZDFfdTY0X3g0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50NjR4MXg0X3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkMV94NF92KCZfX3JldCwgX19wMCwgMTkpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmxkMV91NjRfeDQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ2NHgxeDRfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQxX3g0X3YoJl9fcmV0LCBfX3AwLCAxOSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZsZDFfdTE2X3g0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MTZ4NHg0X3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkMV94NF92KCZfX3JldCwgX19wMCwgMTcpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmxkMV91MTZfeDQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQxNng0eDRfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQxX3g0X3YoJl9fcmV0LCBfX3AwLCAxNyk7IFwKLSBcCi0gIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAotICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0LnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFszXSwgX19yZXQudmFsWzNdLCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkMV9zOF94NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50OHg4eDRfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQxX3g0X3YoJl9fcmV0LCBfX3AwLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDFfczhfeDQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDh4OHg0X3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkMV94NF92KCZfX3JldCwgX19wMCwgMCk7IFwKLSBcCi0gIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0LnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFszXSwgX19yZXQudmFsWzNdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkMV9mNjRfeDQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0NjR4MXg0X3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkMV94NF92KCZfX3JldCwgX19wMCwgMTApOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmxkMV9mNjRfeDQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0NjR4MXg0X3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkMV94NF92KCZfX3JldCwgX19wMCwgMTApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQxX2YzMl94NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQzMngyeDRfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQxX3g0X3YoJl9fcmV0LCBfX3AwLCA5KTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDFfZjMyX3g0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDMyeDJ4NF90IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDFfeDRfdigmX19yZXQsIF9fcDAsIDkpOyBcCi0gXAotICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAxLCAwKTsgXAotICBfX3JldC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbM10sIF9fcmV0LnZhbFszXSwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZsZDFfZjE2X3g0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDE2eDR4NF90IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDFfeDRfdigmX19yZXQsIF9fcDAsIDgpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmxkMV9mMTZfeDQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0MTZ4NHg0X3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkMV94NF92KCZfX3JldCwgX19wMCwgOCk7IFwKLSBcCi0gIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAotICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0LnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFszXSwgX19yZXQudmFsWzNdLCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkMV9zMzJfeDQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDMyeDJ4NF90IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDFfeDRfdigmX19yZXQsIF9fcDAsIDIpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmxkMV9zMzJfeDQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDMyeDJ4NF90IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDFfeDRfdigmX19yZXQsIF9fcDAsIDIpOyBcCi0gXAotICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAxLCAwKTsgXAotICBfX3JldC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbM10sIF9fcmV0LnZhbFszXSwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZsZDFfczY0X3g0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ2NHgxeDRfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQxX3g0X3YoJl9fcmV0LCBfX3AwLCAzKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDFfczY0X3g0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ2NHgxeDRfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQxX3g0X3YoJl9fcmV0LCBfX3AwLCAzKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkMV9zMTZfeDQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDE2eDR4NF90IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDFfeDRfdigmX19yZXQsIF9fcDAsIDEpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmxkMV9zMTZfeDQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDE2eDR4NF90IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDFfeDRfdigmX19yZXQsIF9fcDAsIDEpOyBcCi0gXAotICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAotICBfX3JldC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbM10sIF9fcmV0LnZhbFszXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZsZDJfcDY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBwb2x5NjR4MXgyX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkMl92KCZfX3JldCwgX19wMCwgNik7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQyX3A2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTY0eDF4Ml90IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDJfdigmX19yZXQsIF9fcDAsIDYpOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQycV9wNjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHk2NHgyeDJfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQycV92KCZfX3JldCwgX19wMCwgMzgpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmxkMnFfcDY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBwb2x5NjR4MngyX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkMnFfdigmX19yZXQsIF9fcDAsIDM4KTsgXAotIFwKLSAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkMnFfdTY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50NjR4MngyX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkMnFfdigmX19yZXQsIF9fcDAsIDUxKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDJxX3U2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDY0eDJ4Ml90IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDJxX3YoJl9fcmV0LCBfX3AwLCA1MSk7IFwKLSBcCi0gIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxLCAwKTsgXAotICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZsZDJxX2Y2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQ2NHgyeDJfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQycV92KCZfX3JldCwgX19wMCwgNDIpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmxkMnFfZjY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDY0eDJ4Ml90IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDJxX3YoJl9fcmV0LCBfX3AwLCA0Mik7IFwKLSBcCi0gIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxLCAwKTsgXAotICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZsZDJxX3M2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50NjR4MngyX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkMnFfdigmX19yZXQsIF9fcDAsIDM1KTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDJxX3M2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50NjR4MngyX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkMnFfdigmX19yZXQsIF9fcDAsIDM1KTsgXAotIFwKLSAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkMl9mNjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0NjR4MXgyX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkMl92KCZfX3JldCwgX19wMCwgMTApOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmxkMl9mNjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0NjR4MXgyX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkMl92KCZfX3JldCwgX19wMCwgMTApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQyX2R1cF9wNjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHk2NHgxeDJfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQyX2R1cF92KCZfX3JldCwgX19wMCwgNik7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQyX2R1cF9wNjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHk2NHgxeDJfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQyX2R1cF92KCZfX3JldCwgX19wMCwgNik7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZsZDJxX2R1cF9wOChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTh4MTZ4Ml90IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDJxX2R1cF92KCZfX3JldCwgX19wMCwgMzYpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmxkMnFfZHVwX3A4KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBwb2x5OHgxNngyX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkMnFfZHVwX3YoJl9fcmV0LCBfX3AwLCAzNik7IFwKLSBcCi0gIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZsZDJxX2R1cF9wNjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHk2NHgyeDJfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQycV9kdXBfdigmX19yZXQsIF9fcDAsIDM4KTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDJxX2R1cF9wNjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHk2NHgyeDJfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQycV9kdXBfdigmX19yZXQsIF9fcDAsIDM4KTsgXAotIFwKLSAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkMnFfZHVwX3AxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTE2eDh4Ml90IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDJxX2R1cF92KCZfX3JldCwgX19wMCwgMzcpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmxkMnFfZHVwX3AxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTE2eDh4Ml90IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDJxX2R1cF92KCZfX3JldCwgX19wMCwgMzcpOyBcCi0gXAotICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQycV9kdXBfdTgoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ4eDE2eDJfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQycV9kdXBfdigmX19yZXQsIF9fcDAsIDQ4KTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDJxX2R1cF91OChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDh4MTZ4Ml90IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDJxX2R1cF92KCZfX3JldCwgX19wMCwgNDgpOyBcCi0gXAotICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQycV9kdXBfdTMyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MzJ4NHgyX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkMnFfZHVwX3YoJl9fcmV0LCBfX3AwLCA1MCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQycV9kdXBfdTMyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MzJ4NHgyX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkMnFfZHVwX3YoJl9fcmV0LCBfX3AwLCA1MCk7IFwKLSBcCi0gIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAotICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZsZDJxX2R1cF91NjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ2NHgyeDJfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQycV9kdXBfdigmX19yZXQsIF9fcDAsIDUxKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDJxX2R1cF91NjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ2NHgyeDJfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQycV9kdXBfdigmX19yZXQsIF9fcDAsIDUxKTsgXAotIFwKLSAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkMnFfZHVwX3UxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDE2eDh4Ml90IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDJxX2R1cF92KCZfX3JldCwgX19wMCwgNDkpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmxkMnFfZHVwX3UxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDE2eDh4Ml90IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDJxX2R1cF92KCZfX3JldCwgX19wMCwgNDkpOyBcCi0gXAotICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQycV9kdXBfczgoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDh4MTZ4Ml90IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDJxX2R1cF92KCZfX3JldCwgX19wMCwgMzIpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmxkMnFfZHVwX3M4KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ4eDE2eDJfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQycV9kdXBfdigmX19yZXQsIF9fcDAsIDMyKTsgXAotIFwKLSAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkMnFfZHVwX2Y2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQ2NHgyeDJfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQycV9kdXBfdigmX19yZXQsIF9fcDAsIDQyKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDJxX2R1cF9mNjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0NjR4MngyX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkMnFfZHVwX3YoJl9fcmV0LCBfX3AwLCA0Mik7IFwKLSBcCi0gIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxLCAwKTsgXAotICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZsZDJxX2R1cF9mMzIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0MzJ4NHgyX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkMnFfZHVwX3YoJl9fcmV0LCBfX3AwLCA0MSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQycV9kdXBfZjMyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDMyeDR4Ml90IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDJxX2R1cF92KCZfX3JldCwgX19wMCwgNDEpOyBcCi0gXAotICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQycV9kdXBfZjE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDE2eDh4Ml90IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDJxX2R1cF92KCZfX3JldCwgX19wMCwgNDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmxkMnFfZHVwX2YxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQxNng4eDJfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQycV9kdXBfdigmX19yZXQsIF9fcDAsIDQwKTsgXAotIFwKLSAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkMnFfZHVwX3MzMihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MzJ4NHgyX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkMnFfZHVwX3YoJl9fcmV0LCBfX3AwLCAzNCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQycV9kdXBfczMyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQzMng0eDJfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQycV9kdXBfdigmX19yZXQsIF9fcDAsIDM0KTsgXAotIFwKLSAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkMnFfZHVwX3M2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50NjR4MngyX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkMnFfZHVwX3YoJl9fcmV0LCBfX3AwLCAzNSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQycV9kdXBfczY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ2NHgyeDJfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQycV9kdXBfdigmX19yZXQsIF9fcDAsIDM1KTsgXAotIFwKLSAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkMnFfZHVwX3MxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MTZ4OHgyX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkMnFfZHVwX3YoJl9fcmV0LCBfX3AwLCAzMyk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQycV9kdXBfczE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQxNng4eDJfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQycV9kdXBfdigmX19yZXQsIF9fcDAsIDMzKTsgXAotIFwKLSAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkMl9kdXBfZjY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDY0eDF4Ml90IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDJfZHVwX3YoJl9fcmV0LCBfX3AwLCAxMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQyX2R1cF9mNjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0NjR4MXgyX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkMl9kdXBfdigmX19yZXQsIF9fcDAsIDEwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkMl9sYW5lX3A2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTY0eDF4Ml90IF9fczEgPSBfX3AxOyBcCi0gIHBvbHk2NHgxeDJfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQyX2xhbmVfdigmX19yZXQsIF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCBfX3AyLCA2KTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDJfbGFuZV9wNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHk2NHgxeDJfdCBfX3MxID0gX19wMTsgXAotICBwb2x5NjR4MXgyX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkMl9sYW5lX3YoJl9fcmV0LCBfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgX19wMiwgNik7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZsZDJxX2xhbmVfcDgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHk4eDE2eDJfdCBfX3MxID0gX19wMTsgXAotICBwb2x5OHgxNngyX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkMnFfbGFuZV92KCZfX3JldCwgX19wMCwgKGludDh4MTZfdClfX3MxLnZhbFswXSwgKGludDh4MTZfdClfX3MxLnZhbFsxXSwgX19wMiwgMzYpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmxkMnFfbGFuZV9wOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTh4MTZ4Ml90IF9fczEgPSBfX3AxOyBcCi0gIHBvbHk4eDE2eDJfdCBfX3JldjE7IFwKLSAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgcG9seTh4MTZ4Ml90IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDJxX2xhbmVfdigmX19yZXQsIF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCBfX3AyLCAzNik7IFwKLSBcCi0gIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZsZDJxX2xhbmVfcDY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBwb2x5NjR4MngyX3QgX19zMSA9IF9fcDE7IFwKLSAgcG9seTY0eDJ4Ml90IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDJxX2xhbmVfdigmX19yZXQsIF9fcDAsIChpbnQ4eDE2X3QpX19zMS52YWxbMF0sIChpbnQ4eDE2X3QpX19zMS52YWxbMV0sIF9fcDIsIDM4KTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDJxX2xhbmVfcDY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBwb2x5NjR4MngyX3QgX19zMSA9IF9fcDE7IFwKLSAgcG9seTY0eDJ4Ml90IF9fcmV2MTsgXAotICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxLCAwKTsgXAotICBwb2x5NjR4MngyX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkMnFfbGFuZV92KCZfX3JldCwgX19wMCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIF9fcDIsIDM4KTsgXAotIFwKLSAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkMnFfbGFuZV91OChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDh4MTZ4Ml90IF9fczEgPSBfX3AxOyBcCi0gIHVpbnQ4eDE2eDJfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQycV9sYW5lX3YoJl9fcmV0LCBfX3AwLCAoaW50OHgxNl90KV9fczEudmFsWzBdLCAoaW50OHgxNl90KV9fczEudmFsWzFdLCBfX3AyLCA0OCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQycV9sYW5lX3U4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50OHgxNngyX3QgX19zMSA9IF9fcDE7IFwKLSAgdWludDh4MTZ4Ml90IF9fcmV2MTsgXAotICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICB1aW50OHgxNngyX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkMnFfbGFuZV92KCZfX3JldCwgX19wMCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIF9fcDIsIDQ4KTsgXAotIFwKLSAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkMnFfbGFuZV91NjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ2NHgyeDJfdCBfX3MxID0gX19wMTsgXAotICB1aW50NjR4MngyX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkMnFfbGFuZV92KCZfX3JldCwgX19wMCwgKGludDh4MTZfdClfX3MxLnZhbFswXSwgKGludDh4MTZfdClfX3MxLnZhbFsxXSwgX19wMiwgNTEpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmxkMnFfbGFuZV91NjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ2NHgyeDJfdCBfX3MxID0gX19wMTsgXAotICB1aW50NjR4MngyX3QgX19yZXYxOyBcCi0gIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDEsIDApOyBcCi0gIHVpbnQ2NHgyeDJfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQycV9sYW5lX3YoJl9fcmV0LCBfX3AwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgX19wMiwgNTEpOyBcCi0gXAotICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQycV9sYW5lX3M4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ4eDE2eDJfdCBfX3MxID0gX19wMTsgXAotICBpbnQ4eDE2eDJfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQycV9sYW5lX3YoJl9fcmV0LCBfX3AwLCAoaW50OHgxNl90KV9fczEudmFsWzBdLCAoaW50OHgxNl90KV9fczEudmFsWzFdLCBfX3AyLCAzMik7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQycV9sYW5lX3M4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ4eDE2eDJfdCBfX3MxID0gX19wMTsgXAotICBpbnQ4eDE2eDJfdCBfX3JldjE7IFwKLSAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgaW50OHgxNngyX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkMnFfbGFuZV92KCZfX3JldCwgX19wMCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIF9fcDIsIDMyKTsgXAotIFwKLSAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkMnFfbGFuZV9mNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0NjR4MngyX3QgX19zMSA9IF9fcDE7IFwKLSAgZmxvYXQ2NHgyeDJfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQycV9sYW5lX3YoJl9fcmV0LCBfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fcDIsIDQyKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDJxX2xhbmVfZjY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDY0eDJ4Ml90IF9fczEgPSBfX3AxOyBcCi0gIGZsb2F0NjR4MngyX3QgX19yZXYxOyBcCi0gIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDEsIDApOyBcCi0gIGZsb2F0NjR4MngyX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkMnFfbGFuZV92KCZfX3JldCwgX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgX19wMiwgNDIpOyBcCi0gXAotICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQycV9sYW5lX3M2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50NjR4MngyX3QgX19zMSA9IF9fcDE7IFwKLSAgaW50NjR4MngyX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkMnFfbGFuZV92KCZfX3JldCwgX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3AyLCAzNSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQycV9sYW5lX3M2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50NjR4MngyX3QgX19zMSA9IF9fcDE7IFwKLSAgaW50NjR4MngyX3QgX19yZXYxOyBcCi0gIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDEsIDApOyBcCi0gIGludDY0eDJ4Ml90IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDJxX2xhbmVfdigmX19yZXQsIF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcDIsIDM1KTsgXAotIFwKLSAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkMl9sYW5lX3U2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDY0eDF4Ml90IF9fczEgPSBfX3AxOyBcCi0gIHVpbnQ2NHgxeDJfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQyX2xhbmVfdigmX19yZXQsIF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCBfX3AyLCAxOSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQyX2xhbmVfdTY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50NjR4MXgyX3QgX19zMSA9IF9fcDE7IFwKLSAgdWludDY0eDF4Ml90IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDJfbGFuZV92KCZfX3JldCwgX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIF9fcDIsIDE5KTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkMl9sYW5lX2Y2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQ2NHgxeDJfdCBfX3MxID0gX19wMTsgXAotICBmbG9hdDY0eDF4Ml90IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDJfbGFuZV92KCZfX3JldCwgX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3AyLCAxMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQyX2xhbmVfZjY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDY0eDF4Ml90IF9fczEgPSBfX3AxOyBcCi0gIGZsb2F0NjR4MXgyX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkMl9sYW5lX3YoJl9fcmV0LCBfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fcDIsIDEwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkMl9sYW5lX3M2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50NjR4MXgyX3QgX19zMSA9IF9fcDE7IFwKLSAgaW50NjR4MXgyX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkMl9sYW5lX3YoJl9fcmV0LCBfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fcDIsIDMpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmxkMl9sYW5lX3M2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50NjR4MXgyX3QgX19zMSA9IF9fcDE7IFwKLSAgaW50NjR4MXgyX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkMl9sYW5lX3YoJl9fcmV0LCBfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fcDIsIDMpOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQzX3A2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTY0eDF4M190IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDNfdigmX19yZXQsIF9fcDAsIDYpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmxkM19wNjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHk2NHgxeDNfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQzX3YoJl9fcmV0LCBfX3AwLCA2KTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkM3FfcDY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBwb2x5NjR4MngzX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkM3FfdigmX19yZXQsIF9fcDAsIDM4KTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDNxX3A2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTY0eDJ4M190IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDNxX3YoJl9fcmV0LCBfX3AwLCAzOCk7IFwKLSBcCi0gIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxLCAwKTsgXAotICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQzcV91NjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ2NHgyeDNfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQzcV92KCZfX3JldCwgX19wMCwgNTEpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmxkM3FfdTY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50NjR4MngzX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkM3FfdigmX19yZXQsIF9fcDAsIDUxKTsgXAotIFwKLSAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxLCAwKTsgXAotICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZsZDNxX2Y2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQ2NHgyeDNfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQzcV92KCZfX3JldCwgX19wMCwgNDIpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmxkM3FfZjY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDY0eDJ4M190IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDNxX3YoJl9fcmV0LCBfX3AwLCA0Mik7IFwKLSBcCi0gIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxLCAwKTsgXAotICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQzcV9zNjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDY0eDJ4M190IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDNxX3YoJl9fcmV0LCBfX3AwLCAzNSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQzcV9zNjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDY0eDJ4M190IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDNxX3YoJl9fcmV0LCBfX3AwLCAzNSk7IFwKLSBcCi0gIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxLCAwKTsgXAotICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQzX2Y2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQ2NHgxeDNfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQzX3YoJl9fcmV0LCBfX3AwLCAxMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQzX2Y2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQ2NHgxeDNfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQzX3YoJl9fcmV0LCBfX3AwLCAxMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZsZDNfZHVwX3A2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTY0eDF4M190IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDNfZHVwX3YoJl9fcmV0LCBfX3AwLCA2KTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDNfZHVwX3A2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTY0eDF4M190IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDNfZHVwX3YoJl9fcmV0LCBfX3AwLCA2KTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkM3FfZHVwX3A4KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBwb2x5OHgxNngzX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkM3FfZHVwX3YoJl9fcmV0LCBfX3AwLCAzNik7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQzcV9kdXBfcDgoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHk4eDE2eDNfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQzcV9kdXBfdigmX19yZXQsIF9fcDAsIDM2KTsgXAotIFwKLSAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZsZDNxX2R1cF9wNjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHk2NHgyeDNfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQzcV9kdXBfdigmX19yZXQsIF9fcDAsIDM4KTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDNxX2R1cF9wNjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHk2NHgyeDNfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQzcV9kdXBfdigmX19yZXQsIF9fcDAsIDM4KTsgXAotIFwKLSAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxLCAwKTsgXAotICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZsZDNxX2R1cF9wMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHkxNng4eDNfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQzcV9kdXBfdigmX19yZXQsIF9fcDAsIDM3KTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDNxX2R1cF9wMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHkxNng4eDNfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQzcV9kdXBfdigmX19yZXQsIF9fcDAsIDM3KTsgXAotIFwKLSAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZsZDNxX2R1cF91OChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDh4MTZ4M190IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDNxX2R1cF92KCZfX3JldCwgX19wMCwgNDgpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmxkM3FfZHVwX3U4KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50OHgxNngzX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkM3FfZHVwX3YoJl9fcmV0LCBfX3AwLCA0OCk7IFwKLSBcCi0gIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQzcV9kdXBfdTMyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MzJ4NHgzX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkM3FfZHVwX3YoJl9fcmV0LCBfX3AwLCA1MCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQzcV9kdXBfdTMyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MzJ4NHgzX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkM3FfZHVwX3YoJl9fcmV0LCBfX3AwLCA1MCk7IFwKLSBcCi0gIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAotICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQzcV9kdXBfdTY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50NjR4MngzX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkM3FfZHVwX3YoJl9fcmV0LCBfX3AwLCA1MSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQzcV9kdXBfdTY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50NjR4MngzX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkM3FfZHVwX3YoJl9fcmV0LCBfX3AwLCA1MSk7IFwKLSBcCi0gIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxLCAwKTsgXAotICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQzcV9kdXBfdTE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MTZ4OHgzX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkM3FfZHVwX3YoJl9fcmV0LCBfX3AwLCA0OSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQzcV9kdXBfdTE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MTZ4OHgzX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkM3FfZHVwX3YoJl9fcmV0LCBfX3AwLCA0OSk7IFwKLSBcCi0gIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQzcV9kdXBfczgoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDh4MTZ4M190IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDNxX2R1cF92KCZfX3JldCwgX19wMCwgMzIpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmxkM3FfZHVwX3M4KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ4eDE2eDNfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQzcV9kdXBfdigmX19yZXQsIF9fcDAsIDMyKTsgXAotIFwKLSAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZsZDNxX2R1cF9mNjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0NjR4MngzX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkM3FfZHVwX3YoJl9fcmV0LCBfX3AwLCA0Mik7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQzcV9kdXBfZjY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDY0eDJ4M190IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDNxX2R1cF92KCZfX3JldCwgX19wMCwgNDIpOyBcCi0gXAotICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkM3FfZHVwX2YzMihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQzMng0eDNfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQzcV9kdXBfdigmX19yZXQsIF9fcDAsIDQxKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDNxX2R1cF9mMzIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0MzJ4NHgzX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkM3FfZHVwX3YoJl9fcmV0LCBfX3AwLCA0MSk7IFwKLSBcCi0gIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAotICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQzcV9kdXBfZjE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDE2eDh4M190IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDNxX2R1cF92KCZfX3JldCwgX19wMCwgNDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmxkM3FfZHVwX2YxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQxNng4eDNfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQzcV9kdXBfdigmX19yZXQsIF9fcDAsIDQwKTsgXAotIFwKLSAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZsZDNxX2R1cF9zMzIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDMyeDR4M190IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDNxX2R1cF92KCZfX3JldCwgX19wMCwgMzQpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmxkM3FfZHVwX3MzMihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MzJ4NHgzX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkM3FfZHVwX3YoJl9fcmV0LCBfX3AwLCAzNCk7IFwKLSBcCi0gIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAotICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQzcV9kdXBfczY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ2NHgyeDNfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQzcV9kdXBfdigmX19yZXQsIF9fcDAsIDM1KTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDNxX2R1cF9zNjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDY0eDJ4M190IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDNxX2R1cF92KCZfX3JldCwgX19wMCwgMzUpOyBcCi0gXAotICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkM3FfZHVwX3MxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MTZ4OHgzX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkM3FfZHVwX3YoJl9fcmV0LCBfX3AwLCAzMyk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQzcV9kdXBfczE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQxNng4eDNfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQzcV9kdXBfdigmX19yZXQsIF9fcDAsIDMzKTsgXAotIFwKLSAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZsZDNfZHVwX2Y2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQ2NHgxeDNfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQzX2R1cF92KCZfX3JldCwgX19wMCwgMTApOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmxkM19kdXBfZjY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDY0eDF4M190IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDNfZHVwX3YoJl9fcmV0LCBfX3AwLCAxMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZsZDNfbGFuZV9wNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHk2NHgxeDNfdCBfX3MxID0gX19wMTsgXAotICBwb2x5NjR4MXgzX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkM19sYW5lX3YoJl9fcmV0LCBfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgKGludDh4OF90KV9fczEudmFsWzJdLCBfX3AyLCA2KTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDNfbGFuZV9wNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHk2NHgxeDNfdCBfX3MxID0gX19wMTsgXAotICBwb2x5NjR4MXgzX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkM19sYW5lX3YoJl9fcmV0LCBfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgKGludDh4OF90KV9fczEudmFsWzJdLCBfX3AyLCA2KTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkM3FfbGFuZV9wOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTh4MTZ4M190IF9fczEgPSBfX3AxOyBcCi0gIHBvbHk4eDE2eDNfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQzcV9sYW5lX3YoJl9fcmV0LCBfX3AwLCAoaW50OHgxNl90KV9fczEudmFsWzBdLCAoaW50OHgxNl90KV9fczEudmFsWzFdLCAoaW50OHgxNl90KV9fczEudmFsWzJdLCBfX3AyLCAzNik7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQzcV9sYW5lX3A4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBwb2x5OHgxNngzX3QgX19zMSA9IF9fcDE7IFwKLSAgcG9seTh4MTZ4M190IF9fcmV2MTsgXAotICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBwb2x5OHgxNngzX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkM3FfbGFuZV92KCZfX3JldCwgX19wMCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsyXSwgX19wMiwgMzYpOyBcCi0gXAotICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkM3FfbGFuZV9wNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHk2NHgyeDNfdCBfX3MxID0gX19wMTsgXAotICBwb2x5NjR4MngzX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkM3FfbGFuZV92KCZfX3JldCwgX19wMCwgKGludDh4MTZfdClfX3MxLnZhbFswXSwgKGludDh4MTZfdClfX3MxLnZhbFsxXSwgKGludDh4MTZfdClfX3MxLnZhbFsyXSwgX19wMiwgMzgpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmxkM3FfbGFuZV9wNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHk2NHgyeDNfdCBfX3MxID0gX19wMTsgXAotICBwb2x5NjR4MngzX3QgX19yZXYxOyBcCi0gIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDEsIDApOyBcCi0gIHBvbHk2NHgyeDNfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQzcV9sYW5lX3YoJl9fcmV0LCBfX3AwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgKGludDh4MTZfdClfX3JldjEudmFsWzJdLCBfX3AyLCAzOCk7IFwKLSBcCi0gIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxLCAwKTsgXAotICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQzcV9sYW5lX3U4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50OHgxNngzX3QgX19zMSA9IF9fcDE7IFwKLSAgdWludDh4MTZ4M190IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDNxX2xhbmVfdigmX19yZXQsIF9fcDAsIChpbnQ4eDE2X3QpX19zMS52YWxbMF0sIChpbnQ4eDE2X3QpX19zMS52YWxbMV0sIChpbnQ4eDE2X3QpX19zMS52YWxbMl0sIF9fcDIsIDQ4KTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDNxX2xhbmVfdTgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ4eDE2eDNfdCBfX3MxID0gX19wMTsgXAotICB1aW50OHgxNngzX3QgX19yZXYxOyBcCi0gIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIHVpbnQ4eDE2eDNfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQzcV9sYW5lX3YoJl9fcmV0LCBfX3AwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgKGludDh4MTZfdClfX3JldjEudmFsWzJdLCBfX3AyLCA0OCk7IFwKLSBcCi0gIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQzcV9sYW5lX3U2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDY0eDJ4M190IF9fczEgPSBfX3AxOyBcCi0gIHVpbnQ2NHgyeDNfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQzcV9sYW5lX3YoJl9fcmV0LCBfX3AwLCAoaW50OHgxNl90KV9fczEudmFsWzBdLCAoaW50OHgxNl90KV9fczEudmFsWzFdLCAoaW50OHgxNl90KV9fczEudmFsWzJdLCBfX3AyLCA1MSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQzcV9sYW5lX3U2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDY0eDJ4M190IF9fczEgPSBfX3AxOyBcCi0gIHVpbnQ2NHgyeDNfdCBfX3JldjE7IFwKLSAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMSwgMCk7IFwKLSAgdWludDY0eDJ4M190IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDNxX2xhbmVfdigmX19yZXQsIF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMl0sIF9fcDIsIDUxKTsgXAotIFwKLSAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxLCAwKTsgXAotICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZsZDNxX2xhbmVfczgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDh4MTZ4M190IF9fczEgPSBfX3AxOyBcCi0gIGludDh4MTZ4M190IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDNxX2xhbmVfdigmX19yZXQsIF9fcDAsIChpbnQ4eDE2X3QpX19zMS52YWxbMF0sIChpbnQ4eDE2X3QpX19zMS52YWxbMV0sIChpbnQ4eDE2X3QpX19zMS52YWxbMl0sIF9fcDIsIDMyKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDNxX2xhbmVfczgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDh4MTZ4M190IF9fczEgPSBfX3AxOyBcCi0gIGludDh4MTZ4M190IF9fcmV2MTsgXAotICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBpbnQ4eDE2eDNfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQzcV9sYW5lX3YoJl9fcmV0LCBfX3AwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgKGludDh4MTZfdClfX3JldjEudmFsWzJdLCBfX3AyLCAzMik7IFwKLSBcCi0gIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQzcV9sYW5lX2Y2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQ2NHgyeDNfdCBfX3MxID0gX19wMTsgXAotICBmbG9hdDY0eDJ4M190IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDNxX2xhbmVfdigmX19yZXQsIF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIF9fcDIsIDQyKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDNxX2xhbmVfZjY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDY0eDJ4M190IF9fczEgPSBfX3AxOyBcCi0gIGZsb2F0NjR4MngzX3QgX19yZXYxOyBcCi0gIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDEsIDApOyBcCi0gIGZsb2F0NjR4MngzX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkM3FfbGFuZV92KCZfX3JldCwgX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgX19yZXYxLnZhbFsyXSwgX19wMiwgNDIpOyBcCi0gXAotICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkM3FfbGFuZV9zNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDY0eDJ4M190IF9fczEgPSBfX3AxOyBcCi0gIGludDY0eDJ4M190IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDNxX2xhbmVfdigmX19yZXQsIF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIF9fcDIsIDM1KTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDNxX2xhbmVfczY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ2NHgyeDNfdCBfX3MxID0gX19wMTsgXAotICBpbnQ2NHgyeDNfdCBfX3JldjE7IFwKLSAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMSwgMCk7IFwKLSAgaW50NjR4MngzX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkM3FfbGFuZV92KCZfX3JldCwgX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgX19yZXYxLnZhbFsyXSwgX19wMiwgMzUpOyBcCi0gXAotICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkM19sYW5lX3U2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDY0eDF4M190IF9fczEgPSBfX3AxOyBcCi0gIHVpbnQ2NHgxeDNfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQzX2xhbmVfdigmX19yZXQsIF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCAoaW50OHg4X3QpX19zMS52YWxbMl0sIF9fcDIsIDE5KTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDNfbGFuZV91NjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ2NHgxeDNfdCBfX3MxID0gX19wMTsgXAotICB1aW50NjR4MXgzX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkM19sYW5lX3YoJl9fcmV0LCBfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgKGludDh4OF90KV9fczEudmFsWzJdLCBfX3AyLCAxOSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZsZDNfbGFuZV9mNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0NjR4MXgzX3QgX19zMSA9IF9fcDE7IFwKLSAgZmxvYXQ2NHgxeDNfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQzX2xhbmVfdigmX19yZXQsIF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIF9fcDIsIDEwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDNfbGFuZV9mNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0NjR4MXgzX3QgX19zMSA9IF9fcDE7IFwKLSAgZmxvYXQ2NHgxeDNfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQzX2xhbmVfdigmX19yZXQsIF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIF9fcDIsIDEwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkM19sYW5lX3M2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50NjR4MXgzX3QgX19zMSA9IF9fcDE7IFwKLSAgaW50NjR4MXgzX3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkM19sYW5lX3YoJl9fcmV0LCBfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCBfX3AyLCAzKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDNfbGFuZV9zNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDY0eDF4M190IF9fczEgPSBfX3AxOyBcCi0gIGludDY0eDF4M190IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDNfbGFuZV92KCZfX3JldCwgX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgX19wMiwgMyk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZsZDRfcDY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBwb2x5NjR4MXg0X3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkNF92KCZfX3JldCwgX19wMCwgNik7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQ0X3A2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTY0eDF4NF90IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDRfdigmX19yZXQsIF9fcDAsIDYpOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQ0cV9wNjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHk2NHgyeDRfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQ0cV92KCZfX3JldCwgX19wMCwgMzgpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmxkNHFfcDY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBwb2x5NjR4Mng0X3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkNHFfdigmX19yZXQsIF9fcDAsIDM4KTsgXAotIFwKLSAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxLCAwKTsgXAotICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzNdLCBfX3JldC52YWxbM10sIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQ0cV91NjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ2NHgyeDRfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQ0cV92KCZfX3JldCwgX19wMCwgNTEpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmxkNHFfdTY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50NjR4Mng0X3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkNHFfdigmX19yZXQsIF9fcDAsIDUxKTsgXAotIFwKLSAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxLCAwKTsgXAotICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzNdLCBfX3JldC52YWxbM10sIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQ0cV9mNjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0NjR4Mng0X3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkNHFfdigmX19yZXQsIF9fcDAsIDQyKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDRxX2Y2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQ2NHgyeDRfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQ0cV92KCZfX3JldCwgX19wMCwgNDIpOyBcCi0gXAotICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAxLCAwKTsgXAotICBfX3JldC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbM10sIF9fcmV0LnZhbFszXSwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZsZDRxX3M2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50NjR4Mng0X3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkNHFfdigmX19yZXQsIF9fcDAsIDM1KTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDRxX3M2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50NjR4Mng0X3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkNHFfdigmX19yZXQsIF9fcDAsIDM1KTsgXAotIFwKLSAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxLCAwKTsgXAotICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzNdLCBfX3JldC52YWxbM10sIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQ0X2Y2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQ2NHgxeDRfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQ0X3YoJl9fcmV0LCBfX3AwLCAxMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQ0X2Y2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQ2NHgxeDRfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQ0X3YoJl9fcmV0LCBfX3AwLCAxMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZsZDRfZHVwX3A2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTY0eDF4NF90IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDRfZHVwX3YoJl9fcmV0LCBfX3AwLCA2KTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDRfZHVwX3A2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTY0eDF4NF90IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDRfZHVwX3YoJl9fcmV0LCBfX3AwLCA2KTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkNHFfZHVwX3A4KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBwb2x5OHgxNng0X3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkNHFfZHVwX3YoJl9fcmV0LCBfX3AwLCAzNik7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQ0cV9kdXBfcDgoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHk4eDE2eDRfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQ0cV9kdXBfdigmX19yZXQsIF9fcDAsIDM2KTsgXAotIFwKLSAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzNdLCBfX3JldC52YWxbM10sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQ0cV9kdXBfcDY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBwb2x5NjR4Mng0X3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkNHFfZHVwX3YoJl9fcmV0LCBfX3AwLCAzOCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQ0cV9kdXBfcDY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBwb2x5NjR4Mng0X3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkNHFfZHVwX3YoJl9fcmV0LCBfX3AwLCAzOCk7IFwKLSBcCi0gIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxLCAwKTsgXAotICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDEsIDApOyBcCi0gIF9fcmV0LnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFszXSwgX19yZXQudmFsWzNdLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkNHFfZHVwX3AxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTE2eDh4NF90IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDRxX2R1cF92KCZfX3JldCwgX19wMCwgMzcpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmxkNHFfZHVwX3AxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTE2eDh4NF90IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDRxX2R1cF92KCZfX3JldCwgX19wMCwgMzcpOyBcCi0gXAotICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbM10sIF9fcmV0LnZhbFszXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZsZDRxX2R1cF91OChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDh4MTZ4NF90IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDRxX2R1cF92KCZfX3JldCwgX19wMCwgNDgpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmxkNHFfZHVwX3U4KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50OHgxNng0X3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkNHFfZHVwX3YoJl9fcmV0LCBfX3AwLCA0OCk7IFwKLSBcCi0gIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0LnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFszXSwgX19yZXQudmFsWzNdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkNHFfZHVwX3UzMihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDMyeDR4NF90IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDRxX2R1cF92KCZfX3JldCwgX19wMCwgNTApOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmxkNHFfZHVwX3UzMihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDMyeDR4NF90IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDRxX2R1cF92KCZfX3JldCwgX19wMCwgNTApOyBcCi0gXAotICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAotICBfX3JldC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbM10sIF9fcmV0LnZhbFszXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZsZDRxX2R1cF91NjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ2NHgyeDRfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQ0cV9kdXBfdigmX19yZXQsIF9fcDAsIDUxKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDRxX2R1cF91NjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ2NHgyeDRfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQ0cV9kdXBfdigmX19yZXQsIF9fcDAsIDUxKTsgXAotIFwKLSAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxLCAwKTsgXAotICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzNdLCBfX3JldC52YWxbM10sIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQ0cV9kdXBfdTE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MTZ4OHg0X3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkNHFfZHVwX3YoJl9fcmV0LCBfX3AwLCA0OSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQ0cV9kdXBfdTE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MTZ4OHg0X3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkNHFfZHVwX3YoJl9fcmV0LCBfX3AwLCA0OSk7IFwKLSBcCi0gIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0LnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFszXSwgX19yZXQudmFsWzNdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkNHFfZHVwX3M4KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ4eDE2eDRfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQ0cV9kdXBfdigmX19yZXQsIF9fcDAsIDMyKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDRxX2R1cF9zOChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50OHgxNng0X3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkNHFfZHVwX3YoJl9fcmV0LCBfX3AwLCAzMik7IFwKLSBcCi0gIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0LnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFszXSwgX19yZXQudmFsWzNdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkNHFfZHVwX2Y2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQ2NHgyeDRfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQ0cV9kdXBfdigmX19yZXQsIF9fcDAsIDQyKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDRxX2R1cF9mNjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0NjR4Mng0X3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkNHFfZHVwX3YoJl9fcmV0LCBfX3AwLCA0Mik7IFwKLSBcCi0gIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxLCAwKTsgXAotICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDEsIDApOyBcCi0gIF9fcmV0LnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFszXSwgX19yZXQudmFsWzNdLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkNHFfZHVwX2YzMihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQzMng0eDRfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQ0cV9kdXBfdigmX19yZXQsIF9fcDAsIDQxKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDRxX2R1cF9mMzIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0MzJ4NHg0X3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkNHFfZHVwX3YoJl9fcmV0LCBfX3AwLCA0MSk7IFwKLSBcCi0gIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAotICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0LnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFszXSwgX19yZXQudmFsWzNdLCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkNHFfZHVwX2YxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQxNng4eDRfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQ0cV9kdXBfdigmX19yZXQsIF9fcDAsIDQwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDRxX2R1cF9mMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0MTZ4OHg0X3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkNHFfZHVwX3YoJl9fcmV0LCBfX3AwLCA0MCk7IFwKLSBcCi0gIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0LnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFszXSwgX19yZXQudmFsWzNdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkNHFfZHVwX3MzMihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MzJ4NHg0X3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkNHFfZHVwX3YoJl9fcmV0LCBfX3AwLCAzNCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQ0cV9kdXBfczMyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQzMng0eDRfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQ0cV9kdXBfdigmX19yZXQsIF9fcDAsIDM0KTsgXAotIFwKLSAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAotICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzNdLCBfX3JldC52YWxbM10sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQ0cV9kdXBfczY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ2NHgyeDRfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQ0cV9kdXBfdigmX19yZXQsIF9fcDAsIDM1KTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDRxX2R1cF9zNjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDY0eDJ4NF90IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDRxX2R1cF92KCZfX3JldCwgX19wMCwgMzUpOyBcCi0gXAotICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAxLCAwKTsgXAotICBfX3JldC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbM10sIF9fcmV0LnZhbFszXSwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZsZDRxX2R1cF9zMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDE2eDh4NF90IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDRxX2R1cF92KCZfX3JldCwgX19wMCwgMzMpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmxkNHFfZHVwX3MxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MTZ4OHg0X3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkNHFfZHVwX3YoJl9fcmV0LCBfX3AwLCAzMyk7IFwKLSBcCi0gIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0LnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFszXSwgX19yZXQudmFsWzNdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkNF9kdXBfZjY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDY0eDF4NF90IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDRfZHVwX3YoJl9fcmV0LCBfX3AwLCAxMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQ0X2R1cF9mNjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0NjR4MXg0X3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkNF9kdXBfdigmX19yZXQsIF9fcDAsIDEwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkNF9sYW5lX3A2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTY0eDF4NF90IF9fczEgPSBfX3AxOyBcCi0gIHBvbHk2NHgxeDRfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQ0X2xhbmVfdigmX19yZXQsIF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCAoaW50OHg4X3QpX19zMS52YWxbMl0sIChpbnQ4eDhfdClfX3MxLnZhbFszXSwgX19wMiwgNik7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQ0X2xhbmVfcDY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBwb2x5NjR4MXg0X3QgX19zMSA9IF9fcDE7IFwKLSAgcG9seTY0eDF4NF90IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDRfbGFuZV92KCZfX3JldCwgX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIChpbnQ4eDhfdClfX3MxLnZhbFsyXSwgKGludDh4OF90KV9fczEudmFsWzNdLCBfX3AyLCA2KTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkNHFfbGFuZV9wOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTh4MTZ4NF90IF9fczEgPSBfX3AxOyBcCi0gIHBvbHk4eDE2eDRfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQ0cV9sYW5lX3YoJl9fcmV0LCBfX3AwLCAoaW50OHgxNl90KV9fczEudmFsWzBdLCAoaW50OHgxNl90KV9fczEudmFsWzFdLCAoaW50OHgxNl90KV9fczEudmFsWzJdLCAoaW50OHgxNl90KV9fczEudmFsWzNdLCBfX3AyLCAzNik7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQ0cV9sYW5lX3A4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBwb2x5OHgxNng0X3QgX19zMSA9IF9fcDE7IFwKLSAgcG9seTh4MTZ4NF90IF9fcmV2MTsgXAotICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbM10sIF9fczEudmFsWzNdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBwb2x5OHgxNng0X3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkNHFfbGFuZV92KCZfX3JldCwgX19wMCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsyXSwgKGludDh4MTZfdClfX3JldjEudmFsWzNdLCBfX3AyLCAzNik7IFwKLSBcCi0gIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0LnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFszXSwgX19yZXQudmFsWzNdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkNHFfbGFuZV9wNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHk2NHgyeDRfdCBfX3MxID0gX19wMTsgXAotICBwb2x5NjR4Mng0X3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkNHFfbGFuZV92KCZfX3JldCwgX19wMCwgKGludDh4MTZfdClfX3MxLnZhbFswXSwgKGludDh4MTZfdClfX3MxLnZhbFsxXSwgKGludDh4MTZfdClfX3MxLnZhbFsyXSwgKGludDh4MTZfdClfX3MxLnZhbFszXSwgX19wMiwgMzgpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmxkNHFfbGFuZV9wNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHk2NHgyeDRfdCBfX3MxID0gX19wMTsgXAotICBwb2x5NjR4Mng0X3QgX19yZXYxOyBcCi0gIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFszXSwgX19zMS52YWxbM10sIDEsIDApOyBcCi0gIHBvbHk2NHgyeDRfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQ0cV9sYW5lX3YoJl9fcmV0LCBfX3AwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgKGludDh4MTZfdClfX3JldjEudmFsWzJdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbM10sIF9fcDIsIDM4KTsgXAotIFwKLSAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxLCAwKTsgXAotICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzNdLCBfX3JldC52YWxbM10sIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQ0cV9sYW5lX3U4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50OHgxNng0X3QgX19zMSA9IF9fcDE7IFwKLSAgdWludDh4MTZ4NF90IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDRxX2xhbmVfdigmX19yZXQsIF9fcDAsIChpbnQ4eDE2X3QpX19zMS52YWxbMF0sIChpbnQ4eDE2X3QpX19zMS52YWxbMV0sIChpbnQ4eDE2X3QpX19zMS52YWxbMl0sIChpbnQ4eDE2X3QpX19zMS52YWxbM10sIF9fcDIsIDQ4KTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDRxX2xhbmVfdTgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ4eDE2eDRfdCBfX3MxID0gX19wMTsgXAotICB1aW50OHgxNng0X3QgX19yZXYxOyBcCi0gIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFszXSwgX19zMS52YWxbM10sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIHVpbnQ4eDE2eDRfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQ0cV9sYW5lX3YoJl9fcmV0LCBfX3AwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgKGludDh4MTZfdClfX3JldjEudmFsWzJdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbM10sIF9fcDIsIDQ4KTsgXAotIFwKLSAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzNdLCBfX3JldC52YWxbM10sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQ0cV9sYW5lX3U2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDY0eDJ4NF90IF9fczEgPSBfX3AxOyBcCi0gIHVpbnQ2NHgyeDRfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQ0cV9sYW5lX3YoJl9fcmV0LCBfX3AwLCAoaW50OHgxNl90KV9fczEudmFsWzBdLCAoaW50OHgxNl90KV9fczEudmFsWzFdLCAoaW50OHgxNl90KV9fczEudmFsWzJdLCAoaW50OHgxNl90KV9fczEudmFsWzNdLCBfX3AyLCA1MSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQ0cV9sYW5lX3U2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDY0eDJ4NF90IF9fczEgPSBfX3AxOyBcCi0gIHVpbnQ2NHgyeDRfdCBfX3JldjE7IFwKLSAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzNdLCBfX3MxLnZhbFszXSwgMSwgMCk7IFwKLSAgdWludDY0eDJ4NF90IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDRxX2xhbmVfdigmX19yZXQsIF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMl0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFszXSwgX19wMiwgNTEpOyBcCi0gXAotICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAxLCAwKTsgXAotICBfX3JldC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbM10sIF9fcmV0LnZhbFszXSwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZsZDRxX2xhbmVfczgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDh4MTZ4NF90IF9fczEgPSBfX3AxOyBcCi0gIGludDh4MTZ4NF90IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDRxX2xhbmVfdigmX19yZXQsIF9fcDAsIChpbnQ4eDE2X3QpX19zMS52YWxbMF0sIChpbnQ4eDE2X3QpX19zMS52YWxbMV0sIChpbnQ4eDE2X3QpX19zMS52YWxbMl0sIChpbnQ4eDE2X3QpX19zMS52YWxbM10sIF9fcDIsIDMyKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDRxX2xhbmVfczgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDh4MTZ4NF90IF9fczEgPSBfX3AxOyBcCi0gIGludDh4MTZ4NF90IF9fcmV2MTsgXAotICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbM10sIF9fczEudmFsWzNdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBpbnQ4eDE2eDRfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQ0cV9sYW5lX3YoJl9fcmV0LCBfX3AwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgKGludDh4MTZfdClfX3JldjEudmFsWzJdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbM10sIF9fcDIsIDMyKTsgXAotIFwKLSAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzNdLCBfX3JldC52YWxbM10sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQ0cV9sYW5lX2Y2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQ2NHgyeDRfdCBfX3MxID0gX19wMTsgXAotICBmbG9hdDY0eDJ4NF90IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDRxX2xhbmVfdigmX19yZXQsIF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIF9fczEudmFsWzNdLCBfX3AyLCA0Mik7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGQ0cV9sYW5lX2Y2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQ2NHgyeDRfdCBfX3MxID0gX19wMTsgXAotICBmbG9hdDY0eDJ4NF90IF9fcmV2MTsgXAotICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbM10sIF9fczEudmFsWzNdLCAxLCAwKTsgXAotICBmbG9hdDY0eDJ4NF90IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDRxX2xhbmVfdigmX19yZXQsIF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcmV2MS52YWxbMl0sIF9fcmV2MS52YWxbM10sIF9fcDIsIDQyKTsgXAotIFwKLSAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxLCAwKTsgXAotICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzNdLCBfX3JldC52YWxbM10sIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bGQ0cV9sYW5lX3M2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50NjR4Mng0X3QgX19zMSA9IF9fcDE7IFwKLSAgaW50NjR4Mng0X3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkNHFfbGFuZV92KCZfX3JldCwgX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgX19zMS52YWxbM10sIF9fcDIsIDM1KTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDRxX2xhbmVfczY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ2NHgyeDRfdCBfX3MxID0gX19wMTsgXAotICBpbnQ2NHgyeDRfdCBfX3JldjE7IFwKLSAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzNdLCBfX3MxLnZhbFszXSwgMSwgMCk7IFwKLSAgaW50NjR4Mng0X3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkNHFfbGFuZV92KCZfX3JldCwgX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgX19yZXYxLnZhbFsyXSwgX19yZXYxLnZhbFszXSwgX19wMiwgMzUpOyBcCi0gXAotICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMSwgMCk7IFwKLSAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDEsIDApOyBcCi0gIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAxLCAwKTsgXAotICBfX3JldC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbM10sIF9fcmV0LnZhbFszXSwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZsZDRfbGFuZV91NjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ2NHgxeDRfdCBfX3MxID0gX19wMTsgXAotICB1aW50NjR4MXg0X3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkNF9sYW5lX3YoJl9fcmV0LCBfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgKGludDh4OF90KV9fczEudmFsWzJdLCAoaW50OHg4X3QpX19zMS52YWxbM10sIF9fcDIsIDE5KTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDRfbGFuZV91NjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ2NHgxeDRfdCBfX3MxID0gX19wMTsgXAotICB1aW50NjR4MXg0X3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkNF9sYW5lX3YoJl9fcmV0LCBfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgKGludDh4OF90KV9fczEudmFsWzJdLCAoaW50OHg4X3QpX19zMS52YWxbM10sIF9fcDIsIDE5KTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmxkNF9sYW5lX2Y2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQ2NHgxeDRfdCBfX3MxID0gX19wMTsgXAotICBmbG9hdDY0eDF4NF90IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDRfbGFuZV92KCZfX3JldCwgX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgX19zMS52YWxbM10sIF9fcDIsIDEwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZsZDRfbGFuZV9mNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0NjR4MXg0X3QgX19zMSA9IF9fcDE7IFwKLSAgZmxvYXQ2NHgxeDRfdCBfX3JldDsgXAotICBfX2J1aWx0aW5fbmVvbl92bGQ0X2xhbmVfdigmX19yZXQsIF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIF9fczEudmFsWzNdLCBfX3AyLCAxMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZsZDRfbGFuZV9zNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDY0eDF4NF90IF9fczEgPSBfX3AxOyBcCi0gIGludDY0eDF4NF90IF9fcmV0OyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZsZDRfbGFuZV92KCZfX3JldCwgX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgX19zMS52YWxbM10sIF9fcDIsIDMpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmxkNF9sYW5lX3M2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50NjR4MXg0X3QgX19zMSA9IF9fcDE7IFwKLSAgaW50NjR4MXg0X3QgX19yZXQ7IFwKLSAgX19idWlsdGluX25lb25fdmxkNF9sYW5lX3YoJl9fcmV0LCBfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCBfX3MxLnZhbFszXSwgX19wMiwgMyk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZsZHJxX3AxMjgoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHkxMjhfdCBfX3JldDsgXAotICBfX3JldCA9IChwb2x5MTI4X3QpIF9fYnVpbHRpbl9uZW9uX3ZsZHJxX3AxMjgoX19wMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bGRycV9wMTI4KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBwb2x5MTI4X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAocG9seTEyOF90KSBfX2J1aWx0aW5fbmVvbl92bGRycV9wMTI4KF9fcDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBmbG9hdDY0eDJfdCB2bWF4cV9mNjQoZmxvYXQ2NHgyX3QgX19wMCwgZmxvYXQ2NHgyX3QgX19wMSkgewotICBmbG9hdDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZtYXhxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDQyKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgZmxvYXQ2NHgyX3Qgdm1heHFfZjY0KGZsb2F0NjR4Ml90IF9fcDAsIGZsb2F0NjR4Ml90IF9fcDEpIHsKLSAgZmxvYXQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIGZsb2F0NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOwotICBmbG9hdDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZtYXhxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA0Mik7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBmbG9hdDY0eDFfdCB2bWF4X2Y2NChmbG9hdDY0eDFfdCBfX3AwLCBmbG9hdDY0eDFfdCBfX3AxKSB7Ci0gIGZsb2F0NjR4MV90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDY0eDFfdCkgX19idWlsdGluX25lb25fdm1heF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBmbG9hdDY0eDFfdCB2bWF4X2Y2NChmbG9hdDY0eDFfdCBfX3AwLCBmbG9hdDY0eDFfdCBfX3AxKSB7Ci0gIGZsb2F0NjR4MV90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDY0eDFfdCkgX19idWlsdGluX25lb25fdm1heF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGZsb2F0NjRfdCB2bWF4bm12cV9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgewotICBmbG9hdDY0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0NjRfdCkgX19idWlsdGluX25lb25fdm1heG5tdnFfZjY0KChpbnQ4eDE2X3QpX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGZsb2F0NjRfdCB2bWF4bm12cV9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgewotICBmbG9hdDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgZmxvYXQ2NF90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZtYXhubXZxX2Y2NCgoaW50OHgxNl90KV9fcmV2MCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgZmxvYXQzMl90IHZtYXhubXZxX2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7Ci0gIGZsb2F0MzJfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQzMl90KSBfX2J1aWx0aW5fbmVvbl92bWF4bm12cV9mMzIoKGludDh4MTZfdClfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgZmxvYXQzMl90IHZtYXhubXZxX2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7Ci0gIGZsb2F0MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICBmbG9hdDMyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0MzJfdCkgX19idWlsdGluX25lb25fdm1heG5tdnFfZjMyKChpbnQ4eDE2X3QpX19yZXYwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBmbG9hdDMyX3Qgdm1heG5tdl9mMzIoZmxvYXQzMngyX3QgX19wMCkgewotICBmbG9hdDMyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0MzJfdCkgX19idWlsdGluX25lb25fdm1heG5tdl9mMzIoKGludDh4OF90KV9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBmbG9hdDMyX3Qgdm1heG5tdl9mMzIoZmxvYXQzMngyX3QgX19wMCkgewotICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgZmxvYXQzMl90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZtYXhubXZfZjMyKChpbnQ4eDhfdClfX3JldjApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ4X3Qgdm1heHZxX3U4KHVpbnQ4eDE2X3QgX19wMCkgewotICB1aW50OF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50OF90KSBfX2J1aWx0aW5fbmVvbl92bWF4dnFfdTgoKGludDh4MTZfdClfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDhfdCB2bWF4dnFfdTgodWludDh4MTZfdCBfX3AwKSB7Ci0gIHVpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQ4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ4X3QpIF9fYnVpbHRpbl9uZW9uX3ZtYXh2cV91OCgoaW50OHgxNl90KV9fcmV2MCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDMyX3Qgdm1heHZxX3UzMih1aW50MzJ4NF90IF9fcDApIHsKLSAgdWludDMyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92bWF4dnFfdTMyKChpbnQ4eDE2X3QpX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQzMl90IHZtYXh2cV91MzIodWludDMyeDRfdCBfX3AwKSB7Ci0gIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQzMl90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJfdCkgX19idWlsdGluX25lb25fdm1heHZxX3UzMigoaW50OHgxNl90KV9fcmV2MCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDE2X3Qgdm1heHZxX3UxNih1aW50MTZ4OF90IF9fcDApIHsKLSAgdWludDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92bWF4dnFfdTE2KChpbnQ4eDE2X3QpX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQxNl90IHZtYXh2cV91MTYodWludDE2eDhfdCBfX3AwKSB7Ci0gIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQxNl90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MTZfdCkgX19idWlsdGluX25lb25fdm1heHZxX3UxNigoaW50OHgxNl90KV9fcmV2MCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50OF90IHZtYXh2cV9zOChpbnQ4eDE2X3QgX19wMCkgewotICBpbnQ4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDhfdCkgX19idWlsdGluX25lb25fdm1heHZxX3M4KChpbnQ4eDE2X3QpX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDhfdCB2bWF4dnFfczgoaW50OHgxNl90IF9fcDApIHsKLSAgaW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQ4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDhfdCkgX19idWlsdGluX25lb25fdm1heHZxX3M4KChpbnQ4eDE2X3QpX19yZXYwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBmbG9hdDY0X3Qgdm1heHZxX2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7Ci0gIGZsb2F0NjRfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQ2NF90KSBfX2J1aWx0aW5fbmVvbl92bWF4dnFfZjY0KChpbnQ4eDE2X3QpX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGZsb2F0NjRfdCB2bWF4dnFfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKLSAgZmxvYXQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIGZsb2F0NjRfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQ2NF90KSBfX2J1aWx0aW5fbmVvbl92bWF4dnFfZjY0KChpbnQ4eDE2X3QpX19yZXYwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBmbG9hdDMyX3Qgdm1heHZxX2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7Ci0gIGZsb2F0MzJfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQzMl90KSBfX2J1aWx0aW5fbmVvbl92bWF4dnFfZjMyKChpbnQ4eDE2X3QpX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGZsb2F0MzJfdCB2bWF4dnFfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKLSAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIGZsb2F0MzJfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQzMl90KSBfX2J1aWx0aW5fbmVvbl92bWF4dnFfZjMyKChpbnQ4eDE2X3QpX19yZXYwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQzMl90IHZtYXh2cV9zMzIoaW50MzJ4NF90IF9fcDApIHsKLSAgaW50MzJfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MzJfdCkgX19idWlsdGluX25lb25fdm1heHZxX3MzMigoaW50OHgxNl90KV9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQzMl90IHZtYXh2cV9zMzIoaW50MzJ4NF90IF9fcDApIHsKLSAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICBpbnQzMl90IF9fcmV0OwotICBfX3JldCA9IChpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92bWF4dnFfczMyKChpbnQ4eDE2X3QpX19yZXYwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQxNl90IHZtYXh2cV9zMTYoaW50MTZ4OF90IF9fcDApIHsKLSAgaW50MTZfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MTZfdCkgX19idWlsdGluX25lb25fdm1heHZxX3MxNigoaW50OHgxNl90KV9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQxNl90IHZtYXh2cV9zMTYoaW50MTZ4OF90IF9fcDApIHsKLSAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQxNl90IF9fcmV0OwotICBfX3JldCA9IChpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92bWF4dnFfczE2KChpbnQ4eDE2X3QpX19yZXYwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50OF90IHZtYXh2X3U4KHVpbnQ4eDhfdCBfX3AwKSB7Ci0gIHVpbnQ4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ4X3QpIF9fYnVpbHRpbl9uZW9uX3ZtYXh2X3U4KChpbnQ4eDhfdClfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDhfdCB2bWF4dl91OCh1aW50OHg4X3QgX19wMCkgewotICB1aW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQ4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ4X3QpIF9fYnVpbHRpbl9uZW9uX3ZtYXh2X3U4KChpbnQ4eDhfdClfX3JldjApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQzMl90IHZtYXh2X3UzMih1aW50MzJ4Ml90IF9fcDApIHsKLSAgdWludDMyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92bWF4dl91MzIoKGludDh4OF90KV9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MzJfdCB2bWF4dl91MzIodWludDMyeDJfdCBfX3AwKSB7Ci0gIHVpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIHVpbnQzMl90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJfdCkgX19idWlsdGluX25lb25fdm1heHZfdTMyKChpbnQ4eDhfdClfX3JldjApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQxNl90IHZtYXh2X3UxNih1aW50MTZ4NF90IF9fcDApIHsKLSAgdWludDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92bWF4dl91MTYoKGludDh4OF90KV9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MTZfdCB2bWF4dl91MTYodWludDE2eDRfdCBfX3AwKSB7Ci0gIHVpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQxNl90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MTZfdCkgX19idWlsdGluX25lb25fdm1heHZfdTE2KChpbnQ4eDhfdClfX3JldjApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDhfdCB2bWF4dl9zOChpbnQ4eDhfdCBfX3AwKSB7Ci0gIGludDhfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50OF90KSBfX2J1aWx0aW5fbmVvbl92bWF4dl9zOCgoaW50OHg4X3QpX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDhfdCB2bWF4dl9zOChpbnQ4eDhfdCBfX3AwKSB7Ci0gIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQ4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDhfdCkgX19idWlsdGluX25lb25fdm1heHZfczgoKGludDh4OF90KV9fcmV2MCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgZmxvYXQzMl90IHZtYXh2X2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7Ci0gIGZsb2F0MzJfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQzMl90KSBfX2J1aWx0aW5fbmVvbl92bWF4dl9mMzIoKGludDh4OF90KV9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBmbG9hdDMyX3Qgdm1heHZfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKLSAgZmxvYXQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIGZsb2F0MzJfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQzMl90KSBfX2J1aWx0aW5fbmVvbl92bWF4dl9mMzIoKGludDh4OF90KV9fcmV2MCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MzJfdCB2bWF4dl9zMzIoaW50MzJ4Ml90IF9fcDApIHsKLSAgaW50MzJfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MzJfdCkgX19idWlsdGluX25lb25fdm1heHZfczMyKChpbnQ4eDhfdClfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MzJfdCB2bWF4dl9zMzIoaW50MzJ4Ml90IF9fcDApIHsKLSAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICBpbnQzMl90IF9fcmV0OwotICBfX3JldCA9IChpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92bWF4dl9zMzIoKGludDh4OF90KV9fcmV2MCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MTZfdCB2bWF4dl9zMTYoaW50MTZ4NF90IF9fcDApIHsKLSAgaW50MTZfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MTZfdCkgX19idWlsdGluX25lb25fdm1heHZfczE2KChpbnQ4eDhfdClfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MTZfdCB2bWF4dl9zMTYoaW50MTZ4NF90IF9fcDApIHsKLSAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICBpbnQxNl90IF9fcmV0OwotICBfX3JldCA9IChpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92bWF4dl9zMTYoKGludDh4OF90KV9fcmV2MCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgZmxvYXQ2NHgyX3Qgdm1pbnFfZjY0KGZsb2F0NjR4Ml90IF9fcDAsIGZsb2F0NjR4Ml90IF9fcDEpIHsKLSAgZmxvYXQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92bWlucV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA0Mik7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGZsb2F0NjR4Ml90IHZtaW5xX2Y2NChmbG9hdDY0eDJfdCBfX3AwLCBmbG9hdDY0eDJfdCBfX3AxKSB7Ci0gIGZsb2F0NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICBmbG9hdDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKLSAgZmxvYXQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92bWlucV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNDIpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgZmxvYXQ2NHgxX3Qgdm1pbl9mNjQoZmxvYXQ2NHgxX3QgX19wMCwgZmxvYXQ2NHgxX3QgX19wMSkgewotICBmbG9hdDY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZtaW5fdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDEwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgZmxvYXQ2NHgxX3Qgdm1pbl9mNjQoZmxvYXQ2NHgxX3QgX19wMCwgZmxvYXQ2NHgxX3QgX19wMSkgewotICBmbG9hdDY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZtaW5fdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDEwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBmbG9hdDY0X3Qgdm1pbm5tdnFfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKLSAgZmxvYXQ2NF90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZtaW5ubXZxX2Y2NCgoaW50OHgxNl90KV9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBmbG9hdDY0X3Qgdm1pbm5tdnFfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKLSAgZmxvYXQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIGZsb2F0NjRfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQ2NF90KSBfX2J1aWx0aW5fbmVvbl92bWlubm12cV9mNjQoKGludDh4MTZfdClfX3JldjApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGZsb2F0MzJfdCB2bWlubm12cV9mMzIoZmxvYXQzMng0X3QgX19wMCkgewotICBmbG9hdDMyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0MzJfdCkgX19idWlsdGluX25lb25fdm1pbm5tdnFfZjMyKChpbnQ4eDE2X3QpX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGZsb2F0MzJfdCB2bWlubm12cV9mMzIoZmxvYXQzMng0X3QgX19wMCkgewotICBmbG9hdDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgZmxvYXQzMl90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZtaW5ubXZxX2YzMigoaW50OHgxNl90KV9fcmV2MCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgZmxvYXQzMl90IHZtaW5ubXZfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKLSAgZmxvYXQzMl90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZtaW5ubXZfZjMyKChpbnQ4eDhfdClfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgZmxvYXQzMl90IHZtaW5ubXZfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKLSAgZmxvYXQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIGZsb2F0MzJfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQzMl90KSBfX2J1aWx0aW5fbmVvbl92bWlubm12X2YzMigoaW50OHg4X3QpX19yZXYwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50OF90IHZtaW52cV91OCh1aW50OHgxNl90IF9fcDApIHsKLSAgdWludDhfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDhfdCkgX19idWlsdGluX25lb25fdm1pbnZxX3U4KChpbnQ4eDE2X3QpX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ4X3Qgdm1pbnZxX3U4KHVpbnQ4eDE2X3QgX19wMCkgewotICB1aW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50OF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50OF90KSBfX2J1aWx0aW5fbmVvbl92bWludnFfdTgoKGludDh4MTZfdClfX3JldjApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQzMl90IHZtaW52cV91MzIodWludDMyeDRfdCBfX3AwKSB7Ci0gIHVpbnQzMl90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJfdCkgX19idWlsdGluX25lb25fdm1pbnZxX3UzMigoaW50OHgxNl90KV9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MzJfdCB2bWludnFfdTMyKHVpbnQzMng0X3QgX19wMCkgewotICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICB1aW50MzJfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZtaW52cV91MzIoKGludDh4MTZfdClfX3JldjApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQxNl90IHZtaW52cV91MTYodWludDE2eDhfdCBfX3AwKSB7Ci0gIHVpbnQxNl90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MTZfdCkgX19idWlsdGluX25lb25fdm1pbnZxX3UxNigoaW50OHgxNl90KV9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MTZfdCB2bWludnFfdTE2KHVpbnQxNng4X3QgX19wMCkgewotICB1aW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50MTZfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZtaW52cV91MTYoKGludDh4MTZfdClfX3JldjApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDhfdCB2bWludnFfczgoaW50OHgxNl90IF9fcDApIHsKLSAgaW50OF90IF9fcmV0OwotICBfX3JldCA9IChpbnQ4X3QpIF9fYnVpbHRpbl9uZW9uX3ZtaW52cV9zOCgoaW50OHgxNl90KV9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQ4X3Qgdm1pbnZxX3M4KGludDh4MTZfdCBfX3AwKSB7Ci0gIGludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50OF90IF9fcmV0OwotICBfX3JldCA9IChpbnQ4X3QpIF9fYnVpbHRpbl9uZW9uX3ZtaW52cV9zOCgoaW50OHgxNl90KV9fcmV2MCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgZmxvYXQ2NF90IHZtaW52cV9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgewotICBmbG9hdDY0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0NjRfdCkgX19idWlsdGluX25lb25fdm1pbnZxX2Y2NCgoaW50OHgxNl90KV9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBmbG9hdDY0X3Qgdm1pbnZxX2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7Ci0gIGZsb2F0NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICBmbG9hdDY0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0NjRfdCkgX19idWlsdGluX25lb25fdm1pbnZxX2Y2NCgoaW50OHgxNl90KV9fcmV2MCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgZmxvYXQzMl90IHZtaW52cV9mMzIoZmxvYXQzMng0X3QgX19wMCkgewotICBmbG9hdDMyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0MzJfdCkgX19idWlsdGluX25lb25fdm1pbnZxX2YzMigoaW50OHgxNl90KV9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBmbG9hdDMyX3Qgdm1pbnZxX2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7Ci0gIGZsb2F0MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICBmbG9hdDMyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0MzJfdCkgX19idWlsdGluX25lb25fdm1pbnZxX2YzMigoaW50OHgxNl90KV9fcmV2MCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MzJfdCB2bWludnFfczMyKGludDMyeDRfdCBfX3AwKSB7Ci0gIGludDMyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZtaW52cV9zMzIoKGludDh4MTZfdClfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MzJfdCB2bWludnFfczMyKGludDMyeDRfdCBfX3AwKSB7Ci0gIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgaW50MzJfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MzJfdCkgX19idWlsdGluX25lb25fdm1pbnZxX3MzMigoaW50OHgxNl90KV9fcmV2MCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MTZfdCB2bWludnFfczE2KGludDE2eDhfdCBfX3AwKSB7Ci0gIGludDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZtaW52cV9zMTYoKGludDh4MTZfdClfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MTZfdCB2bWludnFfczE2KGludDE2eDhfdCBfX3AwKSB7Ci0gIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50MTZfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MTZfdCkgX19idWlsdGluX25lb25fdm1pbnZxX3MxNigoaW50OHgxNl90KV9fcmV2MCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDhfdCB2bWludl91OCh1aW50OHg4X3QgX19wMCkgewotICB1aW50OF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50OF90KSBfX2J1aWx0aW5fbmVvbl92bWludl91OCgoaW50OHg4X3QpX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ4X3Qgdm1pbnZfdTgodWludDh4OF90IF9fcDApIHsKLSAgdWludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50OF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50OF90KSBfX2J1aWx0aW5fbmVvbl92bWludl91OCgoaW50OHg4X3QpX19yZXYwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MzJfdCB2bWludl91MzIodWludDMyeDJfdCBfX3AwKSB7Ci0gIHVpbnQzMl90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJfdCkgX19idWlsdGluX25lb25fdm1pbnZfdTMyKChpbnQ4eDhfdClfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDMyX3Qgdm1pbnZfdTMyKHVpbnQzMngyX3QgX19wMCkgewotICB1aW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICB1aW50MzJfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZtaW52X3UzMigoaW50OHg4X3QpX19yZXYwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MTZfdCB2bWludl91MTYodWludDE2eDRfdCBfX3AwKSB7Ci0gIHVpbnQxNl90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MTZfdCkgX19idWlsdGluX25lb25fdm1pbnZfdTE2KChpbnQ4eDhfdClfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDE2X3Qgdm1pbnZfdTE2KHVpbnQxNng0X3QgX19wMCkgewotICB1aW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICB1aW50MTZfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZtaW52X3UxNigoaW50OHg4X3QpX19yZXYwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ4X3Qgdm1pbnZfczgoaW50OHg4X3QgX19wMCkgewotICBpbnQ4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDhfdCkgX19idWlsdGluX25lb25fdm1pbnZfczgoKGludDh4OF90KV9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQ4X3Qgdm1pbnZfczgoaW50OHg4X3QgX19wMCkgewotICBpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50OF90IF9fcmV0OwotICBfX3JldCA9IChpbnQ4X3QpIF9fYnVpbHRpbl9uZW9uX3ZtaW52X3M4KChpbnQ4eDhfdClfX3JldjApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGZsb2F0MzJfdCB2bWludl9mMzIoZmxvYXQzMngyX3QgX19wMCkgewotICBmbG9hdDMyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0MzJfdCkgX19idWlsdGluX25lb25fdm1pbnZfZjMyKChpbnQ4eDhfdClfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgZmxvYXQzMl90IHZtaW52X2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7Ci0gIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICBmbG9hdDMyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0MzJfdCkgX19idWlsdGluX25lb25fdm1pbnZfZjMyKChpbnQ4eDhfdClfX3JldjApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDMyX3Qgdm1pbnZfczMyKGludDMyeDJfdCBfX3AwKSB7Ci0gIGludDMyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZtaW52X3MzMigoaW50OHg4X3QpX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDMyX3Qgdm1pbnZfczMyKGludDMyeDJfdCBfX3AwKSB7Ci0gIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgaW50MzJfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MzJfdCkgX19idWlsdGluX25lb25fdm1pbnZfczMyKChpbnQ4eDhfdClfX3JldjApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDE2X3Qgdm1pbnZfczE2KGludDE2eDRfdCBfX3AwKSB7Ci0gIGludDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZtaW52X3MxNigoaW50OHg4X3QpX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDE2X3Qgdm1pbnZfczE2KGludDE2eDRfdCBfX3AwKSB7Ci0gIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgaW50MTZfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MTZfdCkgX19idWlsdGluX25lb25fdm1pbnZfczE2KChpbnQ4eDhfdClfX3JldjApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGZsb2F0NjR4Ml90IHZtbGFxX2Y2NChmbG9hdDY0eDJfdCBfX3AwLCBmbG9hdDY0eDJfdCBfX3AxLCBmbG9hdDY0eDJfdCBfX3AyKSB7Ci0gIGZsb2F0NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IF9fcDAgKyBfX3AxICogX19wMjsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgZmxvYXQ2NHgyX3Qgdm1sYXFfZjY0KGZsb2F0NjR4Ml90IF9fcDAsIGZsb2F0NjR4Ml90IF9fcDEsIGZsb2F0NjR4Ml90IF9fcDIpIHsKLSAgZmxvYXQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIGZsb2F0NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOwotICBmbG9hdDY0eDJfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAxLCAwKTsKLSAgZmxvYXQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19yZXYwICsgX19yZXYxICogX19yZXYyOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgZmxvYXQ2NHgxX3Qgdm1sYV9mNjQoZmxvYXQ2NHgxX3QgX19wMCwgZmxvYXQ2NHgxX3QgX19wMSwgZmxvYXQ2NHgxX3QgX19wMikgewotICBmbG9hdDY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSBfX3AwICsgX19wMSAqIF9fcDI7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGZsb2F0NjR4MV90IHZtbGFfZjY0KGZsb2F0NjR4MV90IF9fcDAsIGZsb2F0NjR4MV90IF9fcDEsIGZsb2F0NjR4MV90IF9fcDIpIHsKLSAgZmxvYXQ2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19wMCArIF9fcDEgKiBfX3AyOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZtbGFxX2xhbmVxX3UzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDMyeDRfdCBfX3MwID0gX19wMDsgXAotICB1aW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCi0gIHVpbnQzMng0X3QgX19zMiA9IF9fcDI7IFwKLSAgdWludDMyeDRfdCBfX3JldDsgXAotICBfX3JldCA9IF9fczAgKyBfX3MxICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMywgX19wMywgX19wMyk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bWxhcV9sYW5lcV91MzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDMyeDRfdCBfX3MxID0gX19wMTsgXAotICB1aW50MzJ4NF90IF9fczIgPSBfX3AyOyBcCi0gIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKLSAgdWludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAotICB1aW50MzJ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDMsIDIsIDEsIDApOyBcCi0gIHVpbnQzMng0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSBfX3JldjAgKyBfX3JldjEgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMywgX19wMywgX19wMyk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bWxhcV9sYW5lcV91MTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDE2eDhfdCBfX3MxID0gX19wMTsgXAotICB1aW50MTZ4OF90IF9fczIgPSBfX3AyOyBcCi0gIHVpbnQxNng4X3QgX19yZXQ7IFwKLSAgX19yZXQgPSBfX3MwICsgX19zMSAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdm1sYXFfbGFuZXFfdTE2KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKLSAgdWludDE2eDhfdCBfX3MyID0gX19wMjsgXAotICB1aW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIHVpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgdWludDE2eDhfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICB1aW50MTZ4OF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gX19yZXYwICsgX19yZXYxICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdm1sYXFfbGFuZXFfZjMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDMyeDRfdCBfX3MwID0gX19wMDsgXAotICBmbG9hdDMyeDRfdCBfX3MxID0gX19wMTsgXAotICBmbG9hdDMyeDRfdCBfX3MyID0gX19wMjsgXAotICBmbG9hdDMyeDRfdCBfX3JldDsgXAotICBfX3JldCA9IF9fczAgKyBfX3MxICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMywgX19wMywgX19wMyk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bWxhcV9sYW5lcV9mMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0MzJ4NF90IF9fczAgPSBfX3AwOyBcCi0gIGZsb2F0MzJ4NF90IF9fczEgPSBfX3AxOyBcCi0gIGZsb2F0MzJ4NF90IF9fczIgPSBfX3AyOyBcCi0gIGZsb2F0MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCi0gIGZsb2F0MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCi0gIGZsb2F0MzJ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDMsIDIsIDEsIDApOyBcCi0gIGZsb2F0MzJ4NF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gX19yZXYwICsgX19yZXYxICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdm1sYXFfbGFuZXFfczMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCi0gIGludDMyeDRfdCBfX3MyID0gX19wMjsgXAotICBpbnQzMng0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSBfX3MwICsgX19zMSAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdm1sYXFfbGFuZXFfczMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCi0gIGludDMyeDRfdCBfX3MyID0gX19wMjsgXAotICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKLSAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCi0gIGludDMyeDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCAzLCAyLCAxLCAwKTsgXAotICBpbnQzMng0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSBfX3JldjAgKyBfX3JldjEgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMywgX19wMywgX19wMyk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bWxhcV9sYW5lcV9zMTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDE2eDhfdCBfX3MwID0gX19wMDsgXAotICBpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKLSAgaW50MTZ4OF90IF9fczIgPSBfX3AyOyBcCi0gIGludDE2eDhfdCBfX3JldDsgXAotICBfX3JldCA9IF9fczAgKyBfX3MxICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMywgX19wMywgX19wMywgX19wMywgX19wMywgX19wMywgX19wMyk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bWxhcV9sYW5lcV9zMTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDE2eDhfdCBfX3MwID0gX19wMDsgXAotICBpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKLSAgaW50MTZ4OF90IF9fczIgPSBfX3AyOyBcCi0gIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgaW50MTZ4OF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIGludDE2eDhfdCBfX3JldDsgXAotICBfX3JldCA9IF9fcmV2MCArIF9fcmV2MSAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MiwgX19yZXYyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZtbGFfbGFuZXFfdTMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKLSAgdWludDMyeDRfdCBfX3MyID0gX19wMjsgXAotICB1aW50MzJ4Ml90IF9fcmV0OyBcCi0gIF9fcmV0ID0gX19zMCArIF9fczEgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCBfX3AzLCBfX3AzKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZtbGFfbGFuZXFfdTMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKLSAgdWludDMyeDRfdCBfX3MyID0gX19wMjsgXAotICB1aW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCi0gIHVpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMSwgMCk7IFwKLSAgdWludDMyeDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCAzLCAyLCAxLCAwKTsgXAotICB1aW50MzJ4Ml90IF9fcmV0OyBcCi0gIF9fcmV0ID0gX19yZXYwICsgX19yZXYxICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdm1sYV9sYW5lcV91MTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDE2eDRfdCBfX3MxID0gX19wMTsgXAotICB1aW50MTZ4OF90IF9fczIgPSBfX3AyOyBcCi0gIHVpbnQxNng0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSBfX3MwICsgX19zMSAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdm1sYV9sYW5lcV91MTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDE2eDRfdCBfX3MxID0gX19wMTsgXAotICB1aW50MTZ4OF90IF9fczIgPSBfX3AyOyBcCi0gIHVpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKLSAgdWludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAotICB1aW50MTZ4OF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIHVpbnQxNng0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSBfX3JldjAgKyBfX3JldjEgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMywgX19wMywgX19wMyk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bWxhX2xhbmVxX2YzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQzMngyX3QgX19zMCA9IF9fcDA7IFwKLSAgZmxvYXQzMngyX3QgX19zMSA9IF9fcDE7IFwKLSAgZmxvYXQzMng0X3QgX19zMiA9IF9fcDI7IFwKLSAgZmxvYXQzMngyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSBfX3MwICsgX19zMSAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIF9fcDMsIF9fcDMpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdm1sYV9sYW5lcV9mMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0MzJ4Ml90IF9fczAgPSBfX3AwOyBcCi0gIGZsb2F0MzJ4Ml90IF9fczEgPSBfX3AxOyBcCi0gIGZsb2F0MzJ4NF90IF9fczIgPSBfX3AyOyBcCi0gIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCi0gIGZsb2F0MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCi0gIGZsb2F0MzJ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDMsIDIsIDEsIDApOyBcCi0gIGZsb2F0MzJ4Ml90IF9fcmV0OyBcCi0gIF9fcmV0ID0gX19yZXYwICsgX19yZXYxICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdm1sYV9sYW5lcV9zMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDMyeDJfdCBfX3MwID0gX19wMDsgXAotICBpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKLSAgaW50MzJ4NF90IF9fczIgPSBfX3AyOyBcCi0gIGludDMyeDJfdCBfX3JldDsgXAotICBfX3JldCA9IF9fczAgKyBfX3MxICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMyk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bWxhX2xhbmVxX3MzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCi0gIGludDMyeDJfdCBfX3MxID0gX19wMTsgXAotICBpbnQzMng0X3QgX19zMiA9IF9fcDI7IFwKLSAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCi0gIGludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxLCAwKTsgXAotICBpbnQzMng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgMywgMiwgMSwgMCk7IFwKLSAgaW50MzJ4Ml90IF9fcmV0OyBcCi0gIF9fcmV0ID0gX19yZXYwICsgX19yZXYxICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdm1sYV9sYW5lcV9zMTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDE2eDRfdCBfX3MwID0gX19wMDsgXAotICBpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKLSAgaW50MTZ4OF90IF9fczIgPSBfX3AyOyBcCi0gIGludDE2eDRfdCBfX3JldDsgXAotICBfX3JldCA9IF9fczAgKyBfX3MxICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMywgX19wMywgX19wMyk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bWxhX2xhbmVxX3MxNihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCi0gIGludDE2eDRfdCBfX3MxID0gX19wMTsgXAotICBpbnQxNng4X3QgX19zMiA9IF9fcDI7IFwKLSAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCi0gIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAotICBpbnQxNng4X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgaW50MTZ4NF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gX19yZXYwICsgX19yZXYxICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgZmxvYXQ2NHgyX3Qgdm1sYXFfbl9mNjQoZmxvYXQ2NHgyX3QgX19wMCwgZmxvYXQ2NHgyX3QgX19wMSwgZmxvYXQ2NF90IF9fcDIpIHsKLSAgZmxvYXQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19wMCArIF9fcDEgKiAoZmxvYXQ2NHgyX3QpIHtfX3AyLCBfX3AyfTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgZmxvYXQ2NHgyX3Qgdm1sYXFfbl9mNjQoZmxvYXQ2NHgyX3QgX19wMCwgZmxvYXQ2NHgyX3QgX19wMSwgZmxvYXQ2NF90IF9fcDIpIHsKLSAgZmxvYXQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIGZsb2F0NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOwotICBmbG9hdDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSBfX3JldjAgKyBfX3JldjEgKiAoZmxvYXQ2NHgyX3QpIHtfX3AyLCBfX3AyfTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZtbGFsX2hpZ2hfbGFuZV91MzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDMyeDRfdCBfX3MxID0gX19wMTsgXAotICB1aW50MzJ4Ml90IF9fczIgPSBfX3AyOyBcCi0gIHVpbnQ2NHgyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSBfX3MwICsgdm11bGxfdTMyKHZnZXRfaGlnaF91MzIoX19zMSksIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIF9fcDMsIF9fcDMpKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZtbGFsX2hpZ2hfbGFuZV91MzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDMyeDRfdCBfX3MxID0gX19wMTsgXAotICB1aW50MzJ4Ml90IF9fczIgPSBfX3AyOyBcCi0gIHVpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKLSAgdWludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAotICB1aW50MzJ4Ml90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDEsIDApOyBcCi0gIHVpbnQ2NHgyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSBfX3JldjAgKyBfX25vc3dhcF92bXVsbF91MzIoX19ub3N3YXBfdmdldF9oaWdoX3UzMihfX3JldjEpLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMykpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdm1sYWxfaGlnaF9sYW5lX3UxNihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDMyeDRfdCBfX3MwID0gX19wMDsgXAotICB1aW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCi0gIHVpbnQxNng0X3QgX19zMiA9IF9fcDI7IFwKLSAgdWludDMyeDRfdCBfX3JldDsgXAotICBfX3JldCA9IF9fczAgKyB2bXVsbF91MTYodmdldF9oaWdoX3UxNihfX3MxKSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMywgX19wMywgX19wMykpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdm1sYWxfaGlnaF9sYW5lX3UxNihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDMyeDRfdCBfX3MwID0gX19wMDsgXAotICB1aW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCi0gIHVpbnQxNng0X3QgX19zMiA9IF9fcDI7IFwKLSAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAotICB1aW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIHVpbnQxNng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgMywgMiwgMSwgMCk7IFwKLSAgdWludDMyeDRfdCBfX3JldDsgXAotICBfX3JldCA9IF9fcmV2MCArIF9fbm9zd2FwX3ZtdWxsX3UxNihfX25vc3dhcF92Z2V0X2hpZ2hfdTE2KF9fcmV2MSksIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MiwgX19yZXYyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKSk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bWxhbF9oaWdoX2xhbmVfczMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCi0gIGludDMyeDJfdCBfX3MyID0gX19wMjsgXAotICBpbnQ2NHgyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSBfX3MwICsgdm11bGxfczMyKHZnZXRfaGlnaF9zMzIoX19zMSksIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIF9fcDMsIF9fcDMpKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZtbGFsX2hpZ2hfbGFuZV9zMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDY0eDJfdCBfX3MwID0gX19wMDsgXAotICBpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKLSAgaW50MzJ4Ml90IF9fczIgPSBfX3AyOyBcCi0gIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAotICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKLSAgaW50MzJ4Ml90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDEsIDApOyBcCi0gIGludDY0eDJfdCBfX3JldDsgXAotICBfX3JldCA9IF9fcmV2MCArIF9fbm9zd2FwX3ZtdWxsX3MzMihfX25vc3dhcF92Z2V0X2hpZ2hfczMyKF9fcmV2MSksIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MiwgX19yZXYyLCBfX3AzLCBfX3AzKSk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bWxhbF9oaWdoX2xhbmVfczE2KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCi0gIGludDE2eDRfdCBfX3MyID0gX19wMjsgXAotICBpbnQzMng0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSBfX3MwICsgdm11bGxfczE2KHZnZXRfaGlnaF9zMTYoX19zMSksIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZtbGFsX2hpZ2hfbGFuZV9zMTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAotICBpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKLSAgaW50MTZ4NF90IF9fczIgPSBfX3AyOyBcCi0gIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAotICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgaW50MTZ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDMsIDIsIDEsIDApOyBcCi0gIGludDMyeDRfdCBfX3JldDsgXAotICBfX3JldCA9IF9fcmV2MCArIF9fbm9zd2FwX3ZtdWxsX3MxNihfX25vc3dhcF92Z2V0X2hpZ2hfczE2KF9fcmV2MSksIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MiwgX19yZXYyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKSk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bWxhbF9oaWdoX2xhbmVxX3UzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDY0eDJfdCBfX3MwID0gX19wMDsgXAotICB1aW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCi0gIHVpbnQzMng0X3QgX19zMiA9IF9fcDI7IFwKLSAgdWludDY0eDJfdCBfX3JldDsgXAotICBfX3JldCA9IF9fczAgKyB2bXVsbF91MzIodmdldF9oaWdoX3UzMihfX3MxKSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMykpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdm1sYWxfaGlnaF9sYW5lcV91MzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDMyeDRfdCBfX3MxID0gX19wMTsgXAotICB1aW50MzJ4NF90IF9fczIgPSBfX3AyOyBcCi0gIHVpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKLSAgdWludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAotICB1aW50MzJ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDMsIDIsIDEsIDApOyBcCi0gIHVpbnQ2NHgyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSBfX3JldjAgKyBfX25vc3dhcF92bXVsbF91MzIoX19ub3N3YXBfdmdldF9oaWdoX3UzMihfX3JldjEpLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMykpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdm1sYWxfaGlnaF9sYW5lcV91MTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDE2eDhfdCBfX3MxID0gX19wMTsgXAotICB1aW50MTZ4OF90IF9fczIgPSBfX3AyOyBcCi0gIHVpbnQzMng0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSBfX3MwICsgdm11bGxfdTE2KHZnZXRfaGlnaF91MTYoX19zMSksIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZtbGFsX2hpZ2hfbGFuZXFfdTE2KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKLSAgdWludDE2eDhfdCBfX3MyID0gX19wMjsgXAotICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCi0gIHVpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgdWludDE2eDhfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICB1aW50MzJ4NF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gX19yZXYwICsgX19ub3N3YXBfdm11bGxfdTE2KF9fbm9zd2FwX3ZnZXRfaGlnaF91MTYoX19yZXYxKSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpKTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZtbGFsX2hpZ2hfbGFuZXFfczMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCi0gIGludDMyeDRfdCBfX3MyID0gX19wMjsgXAotICBpbnQ2NHgyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSBfX3MwICsgdm11bGxfczMyKHZnZXRfaGlnaF9zMzIoX19zMSksIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIF9fcDMsIF9fcDMpKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZtbGFsX2hpZ2hfbGFuZXFfczMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCi0gIGludDMyeDRfdCBfX3MyID0gX19wMjsgXAotICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKLSAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCi0gIGludDMyeDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCAzLCAyLCAxLCAwKTsgXAotICBpbnQ2NHgyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSBfX3JldjAgKyBfX25vc3dhcF92bXVsbF9zMzIoX19ub3N3YXBfdmdldF9oaWdoX3MzMihfX3JldjEpLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMykpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdm1sYWxfaGlnaF9sYW5lcV9zMTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAotICBpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKLSAgaW50MTZ4OF90IF9fczIgPSBfX3AyOyBcCi0gIGludDMyeDRfdCBfX3JldDsgXAotICBfX3JldCA9IF9fczAgKyB2bXVsbF9zMTYodmdldF9oaWdoX3MxNihfX3MxKSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMywgX19wMywgX19wMykpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdm1sYWxfaGlnaF9sYW5lcV9zMTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAotICBpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKLSAgaW50MTZ4OF90IF9fczIgPSBfX3AyOyBcCi0gIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAotICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgaW50MTZ4OF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIGludDMyeDRfdCBfX3JldDsgXAotICBfX3JldCA9IF9fcmV2MCArIF9fbm9zd2FwX3ZtdWxsX3MxNihfX25vc3dhcF92Z2V0X2hpZ2hfczE2KF9fcmV2MSksIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MiwgX19yZXYyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKSk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bWxhbF9sYW5lcV91MzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDMyeDJfdCBfX3MxID0gX19wMTsgXAotICB1aW50MzJ4NF90IF9fczIgPSBfX3AyOyBcCi0gIHVpbnQ2NHgyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSBfX3MwICsgdm11bGxfdTMyKF9fczEsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIF9fcDMsIF9fcDMpKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZtbGFsX2xhbmVxX3UzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDY0eDJfdCBfX3MwID0gX19wMDsgXAotICB1aW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCi0gIHVpbnQzMng0X3QgX19zMiA9IF9fcDI7IFwKLSAgdWludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAotICB1aW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCi0gIHVpbnQzMng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgMywgMiwgMSwgMCk7IFwKLSAgdWludDY0eDJfdCBfX3JldDsgXAotICBfX3JldCA9IF9fcmV2MCArIF9fbm9zd2FwX3ZtdWxsX3UzMihfX3JldjEsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MiwgX19yZXYyLCBfX3AzLCBfX3AzKSk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bWxhbF9sYW5lcV91MTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDE2eDRfdCBfX3MxID0gX19wMTsgXAotICB1aW50MTZ4OF90IF9fczIgPSBfX3AyOyBcCi0gIHVpbnQzMng0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSBfX3MwICsgdm11bGxfdTE2KF9fczEsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZtbGFsX2xhbmVxX3UxNihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDMyeDRfdCBfX3MwID0gX19wMDsgXAotICB1aW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCi0gIHVpbnQxNng4X3QgX19zMiA9IF9fcDI7IFwKLSAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAotICB1aW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCi0gIHVpbnQxNng4X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgdWludDMyeDRfdCBfX3JldDsgXAotICBfX3JldCA9IF9fcmV2MCArIF9fbm9zd2FwX3ZtdWxsX3UxNihfX3JldjEsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MiwgX19yZXYyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKSk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bWxhbF9sYW5lcV9zMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDY0eDJfdCBfX3MwID0gX19wMDsgXAotICBpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKLSAgaW50MzJ4NF90IF9fczIgPSBfX3AyOyBcCi0gIGludDY0eDJfdCBfX3JldDsgXAotICBfX3JldCA9IF9fczAgKyB2bXVsbF9zMzIoX19zMSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMykpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdm1sYWxfbGFuZXFfczMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCi0gIGludDMyeDRfdCBfX3MyID0gX19wMjsgXAotICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKLSAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCi0gIGludDMyeDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCAzLCAyLCAxLCAwKTsgXAotICBpbnQ2NHgyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSBfX3JldjAgKyBfX25vc3dhcF92bXVsbF9zMzIoX19yZXYxLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMykpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdm1sYWxfbGFuZXFfczE2KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCi0gIGludDE2eDhfdCBfX3MyID0gX19wMjsgXAotICBpbnQzMng0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSBfX3MwICsgdm11bGxfczE2KF9fczEsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZtbGFsX2xhbmVxX3MxNihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCi0gIGludDE2eDRfdCBfX3MxID0gX19wMTsgXAotICBpbnQxNng4X3QgX19zMiA9IF9fcDI7IFwKLSAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCi0gIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAotICBpbnQxNng4X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgaW50MzJ4NF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gX19yZXYwICsgX19ub3N3YXBfdm11bGxfczE2KF9fcmV2MSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpKTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGZsb2F0NjR4Ml90IHZtbHNxX2Y2NChmbG9hdDY0eDJfdCBfX3AwLCBmbG9hdDY0eDJfdCBfX3AxLCBmbG9hdDY0eDJfdCBfX3AyKSB7Ci0gIGZsb2F0NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IF9fcDAgLSBfX3AxICogX19wMjsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgZmxvYXQ2NHgyX3Qgdm1sc3FfZjY0KGZsb2F0NjR4Ml90IF9fcDAsIGZsb2F0NjR4Ml90IF9fcDEsIGZsb2F0NjR4Ml90IF9fcDIpIHsKLSAgZmxvYXQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIGZsb2F0NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOwotICBmbG9hdDY0eDJfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAxLCAwKTsKLSAgZmxvYXQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19yZXYwIC0gX19yZXYxICogX19yZXYyOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgZmxvYXQ2NHgxX3Qgdm1sc19mNjQoZmxvYXQ2NHgxX3QgX19wMCwgZmxvYXQ2NHgxX3QgX19wMSwgZmxvYXQ2NHgxX3QgX19wMikgewotICBmbG9hdDY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSBfX3AwIC0gX19wMSAqIF9fcDI7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGZsb2F0NjR4MV90IHZtbHNfZjY0KGZsb2F0NjR4MV90IF9fcDAsIGZsb2F0NjR4MV90IF9fcDEsIGZsb2F0NjR4MV90IF9fcDIpIHsKLSAgZmxvYXQ2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19wMCAtIF9fcDEgKiBfX3AyOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZtbHNxX2xhbmVxX3UzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDMyeDRfdCBfX3MwID0gX19wMDsgXAotICB1aW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCi0gIHVpbnQzMng0X3QgX19zMiA9IF9fcDI7IFwKLSAgdWludDMyeDRfdCBfX3JldDsgXAotICBfX3JldCA9IF9fczAgLSBfX3MxICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMywgX19wMywgX19wMyk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bWxzcV9sYW5lcV91MzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDMyeDRfdCBfX3MxID0gX19wMTsgXAotICB1aW50MzJ4NF90IF9fczIgPSBfX3AyOyBcCi0gIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKLSAgdWludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAotICB1aW50MzJ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDMsIDIsIDEsIDApOyBcCi0gIHVpbnQzMng0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSBfX3JldjAgLSBfX3JldjEgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMywgX19wMywgX19wMyk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bWxzcV9sYW5lcV91MTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDE2eDhfdCBfX3MxID0gX19wMTsgXAotICB1aW50MTZ4OF90IF9fczIgPSBfX3AyOyBcCi0gIHVpbnQxNng4X3QgX19yZXQ7IFwKLSAgX19yZXQgPSBfX3MwIC0gX19zMSAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdm1sc3FfbGFuZXFfdTE2KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKLSAgdWludDE2eDhfdCBfX3MyID0gX19wMjsgXAotICB1aW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIHVpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgdWludDE2eDhfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICB1aW50MTZ4OF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gX19yZXYwIC0gX19yZXYxICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdm1sc3FfbGFuZXFfZjMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDMyeDRfdCBfX3MwID0gX19wMDsgXAotICBmbG9hdDMyeDRfdCBfX3MxID0gX19wMTsgXAotICBmbG9hdDMyeDRfdCBfX3MyID0gX19wMjsgXAotICBmbG9hdDMyeDRfdCBfX3JldDsgXAotICBfX3JldCA9IF9fczAgLSBfX3MxICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMywgX19wMywgX19wMyk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bWxzcV9sYW5lcV9mMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0MzJ4NF90IF9fczAgPSBfX3AwOyBcCi0gIGZsb2F0MzJ4NF90IF9fczEgPSBfX3AxOyBcCi0gIGZsb2F0MzJ4NF90IF9fczIgPSBfX3AyOyBcCi0gIGZsb2F0MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCi0gIGZsb2F0MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCi0gIGZsb2F0MzJ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDMsIDIsIDEsIDApOyBcCi0gIGZsb2F0MzJ4NF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gX19yZXYwIC0gX19yZXYxICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdm1sc3FfbGFuZXFfczMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCi0gIGludDMyeDRfdCBfX3MyID0gX19wMjsgXAotICBpbnQzMng0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSBfX3MwIC0gX19zMSAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdm1sc3FfbGFuZXFfczMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCi0gIGludDMyeDRfdCBfX3MyID0gX19wMjsgXAotICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKLSAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCi0gIGludDMyeDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCAzLCAyLCAxLCAwKTsgXAotICBpbnQzMng0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSBfX3JldjAgLSBfX3JldjEgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMywgX19wMywgX19wMyk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bWxzcV9sYW5lcV9zMTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDE2eDhfdCBfX3MwID0gX19wMDsgXAotICBpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKLSAgaW50MTZ4OF90IF9fczIgPSBfX3AyOyBcCi0gIGludDE2eDhfdCBfX3JldDsgXAotICBfX3JldCA9IF9fczAgLSBfX3MxICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMywgX19wMywgX19wMywgX19wMywgX19wMywgX19wMywgX19wMyk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bWxzcV9sYW5lcV9zMTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDE2eDhfdCBfX3MwID0gX19wMDsgXAotICBpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKLSAgaW50MTZ4OF90IF9fczIgPSBfX3AyOyBcCi0gIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgaW50MTZ4OF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIGludDE2eDhfdCBfX3JldDsgXAotICBfX3JldCA9IF9fcmV2MCAtIF9fcmV2MSAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MiwgX19yZXYyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZtbHNfbGFuZXFfdTMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKLSAgdWludDMyeDRfdCBfX3MyID0gX19wMjsgXAotICB1aW50MzJ4Ml90IF9fcmV0OyBcCi0gIF9fcmV0ID0gX19zMCAtIF9fczEgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCBfX3AzLCBfX3AzKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZtbHNfbGFuZXFfdTMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKLSAgdWludDMyeDRfdCBfX3MyID0gX19wMjsgXAotICB1aW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCi0gIHVpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMSwgMCk7IFwKLSAgdWludDMyeDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCAzLCAyLCAxLCAwKTsgXAotICB1aW50MzJ4Ml90IF9fcmV0OyBcCi0gIF9fcmV0ID0gX19yZXYwIC0gX19yZXYxICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdm1sc19sYW5lcV91MTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDE2eDRfdCBfX3MxID0gX19wMTsgXAotICB1aW50MTZ4OF90IF9fczIgPSBfX3AyOyBcCi0gIHVpbnQxNng0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSBfX3MwIC0gX19zMSAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdm1sc19sYW5lcV91MTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDE2eDRfdCBfX3MxID0gX19wMTsgXAotICB1aW50MTZ4OF90IF9fczIgPSBfX3AyOyBcCi0gIHVpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKLSAgdWludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAotICB1aW50MTZ4OF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIHVpbnQxNng0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSBfX3JldjAgLSBfX3JldjEgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMywgX19wMywgX19wMyk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bWxzX2xhbmVxX2YzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQzMngyX3QgX19zMCA9IF9fcDA7IFwKLSAgZmxvYXQzMngyX3QgX19zMSA9IF9fcDE7IFwKLSAgZmxvYXQzMng0X3QgX19zMiA9IF9fcDI7IFwKLSAgZmxvYXQzMngyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSBfX3MwIC0gX19zMSAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIF9fcDMsIF9fcDMpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdm1sc19sYW5lcV9mMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0MzJ4Ml90IF9fczAgPSBfX3AwOyBcCi0gIGZsb2F0MzJ4Ml90IF9fczEgPSBfX3AxOyBcCi0gIGZsb2F0MzJ4NF90IF9fczIgPSBfX3AyOyBcCi0gIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCi0gIGZsb2F0MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCi0gIGZsb2F0MzJ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDMsIDIsIDEsIDApOyBcCi0gIGZsb2F0MzJ4Ml90IF9fcmV0OyBcCi0gIF9fcmV0ID0gX19yZXYwIC0gX19yZXYxICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdm1sc19sYW5lcV9zMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDMyeDJfdCBfX3MwID0gX19wMDsgXAotICBpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKLSAgaW50MzJ4NF90IF9fczIgPSBfX3AyOyBcCi0gIGludDMyeDJfdCBfX3JldDsgXAotICBfX3JldCA9IF9fczAgLSBfX3MxICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMyk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bWxzX2xhbmVxX3MzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCi0gIGludDMyeDJfdCBfX3MxID0gX19wMTsgXAotICBpbnQzMng0X3QgX19zMiA9IF9fcDI7IFwKLSAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCi0gIGludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxLCAwKTsgXAotICBpbnQzMng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgMywgMiwgMSwgMCk7IFwKLSAgaW50MzJ4Ml90IF9fcmV0OyBcCi0gIF9fcmV0ID0gX19yZXYwIC0gX19yZXYxICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdm1sc19sYW5lcV9zMTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDE2eDRfdCBfX3MwID0gX19wMDsgXAotICBpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKLSAgaW50MTZ4OF90IF9fczIgPSBfX3AyOyBcCi0gIGludDE2eDRfdCBfX3JldDsgXAotICBfX3JldCA9IF9fczAgLSBfX3MxICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMywgX19wMywgX19wMyk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bWxzX2xhbmVxX3MxNihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCi0gIGludDE2eDRfdCBfX3MxID0gX19wMTsgXAotICBpbnQxNng4X3QgX19zMiA9IF9fcDI7IFwKLSAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCi0gIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAotICBpbnQxNng4X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgaW50MTZ4NF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gX19yZXYwIC0gX19yZXYxICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgZmxvYXQ2NHgyX3Qgdm1sc3Ffbl9mNjQoZmxvYXQ2NHgyX3QgX19wMCwgZmxvYXQ2NHgyX3QgX19wMSwgZmxvYXQ2NF90IF9fcDIpIHsKLSAgZmxvYXQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19wMCAtIF9fcDEgKiAoZmxvYXQ2NHgyX3QpIHtfX3AyLCBfX3AyfTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgZmxvYXQ2NHgyX3Qgdm1sc3Ffbl9mNjQoZmxvYXQ2NHgyX3QgX19wMCwgZmxvYXQ2NHgyX3QgX19wMSwgZmxvYXQ2NF90IF9fcDIpIHsKLSAgZmxvYXQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIGZsb2F0NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOwotICBmbG9hdDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSBfX3JldjAgLSBfX3JldjEgKiAoZmxvYXQ2NHgyX3QpIHtfX3AyLCBfX3AyfTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZtbHNsX2hpZ2hfbGFuZV91MzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDMyeDRfdCBfX3MxID0gX19wMTsgXAotICB1aW50MzJ4Ml90IF9fczIgPSBfX3AyOyBcCi0gIHVpbnQ2NHgyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSBfX3MwIC0gdm11bGxfdTMyKHZnZXRfaGlnaF91MzIoX19zMSksIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIF9fcDMsIF9fcDMpKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZtbHNsX2hpZ2hfbGFuZV91MzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDMyeDRfdCBfX3MxID0gX19wMTsgXAotICB1aW50MzJ4Ml90IF9fczIgPSBfX3AyOyBcCi0gIHVpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKLSAgdWludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAotICB1aW50MzJ4Ml90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDEsIDApOyBcCi0gIHVpbnQ2NHgyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSBfX3JldjAgLSBfX25vc3dhcF92bXVsbF91MzIoX19ub3N3YXBfdmdldF9oaWdoX3UzMihfX3JldjEpLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMykpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdm1sc2xfaGlnaF9sYW5lX3UxNihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDMyeDRfdCBfX3MwID0gX19wMDsgXAotICB1aW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCi0gIHVpbnQxNng0X3QgX19zMiA9IF9fcDI7IFwKLSAgdWludDMyeDRfdCBfX3JldDsgXAotICBfX3JldCA9IF9fczAgLSB2bXVsbF91MTYodmdldF9oaWdoX3UxNihfX3MxKSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMywgX19wMywgX19wMykpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdm1sc2xfaGlnaF9sYW5lX3UxNihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDMyeDRfdCBfX3MwID0gX19wMDsgXAotICB1aW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCi0gIHVpbnQxNng0X3QgX19zMiA9IF9fcDI7IFwKLSAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAotICB1aW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIHVpbnQxNng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgMywgMiwgMSwgMCk7IFwKLSAgdWludDMyeDRfdCBfX3JldDsgXAotICBfX3JldCA9IF9fcmV2MCAtIF9fbm9zd2FwX3ZtdWxsX3UxNihfX25vc3dhcF92Z2V0X2hpZ2hfdTE2KF9fcmV2MSksIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MiwgX19yZXYyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKSk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bWxzbF9oaWdoX2xhbmVfczMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCi0gIGludDMyeDJfdCBfX3MyID0gX19wMjsgXAotICBpbnQ2NHgyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSBfX3MwIC0gdm11bGxfczMyKHZnZXRfaGlnaF9zMzIoX19zMSksIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIF9fcDMsIF9fcDMpKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZtbHNsX2hpZ2hfbGFuZV9zMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDY0eDJfdCBfX3MwID0gX19wMDsgXAotICBpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKLSAgaW50MzJ4Ml90IF9fczIgPSBfX3AyOyBcCi0gIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAotICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKLSAgaW50MzJ4Ml90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDEsIDApOyBcCi0gIGludDY0eDJfdCBfX3JldDsgXAotICBfX3JldCA9IF9fcmV2MCAtIF9fbm9zd2FwX3ZtdWxsX3MzMihfX25vc3dhcF92Z2V0X2hpZ2hfczMyKF9fcmV2MSksIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MiwgX19yZXYyLCBfX3AzLCBfX3AzKSk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bWxzbF9oaWdoX2xhbmVfczE2KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCi0gIGludDE2eDRfdCBfX3MyID0gX19wMjsgXAotICBpbnQzMng0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSBfX3MwIC0gdm11bGxfczE2KHZnZXRfaGlnaF9zMTYoX19zMSksIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZtbHNsX2hpZ2hfbGFuZV9zMTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAotICBpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKLSAgaW50MTZ4NF90IF9fczIgPSBfX3AyOyBcCi0gIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAotICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgaW50MTZ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDMsIDIsIDEsIDApOyBcCi0gIGludDMyeDRfdCBfX3JldDsgXAotICBfX3JldCA9IF9fcmV2MCAtIF9fbm9zd2FwX3ZtdWxsX3MxNihfX25vc3dhcF92Z2V0X2hpZ2hfczE2KF9fcmV2MSksIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MiwgX19yZXYyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKSk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bWxzbF9oaWdoX2xhbmVxX3UzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDY0eDJfdCBfX3MwID0gX19wMDsgXAotICB1aW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCi0gIHVpbnQzMng0X3QgX19zMiA9IF9fcDI7IFwKLSAgdWludDY0eDJfdCBfX3JldDsgXAotICBfX3JldCA9IF9fczAgLSB2bXVsbF91MzIodmdldF9oaWdoX3UzMihfX3MxKSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMykpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdm1sc2xfaGlnaF9sYW5lcV91MzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDMyeDRfdCBfX3MxID0gX19wMTsgXAotICB1aW50MzJ4NF90IF9fczIgPSBfX3AyOyBcCi0gIHVpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKLSAgdWludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAotICB1aW50MzJ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDMsIDIsIDEsIDApOyBcCi0gIHVpbnQ2NHgyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSBfX3JldjAgLSBfX25vc3dhcF92bXVsbF91MzIoX19ub3N3YXBfdmdldF9oaWdoX3UzMihfX3JldjEpLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMykpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdm1sc2xfaGlnaF9sYW5lcV91MTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDE2eDhfdCBfX3MxID0gX19wMTsgXAotICB1aW50MTZ4OF90IF9fczIgPSBfX3AyOyBcCi0gIHVpbnQzMng0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSBfX3MwIC0gdm11bGxfdTE2KHZnZXRfaGlnaF91MTYoX19zMSksIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZtbHNsX2hpZ2hfbGFuZXFfdTE2KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKLSAgdWludDE2eDhfdCBfX3MyID0gX19wMjsgXAotICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCi0gIHVpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgdWludDE2eDhfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICB1aW50MzJ4NF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gX19yZXYwIC0gX19ub3N3YXBfdm11bGxfdTE2KF9fbm9zd2FwX3ZnZXRfaGlnaF91MTYoX19yZXYxKSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpKTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZtbHNsX2hpZ2hfbGFuZXFfczMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCi0gIGludDMyeDRfdCBfX3MyID0gX19wMjsgXAotICBpbnQ2NHgyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSBfX3MwIC0gdm11bGxfczMyKHZnZXRfaGlnaF9zMzIoX19zMSksIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIF9fcDMsIF9fcDMpKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZtbHNsX2hpZ2hfbGFuZXFfczMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCi0gIGludDMyeDRfdCBfX3MyID0gX19wMjsgXAotICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKLSAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCi0gIGludDMyeDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCAzLCAyLCAxLCAwKTsgXAotICBpbnQ2NHgyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSBfX3JldjAgLSBfX25vc3dhcF92bXVsbF9zMzIoX19ub3N3YXBfdmdldF9oaWdoX3MzMihfX3JldjEpLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMykpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdm1sc2xfaGlnaF9sYW5lcV9zMTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAotICBpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKLSAgaW50MTZ4OF90IF9fczIgPSBfX3AyOyBcCi0gIGludDMyeDRfdCBfX3JldDsgXAotICBfX3JldCA9IF9fczAgLSB2bXVsbF9zMTYodmdldF9oaWdoX3MxNihfX3MxKSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMywgX19wMywgX19wMykpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdm1sc2xfaGlnaF9sYW5lcV9zMTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAotICBpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKLSAgaW50MTZ4OF90IF9fczIgPSBfX3AyOyBcCi0gIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAotICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgaW50MTZ4OF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIGludDMyeDRfdCBfX3JldDsgXAotICBfX3JldCA9IF9fcmV2MCAtIF9fbm9zd2FwX3ZtdWxsX3MxNihfX25vc3dhcF92Z2V0X2hpZ2hfczE2KF9fcmV2MSksIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MiwgX19yZXYyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKSk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bWxzbF9sYW5lcV91MzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDMyeDJfdCBfX3MxID0gX19wMTsgXAotICB1aW50MzJ4NF90IF9fczIgPSBfX3AyOyBcCi0gIHVpbnQ2NHgyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSBfX3MwIC0gdm11bGxfdTMyKF9fczEsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIF9fcDMsIF9fcDMpKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZtbHNsX2xhbmVxX3UzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDY0eDJfdCBfX3MwID0gX19wMDsgXAotICB1aW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCi0gIHVpbnQzMng0X3QgX19zMiA9IF9fcDI7IFwKLSAgdWludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAotICB1aW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCi0gIHVpbnQzMng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgMywgMiwgMSwgMCk7IFwKLSAgdWludDY0eDJfdCBfX3JldDsgXAotICBfX3JldCA9IF9fcmV2MCAtIF9fbm9zd2FwX3ZtdWxsX3UzMihfX3JldjEsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MiwgX19yZXYyLCBfX3AzLCBfX3AzKSk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bWxzbF9sYW5lcV91MTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDE2eDRfdCBfX3MxID0gX19wMTsgXAotICB1aW50MTZ4OF90IF9fczIgPSBfX3AyOyBcCi0gIHVpbnQzMng0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSBfX3MwIC0gdm11bGxfdTE2KF9fczEsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZtbHNsX2xhbmVxX3UxNihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDMyeDRfdCBfX3MwID0gX19wMDsgXAotICB1aW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCi0gIHVpbnQxNng4X3QgX19zMiA9IF9fcDI7IFwKLSAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAotICB1aW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCi0gIHVpbnQxNng4X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgdWludDMyeDRfdCBfX3JldDsgXAotICBfX3JldCA9IF9fcmV2MCAtIF9fbm9zd2FwX3ZtdWxsX3UxNihfX3JldjEsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MiwgX19yZXYyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKSk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bWxzbF9sYW5lcV9zMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDY0eDJfdCBfX3MwID0gX19wMDsgXAotICBpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKLSAgaW50MzJ4NF90IF9fczIgPSBfX3AyOyBcCi0gIGludDY0eDJfdCBfX3JldDsgXAotICBfX3JldCA9IF9fczAgLSB2bXVsbF9zMzIoX19zMSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMykpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdm1sc2xfbGFuZXFfczMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCi0gIGludDMyeDRfdCBfX3MyID0gX19wMjsgXAotICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKLSAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCi0gIGludDMyeDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCAzLCAyLCAxLCAwKTsgXAotICBpbnQ2NHgyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSBfX3JldjAgLSBfX25vc3dhcF92bXVsbF9zMzIoX19yZXYxLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMykpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdm1sc2xfbGFuZXFfczE2KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCi0gIGludDE2eDhfdCBfX3MyID0gX19wMjsgXAotICBpbnQzMng0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSBfX3MwIC0gdm11bGxfczE2KF9fczEsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZtbHNsX2xhbmVxX3MxNihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCi0gIGludDE2eDRfdCBfX3MxID0gX19wMTsgXAotICBpbnQxNng4X3QgX19zMiA9IF9fcDI7IFwKLSAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCi0gIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAotICBpbnQxNng4X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgaW50MzJ4NF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gX19yZXYwIC0gX19ub3N3YXBfdm11bGxfczE2KF9fcmV2MSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpKTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHBvbHk2NHgxX3Qgdm1vdl9uX3A2NChwb2x5NjRfdCBfX3AwKSB7Ci0gIHBvbHk2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHBvbHk2NHgxX3QpIHtfX3AwfTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgcG9seTY0eDFfdCB2bW92X25fcDY0KHBvbHk2NF90IF9fcDApIHsKLSAgcG9seTY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSAocG9seTY0eDFfdCkge19fcDB9OwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHBvbHk2NHgyX3Qgdm1vdnFfbl9wNjQocG9seTY0X3QgX19wMCkgewotICBwb2x5NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IChwb2x5NjR4Ml90KSB7X19wMCwgX19wMH07Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHBvbHk2NHgyX3Qgdm1vdnFfbl9wNjQocG9seTY0X3QgX19wMCkgewotICBwb2x5NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IChwb2x5NjR4Ml90KSB7X19wMCwgX19wMH07Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBmbG9hdDY0eDJfdCB2bW92cV9uX2Y2NChmbG9hdDY0X3QgX19wMCkgewotICBmbG9hdDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpIHtfX3AwLCBfX3AwfTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgZmxvYXQ2NHgyX3Qgdm1vdnFfbl9mNjQoZmxvYXQ2NF90IF9fcDApIHsKLSAgZmxvYXQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0NjR4Ml90KSB7X19wMCwgX19wMH07Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBmbG9hdDY0eDFfdCB2bW92X25fZjY0KGZsb2F0NjRfdCBfX3AwKSB7Ci0gIGZsb2F0NjR4MV90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDY0eDFfdCkge19fcDB9OwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBmbG9hdDY0eDFfdCB2bW92X25fZjY0KGZsb2F0NjRfdCBfX3AwKSB7Ci0gIGZsb2F0NjR4MV90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDY0eDFfdCkge19fcDB9OwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQxNng4X3Qgdm1vdmxfaGlnaF91OCh1aW50OHgxNl90IF9fcDBfMTEyKSB7Ci0gIHVpbnQxNng4X3QgX19yZXRfMTEyOwotICB1aW50OHg4X3QgX19hMV8xMTIgPSB2Z2V0X2hpZ2hfdTgoX19wMF8xMTIpOwotICBfX3JldF8xMTIgPSAodWludDE2eDhfdCkodnNobGxfbl91OChfX2ExXzExMiwgMCkpOwotICByZXR1cm4gX19yZXRfMTEyOwotfQotI2Vsc2UKLV9fYWkgdWludDE2eDhfdCB2bW92bF9oaWdoX3U4KHVpbnQ4eDE2X3QgX19wMF8xMTMpIHsKLSAgdWludDh4MTZfdCBfX3JldjBfMTEzOyAgX19yZXYwXzExMyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDBfMTEzLCBfX3AwXzExMywgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQxNng4X3QgX19yZXRfMTEzOwotICB1aW50OHg4X3QgX19hMV8xMTMgPSBfX25vc3dhcF92Z2V0X2hpZ2hfdTgoX19yZXYwXzExMyk7Ci0gIF9fcmV0XzExMyA9ICh1aW50MTZ4OF90KShfX25vc3dhcF92c2hsbF9uX3U4KF9fYTFfMTEzLCAwKSk7Ci0gIF9fcmV0XzExMyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0XzExMywgX19yZXRfMTEzLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0XzExMzsKLX0KLV9fYWkgdWludDE2eDhfdCBfX25vc3dhcF92bW92bF9oaWdoX3U4KHVpbnQ4eDE2X3QgX19wMF8xMTQpIHsKLSAgdWludDE2eDhfdCBfX3JldF8xMTQ7Ci0gIHVpbnQ4eDhfdCBfX2ExXzExNCA9IF9fbm9zd2FwX3ZnZXRfaGlnaF91OChfX3AwXzExNCk7Ci0gIF9fcmV0XzExNCA9ICh1aW50MTZ4OF90KShfX25vc3dhcF92c2hsbF9uX3U4KF9fYTFfMTE0LCAwKSk7Ci0gIHJldHVybiBfX3JldF8xMTQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ2NHgyX3Qgdm1vdmxfaGlnaF91MzIodWludDMyeDRfdCBfX3AwXzExNSkgewotICB1aW50NjR4Ml90IF9fcmV0XzExNTsKLSAgdWludDMyeDJfdCBfX2ExXzExNSA9IHZnZXRfaGlnaF91MzIoX19wMF8xMTUpOwotICBfX3JldF8xMTUgPSAodWludDY0eDJfdCkodnNobGxfbl91MzIoX19hMV8xMTUsIDApKTsKLSAgcmV0dXJuIF9fcmV0XzExNTsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ2NHgyX3Qgdm1vdmxfaGlnaF91MzIodWludDMyeDRfdCBfX3AwXzExNikgewotICB1aW50MzJ4NF90IF9fcmV2MF8xMTY7ICBfX3JldjBfMTE2ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMF8xMTYsIF9fcDBfMTE2LCAzLCAyLCAxLCAwKTsKLSAgdWludDY0eDJfdCBfX3JldF8xMTY7Ci0gIHVpbnQzMngyX3QgX19hMV8xMTYgPSBfX25vc3dhcF92Z2V0X2hpZ2hfdTMyKF9fcmV2MF8xMTYpOwotICBfX3JldF8xMTYgPSAodWludDY0eDJfdCkoX19ub3N3YXBfdnNobGxfbl91MzIoX19hMV8xMTYsIDApKTsKLSAgX19yZXRfMTE2ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXRfMTE2LCBfX3JldF8xMTYsIDEsIDApOwotICByZXR1cm4gX19yZXRfMTE2OwotfQotX19haSB1aW50NjR4Ml90IF9fbm9zd2FwX3Ztb3ZsX2hpZ2hfdTMyKHVpbnQzMng0X3QgX19wMF8xMTcpIHsKLSAgdWludDY0eDJfdCBfX3JldF8xMTc7Ci0gIHVpbnQzMngyX3QgX19hMV8xMTcgPSBfX25vc3dhcF92Z2V0X2hpZ2hfdTMyKF9fcDBfMTE3KTsKLSAgX19yZXRfMTE3ID0gKHVpbnQ2NHgyX3QpKF9fbm9zd2FwX3ZzaGxsX25fdTMyKF9fYTFfMTE3LCAwKSk7Ci0gIHJldHVybiBfX3JldF8xMTc7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQzMng0X3Qgdm1vdmxfaGlnaF91MTYodWludDE2eDhfdCBfX3AwXzExOCkgewotICB1aW50MzJ4NF90IF9fcmV0XzExODsKLSAgdWludDE2eDRfdCBfX2ExXzExOCA9IHZnZXRfaGlnaF91MTYoX19wMF8xMTgpOwotICBfX3JldF8xMTggPSAodWludDMyeDRfdCkodnNobGxfbl91MTYoX19hMV8xMTgsIDApKTsKLSAgcmV0dXJuIF9fcmV0XzExODsKLX0KLSNlbHNlCi1fX2FpIHVpbnQzMng0X3Qgdm1vdmxfaGlnaF91MTYodWludDE2eDhfdCBfX3AwXzExOSkgewotICB1aW50MTZ4OF90IF9fcmV2MF8xMTk7ICBfX3JldjBfMTE5ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMF8xMTksIF9fcDBfMTE5LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDMyeDRfdCBfX3JldF8xMTk7Ci0gIHVpbnQxNng0X3QgX19hMV8xMTkgPSBfX25vc3dhcF92Z2V0X2hpZ2hfdTE2KF9fcmV2MF8xMTkpOwotICBfX3JldF8xMTkgPSAodWludDMyeDRfdCkoX19ub3N3YXBfdnNobGxfbl91MTYoX19hMV8xMTksIDApKTsKLSAgX19yZXRfMTE5ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXRfMTE5LCBfX3JldF8xMTksIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXRfMTE5OwotfQotX19haSB1aW50MzJ4NF90IF9fbm9zd2FwX3Ztb3ZsX2hpZ2hfdTE2KHVpbnQxNng4X3QgX19wMF8xMjApIHsKLSAgdWludDMyeDRfdCBfX3JldF8xMjA7Ci0gIHVpbnQxNng0X3QgX19hMV8xMjAgPSBfX25vc3dhcF92Z2V0X2hpZ2hfdTE2KF9fcDBfMTIwKTsKLSAgX19yZXRfMTIwID0gKHVpbnQzMng0X3QpKF9fbm9zd2FwX3ZzaGxsX25fdTE2KF9fYTFfMTIwLCAwKSk7Ci0gIHJldHVybiBfX3JldF8xMjA7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDE2eDhfdCB2bW92bF9oaWdoX3M4KGludDh4MTZfdCBfX3AwXzEyMSkgewotICBpbnQxNng4X3QgX19yZXRfMTIxOwotICBpbnQ4eDhfdCBfX2ExXzEyMSA9IHZnZXRfaGlnaF9zOChfX3AwXzEyMSk7Ci0gIF9fcmV0XzEyMSA9IChpbnQxNng4X3QpKHZzaGxsX25fczgoX19hMV8xMjEsIDApKTsKLSAgcmV0dXJuIF9fcmV0XzEyMTsKLX0KLSNlbHNlCi1fX2FpIGludDE2eDhfdCB2bW92bF9oaWdoX3M4KGludDh4MTZfdCBfX3AwXzEyMikgewotICBpbnQ4eDE2X3QgX19yZXYwXzEyMjsgIF9fcmV2MF8xMjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwXzEyMiwgX19wMF8xMjIsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQxNng4X3QgX19yZXRfMTIyOwotICBpbnQ4eDhfdCBfX2ExXzEyMiA9IF9fbm9zd2FwX3ZnZXRfaGlnaF9zOChfX3JldjBfMTIyKTsKLSAgX19yZXRfMTIyID0gKGludDE2eDhfdCkoX19ub3N3YXBfdnNobGxfbl9zOChfX2ExXzEyMiwgMCkpOwotICBfX3JldF8xMjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldF8xMjIsIF9fcmV0XzEyMiwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldF8xMjI7Ci19Ci1fX2FpIGludDE2eDhfdCBfX25vc3dhcF92bW92bF9oaWdoX3M4KGludDh4MTZfdCBfX3AwXzEyMykgewotICBpbnQxNng4X3QgX19yZXRfMTIzOwotICBpbnQ4eDhfdCBfX2ExXzEyMyA9IF9fbm9zd2FwX3ZnZXRfaGlnaF9zOChfX3AwXzEyMyk7Ci0gIF9fcmV0XzEyMyA9IChpbnQxNng4X3QpKF9fbm9zd2FwX3ZzaGxsX25fczgoX19hMV8xMjMsIDApKTsKLSAgcmV0dXJuIF9fcmV0XzEyMzsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50NjR4Ml90IHZtb3ZsX2hpZ2hfczMyKGludDMyeDRfdCBfX3AwXzEyNCkgewotICBpbnQ2NHgyX3QgX19yZXRfMTI0OwotICBpbnQzMngyX3QgX19hMV8xMjQgPSB2Z2V0X2hpZ2hfczMyKF9fcDBfMTI0KTsKLSAgX19yZXRfMTI0ID0gKGludDY0eDJfdCkodnNobGxfbl9zMzIoX19hMV8xMjQsIDApKTsKLSAgcmV0dXJuIF9fcmV0XzEyNDsKLX0KLSNlbHNlCi1fX2FpIGludDY0eDJfdCB2bW92bF9oaWdoX3MzMihpbnQzMng0X3QgX19wMF8xMjUpIHsKLSAgaW50MzJ4NF90IF9fcmV2MF8xMjU7ICBfX3JldjBfMTI1ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMF8xMjUsIF9fcDBfMTI1LCAzLCAyLCAxLCAwKTsKLSAgaW50NjR4Ml90IF9fcmV0XzEyNTsKLSAgaW50MzJ4Ml90IF9fYTFfMTI1ID0gX19ub3N3YXBfdmdldF9oaWdoX3MzMihfX3JldjBfMTI1KTsKLSAgX19yZXRfMTI1ID0gKGludDY0eDJfdCkoX19ub3N3YXBfdnNobGxfbl9zMzIoX19hMV8xMjUsIDApKTsKLSAgX19yZXRfMTI1ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXRfMTI1LCBfX3JldF8xMjUsIDEsIDApOwotICByZXR1cm4gX19yZXRfMTI1OwotfQotX19haSBpbnQ2NHgyX3QgX19ub3N3YXBfdm1vdmxfaGlnaF9zMzIoaW50MzJ4NF90IF9fcDBfMTI2KSB7Ci0gIGludDY0eDJfdCBfX3JldF8xMjY7Ci0gIGludDMyeDJfdCBfX2ExXzEyNiA9IF9fbm9zd2FwX3ZnZXRfaGlnaF9zMzIoX19wMF8xMjYpOwotICBfX3JldF8xMjYgPSAoaW50NjR4Ml90KShfX25vc3dhcF92c2hsbF9uX3MzMihfX2ExXzEyNiwgMCkpOwotICByZXR1cm4gX19yZXRfMTI2OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQzMng0X3Qgdm1vdmxfaGlnaF9zMTYoaW50MTZ4OF90IF9fcDBfMTI3KSB7Ci0gIGludDMyeDRfdCBfX3JldF8xMjc7Ci0gIGludDE2eDRfdCBfX2ExXzEyNyA9IHZnZXRfaGlnaF9zMTYoX19wMF8xMjcpOwotICBfX3JldF8xMjcgPSAoaW50MzJ4NF90KSh2c2hsbF9uX3MxNihfX2ExXzEyNywgMCkpOwotICByZXR1cm4gX19yZXRfMTI3OwotfQotI2Vsc2UKLV9fYWkgaW50MzJ4NF90IHZtb3ZsX2hpZ2hfczE2KGludDE2eDhfdCBfX3AwXzEyOCkgewotICBpbnQxNng4X3QgX19yZXYwXzEyODsgIF9fcmV2MF8xMjggPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwXzEyOCwgX19wMF8xMjgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQzMng0X3QgX19yZXRfMTI4OwotICBpbnQxNng0X3QgX19hMV8xMjggPSBfX25vc3dhcF92Z2V0X2hpZ2hfczE2KF9fcmV2MF8xMjgpOwotICBfX3JldF8xMjggPSAoaW50MzJ4NF90KShfX25vc3dhcF92c2hsbF9uX3MxNihfX2ExXzEyOCwgMCkpOwotICBfX3JldF8xMjggPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldF8xMjgsIF9fcmV0XzEyOCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldF8xMjg7Ci19Ci1fX2FpIGludDMyeDRfdCBfX25vc3dhcF92bW92bF9oaWdoX3MxNihpbnQxNng4X3QgX19wMF8xMjkpIHsKLSAgaW50MzJ4NF90IF9fcmV0XzEyOTsKLSAgaW50MTZ4NF90IF9fYTFfMTI5ID0gX19ub3N3YXBfdmdldF9oaWdoX3MxNihfX3AwXzEyOSk7Ci0gIF9fcmV0XzEyOSA9IChpbnQzMng0X3QpKF9fbm9zd2FwX3ZzaGxsX25fczE2KF9fYTFfMTI5LCAwKSk7Ci0gIHJldHVybiBfX3JldF8xMjk7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQxNng4X3Qgdm1vdm5faGlnaF91MzIodWludDE2eDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEpIHsKLSAgdWludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSB2Y29tYmluZV91MTYoX19wMCwgdm1vdm5fdTMyKF9fcDEpKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDE2eDhfdCB2bW92bl9oaWdoX3UzMih1aW50MTZ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgewotICB1aW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICB1aW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOwotICB1aW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IF9fbm9zd2FwX3Zjb21iaW5lX3UxNihfX3JldjAsIF9fbm9zd2FwX3Ztb3ZuX3UzMihfX3JldjEpKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQzMng0X3Qgdm1vdm5faGlnaF91NjQodWludDMyeDJfdCBfX3AwLCB1aW50NjR4Ml90IF9fcDEpIHsKLSAgdWludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSB2Y29tYmluZV91MzIoX19wMCwgdm1vdm5fdTY0KF9fcDEpKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDMyeDRfdCB2bW92bl9oaWdoX3U2NCh1aW50MzJ4Ml90IF9fcDAsIHVpbnQ2NHgyX3QgX19wMSkgewotICB1aW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICB1aW50NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOwotICB1aW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IF9fbm9zd2FwX3Zjb21iaW5lX3UzMihfX3JldjAsIF9fbm9zd2FwX3Ztb3ZuX3U2NChfX3JldjEpKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ4eDE2X3Qgdm1vdm5faGlnaF91MTYodWludDh4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSkgewotICB1aW50OHgxNl90IF9fcmV0OwotICBfX3JldCA9IHZjb21iaW5lX3U4KF9fcDAsIHZtb3ZuX3UxNihfX3AxKSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ4eDE2X3Qgdm1vdm5faGlnaF91MTYodWludDh4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSkgewotICB1aW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQ4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19ub3N3YXBfdmNvbWJpbmVfdTgoX19yZXYwLCBfX25vc3dhcF92bW92bl91MTYoX19yZXYxKSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQxNng4X3Qgdm1vdm5faGlnaF9zMzIoaW50MTZ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7Ci0gIGludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSB2Y29tYmluZV9zMTYoX19wMCwgdm1vdm5fczMyKF9fcDEpKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MTZ4OF90IHZtb3ZuX2hpZ2hfczMyKGludDE2eDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgewotICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKLSAgaW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IF9fbm9zd2FwX3Zjb21iaW5lX3MxNihfX3JldjAsIF9fbm9zd2FwX3Ztb3ZuX3MzMihfX3JldjEpKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDMyeDRfdCB2bW92bl9oaWdoX3M2NChpbnQzMngyX3QgX19wMCwgaW50NjR4Ml90IF9fcDEpIHsKLSAgaW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IHZjb21iaW5lX3MzMihfX3AwLCB2bW92bl9zNjQoX19wMSkpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQzMng0X3Qgdm1vdm5faGlnaF9zNjQoaW50MzJ4Ml90IF9fcDAsIGludDY0eDJfdCBfX3AxKSB7Ci0gIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgaW50NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOwotICBpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19ub3N3YXBfdmNvbWJpbmVfczMyKF9fcmV2MCwgX19ub3N3YXBfdm1vdm5fczY0KF9fcmV2MSkpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50OHgxNl90IHZtb3ZuX2hpZ2hfczE2KGludDh4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7Ci0gIGludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSB2Y29tYmluZV9zOChfX3AwLCB2bW92bl9zMTYoX19wMSkpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQ4eDE2X3Qgdm1vdm5faGlnaF9zMTYoaW50OHg4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKLSAgaW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50OHgxNl90IF9fcmV0OwotICBfX3JldCA9IF9fbm9zd2FwX3Zjb21iaW5lX3M4KF9fcmV2MCwgX19ub3N3YXBfdm1vdm5fczE2KF9fcmV2MSkpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgZmxvYXQ2NHgyX3Qgdm11bHFfZjY0KGZsb2F0NjR4Ml90IF9fcDAsIGZsb2F0NjR4Ml90IF9fcDEpIHsKLSAgZmxvYXQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19wMCAqIF9fcDE7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGZsb2F0NjR4Ml90IHZtdWxxX2Y2NChmbG9hdDY0eDJfdCBfX3AwLCBmbG9hdDY0eDJfdCBfX3AxKSB7Ci0gIGZsb2F0NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICBmbG9hdDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKLSAgZmxvYXQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19yZXYwICogX19yZXYxOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgZmxvYXQ2NHgxX3Qgdm11bF9mNjQoZmxvYXQ2NHgxX3QgX19wMCwgZmxvYXQ2NHgxX3QgX19wMSkgewotICBmbG9hdDY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSBfX3AwICogX19wMTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgZmxvYXQ2NHgxX3Qgdm11bF9mNjQoZmxvYXQ2NHgxX3QgX19wMCwgZmxvYXQ2NHgxX3QgX19wMSkgewotICBmbG9hdDY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSBfX3AwICogX19wMTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bXVsZF9sYW5lX2Y2NChfX3AwXzEzMCwgX19wMV8xMzAsIF9fcDJfMTMwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQ2NF90IF9fczBfMTMwID0gX19wMF8xMzA7IFwKLSAgZmxvYXQ2NHgxX3QgX19zMV8xMzAgPSBfX3AxXzEzMDsgXAotICBmbG9hdDY0X3QgX19yZXRfMTMwOyBcCi0gIF9fcmV0XzEzMCA9IF9fczBfMTMwICogdmdldF9sYW5lX2Y2NChfX3MxXzEzMCwgX19wMl8xMzApOyBcCi0gIF9fcmV0XzEzMDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZtdWxkX2xhbmVfZjY0KF9fcDBfMTMxLCBfX3AxXzEzMSwgX19wMl8xMzEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDY0X3QgX19zMF8xMzEgPSBfX3AwXzEzMTsgXAotICBmbG9hdDY0eDFfdCBfX3MxXzEzMSA9IF9fcDFfMTMxOyBcCi0gIGZsb2F0NjRfdCBfX3JldF8xMzE7IFwKLSAgX19yZXRfMTMxID0gX19zMF8xMzEgKiBfX25vc3dhcF92Z2V0X2xhbmVfZjY0KF9fczFfMTMxLCBfX3AyXzEzMSk7IFwKLSAgX19yZXRfMTMxOyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bXVsc19sYW5lX2YzMihfX3AwXzEzMiwgX19wMV8xMzIsIF9fcDJfMTMyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQzMl90IF9fczBfMTMyID0gX19wMF8xMzI7IFwKLSAgZmxvYXQzMngyX3QgX19zMV8xMzIgPSBfX3AxXzEzMjsgXAotICBmbG9hdDMyX3QgX19yZXRfMTMyOyBcCi0gIF9fcmV0XzEzMiA9IF9fczBfMTMyICogdmdldF9sYW5lX2YzMihfX3MxXzEzMiwgX19wMl8xMzIpOyBcCi0gIF9fcmV0XzEzMjsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZtdWxzX2xhbmVfZjMyKF9fcDBfMTMzLCBfX3AxXzEzMywgX19wMl8xMzMpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDMyX3QgX19zMF8xMzMgPSBfX3AwXzEzMzsgXAotICBmbG9hdDMyeDJfdCBfX3MxXzEzMyA9IF9fcDFfMTMzOyBcCi0gIGZsb2F0MzJ4Ml90IF9fcmV2MV8xMzM7ICBfX3JldjFfMTMzID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMV8xMzMsIF9fczFfMTMzLCAxLCAwKTsgXAotICBmbG9hdDMyX3QgX19yZXRfMTMzOyBcCi0gIF9fcmV0XzEzMyA9IF9fczBfMTMzICogX19ub3N3YXBfdmdldF9sYW5lX2YzMihfX3JldjFfMTMzLCBfX3AyXzEzMyk7IFwKLSAgX19yZXRfMTMzOyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bXVsX2xhbmVfZjY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDY0eDFfdCBfX3MwID0gX19wMDsgXAotICBmbG9hdDY0eDFfdCBfX3MxID0gX19wMTsgXAotICBmbG9hdDY0eDFfdCBfX3JldDsgXAotICBfX3JldCA9IChmbG9hdDY0eDFfdCkgX19idWlsdGluX25lb25fdm11bF9sYW5lX3YoKGludDh4OF90KV9fczAsIChpbnQ4eDhfdClfX3MxLCBfX3AyLCAxMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bXVsX2xhbmVfZjY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDY0eDFfdCBfX3MwID0gX19wMDsgXAotICBmbG9hdDY0eDFfdCBfX3MxID0gX19wMTsgXAotICBmbG9hdDY0eDFfdCBfX3JldDsgXAotICBfX3JldCA9IChmbG9hdDY0eDFfdCkgX19idWlsdGluX25lb25fdm11bF9sYW5lX3YoKGludDh4OF90KV9fczAsIChpbnQ4eDhfdClfX3MxLCBfX3AyLCAxMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZtdWxxX2xhbmVfZjY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDY0eDJfdCBfX3MwID0gX19wMDsgXAotICBmbG9hdDY0eDFfdCBfX3MxID0gX19wMTsgXAotICBmbG9hdDY0eDJfdCBfX3JldDsgXAotICBfX3JldCA9IF9fczAgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCBfX3AyLCBfX3AyKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZtdWxxX2xhbmVfZjY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDY0eDJfdCBfX3MwID0gX19wMDsgXAotICBmbG9hdDY0eDFfdCBfX3MxID0gX19wMTsgXAotICBmbG9hdDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAotICBmbG9hdDY0eDJfdCBfX3JldDsgXAotICBfX3JldCA9IF9fcmV2MCAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIF9fcDIsIF9fcDIpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdm11bGRfbGFuZXFfZjY0KF9fcDBfMTM0LCBfX3AxXzEzNCwgX19wMl8xMzQpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDY0X3QgX19zMF8xMzQgPSBfX3AwXzEzNDsgXAotICBmbG9hdDY0eDJfdCBfX3MxXzEzNCA9IF9fcDFfMTM0OyBcCi0gIGZsb2F0NjRfdCBfX3JldF8xMzQ7IFwKLSAgX19yZXRfMTM0ID0gX19zMF8xMzQgKiB2Z2V0cV9sYW5lX2Y2NChfX3MxXzEzNCwgX19wMl8xMzQpOyBcCi0gIF9fcmV0XzEzNDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZtdWxkX2xhbmVxX2Y2NChfX3AwXzEzNSwgX19wMV8xMzUsIF9fcDJfMTM1KSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQ2NF90IF9fczBfMTM1ID0gX19wMF8xMzU7IFwKLSAgZmxvYXQ2NHgyX3QgX19zMV8xMzUgPSBfX3AxXzEzNTsgXAotICBmbG9hdDY0eDJfdCBfX3JldjFfMTM1OyAgX19yZXYxXzEzNSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczFfMTM1LCBfX3MxXzEzNSwgMSwgMCk7IFwKLSAgZmxvYXQ2NF90IF9fcmV0XzEzNTsgXAotICBfX3JldF8xMzUgPSBfX3MwXzEzNSAqIF9fbm9zd2FwX3ZnZXRxX2xhbmVfZjY0KF9fcmV2MV8xMzUsIF9fcDJfMTM1KTsgXAotICBfX3JldF8xMzU7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZtdWxzX2xhbmVxX2YzMihfX3AwXzEzNiwgX19wMV8xMzYsIF9fcDJfMTM2KSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQzMl90IF9fczBfMTM2ID0gX19wMF8xMzY7IFwKLSAgZmxvYXQzMng0X3QgX19zMV8xMzYgPSBfX3AxXzEzNjsgXAotICBmbG9hdDMyX3QgX19yZXRfMTM2OyBcCi0gIF9fcmV0XzEzNiA9IF9fczBfMTM2ICogdmdldHFfbGFuZV9mMzIoX19zMV8xMzYsIF9fcDJfMTM2KTsgXAotICBfX3JldF8xMzY7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bXVsc19sYW5lcV9mMzIoX19wMF8xMzcsIF9fcDFfMTM3LCBfX3AyXzEzNykgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0MzJfdCBfX3MwXzEzNyA9IF9fcDBfMTM3OyBcCi0gIGZsb2F0MzJ4NF90IF9fczFfMTM3ID0gX19wMV8xMzc7IFwKLSAgZmxvYXQzMng0X3QgX19yZXYxXzEzNzsgIF9fcmV2MV8xMzcgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxXzEzNywgX19zMV8xMzcsIDMsIDIsIDEsIDApOyBcCi0gIGZsb2F0MzJfdCBfX3JldF8xMzc7IFwKLSAgX19yZXRfMTM3ID0gX19zMF8xMzcgKiBfX25vc3dhcF92Z2V0cV9sYW5lX2YzMihfX3JldjFfMTM3LCBfX3AyXzEzNyk7IFwKLSAgX19yZXRfMTM3OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bXVsX2xhbmVxX2Y2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQ2NHgxX3QgX19zMCA9IF9fcDA7IFwKLSAgZmxvYXQ2NHgyX3QgX19zMSA9IF9fcDE7IFwKLSAgZmxvYXQ2NHgxX3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZtdWxfbGFuZXFfdigoaW50OHg4X3QpX19zMCwgKGludDh4MTZfdClfX3MxLCBfX3AyLCAxMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bXVsX2xhbmVxX2Y2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQ2NHgxX3QgX19zMCA9IF9fcDA7IFwKLSAgZmxvYXQ2NHgyX3QgX19zMSA9IF9fcDE7IFwKLSAgZmxvYXQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMSwgMCk7IFwKLSAgZmxvYXQ2NHgxX3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZtdWxfbGFuZXFfdigoaW50OHg4X3QpX19zMCwgKGludDh4MTZfdClfX3JldjEsIF9fcDIsIDEwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdm11bHFfbGFuZXFfdTMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKLSAgdWludDMyeDRfdCBfX3JldDsgXAotICBfX3JldCA9IF9fczAgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZtdWxxX2xhbmVxX3UzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDMyeDRfdCBfX3MwID0gX19wMDsgXAotICB1aW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCi0gIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKLSAgdWludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAotICB1aW50MzJ4NF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gX19yZXYwICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYxLCBfX3JldjEsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdm11bHFfbGFuZXFfdTE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKLSAgdWludDE2eDhfdCBfX3JldDsgXAotICBfX3JldCA9IF9fczAgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZtdWxxX2xhbmVxX3UxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDE2eDhfdCBfX3MwID0gX19wMDsgXAotICB1aW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCi0gIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgdWludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICB1aW50MTZ4OF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gX19yZXYwICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYxLCBfX3JldjEsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdm11bHFfbGFuZXFfZjY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDY0eDJfdCBfX3MwID0gX19wMDsgXAotICBmbG9hdDY0eDJfdCBfX3MxID0gX19wMTsgXAotICBmbG9hdDY0eDJfdCBfX3JldDsgXAotICBfX3JldCA9IF9fczAgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCBfX3AyLCBfX3AyKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZtdWxxX2xhbmVxX2Y2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKLSAgZmxvYXQ2NHgyX3QgX19zMSA9IF9fcDE7IFwKLSAgZmxvYXQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKLSAgZmxvYXQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMSwgMCk7IFwKLSAgZmxvYXQ2NHgyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSBfX3JldjAgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjEsIF9fcmV2MSwgX19wMiwgX19wMik7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bXVscV9sYW5lcV9mMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0MzJ4NF90IF9fczAgPSBfX3AwOyBcCi0gIGZsb2F0MzJ4NF90IF9fczEgPSBfX3AxOyBcCi0gIGZsb2F0MzJ4NF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gX19zMCAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdm11bHFfbGFuZXFfZjMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDMyeDRfdCBfX3MwID0gX19wMDsgXAotICBmbG9hdDMyeDRfdCBfX3MxID0gX19wMTsgXAotICBmbG9hdDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAotICBmbG9hdDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAotICBmbG9hdDMyeDRfdCBfX3JldDsgXAotICBfX3JldCA9IF9fcmV2MCAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MSwgX19yZXYxLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyKTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZtdWxxX2xhbmVxX3MzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCi0gIGludDMyeDRfdCBfX3MxID0gX19wMTsgXAotICBpbnQzMng0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSBfX3MwICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgX19wMiwgX19wMiwgX19wMiwgX19wMik7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bXVscV9sYW5lcV9zMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAotICBpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKLSAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCi0gIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAotICBpbnQzMng0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSBfX3JldjAgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjEsIF9fcmV2MSwgX19wMiwgX19wMiwgX19wMiwgX19wMik7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bXVscV9sYW5lcV9zMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDE2eDhfdCBfX3MwID0gX19wMDsgXAotICBpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKLSAgaW50MTZ4OF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gX19zMCAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdm11bHFfbGFuZXFfczE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCi0gIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgaW50MTZ4OF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gX19yZXYwICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYxLCBfX3JldjEsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdm11bF9sYW5lcV91MzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDMyeDRfdCBfX3MxID0gX19wMTsgXAotICB1aW50MzJ4Ml90IF9fcmV0OyBcCi0gIF9fcmV0ID0gX19zMCAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIF9fcDIsIF9fcDIpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdm11bF9sYW5lcV91MzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDMyeDRfdCBfX3MxID0gX19wMTsgXAotICB1aW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCi0gIHVpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKLSAgdWludDMyeDJfdCBfX3JldDsgXAotICBfX3JldCA9IF9fcmV2MCAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MSwgX19yZXYxLCBfX3AyLCBfX3AyKTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZtdWxfbGFuZXFfdTE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKLSAgdWludDE2eDRfdCBfX3JldDsgXAotICBfX3JldCA9IF9fczAgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZtdWxfbGFuZXFfdTE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKLSAgdWludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAotICB1aW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIHVpbnQxNng0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSBfX3JldjAgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjEsIF9fcmV2MSwgX19wMiwgX19wMiwgX19wMiwgX19wMik7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bXVsX2xhbmVxX2YzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQzMngyX3QgX19zMCA9IF9fcDA7IFwKLSAgZmxvYXQzMng0X3QgX19zMSA9IF9fcDE7IFwKLSAgZmxvYXQzMngyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSBfX3MwICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgX19wMiwgX19wMik7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bXVsX2xhbmVxX2YzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQzMngyX3QgX19zMCA9IF9fcDA7IFwKLSAgZmxvYXQzMng0X3QgX19zMSA9IF9fcDE7IFwKLSAgZmxvYXQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKLSAgZmxvYXQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKLSAgZmxvYXQzMngyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSBfX3JldjAgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjEsIF9fcmV2MSwgX19wMiwgX19wMik7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bXVsX2xhbmVxX3MzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCi0gIGludDMyeDRfdCBfX3MxID0gX19wMTsgXAotICBpbnQzMngyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSBfX3MwICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgX19wMiwgX19wMik7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bXVsX2xhbmVxX3MzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCi0gIGludDMyeDRfdCBfX3MxID0gX19wMTsgXAotICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKLSAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCi0gIGludDMyeDJfdCBfX3JldDsgXAotICBfX3JldCA9IF9fcmV2MCAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MSwgX19yZXYxLCBfX3AyLCBfX3AyKTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZtdWxfbGFuZXFfczE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCi0gIGludDE2eDRfdCBfX3JldDsgXAotICBfX3JldCA9IF9fczAgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZtdWxfbGFuZXFfczE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCi0gIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAotICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgaW50MTZ4NF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gX19yZXYwICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYxLCBfX3JldjEsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgZmxvYXQ2NHgxX3Qgdm11bF9uX2Y2NChmbG9hdDY0eDFfdCBfX3AwLCBmbG9hdDY0X3QgX19wMSkgewotICBmbG9hdDY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZtdWxfbl9mNjQoKGludDh4OF90KV9fcDAsIF9fcDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBmbG9hdDY0eDFfdCB2bXVsX25fZjY0KGZsb2F0NjR4MV90IF9fcDAsIGZsb2F0NjRfdCBfX3AxKSB7Ci0gIGZsb2F0NjR4MV90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDY0eDFfdCkgX19idWlsdGluX25lb25fdm11bF9uX2Y2NCgoaW50OHg4X3QpX19wMCwgX19wMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgZmxvYXQ2NHgyX3Qgdm11bHFfbl9mNjQoZmxvYXQ2NHgyX3QgX19wMCwgZmxvYXQ2NF90IF9fcDEpIHsKLSAgZmxvYXQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19wMCAqIChmbG9hdDY0eDJfdCkge19fcDEsIF9fcDF9OwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBmbG9hdDY0eDJfdCB2bXVscV9uX2Y2NChmbG9hdDY0eDJfdCBfX3AwLCBmbG9hdDY0X3QgX19wMSkgewotICBmbG9hdDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgZmxvYXQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19yZXYwICogKGZsb2F0NjR4Ml90KSB7X19wMSwgX19wMX07Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBwb2x5MTI4X3Qgdm11bGxfcDY0KHBvbHk2NF90IF9fcDAsIHBvbHk2NF90IF9fcDEpIHsKLSAgcG9seTEyOF90IF9fcmV0OwotICBfX3JldCA9IChwb2x5MTI4X3QpIF9fYnVpbHRpbl9uZW9uX3ZtdWxsX3A2NChfX3AwLCBfX3AxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgcG9seTEyOF90IHZtdWxsX3A2NChwb2x5NjRfdCBfX3AwLCBwb2x5NjRfdCBfX3AxKSB7Ci0gIHBvbHkxMjhfdCBfX3JldDsKLSAgX19yZXQgPSAocG9seTEyOF90KSBfX2J1aWx0aW5fbmVvbl92bXVsbF9wNjQoX19wMCwgX19wMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLV9fYWkgcG9seTEyOF90IF9fbm9zd2FwX3ZtdWxsX3A2NChwb2x5NjRfdCBfX3AwLCBwb2x5NjRfdCBfX3AxKSB7Ci0gIHBvbHkxMjhfdCBfX3JldDsKLSAgX19yZXQgPSAocG9seTEyOF90KSBfX2J1aWx0aW5fbmVvbl92bXVsbF9wNjQoX19wMCwgX19wMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgcG9seTE2eDhfdCB2bXVsbF9oaWdoX3A4KHBvbHk4eDE2X3QgX19wMCwgcG9seTh4MTZfdCBfX3AxKSB7Ci0gIHBvbHkxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gdm11bGxfcDgodmdldF9oaWdoX3A4KF9fcDApLCB2Z2V0X2hpZ2hfcDgoX19wMSkpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBwb2x5MTZ4OF90IHZtdWxsX2hpZ2hfcDgocG9seTh4MTZfdCBfX3AwLCBwb2x5OHgxNl90IF9fcDEpIHsKLSAgcG9seTh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcG9seTh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcG9seTE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSBfX25vc3dhcF92bXVsbF9wOChfX25vc3dhcF92Z2V0X2hpZ2hfcDgoX19yZXYwKSwgX19ub3N3YXBfdmdldF9oaWdoX3A4KF9fcmV2MSkpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDE2eDhfdCB2bXVsbF9oaWdoX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7Ci0gIHVpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gdm11bGxfdTgodmdldF9oaWdoX3U4KF9fcDApLCB2Z2V0X2hpZ2hfdTgoX19wMSkpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MTZ4OF90IHZtdWxsX2hpZ2hfdTgodWludDh4MTZfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEpIHsKLSAgdWludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSBfX25vc3dhcF92bXVsbF91OChfX25vc3dhcF92Z2V0X2hpZ2hfdTgoX19yZXYwKSwgX19ub3N3YXBfdmdldF9oaWdoX3U4KF9fcmV2MSkpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDY0eDJfdCB2bXVsbF9oaWdoX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgewotICB1aW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IHZtdWxsX3UzMih2Z2V0X2hpZ2hfdTMyKF9fcDApLCB2Z2V0X2hpZ2hfdTMyKF9fcDEpKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDY0eDJfdCB2bXVsbF9oaWdoX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgewotICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICB1aW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOwotICB1aW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IF9fbm9zd2FwX3ZtdWxsX3UzMihfX25vc3dhcF92Z2V0X2hpZ2hfdTMyKF9fcmV2MCksIF9fbm9zd2FwX3ZnZXRfaGlnaF91MzIoX19yZXYxKSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MzJ4NF90IHZtdWxsX2hpZ2hfdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxKSB7Ci0gIHVpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gdm11bGxfdTE2KHZnZXRfaGlnaF91MTYoX19wMCksIHZnZXRfaGlnaF91MTYoX19wMSkpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MzJ4NF90IHZtdWxsX2hpZ2hfdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxKSB7Ci0gIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19ub3N3YXBfdm11bGxfdTE2KF9fbm9zd2FwX3ZnZXRfaGlnaF91MTYoX19yZXYwKSwgX19ub3N3YXBfdmdldF9oaWdoX3UxNihfX3JldjEpKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDE2eDhfdCB2bXVsbF9oaWdoX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgewotICBpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gdm11bGxfczgodmdldF9oaWdoX3M4KF9fcDApLCB2Z2V0X2hpZ2hfczgoX19wMSkpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQxNng4X3Qgdm11bGxfaGlnaF9zOChpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEpIHsKLSAgaW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSBfX25vc3dhcF92bXVsbF9zOChfX25vc3dhcF92Z2V0X2hpZ2hfczgoX19yZXYwKSwgX19ub3N3YXBfdmdldF9oaWdoX3M4KF9fcmV2MSkpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50NjR4Ml90IHZtdWxsX2hpZ2hfczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgewotICBpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gdm11bGxfczMyKHZnZXRfaGlnaF9zMzIoX19wMCksIHZnZXRfaGlnaF9zMzIoX19wMSkpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQ2NHgyX3Qgdm11bGxfaGlnaF9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7Ci0gIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOwotICBpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19ub3N3YXBfdm11bGxfczMyKF9fbm9zd2FwX3ZnZXRfaGlnaF9zMzIoX19yZXYwKSwgX19ub3N3YXBfdmdldF9oaWdoX3MzMihfX3JldjEpKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDMyeDRfdCB2bXVsbF9oaWdoX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKLSAgaW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IHZtdWxsX3MxNih2Z2V0X2hpZ2hfczE2KF9fcDApLCB2Z2V0X2hpZ2hfczE2KF9fcDEpKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MzJ4NF90IHZtdWxsX2hpZ2hfczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgewotICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IF9fbm9zd2FwX3ZtdWxsX3MxNihfX25vc3dhcF92Z2V0X2hpZ2hfczE2KF9fcmV2MCksIF9fbm9zd2FwX3ZnZXRfaGlnaF9zMTYoX19yZXYxKSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBwb2x5MTI4X3Qgdm11bGxfaGlnaF9wNjQocG9seTY0eDJfdCBfX3AwLCBwb2x5NjR4Ml90IF9fcDEpIHsKLSAgcG9seTEyOF90IF9fcmV0OwotICBfX3JldCA9IHZtdWxsX3A2NCgocG9seTY0X3QpKHZnZXRfaGlnaF9wNjQoX19wMCkpLCAocG9seTY0X3QpKHZnZXRfaGlnaF9wNjQoX19wMSkpKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgcG9seTEyOF90IHZtdWxsX2hpZ2hfcDY0KHBvbHk2NHgyX3QgX19wMCwgcG9seTY0eDJfdCBfX3AxKSB7Ci0gIHBvbHk2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIHBvbHk2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7Ci0gIHBvbHkxMjhfdCBfX3JldDsKLSAgX19yZXQgPSBfX25vc3dhcF92bXVsbF9wNjQoKHBvbHk2NF90KShfX25vc3dhcF92Z2V0X2hpZ2hfcDY0KF9fcmV2MCkpLCAocG9seTY0X3QpKF9fbm9zd2FwX3ZnZXRfaGlnaF9wNjQoX19yZXYxKSkpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZtdWxsX2hpZ2hfbGFuZV91MzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDMyeDJfdCBfX3MxID0gX19wMTsgXAotICB1aW50NjR4Ml90IF9fcmV0OyBcCi0gIF9fcmV0ID0gdm11bGxfdTMyKHZnZXRfaGlnaF91MzIoX19zMCksIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIF9fcDIsIF9fcDIpKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZtdWxsX2hpZ2hfbGFuZV91MzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDMyeDJfdCBfX3MxID0gX19wMTsgXAotICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCi0gIHVpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMSwgMCk7IFwKLSAgdWludDY0eDJfdCBfX3JldDsgXAotICBfX3JldCA9IF9fbm9zd2FwX3ZtdWxsX3UzMihfX25vc3dhcF92Z2V0X2hpZ2hfdTMyKF9fcmV2MCksIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MSwgX19yZXYxLCBfX3AyLCBfX3AyKSk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bXVsbF9oaWdoX2xhbmVfdTE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKLSAgdWludDMyeDRfdCBfX3JldDsgXAotICBfX3JldCA9IHZtdWxsX3UxNih2Z2V0X2hpZ2hfdTE2KF9fczApLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyKSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bXVsbF9oaWdoX2xhbmVfdTE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKLSAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICB1aW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCi0gIHVpbnQzMng0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSBfX25vc3dhcF92bXVsbF91MTYoX19ub3N3YXBfdmdldF9oaWdoX3UxNihfX3JldjApLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjEsIF9fcmV2MSwgX19wMiwgX19wMiwgX19wMiwgX19wMikpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdm11bGxfaGlnaF9sYW5lX3MzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCi0gIGludDMyeDJfdCBfX3MxID0gX19wMTsgXAotICBpbnQ2NHgyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSB2bXVsbF9zMzIodmdldF9oaWdoX3MzMihfX3MwKSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgX19wMiwgX19wMikpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdm11bGxfaGlnaF9sYW5lX3MzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCi0gIGludDMyeDJfdCBfX3MxID0gX19wMTsgXAotICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKLSAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCi0gIGludDY0eDJfdCBfX3JldDsgXAotICBfX3JldCA9IF9fbm9zd2FwX3ZtdWxsX3MzMihfX25vc3dhcF92Z2V0X2hpZ2hfczMyKF9fcmV2MCksIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MSwgX19yZXYxLCBfX3AyLCBfX3AyKSk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bXVsbF9oaWdoX2xhbmVfczE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCi0gIGludDMyeDRfdCBfX3JldDsgXAotICBfX3JldCA9IHZtdWxsX3MxNih2Z2V0X2hpZ2hfczE2KF9fczApLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyKSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bXVsbF9oaWdoX2xhbmVfczE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCi0gIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKLSAgaW50MzJ4NF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gX19ub3N3YXBfdm11bGxfczE2KF9fbm9zd2FwX3ZnZXRfaGlnaF9zMTYoX19yZXYwKSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYxLCBfX3JldjEsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIpKTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZtdWxsX2hpZ2hfbGFuZXFfdTMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKLSAgdWludDY0eDJfdCBfX3JldDsgXAotICBfX3JldCA9IHZtdWxsX3UzMih2Z2V0X2hpZ2hfdTMyKF9fczApLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCBfX3AyLCBfX3AyKSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bXVsbF9oaWdoX2xhbmVxX3UzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDMyeDRfdCBfX3MwID0gX19wMDsgXAotICB1aW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCi0gIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKLSAgdWludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAotICB1aW50NjR4Ml90IF9fcmV0OyBcCi0gIF9fcmV0ID0gX19ub3N3YXBfdm11bGxfdTMyKF9fbm9zd2FwX3ZnZXRfaGlnaF91MzIoX19yZXYwKSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYxLCBfX3JldjEsIF9fcDIsIF9fcDIpKTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZtdWxsX2hpZ2hfbGFuZXFfdTE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKLSAgdWludDMyeDRfdCBfX3JldDsgXAotICBfX3JldCA9IHZtdWxsX3UxNih2Z2V0X2hpZ2hfdTE2KF9fczApLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyKSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bXVsbF9oaWdoX2xhbmVxX3UxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDE2eDhfdCBfX3MwID0gX19wMDsgXAotICB1aW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCi0gIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgdWludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICB1aW50MzJ4NF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gX19ub3N3YXBfdm11bGxfdTE2KF9fbm9zd2FwX3ZnZXRfaGlnaF91MTYoX19yZXYwKSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYxLCBfX3JldjEsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIpKTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZtdWxsX2hpZ2hfbGFuZXFfczMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCi0gIGludDY0eDJfdCBfX3JldDsgXAotICBfX3JldCA9IHZtdWxsX3MzMih2Z2V0X2hpZ2hfczMyKF9fczApLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCBfX3AyLCBfX3AyKSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bXVsbF9oaWdoX2xhbmVxX3MzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCi0gIGludDMyeDRfdCBfX3MxID0gX19wMTsgXAotICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKLSAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCi0gIGludDY0eDJfdCBfX3JldDsgXAotICBfX3JldCA9IF9fbm9zd2FwX3ZtdWxsX3MzMihfX25vc3dhcF92Z2V0X2hpZ2hfczMyKF9fcmV2MCksIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MSwgX19yZXYxLCBfX3AyLCBfX3AyKSk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bXVsbF9oaWdoX2xhbmVxX3MxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCi0gIGludDE2eDhfdCBfX3MxID0gX19wMTsgXAotICBpbnQzMng0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSB2bXVsbF9zMTYodmdldF9oaWdoX3MxNihfX3MwKSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgX19wMiwgX19wMiwgX19wMiwgX19wMikpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdm11bGxfaGlnaF9sYW5lcV9zMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDE2eDhfdCBfX3MwID0gX19wMDsgXAotICBpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKLSAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBpbnQzMng0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSBfX25vc3dhcF92bXVsbF9zMTYoX19ub3N3YXBfdmdldF9oaWdoX3MxNihfX3JldjApLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjEsIF9fcmV2MSwgX19wMiwgX19wMiwgX19wMiwgX19wMikpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDY0eDJfdCB2bXVsbF9oaWdoX25fdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyX3QgX19wMSkgewotICB1aW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IHZtdWxsX25fdTMyKHZnZXRfaGlnaF91MzIoX19wMCksIF9fcDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50NjR4Ml90IHZtdWxsX2hpZ2hfbl91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJfdCBfX3AxKSB7Ci0gIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19ub3N3YXBfdm11bGxfbl91MzIoX19ub3N3YXBfdmdldF9oaWdoX3UzMihfX3JldjApLCBfX3AxKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQzMng0X3Qgdm11bGxfaGlnaF9uX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNl90IF9fcDEpIHsKLSAgdWludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSB2bXVsbF9uX3UxNih2Z2V0X2hpZ2hfdTE2KF9fcDApLCBfX3AxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDMyeDRfdCB2bXVsbF9oaWdoX25fdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2X3QgX19wMSkgewotICB1aW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IF9fbm9zd2FwX3ZtdWxsX25fdTE2KF9fbm9zd2FwX3ZnZXRfaGlnaF91MTYoX19yZXYwKSwgX19wMSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ2NHgyX3Qgdm11bGxfaGlnaF9uX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJfdCBfX3AxKSB7Ci0gIGludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSB2bXVsbF9uX3MzMih2Z2V0X2hpZ2hfczMyKF9fcDApLCBfX3AxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50NjR4Ml90IHZtdWxsX2hpZ2hfbl9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyX3QgX19wMSkgewotICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIGludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSBfX25vc3dhcF92bXVsbF9uX3MzMihfX25vc3dhcF92Z2V0X2hpZ2hfczMyKF9fcmV2MCksIF9fcDEpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MzJ4NF90IHZtdWxsX2hpZ2hfbl9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2X3QgX19wMSkgewotICBpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gdm11bGxfbl9zMTYodmdldF9oaWdoX3MxNihfX3AwKSwgX19wMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDMyeDRfdCB2bXVsbF9oaWdoX25fczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNl90IF9fcDEpIHsKLSAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19ub3N3YXBfdm11bGxfbl9zMTYoX19ub3N3YXBfdmdldF9oaWdoX3MxNihfX3JldjApLCBfX3AxKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZtdWxsX2xhbmVxX3UzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDMyeDJfdCBfX3MwID0gX19wMDsgXAotICB1aW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCi0gIHVpbnQ2NHgyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSB2bXVsbF91MzIoX19zMCwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgX19wMiwgX19wMikpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdm11bGxfbGFuZXFfdTMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKLSAgdWludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAotICB1aW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCi0gIHVpbnQ2NHgyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSBfX25vc3dhcF92bXVsbF91MzIoX19yZXYwLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjEsIF9fcmV2MSwgX19wMiwgX19wMikpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdm11bGxfbGFuZXFfdTE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKLSAgdWludDMyeDRfdCBfX3JldDsgXAotICBfX3JldCA9IHZtdWxsX3UxNihfX3MwLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyKSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bXVsbF9sYW5lcV91MTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDE2eDhfdCBfX3MxID0gX19wMTsgXAotICB1aW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCi0gIHVpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgdWludDMyeDRfdCBfX3JldDsgXAotICBfX3JldCA9IF9fbm9zd2FwX3ZtdWxsX3UxNihfX3JldjAsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MSwgX19yZXYxLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyKSk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bXVsbF9sYW5lcV9zMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDMyeDJfdCBfX3MwID0gX19wMDsgXAotICBpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKLSAgaW50NjR4Ml90IF9fcmV0OyBcCi0gIF9fcmV0ID0gdm11bGxfczMyKF9fczAsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIF9fcDIsIF9fcDIpKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZtdWxsX2xhbmVxX3MzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCi0gIGludDMyeDRfdCBfX3MxID0gX19wMTsgXAotICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKLSAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCi0gIGludDY0eDJfdCBfX3JldDsgXAotICBfX3JldCA9IF9fbm9zd2FwX3ZtdWxsX3MzMihfX3JldjAsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MSwgX19yZXYxLCBfX3AyLCBfX3AyKSk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bXVsbF9sYW5lcV9zMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDE2eDRfdCBfX3MwID0gX19wMDsgXAotICBpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKLSAgaW50MzJ4NF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gdm11bGxfczE2KF9fczAsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIpKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZtdWxsX2xhbmVxX3MxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCi0gIGludDE2eDhfdCBfX3MxID0gX19wMTsgXAotICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKLSAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIGludDMyeDRfdCBfX3JldDsgXAotICBfX3JldCA9IF9fbm9zd2FwX3ZtdWxsX3MxNihfX3JldjAsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MSwgX19yZXYxLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyKSk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBmbG9hdDY0eDJfdCB2bXVseHFfZjY0KGZsb2F0NjR4Ml90IF9fcDAsIGZsb2F0NjR4Ml90IF9fcDEpIHsKLSAgZmxvYXQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92bXVseHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNDIpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBmbG9hdDY0eDJfdCB2bXVseHFfZjY0KGZsb2F0NjR4Ml90IF9fcDAsIGZsb2F0NjR4Ml90IF9fcDEpIHsKLSAgZmxvYXQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIGZsb2F0NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOwotICBmbG9hdDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZtdWx4cV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNDIpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLV9fYWkgZmxvYXQ2NHgyX3QgX19ub3N3YXBfdm11bHhxX2Y2NChmbG9hdDY0eDJfdCBfX3AwLCBmbG9hdDY0eDJfdCBfX3AxKSB7Ci0gIGZsb2F0NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDY0eDJfdCkgX19idWlsdGluX25lb25fdm11bHhxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDQyKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBmbG9hdDMyeDRfdCB2bXVseHFfZjMyKGZsb2F0MzJ4NF90IF9fcDAsIGZsb2F0MzJ4NF90IF9fcDEpIHsKLSAgZmxvYXQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92bXVseHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBmbG9hdDMyeDRfdCB2bXVseHFfZjMyKGZsb2F0MzJ4NF90IF9fcDAsIGZsb2F0MzJ4NF90IF9fcDEpIHsKLSAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIGZsb2F0MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOwotICBmbG9hdDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZtdWx4cV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNDEpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLV9fYWkgZmxvYXQzMng0X3QgX19ub3N3YXBfdm11bHhxX2YzMihmbG9hdDMyeDRfdCBfX3AwLCBmbG9hdDMyeDRfdCBfX3AxKSB7Ci0gIGZsb2F0MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDMyeDRfdCkgX19idWlsdGluX25lb25fdm11bHhxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDQxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBmbG9hdDY0eDFfdCB2bXVseF9mNjQoZmxvYXQ2NHgxX3QgX19wMCwgZmxvYXQ2NHgxX3QgX19wMSkgewotICBmbG9hdDY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZtdWx4X3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGZsb2F0NjR4MV90IHZtdWx4X2Y2NChmbG9hdDY0eDFfdCBfX3AwLCBmbG9hdDY0eDFfdCBfX3AxKSB7Ci0gIGZsb2F0NjR4MV90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDY0eDFfdCkgX19idWlsdGluX25lb25fdm11bHhfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDEwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBmbG9hdDMyeDJfdCB2bXVseF9mMzIoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSkgewotICBmbG9hdDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZtdWx4X3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCA5KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgZmxvYXQzMngyX3Qgdm11bHhfZjMyKGZsb2F0MzJ4Ml90IF9fcDAsIGZsb2F0MzJ4Ml90IF9fcDEpIHsKLSAgZmxvYXQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIGZsb2F0MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOwotICBmbG9hdDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZtdWx4X3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgOSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotX19haSBmbG9hdDMyeDJfdCBfX25vc3dhcF92bXVseF9mMzIoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSkgewotICBmbG9hdDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZtdWx4X3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCA5KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBmbG9hdDY0X3Qgdm11bHhkX2Y2NChmbG9hdDY0X3QgX19wMCwgZmxvYXQ2NF90IF9fcDEpIHsKLSAgZmxvYXQ2NF90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZtdWx4ZF9mNjQoX19wMCwgX19wMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGZsb2F0NjRfdCB2bXVseGRfZjY0KGZsb2F0NjRfdCBfX3AwLCBmbG9hdDY0X3QgX19wMSkgewotICBmbG9hdDY0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0NjRfdCkgX19idWlsdGluX25lb25fdm11bHhkX2Y2NChfX3AwLCBfX3AxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotX19haSBmbG9hdDY0X3QgX19ub3N3YXBfdm11bHhkX2Y2NChmbG9hdDY0X3QgX19wMCwgZmxvYXQ2NF90IF9fcDEpIHsKLSAgZmxvYXQ2NF90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZtdWx4ZF9mNjQoX19wMCwgX19wMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgZmxvYXQzMl90IHZtdWx4c19mMzIoZmxvYXQzMl90IF9fcDAsIGZsb2F0MzJfdCBfX3AxKSB7Ci0gIGZsb2F0MzJfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQzMl90KSBfX2J1aWx0aW5fbmVvbl92bXVseHNfZjMyKF9fcDAsIF9fcDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBmbG9hdDMyX3Qgdm11bHhzX2YzMihmbG9hdDMyX3QgX19wMCwgZmxvYXQzMl90IF9fcDEpIHsKLSAgZmxvYXQzMl90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZtdWx4c19mMzIoX19wMCwgX19wMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLV9fYWkgZmxvYXQzMl90IF9fbm9zd2FwX3ZtdWx4c19mMzIoZmxvYXQzMl90IF9fcDAsIGZsb2F0MzJfdCBfX3AxKSB7Ci0gIGZsb2F0MzJfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQzMl90KSBfX2J1aWx0aW5fbmVvbl92bXVseHNfZjMyKF9fcDAsIF9fcDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZtdWx4ZF9sYW5lX2Y2NChfX3AwXzEzOCwgX19wMV8xMzgsIF9fcDJfMTM4KSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQ2NF90IF9fczBfMTM4ID0gX19wMF8xMzg7IFwKLSAgZmxvYXQ2NHgxX3QgX19zMV8xMzggPSBfX3AxXzEzODsgXAotICBmbG9hdDY0X3QgX19yZXRfMTM4OyBcCi0gIF9fcmV0XzEzOCA9IHZtdWx4ZF9mNjQoX19zMF8xMzgsIHZnZXRfbGFuZV9mNjQoX19zMV8xMzgsIF9fcDJfMTM4KSk7IFwKLSAgX19yZXRfMTM4OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdm11bHhkX2xhbmVfZjY0KF9fcDBfMTM5LCBfX3AxXzEzOSwgX19wMl8xMzkpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDY0X3QgX19zMF8xMzkgPSBfX3AwXzEzOTsgXAotICBmbG9hdDY0eDFfdCBfX3MxXzEzOSA9IF9fcDFfMTM5OyBcCi0gIGZsb2F0NjRfdCBfX3JldF8xMzk7IFwKLSAgX19yZXRfMTM5ID0gX19ub3N3YXBfdm11bHhkX2Y2NChfX3MwXzEzOSwgX19ub3N3YXBfdmdldF9sYW5lX2Y2NChfX3MxXzEzOSwgX19wMl8xMzkpKTsgXAotICBfX3JldF8xMzk7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZtdWx4c19sYW5lX2YzMihfX3AwXzE0MCwgX19wMV8xNDAsIF9fcDJfMTQwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQzMl90IF9fczBfMTQwID0gX19wMF8xNDA7IFwKLSAgZmxvYXQzMngyX3QgX19zMV8xNDAgPSBfX3AxXzE0MDsgXAotICBmbG9hdDMyX3QgX19yZXRfMTQwOyBcCi0gIF9fcmV0XzE0MCA9IHZtdWx4c19mMzIoX19zMF8xNDAsIHZnZXRfbGFuZV9mMzIoX19zMV8xNDAsIF9fcDJfMTQwKSk7IFwKLSAgX19yZXRfMTQwOyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdm11bHhzX2xhbmVfZjMyKF9fcDBfMTQxLCBfX3AxXzE0MSwgX19wMl8xNDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDMyX3QgX19zMF8xNDEgPSBfX3AwXzE0MTsgXAotICBmbG9hdDMyeDJfdCBfX3MxXzE0MSA9IF9fcDFfMTQxOyBcCi0gIGZsb2F0MzJ4Ml90IF9fcmV2MV8xNDE7ICBfX3JldjFfMTQxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMV8xNDEsIF9fczFfMTQxLCAxLCAwKTsgXAotICBmbG9hdDMyX3QgX19yZXRfMTQxOyBcCi0gIF9fcmV0XzE0MSA9IF9fbm9zd2FwX3ZtdWx4c19mMzIoX19zMF8xNDEsIF9fbm9zd2FwX3ZnZXRfbGFuZV9mMzIoX19yZXYxXzE0MSwgX19wMl8xNDEpKTsgXAotICBfX3JldF8xNDE7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZtdWx4cV9sYW5lX2Y2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKLSAgZmxvYXQ2NHgxX3QgX19zMSA9IF9fcDE7IFwKLSAgZmxvYXQ2NHgyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSB2bXVseHFfZjY0KF9fczAsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIF9fcDIsIF9fcDIpKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZtdWx4cV9sYW5lX2Y2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKLSAgZmxvYXQ2NHgxX3QgX19zMSA9IF9fcDE7IFwKLSAgZmxvYXQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKLSAgZmxvYXQ2NHgyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSBfX25vc3dhcF92bXVseHFfZjY0KF9fcmV2MCwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgX19wMiwgX19wMikpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdm11bHhxX2xhbmVfZjMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDMyeDRfdCBfX3MwID0gX19wMDsgXAotICBmbG9hdDMyeDJfdCBfX3MxID0gX19wMTsgXAotICBmbG9hdDMyeDRfdCBfX3JldDsgXAotICBfX3JldCA9IHZtdWx4cV9mMzIoX19zMCwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgX19wMiwgX19wMiwgX19wMiwgX19wMikpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdm11bHhxX2xhbmVfZjMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDMyeDRfdCBfX3MwID0gX19wMDsgXAotICBmbG9hdDMyeDJfdCBfX3MxID0gX19wMTsgXAotICBmbG9hdDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAotICBmbG9hdDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxLCAwKTsgXAotICBmbG9hdDMyeDRfdCBfX3JldDsgXAotICBfX3JldCA9IF9fbm9zd2FwX3ZtdWx4cV9mMzIoX19yZXYwLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjEsIF9fcmV2MSwgX19wMiwgX19wMiwgX19wMiwgX19wMikpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdm11bHhfbGFuZV9mMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0MzJ4Ml90IF9fczAgPSBfX3AwOyBcCi0gIGZsb2F0MzJ4Ml90IF9fczEgPSBfX3AxOyBcCi0gIGZsb2F0MzJ4Ml90IF9fcmV0OyBcCi0gIF9fcmV0ID0gdm11bHhfZjMyKF9fczAsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIF9fcDIsIF9fcDIpKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZtdWx4X2xhbmVfZjMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDMyeDJfdCBfX3MwID0gX19wMDsgXAotICBmbG9hdDMyeDJfdCBfX3MxID0gX19wMTsgXAotICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAotICBmbG9hdDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxLCAwKTsgXAotICBmbG9hdDMyeDJfdCBfX3JldDsgXAotICBfX3JldCA9IF9fbm9zd2FwX3ZtdWx4X2YzMihfX3JldjAsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MSwgX19yZXYxLCBfX3AyLCBfX3AyKSk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bXVseGRfbGFuZXFfZjY0KF9fcDBfMTQyLCBfX3AxXzE0MiwgX19wMl8xNDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDY0X3QgX19zMF8xNDIgPSBfX3AwXzE0MjsgXAotICBmbG9hdDY0eDJfdCBfX3MxXzE0MiA9IF9fcDFfMTQyOyBcCi0gIGZsb2F0NjRfdCBfX3JldF8xNDI7IFwKLSAgX19yZXRfMTQyID0gdm11bHhkX2Y2NChfX3MwXzE0MiwgdmdldHFfbGFuZV9mNjQoX19zMV8xNDIsIF9fcDJfMTQyKSk7IFwKLSAgX19yZXRfMTQyOyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdm11bHhkX2xhbmVxX2Y2NChfX3AwXzE0MywgX19wMV8xNDMsIF9fcDJfMTQzKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQ2NF90IF9fczBfMTQzID0gX19wMF8xNDM7IFwKLSAgZmxvYXQ2NHgyX3QgX19zMV8xNDMgPSBfX3AxXzE0MzsgXAotICBmbG9hdDY0eDJfdCBfX3JldjFfMTQzOyAgX19yZXYxXzE0MyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczFfMTQzLCBfX3MxXzE0MywgMSwgMCk7IFwKLSAgZmxvYXQ2NF90IF9fcmV0XzE0MzsgXAotICBfX3JldF8xNDMgPSBfX25vc3dhcF92bXVseGRfZjY0KF9fczBfMTQzLCBfX25vc3dhcF92Z2V0cV9sYW5lX2Y2NChfX3JldjFfMTQzLCBfX3AyXzE0MykpOyBcCi0gIF9fcmV0XzE0MzsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdm11bHhzX2xhbmVxX2YzMihfX3AwXzE0NCwgX19wMV8xNDQsIF9fcDJfMTQ0KSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQzMl90IF9fczBfMTQ0ID0gX19wMF8xNDQ7IFwKLSAgZmxvYXQzMng0X3QgX19zMV8xNDQgPSBfX3AxXzE0NDsgXAotICBmbG9hdDMyX3QgX19yZXRfMTQ0OyBcCi0gIF9fcmV0XzE0NCA9IHZtdWx4c19mMzIoX19zMF8xNDQsIHZnZXRxX2xhbmVfZjMyKF9fczFfMTQ0LCBfX3AyXzE0NCkpOyBcCi0gIF9fcmV0XzE0NDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZtdWx4c19sYW5lcV9mMzIoX19wMF8xNDUsIF9fcDFfMTQ1LCBfX3AyXzE0NSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0MzJfdCBfX3MwXzE0NSA9IF9fcDBfMTQ1OyBcCi0gIGZsb2F0MzJ4NF90IF9fczFfMTQ1ID0gX19wMV8xNDU7IFwKLSAgZmxvYXQzMng0X3QgX19yZXYxXzE0NTsgIF9fcmV2MV8xNDUgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxXzE0NSwgX19zMV8xNDUsIDMsIDIsIDEsIDApOyBcCi0gIGZsb2F0MzJfdCBfX3JldF8xNDU7IFwKLSAgX19yZXRfMTQ1ID0gX19ub3N3YXBfdm11bHhzX2YzMihfX3MwXzE0NSwgX19ub3N3YXBfdmdldHFfbGFuZV9mMzIoX19yZXYxXzE0NSwgX19wMl8xNDUpKTsgXAotICBfX3JldF8xNDU7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZtdWx4cV9sYW5lcV9mNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0NjR4Ml90IF9fczAgPSBfX3AwOyBcCi0gIGZsb2F0NjR4Ml90IF9fczEgPSBfX3AxOyBcCi0gIGZsb2F0NjR4Ml90IF9fcmV0OyBcCi0gIF9fcmV0ID0gdm11bHhxX2Y2NChfX3MwLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCBfX3AyLCBfX3AyKSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bXVseHFfbGFuZXFfZjY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDY0eDJfdCBfX3MwID0gX19wMDsgXAotICBmbG9hdDY0eDJfdCBfX3MxID0gX19wMTsgXAotICBmbG9hdDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAotICBmbG9hdDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxLCAwKTsgXAotICBmbG9hdDY0eDJfdCBfX3JldDsgXAotICBfX3JldCA9IF9fbm9zd2FwX3ZtdWx4cV9mNjQoX19yZXYwLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjEsIF9fcmV2MSwgX19wMiwgX19wMikpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdm11bHhxX2xhbmVxX2YzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQzMng0X3QgX19zMCA9IF9fcDA7IFwKLSAgZmxvYXQzMng0X3QgX19zMSA9IF9fcDE7IFwKLSAgZmxvYXQzMng0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSB2bXVseHFfZjMyKF9fczAsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIpKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZtdWx4cV9sYW5lcV9mMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0MzJ4NF90IF9fczAgPSBfX3AwOyBcCi0gIGZsb2F0MzJ4NF90IF9fczEgPSBfX3AxOyBcCi0gIGZsb2F0MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCi0gIGZsb2F0MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCi0gIGZsb2F0MzJ4NF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gX19ub3N3YXBfdm11bHhxX2YzMihfX3JldjAsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MSwgX19yZXYxLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyKSk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bXVseF9sYW5lcV9mMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0MzJ4Ml90IF9fczAgPSBfX3AwOyBcCi0gIGZsb2F0MzJ4NF90IF9fczEgPSBfX3AxOyBcCi0gIGZsb2F0MzJ4Ml90IF9fcmV0OyBcCi0gIF9fcmV0ID0gdm11bHhfZjMyKF9fczAsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIF9fcDIsIF9fcDIpKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZtdWx4X2xhbmVxX2YzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQzMngyX3QgX19zMCA9IF9fcDA7IFwKLSAgZmxvYXQzMng0X3QgX19zMSA9IF9fcDE7IFwKLSAgZmxvYXQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKLSAgZmxvYXQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKLSAgZmxvYXQzMngyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSBfX25vc3dhcF92bXVseF9mMzIoX19yZXYwLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjEsIF9fcmV2MSwgX19wMiwgX19wMikpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgZmxvYXQ2NHgyX3Qgdm5lZ3FfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKLSAgZmxvYXQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gLV9fcDA7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGZsb2F0NjR4Ml90IHZuZWdxX2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7Ci0gIGZsb2F0NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICBmbG9hdDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSAtX19yZXYwOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50NjR4Ml90IHZuZWdxX3M2NChpbnQ2NHgyX3QgX19wMCkgewotICBpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gLV9fcDA7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDY0eDJfdCB2bmVncV9zNjQoaW50NjR4Ml90IF9fcDApIHsKLSAgaW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICBpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gLV9fcmV2MDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGZsb2F0NjR4MV90IHZuZWdfZjY0KGZsb2F0NjR4MV90IF9fcDApIHsKLSAgZmxvYXQ2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gLV9fcDA7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGZsb2F0NjR4MV90IHZuZWdfZjY0KGZsb2F0NjR4MV90IF9fcDApIHsKLSAgZmxvYXQ2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gLV9fcDA7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50NjR4MV90IHZuZWdfczY0KGludDY0eDFfdCBfX3AwKSB7Ci0gIGludDY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSAtX19wMDsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50NjR4MV90IHZuZWdfczY0KGludDY0eDFfdCBfX3AwKSB7Ci0gIGludDY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSAtX19wMDsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ2NF90IHZuZWdkX3M2NChpbnQ2NF90IF9fcDApIHsKLSAgaW50NjRfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdm5lZ2RfczY0KF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQ2NF90IHZuZWdkX3M2NChpbnQ2NF90IF9fcDApIHsKLSAgaW50NjRfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdm5lZ2RfczY0KF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ4eDE2X3QgdnBhZGRxX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7Ci0gIHVpbnQ4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZwYWRkcV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA0OCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ4eDE2X3QgdnBhZGRxX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7Ci0gIHVpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQ4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZwYWRkcV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNDgpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDMyeDRfdCB2cGFkZHFfdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7Ci0gIHVpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZwYWRkcV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA1MCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQzMng0X3QgdnBhZGRxX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgewotICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICB1aW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOwotICB1aW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cGFkZHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDUwKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ2NHgyX3QgdnBhZGRxX3U2NCh1aW50NjR4Ml90IF9fcDAsIHVpbnQ2NHgyX3QgX19wMSkgewotICB1aW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92cGFkZHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNTEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50NjR4Ml90IHZwYWRkcV91NjQodWludDY0eDJfdCBfX3AwLCB1aW50NjR4Ml90IF9fcDEpIHsKLSAgdWludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgdWludDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKLSAgdWludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdnBhZGRxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA1MSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MTZ4OF90IHZwYWRkcV91MTYodWludDE2eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEpIHsKLSAgdWludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDE2eDhfdCkgX19idWlsdGluX25lb25fdnBhZGRxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDQ5KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDE2eDhfdCB2cGFkZHFfdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxKSB7Ci0gIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZwYWRkcV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNDkpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50OHgxNl90IHZwYWRkcV9zOChpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEpIHsKLSAgaW50OHgxNl90IF9fcmV0OwotICBfX3JldCA9IChpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZwYWRkcV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAzMik7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDh4MTZfdCB2cGFkZHFfczgoaW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7Ci0gIGludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQ4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDh4MTZfdCkgX19idWlsdGluX25lb25fdnBhZGRxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAzMik7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBmbG9hdDY0eDJfdCB2cGFkZHFfZjY0KGZsb2F0NjR4Ml90IF9fcDAsIGZsb2F0NjR4Ml90IF9fcDEpIHsKLSAgZmxvYXQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92cGFkZHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNDIpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBmbG9hdDY0eDJfdCB2cGFkZHFfZjY0KGZsb2F0NjR4Ml90IF9fcDAsIGZsb2F0NjR4Ml90IF9fcDEpIHsKLSAgZmxvYXQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIGZsb2F0NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOwotICBmbG9hdDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZwYWRkcV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNDIpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgZmxvYXQzMng0X3QgdnBhZGRxX2YzMihmbG9hdDMyeDRfdCBfX3AwLCBmbG9hdDMyeDRfdCBfX3AxKSB7Ci0gIGZsb2F0MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDMyeDRfdCkgX19idWlsdGluX25lb25fdnBhZGRxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDQxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgZmxvYXQzMng0X3QgdnBhZGRxX2YzMihmbG9hdDMyeDRfdCBfX3AwLCBmbG9hdDMyeDRfdCBfX3AxKSB7Ci0gIGZsb2F0MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICBmbG9hdDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKLSAgZmxvYXQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cGFkZHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDQxKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDMyeDRfdCB2cGFkZHFfczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgewotICBpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdnBhZGRxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDM0KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MzJ4NF90IHZwYWRkcV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7Ci0gIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOwotICBpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdnBhZGRxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAzNCk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ2NHgyX3QgdnBhZGRxX3M2NChpbnQ2NHgyX3QgX19wMCwgaW50NjR4Ml90IF9fcDEpIHsKLSAgaW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZwYWRkcV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAzNSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDY0eDJfdCB2cGFkZHFfczY0KGludDY0eDJfdCBfX3AwLCBpbnQ2NHgyX3QgX19wMSkgewotICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIGludDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKLSAgaW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZwYWRkcV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMzUpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MTZ4OF90IHZwYWRkcV9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7Ci0gIGludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92cGFkZHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMzMpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQxNng4X3QgdnBhZGRxX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKLSAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92cGFkZHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDMzKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ2NF90IHZwYWRkZF91NjQodWludDY0eDJfdCBfX3AwKSB7Ci0gIHVpbnQ2NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50NjRfdCkgX19idWlsdGluX25lb25fdnBhZGRkX3U2NCgoaW50OHgxNl90KV9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50NjRfdCB2cGFkZGRfdTY0KHVpbnQ2NHgyX3QgX19wMCkgewotICB1aW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICB1aW50NjRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZwYWRkZF91NjQoKGludDh4MTZfdClfX3JldjApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGZsb2F0NjRfdCB2cGFkZGRfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKLSAgZmxvYXQ2NF90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZwYWRkZF9mNjQoKGludDh4MTZfdClfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgZmxvYXQ2NF90IHZwYWRkZF9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgewotICBmbG9hdDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgZmxvYXQ2NF90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZwYWRkZF9mNjQoKGludDh4MTZfdClfX3JldjApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDY0X3QgdnBhZGRkX3M2NChpbnQ2NHgyX3QgX19wMCkgewotICBpbnQ2NF90IF9fcmV0OwotICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92cGFkZGRfczY0KChpbnQ4eDE2X3QpX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDY0X3QgdnBhZGRkX3M2NChpbnQ2NHgyX3QgX19wMCkgewotICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIGludDY0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZwYWRkZF9zNjQoKGludDh4MTZfdClfX3JldjApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGZsb2F0MzJfdCB2cGFkZHNfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKLSAgZmxvYXQzMl90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZwYWRkc19mMzIoKGludDh4OF90KV9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBmbG9hdDMyX3QgdnBhZGRzX2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7Ci0gIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICBmbG9hdDMyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0MzJfdCkgX19idWlsdGluX25lb25fdnBhZGRzX2YzMigoaW50OHg4X3QpX19yZXYwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50OHgxNl90IHZwbWF4cV91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgewotICB1aW50OHgxNl90IF9fcmV0OwotICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cG1heHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNDgpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50OHgxNl90IHZwbWF4cV91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgewotICB1aW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50OHgxNl90IF9fcmV0OwotICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cG1heHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDQ4KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQzMng0X3QgdnBtYXhxX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgewotICB1aW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cG1heHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNTApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MzJ4NF90IHZwbWF4cV91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEpIHsKLSAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgdWludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKLSAgdWludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdnBtYXhxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA1MCk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MTZ4OF90IHZwbWF4cV91MTYodWludDE2eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEpIHsKLSAgdWludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDE2eDhfdCkgX19idWlsdGluX25lb25fdnBtYXhxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDQ5KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDE2eDhfdCB2cG1heHFfdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxKSB7Ci0gIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZwbWF4cV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNDkpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50OHgxNl90IHZwbWF4cV9zOChpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEpIHsKLSAgaW50OHgxNl90IF9fcmV0OwotICBfX3JldCA9IChpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZwbWF4cV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAzMik7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDh4MTZfdCB2cG1heHFfczgoaW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7Ci0gIGludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQ4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDh4MTZfdCkgX19idWlsdGluX25lb25fdnBtYXhxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAzMik7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBmbG9hdDY0eDJfdCB2cG1heHFfZjY0KGZsb2F0NjR4Ml90IF9fcDAsIGZsb2F0NjR4Ml90IF9fcDEpIHsKLSAgZmxvYXQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92cG1heHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNDIpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBmbG9hdDY0eDJfdCB2cG1heHFfZjY0KGZsb2F0NjR4Ml90IF9fcDAsIGZsb2F0NjR4Ml90IF9fcDEpIHsKLSAgZmxvYXQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIGZsb2F0NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOwotICBmbG9hdDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZwbWF4cV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNDIpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgZmxvYXQzMng0X3QgdnBtYXhxX2YzMihmbG9hdDMyeDRfdCBfX3AwLCBmbG9hdDMyeDRfdCBfX3AxKSB7Ci0gIGZsb2F0MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDMyeDRfdCkgX19idWlsdGluX25lb25fdnBtYXhxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDQxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgZmxvYXQzMng0X3QgdnBtYXhxX2YzMihmbG9hdDMyeDRfdCBfX3AwLCBmbG9hdDMyeDRfdCBfX3AxKSB7Ci0gIGZsb2F0MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICBmbG9hdDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKLSAgZmxvYXQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cG1heHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDQxKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDMyeDRfdCB2cG1heHFfczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgewotICBpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdnBtYXhxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDM0KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MzJ4NF90IHZwbWF4cV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7Ci0gIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOwotICBpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdnBtYXhxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAzNCk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQxNng4X3QgdnBtYXhxX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKLSAgaW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZwbWF4cV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAzMyk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDE2eDhfdCB2cG1heHFfczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgewotICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZwbWF4cV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMzMpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgZmxvYXQ2NF90IHZwbWF4cWRfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKLSAgZmxvYXQ2NF90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZwbWF4cWRfZjY0KChpbnQ4eDE2X3QpX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGZsb2F0NjRfdCB2cG1heHFkX2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7Ci0gIGZsb2F0NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICBmbG9hdDY0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0NjRfdCkgX19idWlsdGluX25lb25fdnBtYXhxZF9mNjQoKGludDh4MTZfdClfX3JldjApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGZsb2F0MzJfdCB2cG1heHNfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKLSAgZmxvYXQzMl90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZwbWF4c19mMzIoKGludDh4OF90KV9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBmbG9hdDMyX3QgdnBtYXhzX2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7Ci0gIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICBmbG9hdDMyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0MzJfdCkgX19idWlsdGluX25lb25fdnBtYXhzX2YzMigoaW50OHg4X3QpX19yZXYwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBmbG9hdDY0eDJfdCB2cG1heG5tcV9mNjQoZmxvYXQ2NHgyX3QgX19wMCwgZmxvYXQ2NHgyX3QgX19wMSkgewotICBmbG9hdDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZwbWF4bm1xX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDQyKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgZmxvYXQ2NHgyX3QgdnBtYXhubXFfZjY0KGZsb2F0NjR4Ml90IF9fcDAsIGZsb2F0NjR4Ml90IF9fcDEpIHsKLSAgZmxvYXQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIGZsb2F0NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOwotICBmbG9hdDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZwbWF4bm1xX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA0Mik7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBmbG9hdDMyeDRfdCB2cG1heG5tcV9mMzIoZmxvYXQzMng0X3QgX19wMCwgZmxvYXQzMng0X3QgX19wMSkgewotICBmbG9hdDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZwbWF4bm1xX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDQxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgZmxvYXQzMng0X3QgdnBtYXhubXFfZjMyKGZsb2F0MzJ4NF90IF9fcDAsIGZsb2F0MzJ4NF90IF9fcDEpIHsKLSAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIGZsb2F0MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOwotICBmbG9hdDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZwbWF4bm1xX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA0MSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBmbG9hdDMyeDJfdCB2cG1heG5tX2YzMihmbG9hdDMyeDJfdCBfX3AwLCBmbG9hdDMyeDJfdCBfX3AxKSB7Ci0gIGZsb2F0MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDMyeDJfdCkgX19idWlsdGluX25lb25fdnBtYXhubV92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgOSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGZsb2F0MzJ4Ml90IHZwbWF4bm1fZjMyKGZsb2F0MzJ4Ml90IF9fcDAsIGZsb2F0MzJ4Ml90IF9fcDEpIHsKLSAgZmxvYXQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIGZsb2F0MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOwotICBmbG9hdDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZwbWF4bm1fdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCA5KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGZsb2F0NjRfdCB2cG1heG5tcWRfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKLSAgZmxvYXQ2NF90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZwbWF4bm1xZF9mNjQoKGludDh4MTZfdClfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgZmxvYXQ2NF90IHZwbWF4bm1xZF9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgewotICBmbG9hdDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgZmxvYXQ2NF90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZwbWF4bm1xZF9mNjQoKGludDh4MTZfdClfX3JldjApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGZsb2F0MzJfdCB2cG1heG5tc19mMzIoZmxvYXQzMngyX3QgX19wMCkgewotICBmbG9hdDMyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0MzJfdCkgX19idWlsdGluX25lb25fdnBtYXhubXNfZjMyKChpbnQ4eDhfdClfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgZmxvYXQzMl90IHZwbWF4bm1zX2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7Ci0gIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICBmbG9hdDMyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0MzJfdCkgX19idWlsdGluX25lb25fdnBtYXhubXNfZjMyKChpbnQ4eDhfdClfX3JldjApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ4eDE2X3QgdnBtaW5xX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7Ci0gIHVpbnQ4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZwbWlucV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA0OCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ4eDE2X3QgdnBtaW5xX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7Ci0gIHVpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQ4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZwbWlucV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNDgpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDMyeDRfdCB2cG1pbnFfdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7Ci0gIHVpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZwbWlucV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA1MCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQzMng0X3QgdnBtaW5xX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgewotICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICB1aW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOwotICB1aW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cG1pbnFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDUwKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQxNng4X3QgdnBtaW5xX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSkgewotICB1aW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92cG1pbnFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNDkpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MTZ4OF90IHZwbWlucV91MTYodWludDE2eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEpIHsKLSAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDE2eDhfdCkgX19idWlsdGluX25lb25fdnBtaW5xX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA0OSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ4eDE2X3QgdnBtaW5xX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgewotICBpbnQ4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDh4MTZfdCkgX19idWlsdGluX25lb25fdnBtaW5xX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDMyKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50OHgxNl90IHZwbWlucV9zOChpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEpIHsKLSAgaW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cG1pbnFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDMyKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGZsb2F0NjR4Ml90IHZwbWlucV9mNjQoZmxvYXQ2NHgyX3QgX19wMCwgZmxvYXQ2NHgyX3QgX19wMSkgewotICBmbG9hdDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZwbWlucV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA0Mik7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGZsb2F0NjR4Ml90IHZwbWlucV9mNjQoZmxvYXQ2NHgyX3QgX19wMCwgZmxvYXQ2NHgyX3QgX19wMSkgewotICBmbG9hdDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgZmxvYXQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7Ci0gIGZsb2F0NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDY0eDJfdCkgX19idWlsdGluX25lb25fdnBtaW5xX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA0Mik7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBmbG9hdDMyeDRfdCB2cG1pbnFfZjMyKGZsb2F0MzJ4NF90IF9fcDAsIGZsb2F0MzJ4NF90IF9fcDEpIHsKLSAgZmxvYXQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cG1pbnFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBmbG9hdDMyeDRfdCB2cG1pbnFfZjMyKGZsb2F0MzJ4NF90IF9fcDAsIGZsb2F0MzJ4NF90IF9fcDEpIHsKLSAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIGZsb2F0MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOwotICBmbG9hdDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZwbWlucV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNDEpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MzJ4NF90IHZwbWlucV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7Ci0gIGludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cG1pbnFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMzQpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQzMng0X3QgdnBtaW5xX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKLSAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7Ci0gIGludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cG1pbnFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDM0KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDE2eDhfdCB2cG1pbnFfczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgewotICBpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDE2eDhfdCkgX19idWlsdGluX25lb25fdnBtaW5xX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDMzKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MTZ4OF90IHZwbWlucV9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7Ci0gIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDE2eDhfdCkgX19idWlsdGluX25lb25fdnBtaW5xX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAzMyk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBmbG9hdDY0X3QgdnBtaW5xZF9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgewotICBmbG9hdDY0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0NjRfdCkgX19idWlsdGluX25lb25fdnBtaW5xZF9mNjQoKGludDh4MTZfdClfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgZmxvYXQ2NF90IHZwbWlucWRfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKLSAgZmxvYXQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIGZsb2F0NjRfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQ2NF90KSBfX2J1aWx0aW5fbmVvbl92cG1pbnFkX2Y2NCgoaW50OHgxNl90KV9fcmV2MCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgZmxvYXQzMl90IHZwbWluc19mMzIoZmxvYXQzMngyX3QgX19wMCkgewotICBmbG9hdDMyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0MzJfdCkgX19idWlsdGluX25lb25fdnBtaW5zX2YzMigoaW50OHg4X3QpX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGZsb2F0MzJfdCB2cG1pbnNfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKLSAgZmxvYXQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIGZsb2F0MzJfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQzMl90KSBfX2J1aWx0aW5fbmVvbl92cG1pbnNfZjMyKChpbnQ4eDhfdClfX3JldjApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGZsb2F0NjR4Ml90IHZwbWlubm1xX2Y2NChmbG9hdDY0eDJfdCBfX3AwLCBmbG9hdDY0eDJfdCBfX3AxKSB7Ci0gIGZsb2F0NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDY0eDJfdCkgX19idWlsdGluX25lb25fdnBtaW5ubXFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNDIpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBmbG9hdDY0eDJfdCB2cG1pbm5tcV9mNjQoZmxvYXQ2NHgyX3QgX19wMCwgZmxvYXQ2NHgyX3QgX19wMSkgewotICBmbG9hdDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgZmxvYXQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7Ci0gIGZsb2F0NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDY0eDJfdCkgX19idWlsdGluX25lb25fdnBtaW5ubXFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDQyKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGZsb2F0MzJ4NF90IHZwbWlubm1xX2YzMihmbG9hdDMyeDRfdCBfX3AwLCBmbG9hdDMyeDRfdCBfX3AxKSB7Ci0gIGZsb2F0MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDMyeDRfdCkgX19idWlsdGluX25lb25fdnBtaW5ubXFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBmbG9hdDMyeDRfdCB2cG1pbm5tcV9mMzIoZmxvYXQzMng0X3QgX19wMCwgZmxvYXQzMng0X3QgX19wMSkgewotICBmbG9hdDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgZmxvYXQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7Ci0gIGZsb2F0MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDMyeDRfdCkgX19idWlsdGluX25lb25fdnBtaW5ubXFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDQxKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGZsb2F0MzJ4Ml90IHZwbWlubm1fZjMyKGZsb2F0MzJ4Ml90IF9fcDAsIGZsb2F0MzJ4Ml90IF9fcDEpIHsKLSAgZmxvYXQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cG1pbm5tX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCA5KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgZmxvYXQzMngyX3QgdnBtaW5ubV9mMzIoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSkgewotICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgZmxvYXQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7Ci0gIGZsb2F0MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDMyeDJfdCkgX19idWlsdGluX25lb25fdnBtaW5ubV92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDkpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgZmxvYXQ2NF90IHZwbWlubm1xZF9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgewotICBmbG9hdDY0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0NjRfdCkgX19idWlsdGluX25lb25fdnBtaW5ubXFkX2Y2NCgoaW50OHgxNl90KV9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBmbG9hdDY0X3QgdnBtaW5ubXFkX2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7Ci0gIGZsb2F0NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICBmbG9hdDY0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0NjRfdCkgX19idWlsdGluX25lb25fdnBtaW5ubXFkX2Y2NCgoaW50OHgxNl90KV9fcmV2MCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgZmxvYXQzMl90IHZwbWlubm1zX2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7Ci0gIGZsb2F0MzJfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQzMl90KSBfX2J1aWx0aW5fbmVvbl92cG1pbm5tc19mMzIoKGludDh4OF90KV9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBmbG9hdDMyX3QgdnBtaW5ubXNfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKLSAgZmxvYXQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIGZsb2F0MzJfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQzMl90KSBfX2J1aWx0aW5fbmVvbl92cG1pbm5tc19mMzIoKGludDh4OF90KV9fcmV2MCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50NjR4Ml90IHZxYWJzcV9zNjQoaW50NjR4Ml90IF9fcDApIHsKLSAgaW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxYWJzcV92KChpbnQ4eDE2X3QpX19wMCwgMzUpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQ2NHgyX3QgdnFhYnNxX3M2NChpbnQ2NHgyX3QgX19wMCkgewotICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIGludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92cWFic3FfdigoaW50OHgxNl90KV9fcmV2MCwgMzUpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50NjR4MV90IHZxYWJzX3M2NChpbnQ2NHgxX3QgX19wMCkgewotICBpbnQ2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDY0eDFfdCkgX19idWlsdGluX25lb25fdnFhYnNfdigoaW50OHg4X3QpX19wMCwgMyk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDY0eDFfdCB2cWFic19zNjQoaW50NjR4MV90IF9fcDApIHsKLSAgaW50NjR4MV90IF9fcmV0OwotICBfX3JldCA9IChpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZxYWJzX3YoKGludDh4OF90KV9fcDAsIDMpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDhfdCB2cWFic2JfczgoaW50OF90IF9fcDApIHsKLSAgaW50OF90IF9fcmV0OwotICBfX3JldCA9IChpbnQ4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxYWJzYl9zOChfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50OF90IHZxYWJzYl9zOChpbnQ4X3QgX19wMCkgewotICBpbnQ4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDhfdCkgX19idWlsdGluX25lb25fdnFhYnNiX3M4KF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDMyX3QgdnFhYnNzX3MzMihpbnQzMl90IF9fcDApIHsKLSAgaW50MzJfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MzJfdCkgX19idWlsdGluX25lb25fdnFhYnNzX3MzMihfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MzJfdCB2cWFic3NfczMyKGludDMyX3QgX19wMCkgewotICBpbnQzMl90IF9fcmV0OwotICBfX3JldCA9IChpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92cWFic3NfczMyKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDY0X3QgdnFhYnNkX3M2NChpbnQ2NF90IF9fcDApIHsKLSAgaW50NjRfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdnFhYnNkX3M2NChfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50NjRfdCB2cWFic2RfczY0KGludDY0X3QgX19wMCkgewotICBpbnQ2NF90IF9fcmV0OwotICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92cWFic2RfczY0KF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDE2X3QgdnFhYnNoX3MxNihpbnQxNl90IF9fcDApIHsKLSAgaW50MTZfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MTZfdCkgX19idWlsdGluX25lb25fdnFhYnNoX3MxNihfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MTZfdCB2cWFic2hfczE2KGludDE2X3QgX19wMCkgewotICBpbnQxNl90IF9fcmV0OwotICBfX3JldCA9IChpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92cWFic2hfczE2KF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ4X3QgdnFhZGRiX3U4KHVpbnQ4X3QgX19wMCwgdWludDhfdCBfX3AxKSB7Ci0gIHVpbnQ4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxYWRkYl91OChfX3AwLCBfX3AxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDhfdCB2cWFkZGJfdTgodWludDhfdCBfX3AwLCB1aW50OF90IF9fcDEpIHsKLSAgdWludDhfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDhfdCkgX19idWlsdGluX25lb25fdnFhZGRiX3U4KF9fcDAsIF9fcDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQzMl90IHZxYWRkc191MzIodWludDMyX3QgX19wMCwgdWludDMyX3QgX19wMSkgewotICB1aW50MzJfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxYWRkc191MzIoX19wMCwgX19wMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQzMl90IHZxYWRkc191MzIodWludDMyX3QgX19wMCwgdWludDMyX3QgX19wMSkgewotICB1aW50MzJfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxYWRkc191MzIoX19wMCwgX19wMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDY0X3QgdnFhZGRkX3U2NCh1aW50NjRfdCBfX3AwLCB1aW50NjRfdCBfX3AxKSB7Ci0gIHVpbnQ2NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50NjRfdCkgX19idWlsdGluX25lb25fdnFhZGRkX3U2NChfX3AwLCBfX3AxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDY0X3QgdnFhZGRkX3U2NCh1aW50NjRfdCBfX3AwLCB1aW50NjRfdCBfX3AxKSB7Ci0gIHVpbnQ2NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50NjRfdCkgX19idWlsdGluX25lb25fdnFhZGRkX3U2NChfX3AwLCBfX3AxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MTZfdCB2cWFkZGhfdTE2KHVpbnQxNl90IF9fcDAsIHVpbnQxNl90IF9fcDEpIHsKLSAgdWludDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92cWFkZGhfdTE2KF9fcDAsIF9fcDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MTZfdCB2cWFkZGhfdTE2KHVpbnQxNl90IF9fcDAsIHVpbnQxNl90IF9fcDEpIHsKLSAgdWludDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92cWFkZGhfdTE2KF9fcDAsIF9fcDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDhfdCB2cWFkZGJfczgoaW50OF90IF9fcDAsIGludDhfdCBfX3AxKSB7Ci0gIGludDhfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50OF90KSBfX2J1aWx0aW5fbmVvbl92cWFkZGJfczgoX19wMCwgX19wMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDhfdCB2cWFkZGJfczgoaW50OF90IF9fcDAsIGludDhfdCBfX3AxKSB7Ci0gIGludDhfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50OF90KSBfX2J1aWx0aW5fbmVvbl92cWFkZGJfczgoX19wMCwgX19wMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MzJfdCB2cWFkZHNfczMyKGludDMyX3QgX19wMCwgaW50MzJfdCBfX3AxKSB7Ci0gIGludDMyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxYWRkc19zMzIoX19wMCwgX19wMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDMyX3QgdnFhZGRzX3MzMihpbnQzMl90IF9fcDAsIGludDMyX3QgX19wMSkgewotICBpbnQzMl90IF9fcmV0OwotICBfX3JldCA9IChpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92cWFkZHNfczMyKF9fcDAsIF9fcDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci1fX2FpIGludDMyX3QgX19ub3N3YXBfdnFhZGRzX3MzMihpbnQzMl90IF9fcDAsIGludDMyX3QgX19wMSkgewotICBpbnQzMl90IF9fcmV0OwotICBfX3JldCA9IChpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92cWFkZHNfczMyKF9fcDAsIF9fcDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDY0X3QgdnFhZGRkX3M2NChpbnQ2NF90IF9fcDAsIGludDY0X3QgX19wMSkgewotICBpbnQ2NF90IF9fcmV0OwotICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92cWFkZGRfczY0KF9fcDAsIF9fcDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQ2NF90IHZxYWRkZF9zNjQoaW50NjRfdCBfX3AwLCBpbnQ2NF90IF9fcDEpIHsKLSAgaW50NjRfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdnFhZGRkX3M2NChfX3AwLCBfX3AxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQxNl90IHZxYWRkaF9zMTYoaW50MTZfdCBfX3AwLCBpbnQxNl90IF9fcDEpIHsKLSAgaW50MTZfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MTZfdCkgX19idWlsdGluX25lb25fdnFhZGRoX3MxNihfX3AwLCBfX3AxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MTZfdCB2cWFkZGhfczE2KGludDE2X3QgX19wMCwgaW50MTZfdCBfX3AxKSB7Ci0gIGludDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZxYWRkaF9zMTYoX19wMCwgX19wMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLV9fYWkgaW50MTZfdCBfX25vc3dhcF92cWFkZGhfczE2KGludDE2X3QgX19wMCwgaW50MTZfdCBfX3AxKSB7Ci0gIGludDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZxYWRkaF9zMTYoX19wMCwgX19wMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50NjRfdCB2cWRtbGFsc19zMzIoaW50NjRfdCBfX3AwLCBpbnQzMl90IF9fcDEsIGludDMyX3QgX19wMikgewotICBpbnQ2NF90IF9fcmV0OwotICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92cWRtbGFsc19zMzIoX19wMCwgX19wMSwgX19wMik7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDY0X3QgdnFkbWxhbHNfczMyKGludDY0X3QgX19wMCwgaW50MzJfdCBfX3AxLCBpbnQzMl90IF9fcDIpIHsKLSAgaW50NjRfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdnFkbWxhbHNfczMyKF9fcDAsIF9fcDEsIF9fcDIpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDMyX3QgdnFkbWxhbGhfczE2KGludDMyX3QgX19wMCwgaW50MTZfdCBfX3AxLCBpbnQxNl90IF9fcDIpIHsKLSAgaW50MzJfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MzJfdCkgX19idWlsdGluX25lb25fdnFkbWxhbGhfczE2KF9fcDAsIF9fcDEsIF9fcDIpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQzMl90IHZxZG1sYWxoX3MxNihpbnQzMl90IF9fcDAsIGludDE2X3QgX19wMSwgaW50MTZfdCBfX3AyKSB7Ci0gIGludDMyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxZG1sYWxoX3MxNihfX3AwLCBfX3AxLCBfX3AyKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ2NHgyX3QgdnFkbWxhbF9oaWdoX3MzMihpbnQ2NHgyX3QgX19wMCwgaW50MzJ4NF90IF9fcDEsIGludDMyeDRfdCBfX3AyKSB7Ci0gIGludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSB2cWRtbGFsX3MzMihfX3AwLCB2Z2V0X2hpZ2hfczMyKF9fcDEpLCB2Z2V0X2hpZ2hfczMyKF9fcDIpKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50NjR4Ml90IHZxZG1sYWxfaGlnaF9zMzIoaW50NjR4Ml90IF9fcDAsIGludDMyeDRfdCBfX3AxLCBpbnQzMng0X3QgX19wMikgewotICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKLSAgaW50MzJ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDMsIDIsIDEsIDApOwotICBpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19ub3N3YXBfdnFkbWxhbF9zMzIoX19yZXYwLCBfX25vc3dhcF92Z2V0X2hpZ2hfczMyKF9fcmV2MSksIF9fbm9zd2FwX3ZnZXRfaGlnaF9zMzIoX19yZXYyKSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQzMng0X3QgdnFkbWxhbF9oaWdoX3MxNihpbnQzMng0X3QgX19wMCwgaW50MTZ4OF90IF9fcDEsIGludDE2eDhfdCBfX3AyKSB7Ci0gIGludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSB2cWRtbGFsX3MxNihfX3AwLCB2Z2V0X2hpZ2hfczE2KF9fcDEpLCB2Z2V0X2hpZ2hfczE2KF9fcDIpKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MzJ4NF90IHZxZG1sYWxfaGlnaF9zMTYoaW50MzJ4NF90IF9fcDAsIGludDE2eDhfdCBfX3AxLCBpbnQxNng4X3QgX19wMikgewotICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50MTZ4OF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19ub3N3YXBfdnFkbWxhbF9zMTYoX19yZXYwLCBfX25vc3dhcF92Z2V0X2hpZ2hfczE2KF9fcmV2MSksIF9fbm9zd2FwX3ZnZXRfaGlnaF9zMTYoX19yZXYyKSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2cWRtbGFsX2hpZ2hfbGFuZV9zMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDY0eDJfdCBfX3MwID0gX19wMDsgXAotICBpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKLSAgaW50MzJ4Ml90IF9fczIgPSBfX3AyOyBcCi0gIGludDY0eDJfdCBfX3JldDsgXAotICBfX3JldCA9IHZxZG1sYWxfczMyKF9fczAsIHZnZXRfaGlnaF9zMzIoX19zMSksIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIF9fcDMsIF9fcDMpKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZxZG1sYWxfaGlnaF9sYW5lX3MzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCi0gIGludDMyeDRfdCBfX3MxID0gX19wMTsgXAotICBpbnQzMngyX3QgX19zMiA9IF9fcDI7IFwKLSAgaW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCi0gIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAotICBpbnQzMngyX3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgMSwgMCk7IFwKLSAgaW50NjR4Ml90IF9fcmV0OyBcCi0gIF9fcmV0ID0gX19ub3N3YXBfdnFkbWxhbF9zMzIoX19yZXYwLCBfX25vc3dhcF92Z2V0X2hpZ2hfczMyKF9fcmV2MSksIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MiwgX19yZXYyLCBfX3AzLCBfX3AzKSk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2cWRtbGFsX2hpZ2hfbGFuZV9zMTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAotICBpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKLSAgaW50MTZ4NF90IF9fczIgPSBfX3AyOyBcCi0gIGludDMyeDRfdCBfX3JldDsgXAotICBfX3JldCA9IHZxZG1sYWxfczE2KF9fczAsIHZnZXRfaGlnaF9zMTYoX19zMSksIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZxZG1sYWxfaGlnaF9sYW5lX3MxNihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCi0gIGludDE2eDhfdCBfX3MxID0gX19wMTsgXAotICBpbnQxNng0X3QgX19zMiA9IF9fcDI7IFwKLSAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCi0gIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBpbnQxNng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgMywgMiwgMSwgMCk7IFwKLSAgaW50MzJ4NF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gX19ub3N3YXBfdnFkbWxhbF9zMTYoX19yZXYwLCBfX25vc3dhcF92Z2V0X2hpZ2hfczE2KF9fcmV2MSksIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MiwgX19yZXYyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKSk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2cWRtbGFsX2hpZ2hfbGFuZXFfczMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCi0gIGludDMyeDRfdCBfX3MyID0gX19wMjsgXAotICBpbnQ2NHgyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSB2cWRtbGFsX3MzMihfX3MwLCB2Z2V0X2hpZ2hfczMyKF9fczEpLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCBfX3AzLCBfX3AzKSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2cWRtbGFsX2hpZ2hfbGFuZXFfczMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCi0gIGludDMyeDRfdCBfX3MyID0gX19wMjsgXAotICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKLSAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCi0gIGludDMyeDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCAzLCAyLCAxLCAwKTsgXAotICBpbnQ2NHgyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSBfX25vc3dhcF92cWRtbGFsX3MzMihfX3JldjAsIF9fbm9zd2FwX3ZnZXRfaGlnaF9zMzIoX19yZXYxKSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMpKTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZxZG1sYWxfaGlnaF9sYW5lcV9zMTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAotICBpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKLSAgaW50MTZ4OF90IF9fczIgPSBfX3AyOyBcCi0gIGludDMyeDRfdCBfX3JldDsgXAotICBfX3JldCA9IHZxZG1sYWxfczE2KF9fczAsIHZnZXRfaGlnaF9zMTYoX19zMSksIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZxZG1sYWxfaGlnaF9sYW5lcV9zMTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAotICBpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKLSAgaW50MTZ4OF90IF9fczIgPSBfX3AyOyBcCi0gIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAotICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgaW50MTZ4OF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIGludDMyeDRfdCBfX3JldDsgXAotICBfX3JldCA9IF9fbm9zd2FwX3ZxZG1sYWxfczE2KF9fcmV2MCwgX19ub3N3YXBfdmdldF9oaWdoX3MxNihfX3JldjEpLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMywgX19wMywgX19wMykpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50NjR4Ml90IHZxZG1sYWxfaGlnaF9uX3MzMihpbnQ2NHgyX3QgX19wMCwgaW50MzJ4NF90IF9fcDEsIGludDMyX3QgX19wMikgewotICBpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gdnFkbWxhbF9uX3MzMihfX3AwLCB2Z2V0X2hpZ2hfczMyKF9fcDEpLCBfX3AyKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50NjR4Ml90IHZxZG1sYWxfaGlnaF9uX3MzMihpbnQ2NHgyX3QgX19wMCwgaW50MzJ4NF90IF9fcDEsIGludDMyX3QgX19wMikgewotICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKLSAgaW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IF9fbm9zd2FwX3ZxZG1sYWxfbl9zMzIoX19yZXYwLCBfX25vc3dhcF92Z2V0X2hpZ2hfczMyKF9fcmV2MSksIF9fcDIpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MzJ4NF90IHZxZG1sYWxfaGlnaF9uX3MxNihpbnQzMng0X3QgX19wMCwgaW50MTZ4OF90IF9fcDEsIGludDE2X3QgX19wMikgewotICBpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gdnFkbWxhbF9uX3MxNihfX3AwLCB2Z2V0X2hpZ2hfczE2KF9fcDEpLCBfX3AyKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MzJ4NF90IHZxZG1sYWxfaGlnaF9uX3MxNihpbnQzMng0X3QgX19wMCwgaW50MTZ4OF90IF9fcDEsIGludDE2X3QgX19wMikgewotICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IF9fbm9zd2FwX3ZxZG1sYWxfbl9zMTYoX19yZXYwLCBfX25vc3dhcF92Z2V0X2hpZ2hfczE2KF9fcmV2MSksIF9fcDIpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnFkbWxhbHNfbGFuZV9zMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDY0X3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MzJfdCBfX3MxID0gX19wMTsgXAotICBpbnQzMngyX3QgX19zMiA9IF9fcDI7IFwKLSAgaW50NjRfdCBfX3JldDsgXAotICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92cWRtbGFsc19sYW5lX3MzMihfX3MwLCBfX3MxLCAoaW50OHg4X3QpX19zMiwgX19wMyk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2cWRtbGFsc19sYW5lX3MzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50NjRfdCBfX3MwID0gX19wMDsgXAotICBpbnQzMl90IF9fczEgPSBfX3AxOyBcCi0gIGludDMyeDJfdCBfX3MyID0gX19wMjsgXAotICBpbnQzMngyX3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgMSwgMCk7IFwKLSAgaW50NjRfdCBfX3JldDsgXAotICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92cWRtbGFsc19sYW5lX3MzMihfX3MwLCBfX3MxLCAoaW50OHg4X3QpX19yZXYyLCBfX3AzKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnFkbWxhbGhfbGFuZV9zMTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDMyX3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MTZfdCBfX3MxID0gX19wMTsgXAotICBpbnQxNng0X3QgX19zMiA9IF9fcDI7IFwKLSAgaW50MzJfdCBfX3JldDsgXAotICBfX3JldCA9IChpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92cWRtbGFsaF9sYW5lX3MxNihfX3MwLCBfX3MxLCAoaW50OHg4X3QpX19zMiwgX19wMyk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2cWRtbGFsaF9sYW5lX3MxNihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MzJfdCBfX3MwID0gX19wMDsgXAotICBpbnQxNl90IF9fczEgPSBfX3AxOyBcCi0gIGludDE2eDRfdCBfX3MyID0gX19wMjsgXAotICBpbnQxNng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgMywgMiwgMSwgMCk7IFwKLSAgaW50MzJfdCBfX3JldDsgXAotICBfX3JldCA9IChpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92cWRtbGFsaF9sYW5lX3MxNihfX3MwLCBfX3MxLCAoaW50OHg4X3QpX19yZXYyLCBfX3AzKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnFkbWxhbHNfbGFuZXFfczMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ2NF90IF9fczAgPSBfX3AwOyBcCi0gIGludDMyX3QgX19zMSA9IF9fcDE7IFwKLSAgaW50MzJ4NF90IF9fczIgPSBfX3AyOyBcCi0gIGludDY0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdnFkbWxhbHNfbGFuZXFfczMyKF9fczAsIF9fczEsIChpbnQ4eDE2X3QpX19zMiwgX19wMyk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2cWRtbGFsc19sYW5lcV9zMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDY0X3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MzJfdCBfX3MxID0gX19wMTsgXAotICBpbnQzMng0X3QgX19zMiA9IF9fcDI7IFwKLSAgaW50MzJ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDMsIDIsIDEsIDApOyBcCi0gIGludDY0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdnFkbWxhbHNfbGFuZXFfczMyKF9fczAsIF9fczEsIChpbnQ4eDE2X3QpX19yZXYyLCBfX3AzKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnFkbWxhbGhfbGFuZXFfczE2KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQzMl90IF9fczAgPSBfX3AwOyBcCi0gIGludDE2X3QgX19zMSA9IF9fcDE7IFwKLSAgaW50MTZ4OF90IF9fczIgPSBfX3AyOyBcCi0gIGludDMyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoaW50MzJfdCkgX19idWlsdGluX25lb25fdnFkbWxhbGhfbGFuZXFfczE2KF9fczAsIF9fczEsIChpbnQ4eDE2X3QpX19zMiwgX19wMyk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2cWRtbGFsaF9sYW5lcV9zMTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDMyX3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MTZfdCBfX3MxID0gX19wMTsgXAotICBpbnQxNng4X3QgX19zMiA9IF9fcDI7IFwKLSAgaW50MTZ4OF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIGludDMyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoaW50MzJfdCkgX19idWlsdGluX25lb25fdnFkbWxhbGhfbGFuZXFfczE2KF9fczAsIF9fczEsIChpbnQ4eDE2X3QpX19yZXYyLCBfX3AzKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnFkbWxhbF9sYW5lcV9zMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDY0eDJfdCBfX3MwID0gX19wMDsgXAotICBpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKLSAgaW50MzJ4NF90IF9fczIgPSBfX3AyOyBcCi0gIGludDY0eDJfdCBfX3JldDsgXAotICBfX3JldCA9IHZxZG1sYWxfczMyKF9fczAsIF9fczEsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIF9fcDMsIF9fcDMpKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZxZG1sYWxfbGFuZXFfczMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCi0gIGludDMyeDRfdCBfX3MyID0gX19wMjsgXAotICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKLSAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCi0gIGludDMyeDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCAzLCAyLCAxLCAwKTsgXAotICBpbnQ2NHgyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSBfX25vc3dhcF92cWRtbGFsX3MzMihfX3JldjAsIF9fcmV2MSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMpKTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZxZG1sYWxfbGFuZXFfczE2KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCi0gIGludDE2eDhfdCBfX3MyID0gX19wMjsgXAotICBpbnQzMng0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSB2cWRtbGFsX3MxNihfX3MwLCBfX3MxLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2cWRtbGFsX2xhbmVxX3MxNihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCi0gIGludDE2eDRfdCBfX3MxID0gX19wMTsgXAotICBpbnQxNng4X3QgX19zMiA9IF9fcDI7IFwKLSAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCi0gIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAotICBpbnQxNng4X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgaW50MzJ4NF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gX19ub3N3YXBfdnFkbWxhbF9zMTYoX19yZXYwLCBfX3JldjEsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MiwgX19yZXYyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKSk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ2NF90IHZxZG1sc2xzX3MzMihpbnQ2NF90IF9fcDAsIGludDMyX3QgX19wMSwgaW50MzJfdCBfX3AyKSB7Ci0gIGludDY0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZxZG1sc2xzX3MzMihfX3AwLCBfX3AxLCBfX3AyKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50NjRfdCB2cWRtbHNsc19zMzIoaW50NjRfdCBfX3AwLCBpbnQzMl90IF9fcDEsIGludDMyX3QgX19wMikgewotICBpbnQ2NF90IF9fcmV0OwotICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92cWRtbHNsc19zMzIoX19wMCwgX19wMSwgX19wMik7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MzJfdCB2cWRtbHNsaF9zMTYoaW50MzJfdCBfX3AwLCBpbnQxNl90IF9fcDEsIGludDE2X3QgX19wMikgewotICBpbnQzMl90IF9fcmV0OwotICBfX3JldCA9IChpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92cWRtbHNsaF9zMTYoX19wMCwgX19wMSwgX19wMik7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDMyX3QgdnFkbWxzbGhfczE2KGludDMyX3QgX19wMCwgaW50MTZfdCBfX3AxLCBpbnQxNl90IF9fcDIpIHsKLSAgaW50MzJfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MzJfdCkgX19idWlsdGluX25lb25fdnFkbWxzbGhfczE2KF9fcDAsIF9fcDEsIF9fcDIpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDY0eDJfdCB2cWRtbHNsX2hpZ2hfczMyKGludDY0eDJfdCBfX3AwLCBpbnQzMng0X3QgX19wMSwgaW50MzJ4NF90IF9fcDIpIHsKLSAgaW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IHZxZG1sc2xfczMyKF9fcDAsIHZnZXRfaGlnaF9zMzIoX19wMSksIHZnZXRfaGlnaF9zMzIoX19wMikpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQ2NHgyX3QgdnFkbWxzbF9oaWdoX3MzMihpbnQ2NHgyX3QgX19wMCwgaW50MzJ4NF90IF9fcDEsIGludDMyeDRfdCBfX3AyKSB7Ci0gIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOwotICBpbnQzMng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMywgMiwgMSwgMCk7Ci0gIGludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSBfX25vc3dhcF92cWRtbHNsX3MzMihfX3JldjAsIF9fbm9zd2FwX3ZnZXRfaGlnaF9zMzIoX19yZXYxKSwgX19ub3N3YXBfdmdldF9oaWdoX3MzMihfX3JldjIpKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDMyeDRfdCB2cWRtbHNsX2hpZ2hfczE2KGludDMyeDRfdCBfX3AwLCBpbnQxNng4X3QgX19wMSwgaW50MTZ4OF90IF9fcDIpIHsKLSAgaW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IHZxZG1sc2xfczE2KF9fcDAsIHZnZXRfaGlnaF9zMTYoX19wMSksIHZnZXRfaGlnaF9zMTYoX19wMikpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQzMng0X3QgdnFkbWxzbF9oaWdoX3MxNihpbnQzMng0X3QgX19wMCwgaW50MTZ4OF90IF9fcDEsIGludDE2eDhfdCBfX3AyKSB7Ci0gIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQxNng4X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSBfX25vc3dhcF92cWRtbHNsX3MxNihfX3JldjAsIF9fbm9zd2FwX3ZnZXRfaGlnaF9zMTYoX19yZXYxKSwgX19ub3N3YXBfdmdldF9oaWdoX3MxNihfX3JldjIpKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZxZG1sc2xfaGlnaF9sYW5lX3MzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCi0gIGludDMyeDRfdCBfX3MxID0gX19wMTsgXAotICBpbnQzMngyX3QgX19zMiA9IF9fcDI7IFwKLSAgaW50NjR4Ml90IF9fcmV0OyBcCi0gIF9fcmV0ID0gdnFkbWxzbF9zMzIoX19zMCwgdmdldF9oaWdoX3MzMihfX3MxKSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMykpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnFkbWxzbF9oaWdoX2xhbmVfczMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCi0gIGludDMyeDJfdCBfX3MyID0gX19wMjsgXAotICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKLSAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCi0gIGludDMyeDJfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCAxLCAwKTsgXAotICBpbnQ2NHgyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSBfX25vc3dhcF92cWRtbHNsX3MzMihfX3JldjAsIF9fbm9zd2FwX3ZnZXRfaGlnaF9zMzIoX19yZXYxKSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMpKTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZxZG1sc2xfaGlnaF9sYW5lX3MxNihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCi0gIGludDE2eDhfdCBfX3MxID0gX19wMTsgXAotICBpbnQxNng0X3QgX19zMiA9IF9fcDI7IFwKLSAgaW50MzJ4NF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gdnFkbWxzbF9zMTYoX19zMCwgdmdldF9oaWdoX3MxNihfX3MxKSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMywgX19wMywgX19wMykpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnFkbWxzbF9oaWdoX2xhbmVfczE2KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCi0gIGludDE2eDRfdCBfX3MyID0gX19wMjsgXAotICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKLSAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIGludDE2eDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCAzLCAyLCAxLCAwKTsgXAotICBpbnQzMng0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSBfX25vc3dhcF92cWRtbHNsX3MxNihfX3JldjAsIF9fbm9zd2FwX3ZnZXRfaGlnaF9zMTYoX19yZXYxKSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpKTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZxZG1sc2xfaGlnaF9sYW5lcV9zMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDY0eDJfdCBfX3MwID0gX19wMDsgXAotICBpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKLSAgaW50MzJ4NF90IF9fczIgPSBfX3AyOyBcCi0gIGludDY0eDJfdCBfX3JldDsgXAotICBfX3JldCA9IHZxZG1sc2xfczMyKF9fczAsIHZnZXRfaGlnaF9zMzIoX19zMSksIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIF9fcDMsIF9fcDMpKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZxZG1sc2xfaGlnaF9sYW5lcV9zMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDY0eDJfdCBfX3MwID0gX19wMDsgXAotICBpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKLSAgaW50MzJ4NF90IF9fczIgPSBfX3AyOyBcCi0gIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAotICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKLSAgaW50MzJ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDMsIDIsIDEsIDApOyBcCi0gIGludDY0eDJfdCBfX3JldDsgXAotICBfX3JldCA9IF9fbm9zd2FwX3ZxZG1sc2xfczMyKF9fcmV2MCwgX19ub3N3YXBfdmdldF9oaWdoX3MzMihfX3JldjEpLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMykpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnFkbWxzbF9oaWdoX2xhbmVxX3MxNihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCi0gIGludDE2eDhfdCBfX3MxID0gX19wMTsgXAotICBpbnQxNng4X3QgX19zMiA9IF9fcDI7IFwKLSAgaW50MzJ4NF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gdnFkbWxzbF9zMTYoX19zMCwgdmdldF9oaWdoX3MxNihfX3MxKSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMywgX19wMywgX19wMykpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnFkbWxzbF9oaWdoX2xhbmVxX3MxNihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCi0gIGludDE2eDhfdCBfX3MxID0gX19wMTsgXAotICBpbnQxNng4X3QgX19zMiA9IF9fcDI7IFwKLSAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCi0gIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBpbnQxNng4X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgaW50MzJ4NF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gX19ub3N3YXBfdnFkbWxzbF9zMTYoX19yZXYwLCBfX25vc3dhcF92Z2V0X2hpZ2hfczE2KF9fcmV2MSksIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MiwgX19yZXYyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKSk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ2NHgyX3QgdnFkbWxzbF9oaWdoX25fczMyKGludDY0eDJfdCBfX3AwLCBpbnQzMng0X3QgX19wMSwgaW50MzJfdCBfX3AyKSB7Ci0gIGludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSB2cWRtbHNsX25fczMyKF9fcDAsIHZnZXRfaGlnaF9zMzIoX19wMSksIF9fcDIpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQ2NHgyX3QgdnFkbWxzbF9oaWdoX25fczMyKGludDY0eDJfdCBfX3AwLCBpbnQzMng0X3QgX19wMSwgaW50MzJfdCBfX3AyKSB7Ci0gIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOwotICBpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19ub3N3YXBfdnFkbWxzbF9uX3MzMihfX3JldjAsIF9fbm9zd2FwX3ZnZXRfaGlnaF9zMzIoX19yZXYxKSwgX19wMik7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQzMng0X3QgdnFkbWxzbF9oaWdoX25fczE2KGludDMyeDRfdCBfX3AwLCBpbnQxNng4X3QgX19wMSwgaW50MTZfdCBfX3AyKSB7Ci0gIGludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSB2cWRtbHNsX25fczE2KF9fcDAsIHZnZXRfaGlnaF9zMTYoX19wMSksIF9fcDIpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQzMng0X3QgdnFkbWxzbF9oaWdoX25fczE2KGludDMyeDRfdCBfX3AwLCBpbnQxNng4X3QgX19wMSwgaW50MTZfdCBfX3AyKSB7Ci0gIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19ub3N3YXBfdnFkbWxzbF9uX3MxNihfX3JldjAsIF9fbm9zd2FwX3ZnZXRfaGlnaF9zMTYoX19yZXYxKSwgX19wMik7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2cWRtbHNsc19sYW5lX3MzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50NjRfdCBfX3MwID0gX19wMDsgXAotICBpbnQzMl90IF9fczEgPSBfX3AxOyBcCi0gIGludDMyeDJfdCBfX3MyID0gX19wMjsgXAotICBpbnQ2NF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZxZG1sc2xzX2xhbmVfczMyKF9fczAsIF9fczEsIChpbnQ4eDhfdClfX3MyLCBfX3AzKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZxZG1sc2xzX2xhbmVfczMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ2NF90IF9fczAgPSBfX3AwOyBcCi0gIGludDMyX3QgX19zMSA9IF9fcDE7IFwKLSAgaW50MzJ4Ml90IF9fczIgPSBfX3AyOyBcCi0gIGludDMyeDJfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCAxLCAwKTsgXAotICBpbnQ2NF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZxZG1sc2xzX2xhbmVfczMyKF9fczAsIF9fczEsIChpbnQ4eDhfdClfX3JldjIsIF9fcDMpOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2cWRtbHNsaF9sYW5lX3MxNihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MzJfdCBfX3MwID0gX19wMDsgXAotICBpbnQxNl90IF9fczEgPSBfX3AxOyBcCi0gIGludDE2eDRfdCBfX3MyID0gX19wMjsgXAotICBpbnQzMl90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxZG1sc2xoX2xhbmVfczE2KF9fczAsIF9fczEsIChpbnQ4eDhfdClfX3MyLCBfX3AzKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZxZG1sc2xoX2xhbmVfczE2KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQzMl90IF9fczAgPSBfX3AwOyBcCi0gIGludDE2X3QgX19zMSA9IF9fcDE7IFwKLSAgaW50MTZ4NF90IF9fczIgPSBfX3AyOyBcCi0gIGludDE2eDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCAzLCAyLCAxLCAwKTsgXAotICBpbnQzMl90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxZG1sc2xoX2xhbmVfczE2KF9fczAsIF9fczEsIChpbnQ4eDhfdClfX3JldjIsIF9fcDMpOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2cWRtbHNsc19sYW5lcV9zMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDY0X3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MzJfdCBfX3MxID0gX19wMTsgXAotICBpbnQzMng0X3QgX19zMiA9IF9fcDI7IFwKLSAgaW50NjRfdCBfX3JldDsgXAotICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92cWRtbHNsc19sYW5lcV9zMzIoX19zMCwgX19zMSwgKGludDh4MTZfdClfX3MyLCBfX3AzKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZxZG1sc2xzX2xhbmVxX3MzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50NjRfdCBfX3MwID0gX19wMDsgXAotICBpbnQzMl90IF9fczEgPSBfX3AxOyBcCi0gIGludDMyeDRfdCBfX3MyID0gX19wMjsgXAotICBpbnQzMng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgMywgMiwgMSwgMCk7IFwKLSAgaW50NjRfdCBfX3JldDsgXAotICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92cWRtbHNsc19sYW5lcV9zMzIoX19zMCwgX19zMSwgKGludDh4MTZfdClfX3JldjIsIF9fcDMpOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2cWRtbHNsaF9sYW5lcV9zMTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDMyX3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MTZfdCBfX3MxID0gX19wMTsgXAotICBpbnQxNng4X3QgX19zMiA9IF9fcDI7IFwKLSAgaW50MzJfdCBfX3JldDsgXAotICBfX3JldCA9IChpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92cWRtbHNsaF9sYW5lcV9zMTYoX19zMCwgX19zMSwgKGludDh4MTZfdClfX3MyLCBfX3AzKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZxZG1sc2xoX2xhbmVxX3MxNihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MzJfdCBfX3MwID0gX19wMDsgXAotICBpbnQxNl90IF9fczEgPSBfX3AxOyBcCi0gIGludDE2eDhfdCBfX3MyID0gX19wMjsgXAotICBpbnQxNng4X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgaW50MzJfdCBfX3JldDsgXAotICBfX3JldCA9IChpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92cWRtbHNsaF9sYW5lcV9zMTYoX19zMCwgX19zMSwgKGludDh4MTZfdClfX3JldjIsIF9fcDMpOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2cWRtbHNsX2xhbmVxX3MzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCi0gIGludDMyeDJfdCBfX3MxID0gX19wMTsgXAotICBpbnQzMng0X3QgX19zMiA9IF9fcDI7IFwKLSAgaW50NjR4Ml90IF9fcmV0OyBcCi0gIF9fcmV0ID0gdnFkbWxzbF9zMzIoX19zMCwgX19zMSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMykpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnFkbWxzbF9sYW5lcV9zMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDY0eDJfdCBfX3MwID0gX19wMDsgXAotICBpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKLSAgaW50MzJ4NF90IF9fczIgPSBfX3AyOyBcCi0gIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAotICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMSwgMCk7IFwKLSAgaW50MzJ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDMsIDIsIDEsIDApOyBcCi0gIGludDY0eDJfdCBfX3JldDsgXAotICBfX3JldCA9IF9fbm9zd2FwX3ZxZG1sc2xfczMyKF9fcmV2MCwgX19yZXYxLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMykpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnFkbWxzbF9sYW5lcV9zMTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAotICBpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKLSAgaW50MTZ4OF90IF9fczIgPSBfX3AyOyBcCi0gIGludDMyeDRfdCBfX3JldDsgXAotICBfX3JldCA9IHZxZG1sc2xfczE2KF9fczAsIF9fczEsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZxZG1sc2xfbGFuZXFfczE2KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCi0gIGludDE2eDhfdCBfX3MyID0gX19wMjsgXAotICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKLSAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCi0gIGludDE2eDhfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBpbnQzMng0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSBfX25vc3dhcF92cWRtbHNsX3MxNihfX3JldjAsIF9fcmV2MSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpKTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDMyX3QgdnFkbXVsaHNfczMyKGludDMyX3QgX19wMCwgaW50MzJfdCBfX3AxKSB7Ci0gIGludDMyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxZG11bGhzX3MzMihfX3AwLCBfX3AxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MzJfdCB2cWRtdWxoc19zMzIoaW50MzJfdCBfX3AwLCBpbnQzMl90IF9fcDEpIHsKLSAgaW50MzJfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MzJfdCkgX19idWlsdGluX25lb25fdnFkbXVsaHNfczMyKF9fcDAsIF9fcDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci1fX2FpIGludDMyX3QgX19ub3N3YXBfdnFkbXVsaHNfczMyKGludDMyX3QgX19wMCwgaW50MzJfdCBfX3AxKSB7Ci0gIGludDMyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxZG11bGhzX3MzMihfX3AwLCBfX3AxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQxNl90IHZxZG11bGhoX3MxNihpbnQxNl90IF9fcDAsIGludDE2X3QgX19wMSkgewotICBpbnQxNl90IF9fcmV0OwotICBfX3JldCA9IChpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92cWRtdWxoaF9zMTYoX19wMCwgX19wMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDE2X3QgdnFkbXVsaGhfczE2KGludDE2X3QgX19wMCwgaW50MTZfdCBfX3AxKSB7Ci0gIGludDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZxZG11bGhoX3MxNihfX3AwLCBfX3AxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotX19haSBpbnQxNl90IF9fbm9zd2FwX3ZxZG11bGhoX3MxNihpbnQxNl90IF9fcDAsIGludDE2X3QgX19wMSkgewotICBpbnQxNl90IF9fcmV0OwotICBfX3JldCA9IChpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92cWRtdWxoaF9zMTYoX19wMCwgX19wMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnFkbXVsaHNfbGFuZV9zMzIoX19wMF8xNDYsIF9fcDFfMTQ2LCBfX3AyXzE0NikgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDMyX3QgX19zMF8xNDYgPSBfX3AwXzE0NjsgXAotICBpbnQzMngyX3QgX19zMV8xNDYgPSBfX3AxXzE0NjsgXAotICBpbnQzMl90IF9fcmV0XzE0NjsgXAotICBfX3JldF8xNDYgPSB2cWRtdWxoc19zMzIoX19zMF8xNDYsIHZnZXRfbGFuZV9zMzIoX19zMV8xNDYsIF9fcDJfMTQ2KSk7IFwKLSAgX19yZXRfMTQ2OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnFkbXVsaHNfbGFuZV9zMzIoX19wMF8xNDcsIF9fcDFfMTQ3LCBfX3AyXzE0NykgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDMyX3QgX19zMF8xNDcgPSBfX3AwXzE0NzsgXAotICBpbnQzMngyX3QgX19zMV8xNDcgPSBfX3AxXzE0NzsgXAotICBpbnQzMngyX3QgX19yZXYxXzE0NzsgIF9fcmV2MV8xNDcgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxXzE0NywgX19zMV8xNDcsIDEsIDApOyBcCi0gIGludDMyX3QgX19yZXRfMTQ3OyBcCi0gIF9fcmV0XzE0NyA9IF9fbm9zd2FwX3ZxZG11bGhzX3MzMihfX3MwXzE0NywgX19ub3N3YXBfdmdldF9sYW5lX3MzMihfX3JldjFfMTQ3LCBfX3AyXzE0NykpOyBcCi0gIF9fcmV0XzE0NzsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnFkbXVsaGhfbGFuZV9zMTYoX19wMF8xNDgsIF9fcDFfMTQ4LCBfX3AyXzE0OCkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDE2X3QgX19zMF8xNDggPSBfX3AwXzE0ODsgXAotICBpbnQxNng0X3QgX19zMV8xNDggPSBfX3AxXzE0ODsgXAotICBpbnQxNl90IF9fcmV0XzE0ODsgXAotICBfX3JldF8xNDggPSB2cWRtdWxoaF9zMTYoX19zMF8xNDgsIHZnZXRfbGFuZV9zMTYoX19zMV8xNDgsIF9fcDJfMTQ4KSk7IFwKLSAgX19yZXRfMTQ4OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnFkbXVsaGhfbGFuZV9zMTYoX19wMF8xNDksIF9fcDFfMTQ5LCBfX3AyXzE0OSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDE2X3QgX19zMF8xNDkgPSBfX3AwXzE0OTsgXAotICBpbnQxNng0X3QgX19zMV8xNDkgPSBfX3AxXzE0OTsgXAotICBpbnQxNng0X3QgX19yZXYxXzE0OTsgIF9fcmV2MV8xNDkgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxXzE0OSwgX19zMV8xNDksIDMsIDIsIDEsIDApOyBcCi0gIGludDE2X3QgX19yZXRfMTQ5OyBcCi0gIF9fcmV0XzE0OSA9IF9fbm9zd2FwX3ZxZG11bGhoX3MxNihfX3MwXzE0OSwgX19ub3N3YXBfdmdldF9sYW5lX3MxNihfX3JldjFfMTQ5LCBfX3AyXzE0OSkpOyBcCi0gIF9fcmV0XzE0OTsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnFkbXVsaHNfbGFuZXFfczMyKF9fcDBfMTUwLCBfX3AxXzE1MCwgX19wMl8xNTApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQzMl90IF9fczBfMTUwID0gX19wMF8xNTA7IFwKLSAgaW50MzJ4NF90IF9fczFfMTUwID0gX19wMV8xNTA7IFwKLSAgaW50MzJfdCBfX3JldF8xNTA7IFwKLSAgX19yZXRfMTUwID0gdnFkbXVsaHNfczMyKF9fczBfMTUwLCB2Z2V0cV9sYW5lX3MzMihfX3MxXzE1MCwgX19wMl8xNTApKTsgXAotICBfX3JldF8xNTA7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2cWRtdWxoc19sYW5lcV9zMzIoX19wMF8xNTEsIF9fcDFfMTUxLCBfX3AyXzE1MSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDMyX3QgX19zMF8xNTEgPSBfX3AwXzE1MTsgXAotICBpbnQzMng0X3QgX19zMV8xNTEgPSBfX3AxXzE1MTsgXAotICBpbnQzMng0X3QgX19yZXYxXzE1MTsgIF9fcmV2MV8xNTEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxXzE1MSwgX19zMV8xNTEsIDMsIDIsIDEsIDApOyBcCi0gIGludDMyX3QgX19yZXRfMTUxOyBcCi0gIF9fcmV0XzE1MSA9IF9fbm9zd2FwX3ZxZG11bGhzX3MzMihfX3MwXzE1MSwgX19ub3N3YXBfdmdldHFfbGFuZV9zMzIoX19yZXYxXzE1MSwgX19wMl8xNTEpKTsgXAotICBfX3JldF8xNTE7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZxZG11bGhoX2xhbmVxX3MxNihfX3AwXzE1MiwgX19wMV8xNTIsIF9fcDJfMTUyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MTZfdCBfX3MwXzE1MiA9IF9fcDBfMTUyOyBcCi0gIGludDE2eDhfdCBfX3MxXzE1MiA9IF9fcDFfMTUyOyBcCi0gIGludDE2X3QgX19yZXRfMTUyOyBcCi0gIF9fcmV0XzE1MiA9IHZxZG11bGhoX3MxNihfX3MwXzE1MiwgdmdldHFfbGFuZV9zMTYoX19zMV8xNTIsIF9fcDJfMTUyKSk7IFwKLSAgX19yZXRfMTUyOyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnFkbXVsaGhfbGFuZXFfczE2KF9fcDBfMTUzLCBfX3AxXzE1MywgX19wMl8xNTMpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQxNl90IF9fczBfMTUzID0gX19wMF8xNTM7IFwKLSAgaW50MTZ4OF90IF9fczFfMTUzID0gX19wMV8xNTM7IFwKLSAgaW50MTZ4OF90IF9fcmV2MV8xNTM7ICBfX3JldjFfMTUzID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMV8xNTMsIF9fczFfMTUzLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBpbnQxNl90IF9fcmV0XzE1MzsgXAotICBfX3JldF8xNTMgPSBfX25vc3dhcF92cWRtdWxoaF9zMTYoX19zMF8xNTMsIF9fbm9zd2FwX3ZnZXRxX2xhbmVfczE2KF9fcmV2MV8xNTMsIF9fcDJfMTUzKSk7IFwKLSAgX19yZXRfMTUzOyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2cWRtdWxocV9sYW5lcV9zMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAotICBpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKLSAgaW50MzJ4NF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gdnFkbXVsaHFfczMyKF9fczAsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIpKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZxZG11bGhxX2xhbmVxX3MzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCi0gIGludDMyeDRfdCBfX3MxID0gX19wMTsgXAotICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKLSAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCi0gIGludDMyeDRfdCBfX3JldDsgXAotICBfX3JldCA9IF9fbm9zd2FwX3ZxZG11bGhxX3MzMihfX3JldjAsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MSwgX19yZXYxLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyKSk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2cWRtdWxocV9sYW5lcV9zMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDE2eDhfdCBfX3MwID0gX19wMDsgXAotICBpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKLSAgaW50MTZ4OF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gdnFkbXVsaHFfczE2KF9fczAsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIpKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZxZG11bGhxX2xhbmVxX3MxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCi0gIGludDE2eDhfdCBfX3MxID0gX19wMTsgXAotICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIGludDE2eDhfdCBfX3JldDsgXAotICBfX3JldCA9IF9fbm9zd2FwX3ZxZG11bGhxX3MxNihfX3JldjAsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MSwgX19yZXYxLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyKSk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2cWRtdWxoX2xhbmVxX3MzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCi0gIGludDMyeDRfdCBfX3MxID0gX19wMTsgXAotICBpbnQzMngyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSB2cWRtdWxoX3MzMihfX3MwLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCBfX3AyLCBfX3AyKSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2cWRtdWxoX2xhbmVxX3MzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCi0gIGludDMyeDRfdCBfX3MxID0gX19wMTsgXAotICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKLSAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCi0gIGludDMyeDJfdCBfX3JldDsgXAotICBfX3JldCA9IF9fbm9zd2FwX3ZxZG11bGhfczMyKF9fcmV2MCwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYxLCBfX3JldjEsIF9fcDIsIF9fcDIpKTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZxZG11bGhfbGFuZXFfczE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCi0gIGludDE2eDRfdCBfX3JldDsgXAotICBfX3JldCA9IHZxZG11bGhfczE2KF9fczAsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIpKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZxZG11bGhfbGFuZXFfczE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCi0gIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAotICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgaW50MTZ4NF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gX19ub3N3YXBfdnFkbXVsaF9zMTYoX19yZXYwLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjEsIF9fcmV2MSwgX19wMiwgX19wMiwgX19wMiwgX19wMikpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50NjRfdCB2cWRtdWxsc19zMzIoaW50MzJfdCBfX3AwLCBpbnQzMl90IF9fcDEpIHsKLSAgaW50NjRfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdnFkbXVsbHNfczMyKF9fcDAsIF9fcDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQ2NF90IHZxZG11bGxzX3MzMihpbnQzMl90IF9fcDAsIGludDMyX3QgX19wMSkgewotICBpbnQ2NF90IF9fcmV0OwotICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92cWRtdWxsc19zMzIoX19wMCwgX19wMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLV9fYWkgaW50NjRfdCBfX25vc3dhcF92cWRtdWxsc19zMzIoaW50MzJfdCBfX3AwLCBpbnQzMl90IF9fcDEpIHsKLSAgaW50NjRfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdnFkbXVsbHNfczMyKF9fcDAsIF9fcDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDMyX3QgdnFkbXVsbGhfczE2KGludDE2X3QgX19wMCwgaW50MTZfdCBfX3AxKSB7Ci0gIGludDMyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxZG11bGxoX3MxNihfX3AwLCBfX3AxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MzJfdCB2cWRtdWxsaF9zMTYoaW50MTZfdCBfX3AwLCBpbnQxNl90IF9fcDEpIHsKLSAgaW50MzJfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MzJfdCkgX19idWlsdGluX25lb25fdnFkbXVsbGhfczE2KF9fcDAsIF9fcDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci1fX2FpIGludDMyX3QgX19ub3N3YXBfdnFkbXVsbGhfczE2KGludDE2X3QgX19wMCwgaW50MTZfdCBfX3AxKSB7Ci0gIGludDMyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxZG11bGxoX3MxNihfX3AwLCBfX3AxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ2NHgyX3QgdnFkbXVsbF9oaWdoX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKLSAgaW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IHZxZG11bGxfczMyKHZnZXRfaGlnaF9zMzIoX19wMCksIHZnZXRfaGlnaF9zMzIoX19wMSkpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQ2NHgyX3QgdnFkbXVsbF9oaWdoX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKLSAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7Ci0gIGludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSBfX25vc3dhcF92cWRtdWxsX3MzMihfX25vc3dhcF92Z2V0X2hpZ2hfczMyKF9fcmV2MCksIF9fbm9zd2FwX3ZnZXRfaGlnaF9zMzIoX19yZXYxKSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQzMng0X3QgdnFkbXVsbF9oaWdoX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKLSAgaW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IHZxZG11bGxfczE2KHZnZXRfaGlnaF9zMTYoX19wMCksIHZnZXRfaGlnaF9zMTYoX19wMSkpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQzMng0X3QgdnFkbXVsbF9oaWdoX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKLSAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSBfX25vc3dhcF92cWRtdWxsX3MxNihfX25vc3dhcF92Z2V0X2hpZ2hfczE2KF9fcmV2MCksIF9fbm9zd2FwX3ZnZXRfaGlnaF9zMTYoX19yZXYxKSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2cWRtdWxsX2hpZ2hfbGFuZV9zMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAotICBpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKLSAgaW50NjR4Ml90IF9fcmV0OyBcCi0gIF9fcmV0ID0gdnFkbXVsbF9zMzIodmdldF9oaWdoX3MzMihfX3MwKSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgX19wMiwgX19wMikpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnFkbXVsbF9oaWdoX2xhbmVfczMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCi0gIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAotICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMSwgMCk7IFwKLSAgaW50NjR4Ml90IF9fcmV0OyBcCi0gIF9fcmV0ID0gX19ub3N3YXBfdnFkbXVsbF9zMzIoX19ub3N3YXBfdmdldF9oaWdoX3MzMihfX3JldjApLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjEsIF9fcmV2MSwgX19wMiwgX19wMikpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnFkbXVsbF9oaWdoX2xhbmVfczE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCi0gIGludDMyeDRfdCBfX3JldDsgXAotICBfX3JldCA9IHZxZG11bGxfczE2KHZnZXRfaGlnaF9zMTYoX19zMCksIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIpKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZxZG11bGxfaGlnaF9sYW5lX3MxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCi0gIGludDE2eDRfdCBfX3MxID0gX19wMTsgXAotICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCi0gIGludDMyeDRfdCBfX3JldDsgXAotICBfX3JldCA9IF9fbm9zd2FwX3ZxZG11bGxfczE2KF9fbm9zd2FwX3ZnZXRfaGlnaF9zMTYoX19yZXYwKSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYxLCBfX3JldjEsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIpKTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZxZG11bGxfaGlnaF9sYW5lcV9zMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAotICBpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKLSAgaW50NjR4Ml90IF9fcmV0OyBcCi0gIF9fcmV0ID0gdnFkbXVsbF9zMzIodmdldF9oaWdoX3MzMihfX3MwKSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgX19wMiwgX19wMikpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnFkbXVsbF9oaWdoX2xhbmVxX3MzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCi0gIGludDMyeDRfdCBfX3MxID0gX19wMTsgXAotICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKLSAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCi0gIGludDY0eDJfdCBfX3JldDsgXAotICBfX3JldCA9IF9fbm9zd2FwX3ZxZG11bGxfczMyKF9fbm9zd2FwX3ZnZXRfaGlnaF9zMzIoX19yZXYwKSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYxLCBfX3JldjEsIF9fcDIsIF9fcDIpKTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZxZG11bGxfaGlnaF9sYW5lcV9zMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDE2eDhfdCBfX3MwID0gX19wMDsgXAotICBpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKLSAgaW50MzJ4NF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gdnFkbXVsbF9zMTYodmdldF9oaWdoX3MxNihfX3MwKSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgX19wMiwgX19wMiwgX19wMiwgX19wMikpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnFkbXVsbF9oaWdoX2xhbmVxX3MxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCi0gIGludDE2eDhfdCBfX3MxID0gX19wMTsgXAotICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIGludDMyeDRfdCBfX3JldDsgXAotICBfX3JldCA9IF9fbm9zd2FwX3ZxZG11bGxfczE2KF9fbm9zd2FwX3ZnZXRfaGlnaF9zMTYoX19yZXYwKSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYxLCBfX3JldjEsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIpKTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDY0eDJfdCB2cWRtdWxsX2hpZ2hfbl9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyX3QgX19wMSkgewotICBpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gdnFkbXVsbF9uX3MzMih2Z2V0X2hpZ2hfczMyKF9fcDApLCBfX3AxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50NjR4Ml90IHZxZG11bGxfaGlnaF9uX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJfdCBfX3AxKSB7Ci0gIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgaW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IF9fbm9zd2FwX3ZxZG11bGxfbl9zMzIoX19ub3N3YXBfdmdldF9oaWdoX3MzMihfX3JldjApLCBfX3AxKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDMyeDRfdCB2cWRtdWxsX2hpZ2hfbl9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2X3QgX19wMSkgewotICBpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gdnFkbXVsbF9uX3MxNih2Z2V0X2hpZ2hfczE2KF9fcDApLCBfX3AxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MzJ4NF90IHZxZG11bGxfaGlnaF9uX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZfdCBfX3AxKSB7Ci0gIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IF9fbm9zd2FwX3ZxZG11bGxfbl9zMTYoX19ub3N3YXBfdmdldF9oaWdoX3MxNihfX3JldjApLCBfX3AxKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZxZG11bGxzX2xhbmVfczMyKF9fcDBfMTU0LCBfX3AxXzE1NCwgX19wMl8xNTQpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQzMl90IF9fczBfMTU0ID0gX19wMF8xNTQ7IFwKLSAgaW50MzJ4Ml90IF9fczFfMTU0ID0gX19wMV8xNTQ7IFwKLSAgaW50NjRfdCBfX3JldF8xNTQ7IFwKLSAgX19yZXRfMTU0ID0gdnFkbXVsbHNfczMyKF9fczBfMTU0LCB2Z2V0X2xhbmVfczMyKF9fczFfMTU0LCBfX3AyXzE1NCkpOyBcCi0gIF9fcmV0XzE1NDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZxZG11bGxzX2xhbmVfczMyKF9fcDBfMTU1LCBfX3AxXzE1NSwgX19wMl8xNTUpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQzMl90IF9fczBfMTU1ID0gX19wMF8xNTU7IFwKLSAgaW50MzJ4Ml90IF9fczFfMTU1ID0gX19wMV8xNTU7IFwKLSAgaW50MzJ4Ml90IF9fcmV2MV8xNTU7ICBfX3JldjFfMTU1ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMV8xNTUsIF9fczFfMTU1LCAxLCAwKTsgXAotICBpbnQ2NF90IF9fcmV0XzE1NTsgXAotICBfX3JldF8xNTUgPSBfX25vc3dhcF92cWRtdWxsc19zMzIoX19zMF8xNTUsIF9fbm9zd2FwX3ZnZXRfbGFuZV9zMzIoX19yZXYxXzE1NSwgX19wMl8xNTUpKTsgXAotICBfX3JldF8xNTU7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZxZG11bGxoX2xhbmVfczE2KF9fcDBfMTU2LCBfX3AxXzE1NiwgX19wMl8xNTYpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQxNl90IF9fczBfMTU2ID0gX19wMF8xNTY7IFwKLSAgaW50MTZ4NF90IF9fczFfMTU2ID0gX19wMV8xNTY7IFwKLSAgaW50MzJfdCBfX3JldF8xNTY7IFwKLSAgX19yZXRfMTU2ID0gdnFkbXVsbGhfczE2KF9fczBfMTU2LCB2Z2V0X2xhbmVfczE2KF9fczFfMTU2LCBfX3AyXzE1NikpOyBcCi0gIF9fcmV0XzE1NjsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZxZG11bGxoX2xhbmVfczE2KF9fcDBfMTU3LCBfX3AxXzE1NywgX19wMl8xNTcpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQxNl90IF9fczBfMTU3ID0gX19wMF8xNTc7IFwKLSAgaW50MTZ4NF90IF9fczFfMTU3ID0gX19wMV8xNTc7IFwKLSAgaW50MTZ4NF90IF9fcmV2MV8xNTc7ICBfX3JldjFfMTU3ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMV8xNTcsIF9fczFfMTU3LCAzLCAyLCAxLCAwKTsgXAotICBpbnQzMl90IF9fcmV0XzE1NzsgXAotICBfX3JldF8xNTcgPSBfX25vc3dhcF92cWRtdWxsaF9zMTYoX19zMF8xNTcsIF9fbm9zd2FwX3ZnZXRfbGFuZV9zMTYoX19yZXYxXzE1NywgX19wMl8xNTcpKTsgXAotICBfX3JldF8xNTc7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZxZG11bGxzX2xhbmVxX3MzMihfX3AwXzE1OCwgX19wMV8xNTgsIF9fcDJfMTU4KSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MzJfdCBfX3MwXzE1OCA9IF9fcDBfMTU4OyBcCi0gIGludDMyeDRfdCBfX3MxXzE1OCA9IF9fcDFfMTU4OyBcCi0gIGludDY0X3QgX19yZXRfMTU4OyBcCi0gIF9fcmV0XzE1OCA9IHZxZG11bGxzX3MzMihfX3MwXzE1OCwgdmdldHFfbGFuZV9zMzIoX19zMV8xNTgsIF9fcDJfMTU4KSk7IFwKLSAgX19yZXRfMTU4OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnFkbXVsbHNfbGFuZXFfczMyKF9fcDBfMTU5LCBfX3AxXzE1OSwgX19wMl8xNTkpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQzMl90IF9fczBfMTU5ID0gX19wMF8xNTk7IFwKLSAgaW50MzJ4NF90IF9fczFfMTU5ID0gX19wMV8xNTk7IFwKLSAgaW50MzJ4NF90IF9fcmV2MV8xNTk7ICBfX3JldjFfMTU5ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMV8xNTksIF9fczFfMTU5LCAzLCAyLCAxLCAwKTsgXAotICBpbnQ2NF90IF9fcmV0XzE1OTsgXAotICBfX3JldF8xNTkgPSBfX25vc3dhcF92cWRtdWxsc19zMzIoX19zMF8xNTksIF9fbm9zd2FwX3ZnZXRxX2xhbmVfczMyKF9fcmV2MV8xNTksIF9fcDJfMTU5KSk7IFwKLSAgX19yZXRfMTU5OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2cWRtdWxsaF9sYW5lcV9zMTYoX19wMF8xNjAsIF9fcDFfMTYwLCBfX3AyXzE2MCkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDE2X3QgX19zMF8xNjAgPSBfX3AwXzE2MDsgXAotICBpbnQxNng4X3QgX19zMV8xNjAgPSBfX3AxXzE2MDsgXAotICBpbnQzMl90IF9fcmV0XzE2MDsgXAotICBfX3JldF8xNjAgPSB2cWRtdWxsaF9zMTYoX19zMF8xNjAsIHZnZXRxX2xhbmVfczE2KF9fczFfMTYwLCBfX3AyXzE2MCkpOyBcCi0gIF9fcmV0XzE2MDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZxZG11bGxoX2xhbmVxX3MxNihfX3AwXzE2MSwgX19wMV8xNjEsIF9fcDJfMTYxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MTZfdCBfX3MwXzE2MSA9IF9fcDBfMTYxOyBcCi0gIGludDE2eDhfdCBfX3MxXzE2MSA9IF9fcDFfMTYxOyBcCi0gIGludDE2eDhfdCBfX3JldjFfMTYxOyAgX19yZXYxXzE2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczFfMTYxLCBfX3MxXzE2MSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgaW50MzJfdCBfX3JldF8xNjE7IFwKLSAgX19yZXRfMTYxID0gX19ub3N3YXBfdnFkbXVsbGhfczE2KF9fczBfMTYxLCBfX25vc3dhcF92Z2V0cV9sYW5lX3MxNihfX3JldjFfMTYxLCBfX3AyXzE2MSkpOyBcCi0gIF9fcmV0XzE2MTsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnFkbXVsbF9sYW5lcV9zMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDMyeDJfdCBfX3MwID0gX19wMDsgXAotICBpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKLSAgaW50NjR4Ml90IF9fcmV0OyBcCi0gIF9fcmV0ID0gdnFkbXVsbF9zMzIoX19zMCwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgX19wMiwgX19wMikpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnFkbXVsbF9sYW5lcV9zMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDMyeDJfdCBfX3MwID0gX19wMDsgXAotICBpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKLSAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCi0gIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAotICBpbnQ2NHgyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSBfX25vc3dhcF92cWRtdWxsX3MzMihfX3JldjAsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MSwgX19yZXYxLCBfX3AyLCBfX3AyKSk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2cWRtdWxsX2xhbmVxX3MxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCi0gIGludDE2eDhfdCBfX3MxID0gX19wMTsgXAotICBpbnQzMng0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSB2cWRtdWxsX3MxNihfX3MwLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyKSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2cWRtdWxsX2xhbmVxX3MxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCi0gIGludDE2eDhfdCBfX3MxID0gX19wMTsgXAotICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKLSAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIGludDMyeDRfdCBfX3JldDsgXAotICBfX3JldCA9IF9fbm9zd2FwX3ZxZG11bGxfczE2KF9fcmV2MCwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYxLCBfX3JldjEsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIpKTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDE2X3QgdnFtb3Zuc19zMzIoaW50MzJfdCBfX3AwKSB7Ci0gIGludDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZxbW92bnNfczMyKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQxNl90IHZxbW92bnNfczMyKGludDMyX3QgX19wMCkgewotICBpbnQxNl90IF9fcmV0OwotICBfX3JldCA9IChpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92cW1vdm5zX3MzMihfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQzMl90IHZxbW92bmRfczY0KGludDY0X3QgX19wMCkgewotICBpbnQzMl90IF9fcmV0OwotICBfX3JldCA9IChpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92cW1vdm5kX3M2NChfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MzJfdCB2cW1vdm5kX3M2NChpbnQ2NF90IF9fcDApIHsKLSAgaW50MzJfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MzJfdCkgX19idWlsdGluX25lb25fdnFtb3ZuZF9zNjQoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50OF90IHZxbW92bmhfczE2KGludDE2X3QgX19wMCkgewotICBpbnQ4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDhfdCkgX19idWlsdGluX25lb25fdnFtb3ZuaF9zMTYoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDhfdCB2cW1vdm5oX3MxNihpbnQxNl90IF9fcDApIHsKLSAgaW50OF90IF9fcmV0OwotICBfX3JldCA9IChpbnQ4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxbW92bmhfczE2KF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQxNl90IHZxbW92bnNfdTMyKHVpbnQzMl90IF9fcDApIHsKLSAgdWludDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92cW1vdm5zX3UzMihfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDE2X3QgdnFtb3Zuc191MzIodWludDMyX3QgX19wMCkgewotICB1aW50MTZfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZxbW92bnNfdTMyKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQzMl90IHZxbW92bmRfdTY0KHVpbnQ2NF90IF9fcDApIHsKLSAgdWludDMyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92cW1vdm5kX3U2NChfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDMyX3QgdnFtb3ZuZF91NjQodWludDY0X3QgX19wMCkgewotICB1aW50MzJfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxbW92bmRfdTY0KF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ4X3QgdnFtb3ZuaF91MTYodWludDE2X3QgX19wMCkgewotICB1aW50OF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50OF90KSBfX2J1aWx0aW5fbmVvbl92cW1vdm5oX3UxNihfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDhfdCB2cW1vdm5oX3UxNih1aW50MTZfdCBfX3AwKSB7Ci0gIHVpbnQ4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxbW92bmhfdTE2KF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQxNng4X3QgdnFtb3ZuX2hpZ2hfdTMyKHVpbnQxNng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7Ci0gIHVpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gdmNvbWJpbmVfdTE2KF9fcDAsIHZxbW92bl91MzIoX19wMSkpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MTZ4OF90IHZxbW92bl9oaWdoX3UzMih1aW50MTZ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgewotICB1aW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICB1aW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOwotICB1aW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IF9fbm9zd2FwX3Zjb21iaW5lX3UxNihfX3JldjAsIF9fbm9zd2FwX3ZxbW92bl91MzIoX19yZXYxKSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MzJ4NF90IHZxbW92bl9oaWdoX3U2NCh1aW50MzJ4Ml90IF9fcDAsIHVpbnQ2NHgyX3QgX19wMSkgewotICB1aW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IHZjb21iaW5lX3UzMihfX3AwLCB2cW1vdm5fdTY0KF9fcDEpKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDMyeDRfdCB2cW1vdm5faGlnaF91NjQodWludDMyeDJfdCBfX3AwLCB1aW50NjR4Ml90IF9fcDEpIHsKLSAgdWludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgdWludDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKLSAgdWludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSBfX25vc3dhcF92Y29tYmluZV91MzIoX19yZXYwLCBfX25vc3dhcF92cW1vdm5fdTY0KF9fcmV2MSkpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDh4MTZfdCB2cW1vdm5faGlnaF91MTYodWludDh4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSkgewotICB1aW50OHgxNl90IF9fcmV0OwotICBfX3JldCA9IHZjb21iaW5lX3U4KF9fcDAsIHZxbW92bl91MTYoX19wMSkpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50OHgxNl90IHZxbW92bl9oaWdoX3UxNih1aW50OHg4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxKSB7Ci0gIHVpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSBfX25vc3dhcF92Y29tYmluZV91OChfX3JldjAsIF9fbm9zd2FwX3ZxbW92bl91MTYoX19yZXYxKSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQxNng4X3QgdnFtb3ZuX2hpZ2hfczMyKGludDE2eDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgewotICBpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gdmNvbWJpbmVfczE2KF9fcDAsIHZxbW92bl9zMzIoX19wMSkpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQxNng4X3QgdnFtb3ZuX2hpZ2hfczMyKGludDE2eDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgewotICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKLSAgaW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IF9fbm9zd2FwX3Zjb21iaW5lX3MxNihfX3JldjAsIF9fbm9zd2FwX3ZxbW92bl9zMzIoX19yZXYxKSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQzMng0X3QgdnFtb3ZuX2hpZ2hfczY0KGludDMyeDJfdCBfX3AwLCBpbnQ2NHgyX3QgX19wMSkgewotICBpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gdmNvbWJpbmVfczMyKF9fcDAsIHZxbW92bl9zNjQoX19wMSkpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQzMng0X3QgdnFtb3ZuX2hpZ2hfczY0KGludDMyeDJfdCBfX3AwLCBpbnQ2NHgyX3QgX19wMSkgewotICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIGludDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKLSAgaW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IF9fbm9zd2FwX3Zjb21iaW5lX3MzMihfX3JldjAsIF9fbm9zd2FwX3ZxbW92bl9zNjQoX19yZXYxKSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ4eDE2X3QgdnFtb3ZuX2hpZ2hfczE2KGludDh4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7Ci0gIGludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSB2Y29tYmluZV9zOChfX3AwLCB2cW1vdm5fczE2KF9fcDEpKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50OHgxNl90IHZxbW92bl9oaWdoX3MxNihpbnQ4eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgewotICBpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQ4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19ub3N3YXBfdmNvbWJpbmVfczgoX19yZXYwLCBfX25vc3dhcF92cW1vdm5fczE2KF9fcmV2MSkpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MTZfdCB2cW1vdnVuc19zMzIoaW50MzJfdCBfX3AwKSB7Ci0gIGludDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZxbW92dW5zX3MzMihfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MTZfdCB2cW1vdnVuc19zMzIoaW50MzJfdCBfX3AwKSB7Ci0gIGludDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZxbW92dW5zX3MzMihfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQzMl90IHZxbW92dW5kX3M2NChpbnQ2NF90IF9fcDApIHsKLSAgaW50MzJfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MzJfdCkgX19idWlsdGluX25lb25fdnFtb3Z1bmRfczY0KF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQzMl90IHZxbW92dW5kX3M2NChpbnQ2NF90IF9fcDApIHsKLSAgaW50MzJfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MzJfdCkgX19idWlsdGluX25lb25fdnFtb3Z1bmRfczY0KF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDhfdCB2cW1vdnVuaF9zMTYoaW50MTZfdCBfX3AwKSB7Ci0gIGludDhfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50OF90KSBfX2J1aWx0aW5fbmVvbl92cW1vdnVuaF9zMTYoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDhfdCB2cW1vdnVuaF9zMTYoaW50MTZfdCBfX3AwKSB7Ci0gIGludDhfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50OF90KSBfX2J1aWx0aW5fbmVvbl92cW1vdnVuaF9zMTYoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MTZ4OF90IHZxbW92dW5faGlnaF9zMzIoaW50MTZ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7Ci0gIGludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSB2Y29tYmluZV91MTYoKHVpbnQxNng0X3QpKF9fcDApLCB2cW1vdnVuX3MzMihfX3AxKSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDE2eDhfdCB2cW1vdnVuX2hpZ2hfczMyKGludDE2eDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgewotICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKLSAgaW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IF9fbm9zd2FwX3Zjb21iaW5lX3UxNigodWludDE2eDRfdCkoX19yZXYwKSwgX19ub3N3YXBfdnFtb3Z1bl9zMzIoX19yZXYxKSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQzMng0X3QgdnFtb3Z1bl9oaWdoX3M2NChpbnQzMngyX3QgX19wMCwgaW50NjR4Ml90IF9fcDEpIHsKLSAgaW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IHZjb21iaW5lX3UzMigodWludDMyeDJfdCkoX19wMCksIHZxbW92dW5fczY0KF9fcDEpKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MzJ4NF90IHZxbW92dW5faGlnaF9zNjQoaW50MzJ4Ml90IF9fcDAsIGludDY0eDJfdCBfX3AxKSB7Ci0gIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgaW50NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOwotICBpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19ub3N3YXBfdmNvbWJpbmVfdTMyKCh1aW50MzJ4Ml90KShfX3JldjApLCBfX25vc3dhcF92cW1vdnVuX3M2NChfX3JldjEpKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDh4MTZfdCB2cW1vdnVuX2hpZ2hfczE2KGludDh4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7Ci0gIGludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSB2Y29tYmluZV91OCgodWludDh4OF90KShfX3AwKSwgdnFtb3Z1bl9zMTYoX19wMSkpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQ4eDE2X3QgdnFtb3Z1bl9oaWdoX3MxNihpbnQ4eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgewotICBpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQ4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19ub3N3YXBfdmNvbWJpbmVfdTgoKHVpbnQ4eDhfdCkoX19yZXYwKSwgX19ub3N3YXBfdnFtb3Z1bl9zMTYoX19yZXYxKSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ2NHgyX3QgdnFuZWdxX3M2NChpbnQ2NHgyX3QgX19wMCkgewotICBpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDY0eDJfdCkgX19idWlsdGluX25lb25fdnFuZWdxX3YoKGludDh4MTZfdClfX3AwLCAzNSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDY0eDJfdCB2cW5lZ3FfczY0KGludDY0eDJfdCBfX3AwKSB7Ci0gIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgaW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxbmVncV92KChpbnQ4eDE2X3QpX19yZXYwLCAzNSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ2NHgxX3QgdnFuZWdfczY0KGludDY0eDFfdCBfX3AwKSB7Ci0gIGludDY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92cW5lZ192KChpbnQ4eDhfdClfX3AwLCAzKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50NjR4MV90IHZxbmVnX3M2NChpbnQ2NHgxX3QgX19wMCkgewotICBpbnQ2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDY0eDFfdCkgX19idWlsdGluX25lb25fdnFuZWdfdigoaW50OHg4X3QpX19wMCwgMyk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50OF90IHZxbmVnYl9zOChpbnQ4X3QgX19wMCkgewotICBpbnQ4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDhfdCkgX19idWlsdGluX25lb25fdnFuZWdiX3M4KF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQ4X3QgdnFuZWdiX3M4KGludDhfdCBfX3AwKSB7Ci0gIGludDhfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50OF90KSBfX2J1aWx0aW5fbmVvbl92cW5lZ2JfczgoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MzJfdCB2cW5lZ3NfczMyKGludDMyX3QgX19wMCkgewotICBpbnQzMl90IF9fcmV0OwotICBfX3JldCA9IChpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92cW5lZ3NfczMyKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQzMl90IHZxbmVnc19zMzIoaW50MzJfdCBfX3AwKSB7Ci0gIGludDMyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxbmVnc19zMzIoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50NjRfdCB2cW5lZ2RfczY0KGludDY0X3QgX19wMCkgewotICBpbnQ2NF90IF9fcmV0OwotICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92cW5lZ2RfczY0KF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQ2NF90IHZxbmVnZF9zNjQoaW50NjRfdCBfX3AwKSB7Ci0gIGludDY0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZxbmVnZF9zNjQoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MTZfdCB2cW5lZ2hfczE2KGludDE2X3QgX19wMCkgewotICBpbnQxNl90IF9fcmV0OwotICBfX3JldCA9IChpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92cW5lZ2hfczE2KF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQxNl90IHZxbmVnaF9zMTYoaW50MTZfdCBfX3AwKSB7Ci0gIGludDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZxbmVnaF9zMTYoX19wMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MzJfdCB2cXJkbXVsaHNfczMyKGludDMyX3QgX19wMCwgaW50MzJfdCBfX3AxKSB7Ci0gIGludDMyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxcmRtdWxoc19zMzIoX19wMCwgX19wMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDMyX3QgdnFyZG11bGhzX3MzMihpbnQzMl90IF9fcDAsIGludDMyX3QgX19wMSkgewotICBpbnQzMl90IF9fcmV0OwotICBfX3JldCA9IChpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92cXJkbXVsaHNfczMyKF9fcDAsIF9fcDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci1fX2FpIGludDMyX3QgX19ub3N3YXBfdnFyZG11bGhzX3MzMihpbnQzMl90IF9fcDAsIGludDMyX3QgX19wMSkgewotICBpbnQzMl90IF9fcmV0OwotICBfX3JldCA9IChpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92cXJkbXVsaHNfczMyKF9fcDAsIF9fcDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDE2X3QgdnFyZG11bGhoX3MxNihpbnQxNl90IF9fcDAsIGludDE2X3QgX19wMSkgewotICBpbnQxNl90IF9fcmV0OwotICBfX3JldCA9IChpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92cXJkbXVsaGhfczE2KF9fcDAsIF9fcDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQxNl90IHZxcmRtdWxoaF9zMTYoaW50MTZfdCBfX3AwLCBpbnQxNl90IF9fcDEpIHsKLSAgaW50MTZfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MTZfdCkgX19idWlsdGluX25lb25fdnFyZG11bGhoX3MxNihfX3AwLCBfX3AxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotX19haSBpbnQxNl90IF9fbm9zd2FwX3ZxcmRtdWxoaF9zMTYoaW50MTZfdCBfX3AwLCBpbnQxNl90IF9fcDEpIHsKLSAgaW50MTZfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MTZfdCkgX19idWlsdGluX25lb25fdnFyZG11bGhoX3MxNihfX3AwLCBfX3AxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2cXJkbXVsaHNfbGFuZV9zMzIoX19wMF8xNjIsIF9fcDFfMTYyLCBfX3AyXzE2MikgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDMyX3QgX19zMF8xNjIgPSBfX3AwXzE2MjsgXAotICBpbnQzMngyX3QgX19zMV8xNjIgPSBfX3AxXzE2MjsgXAotICBpbnQzMl90IF9fcmV0XzE2MjsgXAotICBfX3JldF8xNjIgPSB2cXJkbXVsaHNfczMyKF9fczBfMTYyLCB2Z2V0X2xhbmVfczMyKF9fczFfMTYyLCBfX3AyXzE2MikpOyBcCi0gIF9fcmV0XzE2MjsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZxcmRtdWxoc19sYW5lX3MzMihfX3AwXzE2MywgX19wMV8xNjMsIF9fcDJfMTYzKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MzJfdCBfX3MwXzE2MyA9IF9fcDBfMTYzOyBcCi0gIGludDMyeDJfdCBfX3MxXzE2MyA9IF9fcDFfMTYzOyBcCi0gIGludDMyeDJfdCBfX3JldjFfMTYzOyAgX19yZXYxXzE2MyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczFfMTYzLCBfX3MxXzE2MywgMSwgMCk7IFwKLSAgaW50MzJfdCBfX3JldF8xNjM7IFwKLSAgX19yZXRfMTYzID0gX19ub3N3YXBfdnFyZG11bGhzX3MzMihfX3MwXzE2MywgX19ub3N3YXBfdmdldF9sYW5lX3MzMihfX3JldjFfMTYzLCBfX3AyXzE2MykpOyBcCi0gIF9fcmV0XzE2MzsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnFyZG11bGhoX2xhbmVfczE2KF9fcDBfMTY0LCBfX3AxXzE2NCwgX19wMl8xNjQpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQxNl90IF9fczBfMTY0ID0gX19wMF8xNjQ7IFwKLSAgaW50MTZ4NF90IF9fczFfMTY0ID0gX19wMV8xNjQ7IFwKLSAgaW50MTZfdCBfX3JldF8xNjQ7IFwKLSAgX19yZXRfMTY0ID0gdnFyZG11bGhoX3MxNihfX3MwXzE2NCwgdmdldF9sYW5lX3MxNihfX3MxXzE2NCwgX19wMl8xNjQpKTsgXAotICBfX3JldF8xNjQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2cXJkbXVsaGhfbGFuZV9zMTYoX19wMF8xNjUsIF9fcDFfMTY1LCBfX3AyXzE2NSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDE2X3QgX19zMF8xNjUgPSBfX3AwXzE2NTsgXAotICBpbnQxNng0X3QgX19zMV8xNjUgPSBfX3AxXzE2NTsgXAotICBpbnQxNng0X3QgX19yZXYxXzE2NTsgIF9fcmV2MV8xNjUgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxXzE2NSwgX19zMV8xNjUsIDMsIDIsIDEsIDApOyBcCi0gIGludDE2X3QgX19yZXRfMTY1OyBcCi0gIF9fcmV0XzE2NSA9IF9fbm9zd2FwX3ZxcmRtdWxoaF9zMTYoX19zMF8xNjUsIF9fbm9zd2FwX3ZnZXRfbGFuZV9zMTYoX19yZXYxXzE2NSwgX19wMl8xNjUpKTsgXAotICBfX3JldF8xNjU7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZxcmRtdWxoc19sYW5lcV9zMzIoX19wMF8xNjYsIF9fcDFfMTY2LCBfX3AyXzE2NikgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDMyX3QgX19zMF8xNjYgPSBfX3AwXzE2NjsgXAotICBpbnQzMng0X3QgX19zMV8xNjYgPSBfX3AxXzE2NjsgXAotICBpbnQzMl90IF9fcmV0XzE2NjsgXAotICBfX3JldF8xNjYgPSB2cXJkbXVsaHNfczMyKF9fczBfMTY2LCB2Z2V0cV9sYW5lX3MzMihfX3MxXzE2NiwgX19wMl8xNjYpKTsgXAotICBfX3JldF8xNjY7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2cXJkbXVsaHNfbGFuZXFfczMyKF9fcDBfMTY3LCBfX3AxXzE2NywgX19wMl8xNjcpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQzMl90IF9fczBfMTY3ID0gX19wMF8xNjc7IFwKLSAgaW50MzJ4NF90IF9fczFfMTY3ID0gX19wMV8xNjc7IFwKLSAgaW50MzJ4NF90IF9fcmV2MV8xNjc7ICBfX3JldjFfMTY3ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMV8xNjcsIF9fczFfMTY3LCAzLCAyLCAxLCAwKTsgXAotICBpbnQzMl90IF9fcmV0XzE2NzsgXAotICBfX3JldF8xNjcgPSBfX25vc3dhcF92cXJkbXVsaHNfczMyKF9fczBfMTY3LCBfX25vc3dhcF92Z2V0cV9sYW5lX3MzMihfX3JldjFfMTY3LCBfX3AyXzE2NykpOyBcCi0gIF9fcmV0XzE2NzsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnFyZG11bGhoX2xhbmVxX3MxNihfX3AwXzE2OCwgX19wMV8xNjgsIF9fcDJfMTY4KSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MTZfdCBfX3MwXzE2OCA9IF9fcDBfMTY4OyBcCi0gIGludDE2eDhfdCBfX3MxXzE2OCA9IF9fcDFfMTY4OyBcCi0gIGludDE2X3QgX19yZXRfMTY4OyBcCi0gIF9fcmV0XzE2OCA9IHZxcmRtdWxoaF9zMTYoX19zMF8xNjgsIHZnZXRxX2xhbmVfczE2KF9fczFfMTY4LCBfX3AyXzE2OCkpOyBcCi0gIF9fcmV0XzE2ODsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZxcmRtdWxoaF9sYW5lcV9zMTYoX19wMF8xNjksIF9fcDFfMTY5LCBfX3AyXzE2OSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDE2X3QgX19zMF8xNjkgPSBfX3AwXzE2OTsgXAotICBpbnQxNng4X3QgX19zMV8xNjkgPSBfX3AxXzE2OTsgXAotICBpbnQxNng4X3QgX19yZXYxXzE2OTsgIF9fcmV2MV8xNjkgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxXzE2OSwgX19zMV8xNjksIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIGludDE2X3QgX19yZXRfMTY5OyBcCi0gIF9fcmV0XzE2OSA9IF9fbm9zd2FwX3ZxcmRtdWxoaF9zMTYoX19zMF8xNjksIF9fbm9zd2FwX3ZnZXRxX2xhbmVfczE2KF9fcmV2MV8xNjksIF9fcDJfMTY5KSk7IFwKLSAgX19yZXRfMTY5OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2cXJkbXVsaHFfbGFuZXFfczMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCi0gIGludDMyeDRfdCBfX3JldDsgXAotICBfX3JldCA9IHZxcmRtdWxocV9zMzIoX19zMCwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgX19wMiwgX19wMiwgX19wMiwgX19wMikpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnFyZG11bGhxX2xhbmVxX3MzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCi0gIGludDMyeDRfdCBfX3MxID0gX19wMTsgXAotICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKLSAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCi0gIGludDMyeDRfdCBfX3JldDsgXAotICBfX3JldCA9IF9fbm9zd2FwX3ZxcmRtdWxocV9zMzIoX19yZXYwLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjEsIF9fcmV2MSwgX19wMiwgX19wMiwgX19wMiwgX19wMikpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnFyZG11bGhxX2xhbmVxX3MxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCi0gIGludDE2eDhfdCBfX3MxID0gX19wMTsgXAotICBpbnQxNng4X3QgX19yZXQ7IFwKLSAgX19yZXQgPSB2cXJkbXVsaHFfczE2KF9fczAsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIpKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZxcmRtdWxocV9sYW5lcV9zMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDE2eDhfdCBfX3MwID0gX19wMDsgXAotICBpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKLSAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBpbnQxNng4X3QgX19yZXQ7IFwKLSAgX19yZXQgPSBfX25vc3dhcF92cXJkbXVsaHFfczE2KF9fcmV2MCwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYxLCBfX3JldjEsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIpKTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZxcmRtdWxoX2xhbmVxX3MzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCi0gIGludDMyeDRfdCBfX3MxID0gX19wMTsgXAotICBpbnQzMngyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSB2cXJkbXVsaF9zMzIoX19zMCwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgX19wMiwgX19wMikpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnFyZG11bGhfbGFuZXFfczMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCi0gIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAotICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKLSAgaW50MzJ4Ml90IF9fcmV0OyBcCi0gIF9fcmV0ID0gX19ub3N3YXBfdnFyZG11bGhfczMyKF9fcmV2MCwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYxLCBfX3JldjEsIF9fcDIsIF9fcDIpKTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZxcmRtdWxoX2xhbmVxX3MxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCi0gIGludDE2eDhfdCBfX3MxID0gX19wMTsgXAotICBpbnQxNng0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSB2cXJkbXVsaF9zMTYoX19zMCwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgX19wMiwgX19wMiwgX19wMiwgX19wMikpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnFyZG11bGhfbGFuZXFfczE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCi0gIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAotICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgaW50MTZ4NF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gX19ub3N3YXBfdnFyZG11bGhfczE2KF9fcmV2MCwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYxLCBfX3JldjEsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIpKTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ4X3QgdnFyc2hsYl91OCh1aW50OF90IF9fcDAsIHVpbnQ4X3QgX19wMSkgewotICB1aW50OF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50OF90KSBfX2J1aWx0aW5fbmVvbl92cXJzaGxiX3U4KF9fcDAsIF9fcDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50OF90IHZxcnNobGJfdTgodWludDhfdCBfX3AwLCB1aW50OF90IF9fcDEpIHsKLSAgdWludDhfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDhfdCkgX19idWlsdGluX25lb25fdnFyc2hsYl91OChfX3AwLCBfX3AxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MzJfdCB2cXJzaGxzX3UzMih1aW50MzJfdCBfX3AwLCB1aW50MzJfdCBfX3AxKSB7Ci0gIHVpbnQzMl90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJfdCkgX19idWlsdGluX25lb25fdnFyc2hsc191MzIoX19wMCwgX19wMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQzMl90IHZxcnNobHNfdTMyKHVpbnQzMl90IF9fcDAsIHVpbnQzMl90IF9fcDEpIHsKLSAgdWludDMyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92cXJzaGxzX3UzMihfX3AwLCBfX3AxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50NjRfdCB2cXJzaGxkX3U2NCh1aW50NjRfdCBfX3AwLCB1aW50NjRfdCBfX3AxKSB7Ci0gIHVpbnQ2NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50NjRfdCkgX19idWlsdGluX25lb25fdnFyc2hsZF91NjQoX19wMCwgX19wMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ2NF90IHZxcnNobGRfdTY0KHVpbnQ2NF90IF9fcDAsIHVpbnQ2NF90IF9fcDEpIHsKLSAgdWludDY0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92cXJzaGxkX3U2NChfX3AwLCBfX3AxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MTZfdCB2cXJzaGxoX3UxNih1aW50MTZfdCBfX3AwLCB1aW50MTZfdCBfX3AxKSB7Ci0gIHVpbnQxNl90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MTZfdCkgX19idWlsdGluX25lb25fdnFyc2hsaF91MTYoX19wMCwgX19wMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQxNl90IHZxcnNobGhfdTE2KHVpbnQxNl90IF9fcDAsIHVpbnQxNl90IF9fcDEpIHsKLSAgdWludDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92cXJzaGxoX3UxNihfX3AwLCBfX3AxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ4X3QgdnFyc2hsYl9zOChpbnQ4X3QgX19wMCwgaW50OF90IF9fcDEpIHsKLSAgaW50OF90IF9fcmV0OwotICBfX3JldCA9IChpbnQ4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxcnNobGJfczgoX19wMCwgX19wMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDhfdCB2cXJzaGxiX3M4KGludDhfdCBfX3AwLCBpbnQ4X3QgX19wMSkgewotICBpbnQ4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDhfdCkgX19idWlsdGluX25lb25fdnFyc2hsYl9zOChfX3AwLCBfX3AxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQzMl90IHZxcnNobHNfczMyKGludDMyX3QgX19wMCwgaW50MzJfdCBfX3AxKSB7Ci0gIGludDMyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxcnNobHNfczMyKF9fcDAsIF9fcDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQzMl90IHZxcnNobHNfczMyKGludDMyX3QgX19wMCwgaW50MzJfdCBfX3AxKSB7Ci0gIGludDMyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxcnNobHNfczMyKF9fcDAsIF9fcDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDY0X3QgdnFyc2hsZF9zNjQoaW50NjRfdCBfX3AwLCBpbnQ2NF90IF9fcDEpIHsKLSAgaW50NjRfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdnFyc2hsZF9zNjQoX19wMCwgX19wMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDY0X3QgdnFyc2hsZF9zNjQoaW50NjRfdCBfX3AwLCBpbnQ2NF90IF9fcDEpIHsKLSAgaW50NjRfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdnFyc2hsZF9zNjQoX19wMCwgX19wMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MTZfdCB2cXJzaGxoX3MxNihpbnQxNl90IF9fcDAsIGludDE2X3QgX19wMSkgewotICBpbnQxNl90IF9fcmV0OwotICBfX3JldCA9IChpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92cXJzaGxoX3MxNihfX3AwLCBfX3AxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MTZfdCB2cXJzaGxoX3MxNihpbnQxNl90IF9fcDAsIGludDE2X3QgX19wMSkgewotICBpbnQxNl90IF9fcmV0OwotICBfX3JldCA9IChpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92cXJzaGxoX3MxNihfX3AwLCBfX3AxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2cXJzaHJuX2hpZ2hfbl91MzIoX19wMF8xNzAsIF9fcDFfMTcwLCBfX3AyXzE3MCkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQxNng0X3QgX19zMF8xNzAgPSBfX3AwXzE3MDsgXAotICB1aW50MzJ4NF90IF9fczFfMTcwID0gX19wMV8xNzA7IFwKLSAgdWludDE2eDhfdCBfX3JldF8xNzA7IFwKLSAgX19yZXRfMTcwID0gKHVpbnQxNng4X3QpKHZjb21iaW5lX3UxNigodWludDE2eDRfdCkoX19zMF8xNzApLCAodWludDE2eDRfdCkodnFyc2hybl9uX3UzMihfX3MxXzE3MCwgX19wMl8xNzApKSkpOyBcCi0gIF9fcmV0XzE3MDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZxcnNocm5faGlnaF9uX3UzMihfX3AwXzE3MSwgX19wMV8xNzEsIF9fcDJfMTcxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDE2eDRfdCBfX3MwXzE3MSA9IF9fcDBfMTcxOyBcCi0gIHVpbnQzMng0X3QgX19zMV8xNzEgPSBfX3AxXzE3MTsgXAotICB1aW50MTZ4NF90IF9fcmV2MF8xNzE7ICBfX3JldjBfMTcxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMF8xNzEsIF9fczBfMTcxLCAzLCAyLCAxLCAwKTsgXAotICB1aW50MzJ4NF90IF9fcmV2MV8xNzE7ICBfX3JldjFfMTcxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMV8xNzEsIF9fczFfMTcxLCAzLCAyLCAxLCAwKTsgXAotICB1aW50MTZ4OF90IF9fcmV0XzE3MTsgXAotICBfX3JldF8xNzEgPSAodWludDE2eDhfdCkoX19ub3N3YXBfdmNvbWJpbmVfdTE2KCh1aW50MTZ4NF90KShfX3JldjBfMTcxKSwgKHVpbnQxNng0X3QpKF9fbm9zd2FwX3ZxcnNocm5fbl91MzIoX19yZXYxXzE3MSwgX19wMl8xNzEpKSkpOyBcCi0gIF9fcmV0XzE3MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0XzE3MSwgX19yZXRfMTcxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldF8xNzE7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZxcnNocm5faGlnaF9uX3U2NChfX3AwXzE3MiwgX19wMV8xNzIsIF9fcDJfMTcyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDMyeDJfdCBfX3MwXzE3MiA9IF9fcDBfMTcyOyBcCi0gIHVpbnQ2NHgyX3QgX19zMV8xNzIgPSBfX3AxXzE3MjsgXAotICB1aW50MzJ4NF90IF9fcmV0XzE3MjsgXAotICBfX3JldF8xNzIgPSAodWludDMyeDRfdCkodmNvbWJpbmVfdTMyKCh1aW50MzJ4Ml90KShfX3MwXzE3MiksICh1aW50MzJ4Ml90KSh2cXJzaHJuX25fdTY0KF9fczFfMTcyLCBfX3AyXzE3MikpKSk7IFwKLSAgX19yZXRfMTcyOyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnFyc2hybl9oaWdoX25fdTY0KF9fcDBfMTczLCBfX3AxXzE3MywgX19wMl8xNzMpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MzJ4Ml90IF9fczBfMTczID0gX19wMF8xNzM7IFwKLSAgdWludDY0eDJfdCBfX3MxXzE3MyA9IF9fcDFfMTczOyBcCi0gIHVpbnQzMngyX3QgX19yZXYwXzE3MzsgIF9fcmV2MF8xNzMgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwXzE3MywgX19zMF8xNzMsIDEsIDApOyBcCi0gIHVpbnQ2NHgyX3QgX19yZXYxXzE3MzsgIF9fcmV2MV8xNzMgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxXzE3MywgX19zMV8xNzMsIDEsIDApOyBcCi0gIHVpbnQzMng0X3QgX19yZXRfMTczOyBcCi0gIF9fcmV0XzE3MyA9ICh1aW50MzJ4NF90KShfX25vc3dhcF92Y29tYmluZV91MzIoKHVpbnQzMngyX3QpKF9fcmV2MF8xNzMpLCAodWludDMyeDJfdCkoX19ub3N3YXBfdnFyc2hybl9uX3U2NChfX3JldjFfMTczLCBfX3AyXzE3MykpKSk7IFwKLSAgX19yZXRfMTczID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXRfMTczLCBfX3JldF8xNzMsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0XzE3MzsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnFyc2hybl9oaWdoX25fdTE2KF9fcDBfMTc0LCBfX3AxXzE3NCwgX19wMl8xNzQpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50OHg4X3QgX19zMF8xNzQgPSBfX3AwXzE3NDsgXAotICB1aW50MTZ4OF90IF9fczFfMTc0ID0gX19wMV8xNzQ7IFwKLSAgdWludDh4MTZfdCBfX3JldF8xNzQ7IFwKLSAgX19yZXRfMTc0ID0gKHVpbnQ4eDE2X3QpKHZjb21iaW5lX3U4KCh1aW50OHg4X3QpKF9fczBfMTc0KSwgKHVpbnQ4eDhfdCkodnFyc2hybl9uX3UxNihfX3MxXzE3NCwgX19wMl8xNzQpKSkpOyBcCi0gIF9fcmV0XzE3NDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZxcnNocm5faGlnaF9uX3UxNihfX3AwXzE3NSwgX19wMV8xNzUsIF9fcDJfMTc1KSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDh4OF90IF9fczBfMTc1ID0gX19wMF8xNzU7IFwKLSAgdWludDE2eDhfdCBfX3MxXzE3NSA9IF9fcDFfMTc1OyBcCi0gIHVpbnQ4eDhfdCBfX3JldjBfMTc1OyAgX19yZXYwXzE3NSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczBfMTc1LCBfX3MwXzE3NSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgdWludDE2eDhfdCBfX3JldjFfMTc1OyAgX19yZXYxXzE3NSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczFfMTc1LCBfX3MxXzE3NSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgdWludDh4MTZfdCBfX3JldF8xNzU7IFwKLSAgX19yZXRfMTc1ID0gKHVpbnQ4eDE2X3QpKF9fbm9zd2FwX3Zjb21iaW5lX3U4KCh1aW50OHg4X3QpKF9fcmV2MF8xNzUpLCAodWludDh4OF90KShfX25vc3dhcF92cXJzaHJuX25fdTE2KF9fcmV2MV8xNzUsIF9fcDJfMTc1KSkpKTsgXAotICBfX3JldF8xNzUgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldF8xNzUsIF9fcmV0XzE3NSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXRfMTc1OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2cXJzaHJuX2hpZ2hfbl9zMzIoX19wMF8xNzYsIF9fcDFfMTc2LCBfX3AyXzE3NikgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDE2eDRfdCBfX3MwXzE3NiA9IF9fcDBfMTc2OyBcCi0gIGludDMyeDRfdCBfX3MxXzE3NiA9IF9fcDFfMTc2OyBcCi0gIGludDE2eDhfdCBfX3JldF8xNzY7IFwKLSAgX19yZXRfMTc2ID0gKGludDE2eDhfdCkodmNvbWJpbmVfczE2KChpbnQxNng0X3QpKF9fczBfMTc2KSwgKGludDE2eDRfdCkodnFyc2hybl9uX3MzMihfX3MxXzE3NiwgX19wMl8xNzYpKSkpOyBcCi0gIF9fcmV0XzE3NjsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZxcnNocm5faGlnaF9uX3MzMihfX3AwXzE3NywgX19wMV8xNzcsIF9fcDJfMTc3KSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MTZ4NF90IF9fczBfMTc3ID0gX19wMF8xNzc7IFwKLSAgaW50MzJ4NF90IF9fczFfMTc3ID0gX19wMV8xNzc7IFwKLSAgaW50MTZ4NF90IF9fcmV2MF8xNzc7ICBfX3JldjBfMTc3ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMF8xNzcsIF9fczBfMTc3LCAzLCAyLCAxLCAwKTsgXAotICBpbnQzMng0X3QgX19yZXYxXzE3NzsgIF9fcmV2MV8xNzcgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxXzE3NywgX19zMV8xNzcsIDMsIDIsIDEsIDApOyBcCi0gIGludDE2eDhfdCBfX3JldF8xNzc7IFwKLSAgX19yZXRfMTc3ID0gKGludDE2eDhfdCkoX19ub3N3YXBfdmNvbWJpbmVfczE2KChpbnQxNng0X3QpKF9fcmV2MF8xNzcpLCAoaW50MTZ4NF90KShfX25vc3dhcF92cXJzaHJuX25fczMyKF9fcmV2MV8xNzcsIF9fcDJfMTc3KSkpKTsgXAotICBfX3JldF8xNzcgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldF8xNzcsIF9fcmV0XzE3NywgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXRfMTc3OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2cXJzaHJuX2hpZ2hfbl9zNjQoX19wMF8xNzgsIF9fcDFfMTc4LCBfX3AyXzE3OCkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDMyeDJfdCBfX3MwXzE3OCA9IF9fcDBfMTc4OyBcCi0gIGludDY0eDJfdCBfX3MxXzE3OCA9IF9fcDFfMTc4OyBcCi0gIGludDMyeDRfdCBfX3JldF8xNzg7IFwKLSAgX19yZXRfMTc4ID0gKGludDMyeDRfdCkodmNvbWJpbmVfczMyKChpbnQzMngyX3QpKF9fczBfMTc4KSwgKGludDMyeDJfdCkodnFyc2hybl9uX3M2NChfX3MxXzE3OCwgX19wMl8xNzgpKSkpOyBcCi0gIF9fcmV0XzE3ODsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZxcnNocm5faGlnaF9uX3M2NChfX3AwXzE3OSwgX19wMV8xNzksIF9fcDJfMTc5KSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MzJ4Ml90IF9fczBfMTc5ID0gX19wMF8xNzk7IFwKLSAgaW50NjR4Ml90IF9fczFfMTc5ID0gX19wMV8xNzk7IFwKLSAgaW50MzJ4Ml90IF9fcmV2MF8xNzk7ICBfX3JldjBfMTc5ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMF8xNzksIF9fczBfMTc5LCAxLCAwKTsgXAotICBpbnQ2NHgyX3QgX19yZXYxXzE3OTsgIF9fcmV2MV8xNzkgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxXzE3OSwgX19zMV8xNzksIDEsIDApOyBcCi0gIGludDMyeDRfdCBfX3JldF8xNzk7IFwKLSAgX19yZXRfMTc5ID0gKGludDMyeDRfdCkoX19ub3N3YXBfdmNvbWJpbmVfczMyKChpbnQzMngyX3QpKF9fcmV2MF8xNzkpLCAoaW50MzJ4Ml90KShfX25vc3dhcF92cXJzaHJuX25fczY0KF9fcmV2MV8xNzksIF9fcDJfMTc5KSkpKTsgXAotICBfX3JldF8xNzkgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldF8xNzksIF9fcmV0XzE3OSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXRfMTc5OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2cXJzaHJuX2hpZ2hfbl9zMTYoX19wMF8xODAsIF9fcDFfMTgwLCBfX3AyXzE4MCkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDh4OF90IF9fczBfMTgwID0gX19wMF8xODA7IFwKLSAgaW50MTZ4OF90IF9fczFfMTgwID0gX19wMV8xODA7IFwKLSAgaW50OHgxNl90IF9fcmV0XzE4MDsgXAotICBfX3JldF8xODAgPSAoaW50OHgxNl90KSh2Y29tYmluZV9zOCgoaW50OHg4X3QpKF9fczBfMTgwKSwgKGludDh4OF90KSh2cXJzaHJuX25fczE2KF9fczFfMTgwLCBfX3AyXzE4MCkpKSk7IFwKLSAgX19yZXRfMTgwOyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnFyc2hybl9oaWdoX25fczE2KF9fcDBfMTgxLCBfX3AxXzE4MSwgX19wMl8xODEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ4eDhfdCBfX3MwXzE4MSA9IF9fcDBfMTgxOyBcCi0gIGludDE2eDhfdCBfX3MxXzE4MSA9IF9fcDFfMTgxOyBcCi0gIGludDh4OF90IF9fcmV2MF8xODE7ICBfX3JldjBfMTgxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMF8xODEsIF9fczBfMTgxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBpbnQxNng4X3QgX19yZXYxXzE4MTsgIF9fcmV2MV8xODEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxXzE4MSwgX19zMV8xODEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIGludDh4MTZfdCBfX3JldF8xODE7IFwKLSAgX19yZXRfMTgxID0gKGludDh4MTZfdCkoX19ub3N3YXBfdmNvbWJpbmVfczgoKGludDh4OF90KShfX3JldjBfMTgxKSwgKGludDh4OF90KShfX25vc3dhcF92cXJzaHJuX25fczE2KF9fcmV2MV8xODEsIF9fcDJfMTgxKSkpKTsgXAotICBfX3JldF8xODEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldF8xODEsIF9fcmV0XzE4MSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXRfMTgxOyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2cXJzaHJuc19uX3UzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDMyX3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDE2X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAodWludDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZxcnNocm5zX25fdTMyKF9fczAsIF9fcDEpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnFyc2hybnNfbl91MzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQzMl90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQxNl90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHVpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92cXJzaHJuc19uX3UzMihfX3MwLCBfX3AxKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnFyc2hybmRfbl91NjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ2NF90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQzMl90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHVpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92cXJzaHJuZF9uX3U2NChfX3MwLCBfX3AxKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZxcnNocm5kX25fdTY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50NjRfdCBfX3MwID0gX19wMDsgXAotICB1aW50MzJfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50MzJfdCkgX19idWlsdGluX25lb25fdnFyc2hybmRfbl91NjQoX19zMCwgX19wMSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZxcnNocm5oX25fdTE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MTZfdCBfX3MwID0gX19wMDsgXAotICB1aW50OF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHVpbnQ4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxcnNocm5oX25fdTE2KF9fczAsIF9fcDEpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnFyc2hybmhfbl91MTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQxNl90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQ4X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAodWludDhfdCkgX19idWlsdGluX25lb25fdnFyc2hybmhfbl91MTYoX19zMCwgX19wMSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZxcnNocm5zX25fczMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQzMl90IF9fczAgPSBfX3AwOyBcCi0gIGludDE2X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoaW50MTZfdCkgX19idWlsdGluX25lb25fdnFyc2hybnNfbl9zMzIoX19zMCwgX19wMSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2cXJzaHJuc19uX3MzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MzJfdCBfX3MwID0gX19wMDsgXAotICBpbnQxNl90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGludDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZxcnNocm5zX25fczMyKF9fczAsIF9fcDEpOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2cXJzaHJuZF9uX3M2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50NjRfdCBfX3MwID0gX19wMDsgXAotICBpbnQzMl90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxcnNocm5kX25fczY0KF9fczAsIF9fcDEpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnFyc2hybmRfbl9zNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDY0X3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MzJfdCBfX3JldDsgXAotICBfX3JldCA9IChpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92cXJzaHJuZF9uX3M2NChfX3MwLCBfX3AxKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnFyc2hybmhfbl9zMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDE2X3QgX19zMCA9IF9fcDA7IFwKLSAgaW50OF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGludDhfdCkgX19idWlsdGluX25lb25fdnFyc2hybmhfbl9zMTYoX19zMCwgX19wMSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2cXJzaHJuaF9uX3MxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MTZfdCBfX3MwID0gX19wMDsgXAotICBpbnQ4X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoaW50OF90KSBfX2J1aWx0aW5fbmVvbl92cXJzaHJuaF9uX3MxNihfX3MwLCBfX3AxKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnFyc2hydW5faGlnaF9uX3MzMihfX3AwXzE4MiwgX19wMV8xODIsIF9fcDJfMTgyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MTZ4NF90IF9fczBfMTgyID0gX19wMF8xODI7IFwKLSAgaW50MzJ4NF90IF9fczFfMTgyID0gX19wMV8xODI7IFwKLSAgaW50MTZ4OF90IF9fcmV0XzE4MjsgXAotICBfX3JldF8xODIgPSAoaW50MTZ4OF90KSh2Y29tYmluZV9zMTYoKGludDE2eDRfdCkoX19zMF8xODIpLCAoaW50MTZ4NF90KSh2cXJzaHJ1bl9uX3MzMihfX3MxXzE4MiwgX19wMl8xODIpKSkpOyBcCi0gIF9fcmV0XzE4MjsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZxcnNocnVuX2hpZ2hfbl9zMzIoX19wMF8xODMsIF9fcDFfMTgzLCBfX3AyXzE4MykgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDE2eDRfdCBfX3MwXzE4MyA9IF9fcDBfMTgzOyBcCi0gIGludDMyeDRfdCBfX3MxXzE4MyA9IF9fcDFfMTgzOyBcCi0gIGludDE2eDRfdCBfX3JldjBfMTgzOyAgX19yZXYwXzE4MyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczBfMTgzLCBfX3MwXzE4MywgMywgMiwgMSwgMCk7IFwKLSAgaW50MzJ4NF90IF9fcmV2MV8xODM7ICBfX3JldjFfMTgzID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMV8xODMsIF9fczFfMTgzLCAzLCAyLCAxLCAwKTsgXAotICBpbnQxNng4X3QgX19yZXRfMTgzOyBcCi0gIF9fcmV0XzE4MyA9IChpbnQxNng4X3QpKF9fbm9zd2FwX3Zjb21iaW5lX3MxNigoaW50MTZ4NF90KShfX3JldjBfMTgzKSwgKGludDE2eDRfdCkoX19ub3N3YXBfdnFyc2hydW5fbl9zMzIoX19yZXYxXzE4MywgX19wMl8xODMpKSkpOyBcCi0gIF9fcmV0XzE4MyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0XzE4MywgX19yZXRfMTgzLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldF8xODM7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZxcnNocnVuX2hpZ2hfbl9zNjQoX19wMF8xODQsIF9fcDFfMTg0LCBfX3AyXzE4NCkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDMyeDJfdCBfX3MwXzE4NCA9IF9fcDBfMTg0OyBcCi0gIGludDY0eDJfdCBfX3MxXzE4NCA9IF9fcDFfMTg0OyBcCi0gIGludDMyeDRfdCBfX3JldF8xODQ7IFwKLSAgX19yZXRfMTg0ID0gKGludDMyeDRfdCkodmNvbWJpbmVfczMyKChpbnQzMngyX3QpKF9fczBfMTg0KSwgKGludDMyeDJfdCkodnFyc2hydW5fbl9zNjQoX19zMV8xODQsIF9fcDJfMTg0KSkpKTsgXAotICBfX3JldF8xODQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2cXJzaHJ1bl9oaWdoX25fczY0KF9fcDBfMTg1LCBfX3AxXzE4NSwgX19wMl8xODUpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQzMngyX3QgX19zMF8xODUgPSBfX3AwXzE4NTsgXAotICBpbnQ2NHgyX3QgX19zMV8xODUgPSBfX3AxXzE4NTsgXAotICBpbnQzMngyX3QgX19yZXYwXzE4NTsgIF9fcmV2MF8xODUgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwXzE4NSwgX19zMF8xODUsIDEsIDApOyBcCi0gIGludDY0eDJfdCBfX3JldjFfMTg1OyAgX19yZXYxXzE4NSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczFfMTg1LCBfX3MxXzE4NSwgMSwgMCk7IFwKLSAgaW50MzJ4NF90IF9fcmV0XzE4NTsgXAotICBfX3JldF8xODUgPSAoaW50MzJ4NF90KShfX25vc3dhcF92Y29tYmluZV9zMzIoKGludDMyeDJfdCkoX19yZXYwXzE4NSksIChpbnQzMngyX3QpKF9fbm9zd2FwX3ZxcnNocnVuX25fczY0KF9fcmV2MV8xODUsIF9fcDJfMTg1KSkpKTsgXAotICBfX3JldF8xODUgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldF8xODUsIF9fcmV0XzE4NSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXRfMTg1OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2cXJzaHJ1bl9oaWdoX25fczE2KF9fcDBfMTg2LCBfX3AxXzE4NiwgX19wMl8xODYpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ4eDhfdCBfX3MwXzE4NiA9IF9fcDBfMTg2OyBcCi0gIGludDE2eDhfdCBfX3MxXzE4NiA9IF9fcDFfMTg2OyBcCi0gIGludDh4MTZfdCBfX3JldF8xODY7IFwKLSAgX19yZXRfMTg2ID0gKGludDh4MTZfdCkodmNvbWJpbmVfczgoKGludDh4OF90KShfX3MwXzE4NiksIChpbnQ4eDhfdCkodnFyc2hydW5fbl9zMTYoX19zMV8xODYsIF9fcDJfMTg2KSkpKTsgXAotICBfX3JldF8xODY7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2cXJzaHJ1bl9oaWdoX25fczE2KF9fcDBfMTg3LCBfX3AxXzE4NywgX19wMl8xODcpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ4eDhfdCBfX3MwXzE4NyA9IF9fcDBfMTg3OyBcCi0gIGludDE2eDhfdCBfX3MxXzE4NyA9IF9fcDFfMTg3OyBcCi0gIGludDh4OF90IF9fcmV2MF8xODc7ICBfX3JldjBfMTg3ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMF8xODcsIF9fczBfMTg3LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBpbnQxNng4X3QgX19yZXYxXzE4NzsgIF9fcmV2MV8xODcgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxXzE4NywgX19zMV8xODcsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIGludDh4MTZfdCBfX3JldF8xODc7IFwKLSAgX19yZXRfMTg3ID0gKGludDh4MTZfdCkoX19ub3N3YXBfdmNvbWJpbmVfczgoKGludDh4OF90KShfX3JldjBfMTg3KSwgKGludDh4OF90KShfX25vc3dhcF92cXJzaHJ1bl9uX3MxNihfX3JldjFfMTg3LCBfX3AyXzE4NykpKSk7IFwKLSAgX19yZXRfMTg3ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXRfMTg3LCBfX3JldF8xODcsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0XzE4NzsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnFyc2hydW5zX25fczMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQzMl90IF9fczAgPSBfX3AwOyBcCi0gIGludDE2X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoaW50MTZfdCkgX19idWlsdGluX25lb25fdnFyc2hydW5zX25fczMyKF9fczAsIF9fcDEpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnFyc2hydW5zX25fczMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQzMl90IF9fczAgPSBfX3AwOyBcCi0gIGludDE2X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoaW50MTZfdCkgX19idWlsdGluX25lb25fdnFyc2hydW5zX25fczMyKF9fczAsIF9fcDEpOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2cXJzaHJ1bmRfbl9zNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDY0X3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MzJfdCBfX3JldDsgXAotICBfX3JldCA9IChpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92cXJzaHJ1bmRfbl9zNjQoX19zMCwgX19wMSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2cXJzaHJ1bmRfbl9zNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDY0X3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MzJfdCBfX3JldDsgXAotICBfX3JldCA9IChpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92cXJzaHJ1bmRfbl9zNjQoX19zMCwgX19wMSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZxcnNocnVuaF9uX3MxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MTZfdCBfX3MwID0gX19wMDsgXAotICBpbnQ4X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoaW50OF90KSBfX2J1aWx0aW5fbmVvbl92cXJzaHJ1bmhfbl9zMTYoX19zMCwgX19wMSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2cXJzaHJ1bmhfbl9zMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDE2X3QgX19zMCA9IF9fcDA7IFwKLSAgaW50OF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGludDhfdCkgX19idWlsdGluX25lb25fdnFyc2hydW5oX25fczE2KF9fczAsIF9fcDEpOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50OF90IHZxc2hsYl91OCh1aW50OF90IF9fcDAsIHVpbnQ4X3QgX19wMSkgewotICB1aW50OF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50OF90KSBfX2J1aWx0aW5fbmVvbl92cXNobGJfdTgoX19wMCwgX19wMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ4X3QgdnFzaGxiX3U4KHVpbnQ4X3QgX19wMCwgdWludDhfdCBfX3AxKSB7Ci0gIHVpbnQ4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ4X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hsYl91OChfX3AwLCBfX3AxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MzJfdCB2cXNobHNfdTMyKHVpbnQzMl90IF9fcDAsIHVpbnQzMl90IF9fcDEpIHsKLSAgdWludDMyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92cXNobHNfdTMyKF9fcDAsIF9fcDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MzJfdCB2cXNobHNfdTMyKHVpbnQzMl90IF9fcDAsIHVpbnQzMl90IF9fcDEpIHsKLSAgdWludDMyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92cXNobHNfdTMyKF9fcDAsIF9fcDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ2NF90IHZxc2hsZF91NjQodWludDY0X3QgX19wMCwgdWludDY0X3QgX19wMSkgewotICB1aW50NjRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hsZF91NjQoX19wMCwgX19wMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ2NF90IHZxc2hsZF91NjQodWludDY0X3QgX19wMCwgdWludDY0X3QgX19wMSkgewotICB1aW50NjRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hsZF91NjQoX19wMCwgX19wMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDE2X3QgdnFzaGxoX3UxNih1aW50MTZfdCBfX3AwLCB1aW50MTZfdCBfX3AxKSB7Ci0gIHVpbnQxNl90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MTZfdCkgX19idWlsdGluX25lb25fdnFzaGxoX3UxNihfX3AwLCBfX3AxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDE2X3QgdnFzaGxoX3UxNih1aW50MTZfdCBfX3AwLCB1aW50MTZfdCBfX3AxKSB7Ci0gIHVpbnQxNl90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MTZfdCkgX19idWlsdGluX25lb25fdnFzaGxoX3UxNihfX3AwLCBfX3AxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ4X3QgdnFzaGxiX3M4KGludDhfdCBfX3AwLCBpbnQ4X3QgX19wMSkgewotICBpbnQ4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDhfdCkgX19idWlsdGluX25lb25fdnFzaGxiX3M4KF9fcDAsIF9fcDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQ4X3QgdnFzaGxiX3M4KGludDhfdCBfX3AwLCBpbnQ4X3QgX19wMSkgewotICBpbnQ4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDhfdCkgX19idWlsdGluX25lb25fdnFzaGxiX3M4KF9fcDAsIF9fcDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDMyX3QgdnFzaGxzX3MzMihpbnQzMl90IF9fcDAsIGludDMyX3QgX19wMSkgewotICBpbnQzMl90IF9fcmV0OwotICBfX3JldCA9IChpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92cXNobHNfczMyKF9fcDAsIF9fcDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQzMl90IHZxc2hsc19zMzIoaW50MzJfdCBfX3AwLCBpbnQzMl90IF9fcDEpIHsKLSAgaW50MzJfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MzJfdCkgX19idWlsdGluX25lb25fdnFzaGxzX3MzMihfX3AwLCBfX3AxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ2NF90IHZxc2hsZF9zNjQoaW50NjRfdCBfX3AwLCBpbnQ2NF90IF9fcDEpIHsKLSAgaW50NjRfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdnFzaGxkX3M2NChfX3AwLCBfX3AxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50NjRfdCB2cXNobGRfczY0KGludDY0X3QgX19wMCwgaW50NjRfdCBfX3AxKSB7Ci0gIGludDY0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hsZF9zNjQoX19wMCwgX19wMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MTZfdCB2cXNobGhfczE2KGludDE2X3QgX19wMCwgaW50MTZfdCBfX3AxKSB7Ci0gIGludDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDE2X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hsaF9zMTYoX19wMCwgX19wMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDE2X3QgdnFzaGxoX3MxNihpbnQxNl90IF9fcDAsIGludDE2X3QgX19wMSkgewotICBpbnQxNl90IF9fcmV0OwotICBfX3JldCA9IChpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92cXNobGhfczE2KF9fcDAsIF9fcDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZxc2hsYl9uX3U4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50OF90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQ4X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAodWludDhfdCkgX19idWlsdGluX25lb25fdnFzaGxiX25fdTgoX19zMCwgX19wMSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2cXNobGJfbl91OChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDhfdCBfX3MwID0gX19wMDsgXAotICB1aW50OF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHVpbnQ4X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hsYl9uX3U4KF9fczAsIF9fcDEpOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2cXNobHNfbl91MzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQzMl90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQzMl90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHVpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92cXNobHNfbl91MzIoX19zMCwgX19wMSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2cXNobHNfbl91MzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQzMl90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQzMl90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHVpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92cXNobHNfbl91MzIoX19zMCwgX19wMSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZxc2hsZF9uX3U2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDY0X3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDY0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hsZF9uX3U2NChfX3MwLCBfX3AxKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZxc2hsZF9uX3U2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDY0X3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDY0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hsZF9uX3U2NChfX3MwLCBfX3AxKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnFzaGxoX25fdTE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MTZfdCBfX3MwID0gX19wMDsgXAotICB1aW50MTZfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50MTZfdCkgX19idWlsdGluX25lb25fdnFzaGxoX25fdTE2KF9fczAsIF9fcDEpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnFzaGxoX25fdTE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MTZfdCBfX3MwID0gX19wMDsgXAotICB1aW50MTZfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50MTZfdCkgX19idWlsdGluX25lb25fdnFzaGxoX25fdTE2KF9fczAsIF9fcDEpOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2cXNobGJfbl9zOChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50OF90IF9fczAgPSBfX3AwOyBcCi0gIGludDhfdCBfX3JldDsgXAotICBfX3JldCA9IChpbnQ4X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hsYl9uX3M4KF9fczAsIF9fcDEpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnFzaGxiX25fczgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDhfdCBfX3MwID0gX19wMDsgXAotICBpbnQ4X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoaW50OF90KSBfX2J1aWx0aW5fbmVvbl92cXNobGJfbl9zOChfX3MwLCBfX3AxKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnFzaGxzX25fczMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQzMl90IF9fczAgPSBfX3AwOyBcCi0gIGludDMyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoaW50MzJfdCkgX19idWlsdGluX25lb25fdnFzaGxzX25fczMyKF9fczAsIF9fcDEpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnFzaGxzX25fczMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQzMl90IF9fczAgPSBfX3AwOyBcCi0gIGludDMyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoaW50MzJfdCkgX19idWlsdGluX25lb25fdnFzaGxzX25fczMyKF9fczAsIF9fcDEpOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2cXNobGRfbl9zNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDY0X3QgX19zMCA9IF9fcDA7IFwKLSAgaW50NjRfdCBfX3JldDsgXAotICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92cXNobGRfbl9zNjQoX19zMCwgX19wMSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2cXNobGRfbl9zNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDY0X3QgX19zMCA9IF9fcDA7IFwKLSAgaW50NjRfdCBfX3JldDsgXAotICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92cXNobGRfbl9zNjQoX19zMCwgX19wMSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZxc2hsaF9uX3MxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MTZfdCBfX3MwID0gX19wMDsgXAotICBpbnQxNl90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGludDE2X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hsaF9uX3MxNihfX3MwLCBfX3AxKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZxc2hsaF9uX3MxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MTZfdCBfX3MwID0gX19wMDsgXAotICBpbnQxNl90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGludDE2X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hsaF9uX3MxNihfX3MwLCBfX3AxKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnFzaGx1Yl9uX3M4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ4X3QgX19zMCA9IF9fcDA7IFwKLSAgaW50OF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGludDhfdCkgX19idWlsdGluX25lb25fdnFzaGx1Yl9uX3M4KF9fczAsIF9fcDEpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnFzaGx1Yl9uX3M4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ4X3QgX19zMCA9IF9fcDA7IFwKLSAgaW50OF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGludDhfdCkgX19idWlsdGluX25lb25fdnFzaGx1Yl9uX3M4KF9fczAsIF9fcDEpOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2cXNobHVzX25fczMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQzMl90IF9fczAgPSBfX3AwOyBcCi0gIGludDMyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoaW50MzJfdCkgX19idWlsdGluX25lb25fdnFzaGx1c19uX3MzMihfX3MwLCBfX3AxKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZxc2hsdXNfbl9zMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDMyX3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MzJfdCBfX3JldDsgXAotICBfX3JldCA9IChpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92cXNobHVzX25fczMyKF9fczAsIF9fcDEpOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2cXNobHVkX25fczY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ2NF90IF9fczAgPSBfX3AwOyBcCi0gIGludDY0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdnFzaGx1ZF9uX3M2NChfX3MwLCBfX3AxKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZxc2hsdWRfbl9zNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDY0X3QgX19zMCA9IF9fcDA7IFwKLSAgaW50NjRfdCBfX3JldDsgXAotICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92cXNobHVkX25fczY0KF9fczAsIF9fcDEpOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2cXNobHVoX25fczE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQxNl90IF9fczAgPSBfX3AwOyBcCi0gIGludDE2X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoaW50MTZfdCkgX19idWlsdGluX25lb25fdnFzaGx1aF9uX3MxNihfX3MwLCBfX3AxKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZxc2hsdWhfbl9zMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDE2X3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MTZfdCBfX3JldDsgXAotICBfX3JldCA9IChpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92cXNobHVoX25fczE2KF9fczAsIF9fcDEpOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2cXNocm5faGlnaF9uX3UzMihfX3AwXzE4OCwgX19wMV8xODgsIF9fcDJfMTg4KSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDE2eDRfdCBfX3MwXzE4OCA9IF9fcDBfMTg4OyBcCi0gIHVpbnQzMng0X3QgX19zMV8xODggPSBfX3AxXzE4ODsgXAotICB1aW50MTZ4OF90IF9fcmV0XzE4ODsgXAotICBfX3JldF8xODggPSAodWludDE2eDhfdCkodmNvbWJpbmVfdTE2KCh1aW50MTZ4NF90KShfX3MwXzE4OCksICh1aW50MTZ4NF90KSh2cXNocm5fbl91MzIoX19zMV8xODgsIF9fcDJfMTg4KSkpKTsgXAotICBfX3JldF8xODg7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2cXNocm5faGlnaF9uX3UzMihfX3AwXzE4OSwgX19wMV8xODksIF9fcDJfMTg5KSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDE2eDRfdCBfX3MwXzE4OSA9IF9fcDBfMTg5OyBcCi0gIHVpbnQzMng0X3QgX19zMV8xODkgPSBfX3AxXzE4OTsgXAotICB1aW50MTZ4NF90IF9fcmV2MF8xODk7ICBfX3JldjBfMTg5ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMF8xODksIF9fczBfMTg5LCAzLCAyLCAxLCAwKTsgXAotICB1aW50MzJ4NF90IF9fcmV2MV8xODk7ICBfX3JldjFfMTg5ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMV8xODksIF9fczFfMTg5LCAzLCAyLCAxLCAwKTsgXAotICB1aW50MTZ4OF90IF9fcmV0XzE4OTsgXAotICBfX3JldF8xODkgPSAodWludDE2eDhfdCkoX19ub3N3YXBfdmNvbWJpbmVfdTE2KCh1aW50MTZ4NF90KShfX3JldjBfMTg5KSwgKHVpbnQxNng0X3QpKF9fbm9zd2FwX3Zxc2hybl9uX3UzMihfX3JldjFfMTg5LCBfX3AyXzE4OSkpKSk7IFwKLSAgX19yZXRfMTg5ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXRfMTg5LCBfX3JldF8xODksIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0XzE4OTsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnFzaHJuX2hpZ2hfbl91NjQoX19wMF8xOTAsIF9fcDFfMTkwLCBfX3AyXzE5MCkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQzMngyX3QgX19zMF8xOTAgPSBfX3AwXzE5MDsgXAotICB1aW50NjR4Ml90IF9fczFfMTkwID0gX19wMV8xOTA7IFwKLSAgdWludDMyeDRfdCBfX3JldF8xOTA7IFwKLSAgX19yZXRfMTkwID0gKHVpbnQzMng0X3QpKHZjb21iaW5lX3UzMigodWludDMyeDJfdCkoX19zMF8xOTApLCAodWludDMyeDJfdCkodnFzaHJuX25fdTY0KF9fczFfMTkwLCBfX3AyXzE5MCkpKSk7IFwKLSAgX19yZXRfMTkwOyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnFzaHJuX2hpZ2hfbl91NjQoX19wMF8xOTEsIF9fcDFfMTkxLCBfX3AyXzE5MSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQzMngyX3QgX19zMF8xOTEgPSBfX3AwXzE5MTsgXAotICB1aW50NjR4Ml90IF9fczFfMTkxID0gX19wMV8xOTE7IFwKLSAgdWludDMyeDJfdCBfX3JldjBfMTkxOyAgX19yZXYwXzE5MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczBfMTkxLCBfX3MwXzE5MSwgMSwgMCk7IFwKLSAgdWludDY0eDJfdCBfX3JldjFfMTkxOyAgX19yZXYxXzE5MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczFfMTkxLCBfX3MxXzE5MSwgMSwgMCk7IFwKLSAgdWludDMyeDRfdCBfX3JldF8xOTE7IFwKLSAgX19yZXRfMTkxID0gKHVpbnQzMng0X3QpKF9fbm9zd2FwX3Zjb21iaW5lX3UzMigodWludDMyeDJfdCkoX19yZXYwXzE5MSksICh1aW50MzJ4Ml90KShfX25vc3dhcF92cXNocm5fbl91NjQoX19yZXYxXzE5MSwgX19wMl8xOTEpKSkpOyBcCi0gIF9fcmV0XzE5MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0XzE5MSwgX19yZXRfMTkxLCAzLCAyLCAxLCAwKTsgXAotICBfX3JldF8xOTE7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZxc2hybl9oaWdoX25fdTE2KF9fcDBfMTkyLCBfX3AxXzE5MiwgX19wMl8xOTIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50OHg4X3QgX19zMF8xOTIgPSBfX3AwXzE5MjsgXAotICB1aW50MTZ4OF90IF9fczFfMTkyID0gX19wMV8xOTI7IFwKLSAgdWludDh4MTZfdCBfX3JldF8xOTI7IFwKLSAgX19yZXRfMTkyID0gKHVpbnQ4eDE2X3QpKHZjb21iaW5lX3U4KCh1aW50OHg4X3QpKF9fczBfMTkyKSwgKHVpbnQ4eDhfdCkodnFzaHJuX25fdTE2KF9fczFfMTkyLCBfX3AyXzE5MikpKSk7IFwKLSAgX19yZXRfMTkyOyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnFzaHJuX2hpZ2hfbl91MTYoX19wMF8xOTMsIF9fcDFfMTkzLCBfX3AyXzE5MykgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ4eDhfdCBfX3MwXzE5MyA9IF9fcDBfMTkzOyBcCi0gIHVpbnQxNng4X3QgX19zMV8xOTMgPSBfX3AxXzE5MzsgXAotICB1aW50OHg4X3QgX19yZXYwXzE5MzsgIF9fcmV2MF8xOTMgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwXzE5MywgX19zMF8xOTMsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIHVpbnQxNng4X3QgX19yZXYxXzE5MzsgIF9fcmV2MV8xOTMgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxXzE5MywgX19zMV8xOTMsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIHVpbnQ4eDE2X3QgX19yZXRfMTkzOyBcCi0gIF9fcmV0XzE5MyA9ICh1aW50OHgxNl90KShfX25vc3dhcF92Y29tYmluZV91OCgodWludDh4OF90KShfX3JldjBfMTkzKSwgKHVpbnQ4eDhfdCkoX19ub3N3YXBfdnFzaHJuX25fdTE2KF9fcmV2MV8xOTMsIF9fcDJfMTkzKSkpKTsgXAotICBfX3JldF8xOTMgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldF8xOTMsIF9fcmV0XzE5MywgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXRfMTkzOyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2cXNocm5faGlnaF9uX3MzMihfX3AwXzE5NCwgX19wMV8xOTQsIF9fcDJfMTk0KSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MTZ4NF90IF9fczBfMTk0ID0gX19wMF8xOTQ7IFwKLSAgaW50MzJ4NF90IF9fczFfMTk0ID0gX19wMV8xOTQ7IFwKLSAgaW50MTZ4OF90IF9fcmV0XzE5NDsgXAotICBfX3JldF8xOTQgPSAoaW50MTZ4OF90KSh2Y29tYmluZV9zMTYoKGludDE2eDRfdCkoX19zMF8xOTQpLCAoaW50MTZ4NF90KSh2cXNocm5fbl9zMzIoX19zMV8xOTQsIF9fcDJfMTk0KSkpKTsgXAotICBfX3JldF8xOTQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2cXNocm5faGlnaF9uX3MzMihfX3AwXzE5NSwgX19wMV8xOTUsIF9fcDJfMTk1KSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MTZ4NF90IF9fczBfMTk1ID0gX19wMF8xOTU7IFwKLSAgaW50MzJ4NF90IF9fczFfMTk1ID0gX19wMV8xOTU7IFwKLSAgaW50MTZ4NF90IF9fcmV2MF8xOTU7ICBfX3JldjBfMTk1ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMF8xOTUsIF9fczBfMTk1LCAzLCAyLCAxLCAwKTsgXAotICBpbnQzMng0X3QgX19yZXYxXzE5NTsgIF9fcmV2MV8xOTUgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxXzE5NSwgX19zMV8xOTUsIDMsIDIsIDEsIDApOyBcCi0gIGludDE2eDhfdCBfX3JldF8xOTU7IFwKLSAgX19yZXRfMTk1ID0gKGludDE2eDhfdCkoX19ub3N3YXBfdmNvbWJpbmVfczE2KChpbnQxNng0X3QpKF9fcmV2MF8xOTUpLCAoaW50MTZ4NF90KShfX25vc3dhcF92cXNocm5fbl9zMzIoX19yZXYxXzE5NSwgX19wMl8xOTUpKSkpOyBcCi0gIF9fcmV0XzE5NSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0XzE5NSwgX19yZXRfMTk1LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldF8xOTU7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZxc2hybl9oaWdoX25fczY0KF9fcDBfMTk2LCBfX3AxXzE5NiwgX19wMl8xOTYpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQzMngyX3QgX19zMF8xOTYgPSBfX3AwXzE5NjsgXAotICBpbnQ2NHgyX3QgX19zMV8xOTYgPSBfX3AxXzE5NjsgXAotICBpbnQzMng0X3QgX19yZXRfMTk2OyBcCi0gIF9fcmV0XzE5NiA9IChpbnQzMng0X3QpKHZjb21iaW5lX3MzMigoaW50MzJ4Ml90KShfX3MwXzE5NiksIChpbnQzMngyX3QpKHZxc2hybl9uX3M2NChfX3MxXzE5NiwgX19wMl8xOTYpKSkpOyBcCi0gIF9fcmV0XzE5NjsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZxc2hybl9oaWdoX25fczY0KF9fcDBfMTk3LCBfX3AxXzE5NywgX19wMl8xOTcpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQzMngyX3QgX19zMF8xOTcgPSBfX3AwXzE5NzsgXAotICBpbnQ2NHgyX3QgX19zMV8xOTcgPSBfX3AxXzE5NzsgXAotICBpbnQzMngyX3QgX19yZXYwXzE5NzsgIF9fcmV2MF8xOTcgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwXzE5NywgX19zMF8xOTcsIDEsIDApOyBcCi0gIGludDY0eDJfdCBfX3JldjFfMTk3OyAgX19yZXYxXzE5NyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczFfMTk3LCBfX3MxXzE5NywgMSwgMCk7IFwKLSAgaW50MzJ4NF90IF9fcmV0XzE5NzsgXAotICBfX3JldF8xOTcgPSAoaW50MzJ4NF90KShfX25vc3dhcF92Y29tYmluZV9zMzIoKGludDMyeDJfdCkoX19yZXYwXzE5NyksIChpbnQzMngyX3QpKF9fbm9zd2FwX3Zxc2hybl9uX3M2NChfX3JldjFfMTk3LCBfX3AyXzE5NykpKSk7IFwKLSAgX19yZXRfMTk3ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXRfMTk3LCBfX3JldF8xOTcsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0XzE5NzsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnFzaHJuX2hpZ2hfbl9zMTYoX19wMF8xOTgsIF9fcDFfMTk4LCBfX3AyXzE5OCkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDh4OF90IF9fczBfMTk4ID0gX19wMF8xOTg7IFwKLSAgaW50MTZ4OF90IF9fczFfMTk4ID0gX19wMV8xOTg7IFwKLSAgaW50OHgxNl90IF9fcmV0XzE5ODsgXAotICBfX3JldF8xOTggPSAoaW50OHgxNl90KSh2Y29tYmluZV9zOCgoaW50OHg4X3QpKF9fczBfMTk4KSwgKGludDh4OF90KSh2cXNocm5fbl9zMTYoX19zMV8xOTgsIF9fcDJfMTk4KSkpKTsgXAotICBfX3JldF8xOTg7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2cXNocm5faGlnaF9uX3MxNihfX3AwXzE5OSwgX19wMV8xOTksIF9fcDJfMTk5KSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50OHg4X3QgX19zMF8xOTkgPSBfX3AwXzE5OTsgXAotICBpbnQxNng4X3QgX19zMV8xOTkgPSBfX3AxXzE5OTsgXAotICBpbnQ4eDhfdCBfX3JldjBfMTk5OyAgX19yZXYwXzE5OSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczBfMTk5LCBfX3MwXzE5OSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgaW50MTZ4OF90IF9fcmV2MV8xOTk7ICBfX3JldjFfMTk5ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMV8xOTksIF9fczFfMTk5LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBpbnQ4eDE2X3QgX19yZXRfMTk5OyBcCi0gIF9fcmV0XzE5OSA9IChpbnQ4eDE2X3QpKF9fbm9zd2FwX3Zjb21iaW5lX3M4KChpbnQ4eDhfdCkoX19yZXYwXzE5OSksIChpbnQ4eDhfdCkoX19ub3N3YXBfdnFzaHJuX25fczE2KF9fcmV2MV8xOTksIF9fcDJfMTk5KSkpKTsgXAotICBfX3JldF8xOTkgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldF8xOTksIF9fcmV0XzE5OSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXRfMTk5OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2cXNocm5zX25fdTMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MzJfdCBfX3MwID0gX19wMDsgXAotICB1aW50MTZfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50MTZfdCkgX19idWlsdGluX25lb25fdnFzaHJuc19uX3UzMihfX3MwLCBfX3AxKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZxc2hybnNfbl91MzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQzMl90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQxNl90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHVpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92cXNocm5zX25fdTMyKF9fczAsIF9fcDEpOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2cXNocm5kX25fdTY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50NjRfdCBfX3MwID0gX19wMDsgXAotICB1aW50MzJfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50MzJfdCkgX19idWlsdGluX25lb25fdnFzaHJuZF9uX3U2NChfX3MwLCBfX3AxKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZxc2hybmRfbl91NjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ2NF90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQzMl90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHVpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92cXNocm5kX25fdTY0KF9fczAsIF9fcDEpOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2cXNocm5oX25fdTE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MTZfdCBfX3MwID0gX19wMDsgXAotICB1aW50OF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHVpbnQ4X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hybmhfbl91MTYoX19zMCwgX19wMSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2cXNocm5oX25fdTE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MTZfdCBfX3MwID0gX19wMDsgXAotICB1aW50OF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHVpbnQ4X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hybmhfbl91MTYoX19zMCwgX19wMSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZxc2hybnNfbl9zMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDMyX3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MTZfdCBfX3JldDsgXAotICBfX3JldCA9IChpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92cXNocm5zX25fczMyKF9fczAsIF9fcDEpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnFzaHJuc19uX3MzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MzJfdCBfX3MwID0gX19wMDsgXAotICBpbnQxNl90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGludDE2X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hybnNfbl9zMzIoX19zMCwgX19wMSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZxc2hybmRfbl9zNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDY0X3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MzJfdCBfX3JldDsgXAotICBfX3JldCA9IChpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92cXNocm5kX25fczY0KF9fczAsIF9fcDEpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnFzaHJuZF9uX3M2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50NjRfdCBfX3MwID0gX19wMDsgXAotICBpbnQzMl90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hybmRfbl9zNjQoX19zMCwgX19wMSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZxc2hybmhfbl9zMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDE2X3QgX19zMCA9IF9fcDA7IFwKLSAgaW50OF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGludDhfdCkgX19idWlsdGluX25lb25fdnFzaHJuaF9uX3MxNihfX3MwLCBfX3AxKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZxc2hybmhfbl9zMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDE2X3QgX19zMCA9IF9fcDA7IFwKLSAgaW50OF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGludDhfdCkgX19idWlsdGluX25lb25fdnFzaHJuaF9uX3MxNihfX3MwLCBfX3AxKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnFzaHJ1bl9oaWdoX25fczMyKF9fcDBfMjAwLCBfX3AxXzIwMCwgX19wMl8yMDApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQxNng0X3QgX19zMF8yMDAgPSBfX3AwXzIwMDsgXAotICBpbnQzMng0X3QgX19zMV8yMDAgPSBfX3AxXzIwMDsgXAotICBpbnQxNng4X3QgX19yZXRfMjAwOyBcCi0gIF9fcmV0XzIwMCA9IChpbnQxNng4X3QpKHZjb21iaW5lX3MxNigoaW50MTZ4NF90KShfX3MwXzIwMCksIChpbnQxNng0X3QpKHZxc2hydW5fbl9zMzIoX19zMV8yMDAsIF9fcDJfMjAwKSkpKTsgXAotICBfX3JldF8yMDA7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2cXNocnVuX2hpZ2hfbl9zMzIoX19wMF8yMDEsIF9fcDFfMjAxLCBfX3AyXzIwMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDE2eDRfdCBfX3MwXzIwMSA9IF9fcDBfMjAxOyBcCi0gIGludDMyeDRfdCBfX3MxXzIwMSA9IF9fcDFfMjAxOyBcCi0gIGludDE2eDRfdCBfX3JldjBfMjAxOyAgX19yZXYwXzIwMSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczBfMjAxLCBfX3MwXzIwMSwgMywgMiwgMSwgMCk7IFwKLSAgaW50MzJ4NF90IF9fcmV2MV8yMDE7ICBfX3JldjFfMjAxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMV8yMDEsIF9fczFfMjAxLCAzLCAyLCAxLCAwKTsgXAotICBpbnQxNng4X3QgX19yZXRfMjAxOyBcCi0gIF9fcmV0XzIwMSA9IChpbnQxNng4X3QpKF9fbm9zd2FwX3Zjb21iaW5lX3MxNigoaW50MTZ4NF90KShfX3JldjBfMjAxKSwgKGludDE2eDRfdCkoX19ub3N3YXBfdnFzaHJ1bl9uX3MzMihfX3JldjFfMjAxLCBfX3AyXzIwMSkpKSk7IFwKLSAgX19yZXRfMjAxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXRfMjAxLCBfX3JldF8yMDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0XzIwMTsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnFzaHJ1bl9oaWdoX25fczY0KF9fcDBfMjAyLCBfX3AxXzIwMiwgX19wMl8yMDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQzMngyX3QgX19zMF8yMDIgPSBfX3AwXzIwMjsgXAotICBpbnQ2NHgyX3QgX19zMV8yMDIgPSBfX3AxXzIwMjsgXAotICBpbnQzMng0X3QgX19yZXRfMjAyOyBcCi0gIF9fcmV0XzIwMiA9IChpbnQzMng0X3QpKHZjb21iaW5lX3MzMigoaW50MzJ4Ml90KShfX3MwXzIwMiksIChpbnQzMngyX3QpKHZxc2hydW5fbl9zNjQoX19zMV8yMDIsIF9fcDJfMjAyKSkpKTsgXAotICBfX3JldF8yMDI7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2cXNocnVuX2hpZ2hfbl9zNjQoX19wMF8yMDMsIF9fcDFfMjAzLCBfX3AyXzIwMykgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDMyeDJfdCBfX3MwXzIwMyA9IF9fcDBfMjAzOyBcCi0gIGludDY0eDJfdCBfX3MxXzIwMyA9IF9fcDFfMjAzOyBcCi0gIGludDMyeDJfdCBfX3JldjBfMjAzOyAgX19yZXYwXzIwMyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczBfMjAzLCBfX3MwXzIwMywgMSwgMCk7IFwKLSAgaW50NjR4Ml90IF9fcmV2MV8yMDM7ICBfX3JldjFfMjAzID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMV8yMDMsIF9fczFfMjAzLCAxLCAwKTsgXAotICBpbnQzMng0X3QgX19yZXRfMjAzOyBcCi0gIF9fcmV0XzIwMyA9IChpbnQzMng0X3QpKF9fbm9zd2FwX3Zjb21iaW5lX3MzMigoaW50MzJ4Ml90KShfX3JldjBfMjAzKSwgKGludDMyeDJfdCkoX19ub3N3YXBfdnFzaHJ1bl9uX3M2NChfX3JldjFfMjAzLCBfX3AyXzIwMykpKSk7IFwKLSAgX19yZXRfMjAzID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXRfMjAzLCBfX3JldF8yMDMsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0XzIwMzsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnFzaHJ1bl9oaWdoX25fczE2KF9fcDBfMjA0LCBfX3AxXzIwNCwgX19wMl8yMDQpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ4eDhfdCBfX3MwXzIwNCA9IF9fcDBfMjA0OyBcCi0gIGludDE2eDhfdCBfX3MxXzIwNCA9IF9fcDFfMjA0OyBcCi0gIGludDh4MTZfdCBfX3JldF8yMDQ7IFwKLSAgX19yZXRfMjA0ID0gKGludDh4MTZfdCkodmNvbWJpbmVfczgoKGludDh4OF90KShfX3MwXzIwNCksIChpbnQ4eDhfdCkodnFzaHJ1bl9uX3MxNihfX3MxXzIwNCwgX19wMl8yMDQpKSkpOyBcCi0gIF9fcmV0XzIwNDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZxc2hydW5faGlnaF9uX3MxNihfX3AwXzIwNSwgX19wMV8yMDUsIF9fcDJfMjA1KSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50OHg4X3QgX19zMF8yMDUgPSBfX3AwXzIwNTsgXAotICBpbnQxNng4X3QgX19zMV8yMDUgPSBfX3AxXzIwNTsgXAotICBpbnQ4eDhfdCBfX3JldjBfMjA1OyAgX19yZXYwXzIwNSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczBfMjA1LCBfX3MwXzIwNSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgaW50MTZ4OF90IF9fcmV2MV8yMDU7ICBfX3JldjFfMjA1ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMV8yMDUsIF9fczFfMjA1LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBpbnQ4eDE2X3QgX19yZXRfMjA1OyBcCi0gIF9fcmV0XzIwNSA9IChpbnQ4eDE2X3QpKF9fbm9zd2FwX3Zjb21iaW5lX3M4KChpbnQ4eDhfdCkoX19yZXYwXzIwNSksIChpbnQ4eDhfdCkoX19ub3N3YXBfdnFzaHJ1bl9uX3MxNihfX3JldjFfMjA1LCBfX3AyXzIwNSkpKSk7IFwKLSAgX19yZXRfMjA1ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXRfMjA1LCBfX3JldF8yMDUsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0XzIwNTsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnFzaHJ1bnNfbl9zMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDMyX3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MTZfdCBfX3JldDsgXAotICBfX3JldCA9IChpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92cXNocnVuc19uX3MzMihfX3MwLCBfX3AxKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZxc2hydW5zX25fczMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQzMl90IF9fczAgPSBfX3AwOyBcCi0gIGludDE2X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoaW50MTZfdCkgX19idWlsdGluX25lb25fdnFzaHJ1bnNfbl9zMzIoX19zMCwgX19wMSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZxc2hydW5kX25fczY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ2NF90IF9fczAgPSBfX3AwOyBcCi0gIGludDMyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoaW50MzJfdCkgX19idWlsdGluX25lb25fdnFzaHJ1bmRfbl9zNjQoX19zMCwgX19wMSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2cXNocnVuZF9uX3M2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50NjRfdCBfX3MwID0gX19wMDsgXAotICBpbnQzMl90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hydW5kX25fczY0KF9fczAsIF9fcDEpOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2cXNocnVuaF9uX3MxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MTZfdCBfX3MwID0gX19wMDsgXAotICBpbnQ4X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoaW50OF90KSBfX2J1aWx0aW5fbmVvbl92cXNocnVuaF9uX3MxNihfX3MwLCBfX3AxKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZxc2hydW5oX25fczE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQxNl90IF9fczAgPSBfX3AwOyBcCi0gIGludDhfdCBfX3JldDsgXAotICBfX3JldCA9IChpbnQ4X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hydW5oX25fczE2KF9fczAsIF9fcDEpOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50OF90IHZxc3ViYl91OCh1aW50OF90IF9fcDAsIHVpbnQ4X3QgX19wMSkgewotICB1aW50OF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50OF90KSBfX2J1aWx0aW5fbmVvbl92cXN1YmJfdTgoX19wMCwgX19wMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ4X3QgdnFzdWJiX3U4KHVpbnQ4X3QgX19wMCwgdWludDhfdCBfX3AxKSB7Ci0gIHVpbnQ4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ4X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc3ViYl91OChfX3AwLCBfX3AxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MzJfdCB2cXN1YnNfdTMyKHVpbnQzMl90IF9fcDAsIHVpbnQzMl90IF9fcDEpIHsKLSAgdWludDMyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92cXN1YnNfdTMyKF9fcDAsIF9fcDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MzJfdCB2cXN1YnNfdTMyKHVpbnQzMl90IF9fcDAsIHVpbnQzMl90IF9fcDEpIHsKLSAgdWludDMyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92cXN1YnNfdTMyKF9fcDAsIF9fcDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ2NF90IHZxc3ViZF91NjQodWludDY0X3QgX19wMCwgdWludDY0X3QgX19wMSkgewotICB1aW50NjRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc3ViZF91NjQoX19wMCwgX19wMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ2NF90IHZxc3ViZF91NjQodWludDY0X3QgX19wMCwgdWludDY0X3QgX19wMSkgewotICB1aW50NjRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc3ViZF91NjQoX19wMCwgX19wMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDE2X3QgdnFzdWJoX3UxNih1aW50MTZfdCBfX3AwLCB1aW50MTZfdCBfX3AxKSB7Ci0gIHVpbnQxNl90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MTZfdCkgX19idWlsdGluX25lb25fdnFzdWJoX3UxNihfX3AwLCBfX3AxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDE2X3QgdnFzdWJoX3UxNih1aW50MTZfdCBfX3AwLCB1aW50MTZfdCBfX3AxKSB7Ci0gIHVpbnQxNl90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MTZfdCkgX19idWlsdGluX25lb25fdnFzdWJoX3UxNihfX3AwLCBfX3AxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ4X3QgdnFzdWJiX3M4KGludDhfdCBfX3AwLCBpbnQ4X3QgX19wMSkgewotICBpbnQ4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDhfdCkgX19idWlsdGluX25lb25fdnFzdWJiX3M4KF9fcDAsIF9fcDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQ4X3QgdnFzdWJiX3M4KGludDhfdCBfX3AwLCBpbnQ4X3QgX19wMSkgewotICBpbnQ4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDhfdCkgX19idWlsdGluX25lb25fdnFzdWJiX3M4KF9fcDAsIF9fcDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDMyX3QgdnFzdWJzX3MzMihpbnQzMl90IF9fcDAsIGludDMyX3QgX19wMSkgewotICBpbnQzMl90IF9fcmV0OwotICBfX3JldCA9IChpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92cXN1YnNfczMyKF9fcDAsIF9fcDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQzMl90IHZxc3Vic19zMzIoaW50MzJfdCBfX3AwLCBpbnQzMl90IF9fcDEpIHsKLSAgaW50MzJfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MzJfdCkgX19idWlsdGluX25lb25fdnFzdWJzX3MzMihfX3AwLCBfX3AxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotX19haSBpbnQzMl90IF9fbm9zd2FwX3Zxc3Vic19zMzIoaW50MzJfdCBfX3AwLCBpbnQzMl90IF9fcDEpIHsKLSAgaW50MzJfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MzJfdCkgX19idWlsdGluX25lb25fdnFzdWJzX3MzMihfX3AwLCBfX3AxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ2NF90IHZxc3ViZF9zNjQoaW50NjRfdCBfX3AwLCBpbnQ2NF90IF9fcDEpIHsKLSAgaW50NjRfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdnFzdWJkX3M2NChfX3AwLCBfX3AxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50NjRfdCB2cXN1YmRfczY0KGludDY0X3QgX19wMCwgaW50NjRfdCBfX3AxKSB7Ci0gIGludDY0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc3ViZF9zNjQoX19wMCwgX19wMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MTZfdCB2cXN1YmhfczE2KGludDE2X3QgX19wMCwgaW50MTZfdCBfX3AxKSB7Ci0gIGludDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDE2X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc3ViaF9zMTYoX19wMCwgX19wMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDE2X3QgdnFzdWJoX3MxNihpbnQxNl90IF9fcDAsIGludDE2X3QgX19wMSkgewotICBpbnQxNl90IF9fcmV0OwotICBfX3JldCA9IChpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92cXN1YmhfczE2KF9fcDAsIF9fcDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci1fX2FpIGludDE2X3QgX19ub3N3YXBfdnFzdWJoX3MxNihpbnQxNl90IF9fcDAsIGludDE2X3QgX19wMSkgewotICBpbnQxNl90IF9fcmV0OwotICBfX3JldCA9IChpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92cXN1YmhfczE2KF9fcDAsIF9fcDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHBvbHk4eDhfdCB2cXRibDFfcDgocG9seTh4MTZfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgewotICBwb2x5OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHBvbHk4eDhfdCkgX19idWlsdGluX25lb25fdnF0YmwxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgNCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHBvbHk4eDhfdCB2cXRibDFfcDgocG9seTh4MTZfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgewotICBwb2x5OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHBvbHk4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAocG9seTh4OF90KSBfX2J1aWx0aW5fbmVvbl92cXRibDFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgNCk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBwb2x5OHgxNl90IHZxdGJsMXFfcDgocG9seTh4MTZfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEpIHsKLSAgcG9seTh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSAocG9seTh4MTZfdCkgX19idWlsdGluX25lb25fdnF0YmwxcV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAzNik7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHBvbHk4eDE2X3QgdnF0YmwxcV9wOChwb2x5OHgxNl90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgewotICBwb2x5OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBwb2x5OHgxNl90IF9fcmV0OwotICBfX3JldCA9IChwb2x5OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cXRibDFxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAzNik7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50OHgxNl90IHZxdGJsMXFfdTgodWludDh4MTZfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEpIHsKLSAgdWludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdnF0YmwxcV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA0OCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ4eDE2X3QgdnF0YmwxcV91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgewotICB1aW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50OHgxNl90IF9fcmV0OwotICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cXRibDFxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA0OCk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ4eDE2X3QgdnF0YmwxcV9zOChpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEpIHsKLSAgaW50OHgxNl90IF9fcmV0OwotICBfX3JldCA9IChpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZxdGJsMXFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMzIpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQ4eDE2X3QgdnF0YmwxcV9zOChpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEpIHsKLSAgaW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cXRibDFxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAzMik7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50OHg4X3QgdnF0YmwxX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKLSAgdWludDh4OF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxdGJsMV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDE2KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDh4OF90IHZxdGJsMV91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7Ci0gIHVpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDh4OF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxdGJsMV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAxNik7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ4eDhfdCB2cXRibDFfczgoaW50OHgxNl90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKLSAgaW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cXRibDFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50OHg4X3QgdnF0YmwxX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7Ci0gIGludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDh4OF90IF9fcmV0OwotICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnF0YmwxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDApOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgcG9seTh4OF90IHZxdGJsMl9wOChwb2x5OHgxNngyX3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKLSAgcG9seTh4OF90IF9fcmV0OwotICBfX3JldCA9IChwb2x5OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxdGJsMl92KChpbnQ4eDE2X3QpX19wMC52YWxbMF0sIChpbnQ4eDE2X3QpX19wMC52YWxbMV0sIChpbnQ4eDhfdClfX3AxLCA0KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgcG9seTh4OF90IHZxdGJsMl9wOChwb2x5OHgxNngyX3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKLSAgcG9seTh4MTZ4Ml90IF9fcmV2MDsKLSAgX19yZXYwLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAudmFsWzBdLCBfX3AwLnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIF9fcmV2MC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLnZhbFsxXSwgX19wMC52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHBvbHk4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAocG9seTh4OF90KSBfX2J1aWx0aW5fbmVvbl92cXRibDJfdigoaW50OHgxNl90KV9fcmV2MC52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYwLnZhbFsxXSwgKGludDh4OF90KV9fcmV2MSwgNCk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBwb2x5OHgxNl90IHZxdGJsMnFfcDgocG9seTh4MTZ4Ml90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgewotICBwb2x5OHgxNl90IF9fcmV0OwotICBfX3JldCA9IChwb2x5OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cXRibDJxX3YoKGludDh4MTZfdClfX3AwLnZhbFswXSwgKGludDh4MTZfdClfX3AwLnZhbFsxXSwgKGludDh4MTZfdClfX3AxLCAzNik7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHBvbHk4eDE2X3QgdnF0YmwycV9wOChwb2x5OHgxNngyX3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7Ci0gIHBvbHk4eDE2eDJfdCBfX3JldjA7Ci0gIF9fcmV2MC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLnZhbFswXSwgX19wMC52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBfX3JldjAudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMC52YWxbMV0sIF9fcDAudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcG9seTh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSAocG9seTh4MTZfdCkgX19idWlsdGluX25lb25fdnF0YmwycV92KChpbnQ4eDE2X3QpX19yZXYwLnZhbFswXSwgKGludDh4MTZfdClfX3JldjAudmFsWzFdLCAoaW50OHgxNl90KV9fcmV2MSwgMzYpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDh4MTZfdCB2cXRibDJxX3U4KHVpbnQ4eDE2eDJfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEpIHsKLSAgdWludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdnF0YmwycV92KChpbnQ4eDE2X3QpX19wMC52YWxbMF0sIChpbnQ4eDE2X3QpX19wMC52YWxbMV0sIChpbnQ4eDE2X3QpX19wMSwgNDgpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50OHgxNl90IHZxdGJsMnFfdTgodWludDh4MTZ4Ml90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgewotICB1aW50OHgxNngyX3QgX19yZXYwOwotICBfX3JldjAudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMC52YWxbMF0sIF9fcDAudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgX19yZXYwLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAudmFsWzFdLCBfX3AwLnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQ4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZxdGJsMnFfdigoaW50OHgxNl90KV9fcmV2MC52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYwLnZhbFsxXSwgKGludDh4MTZfdClfX3JldjEsIDQ4KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDh4MTZfdCB2cXRibDJxX3M4KGludDh4MTZ4Ml90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7Ci0gIGludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cXRibDJxX3YoKGludDh4MTZfdClfX3AwLnZhbFswXSwgKGludDh4MTZfdClfX3AwLnZhbFsxXSwgKGludDh4MTZfdClfX3AxLCAzMik7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDh4MTZfdCB2cXRibDJxX3M4KGludDh4MTZ4Ml90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7Ci0gIGludDh4MTZ4Ml90IF9fcmV2MDsKLSAgX19yZXYwLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAudmFsWzBdLCBfX3AwLnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIF9fcmV2MC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLnZhbFsxXSwgX19wMC52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cXRibDJxX3YoKGludDh4MTZfdClfX3JldjAudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MC52YWxbMV0sIChpbnQ4eDE2X3QpX19yZXYxLCAzMik7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50OHg4X3QgdnF0YmwyX3U4KHVpbnQ4eDE2eDJfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgewotICB1aW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnF0YmwyX3YoKGludDh4MTZfdClfX3AwLnZhbFswXSwgKGludDh4MTZfdClfX3AwLnZhbFsxXSwgKGludDh4OF90KV9fcDEsIDE2KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDh4OF90IHZxdGJsMl91OCh1aW50OHgxNngyX3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKLSAgdWludDh4MTZ4Ml90IF9fcmV2MDsKLSAgX19yZXYwLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAudmFsWzBdLCBfX3AwLnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIF9fcmV2MC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLnZhbFsxXSwgX19wMC52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cXRibDJfdigoaW50OHgxNl90KV9fcmV2MC52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYwLnZhbFsxXSwgKGludDh4OF90KV9fcmV2MSwgMTYpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50OHg4X3QgdnF0YmwyX3M4KGludDh4MTZ4Ml90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKLSAgaW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cXRibDJfdigoaW50OHgxNl90KV9fcDAudmFsWzBdLCAoaW50OHgxNl90KV9fcDAudmFsWzFdLCAoaW50OHg4X3QpX19wMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDh4OF90IHZxdGJsMl9zOChpbnQ4eDE2eDJfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7Ci0gIGludDh4MTZ4Ml90IF9fcmV2MDsKLSAgX19yZXYwLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAudmFsWzBdLCBfX3AwLnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIF9fcmV2MC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLnZhbFsxXSwgX19wMC52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cXRibDJfdigoaW50OHgxNl90KV9fcmV2MC52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYwLnZhbFsxXSwgKGludDh4OF90KV9fcmV2MSwgMCk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBwb2x5OHg4X3QgdnF0YmwzX3A4KHBvbHk4eDE2eDNfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgewotICBwb2x5OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHBvbHk4eDhfdCkgX19idWlsdGluX25lb25fdnF0YmwzX3YoKGludDh4MTZfdClfX3AwLnZhbFswXSwgKGludDh4MTZfdClfX3AwLnZhbFsxXSwgKGludDh4MTZfdClfX3AwLnZhbFsyXSwgKGludDh4OF90KV9fcDEsIDQpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBwb2x5OHg4X3QgdnF0YmwzX3A4KHBvbHk4eDE2eDNfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgewotICBwb2x5OHgxNngzX3QgX19yZXYwOwotICBfX3JldjAudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMC52YWxbMF0sIF9fcDAudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgX19yZXYwLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAudmFsWzFdLCBfX3AwLnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIF9fcmV2MC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLnZhbFsyXSwgX19wMC52YWxbMl0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHBvbHk4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAocG9seTh4OF90KSBfX2J1aWx0aW5fbmVvbl92cXRibDNfdigoaW50OHgxNl90KV9fcmV2MC52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYwLnZhbFsxXSwgKGludDh4MTZfdClfX3JldjAudmFsWzJdLCAoaW50OHg4X3QpX19yZXYxLCA0KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHBvbHk4eDE2X3QgdnF0YmwzcV9wOChwb2x5OHgxNngzX3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7Ci0gIHBvbHk4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHBvbHk4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZxdGJsM3FfdigoaW50OHgxNl90KV9fcDAudmFsWzBdLCAoaW50OHgxNl90KV9fcDAudmFsWzFdLCAoaW50OHgxNl90KV9fcDAudmFsWzJdLCAoaW50OHgxNl90KV9fcDEsIDM2KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgcG9seTh4MTZfdCB2cXRibDNxX3A4KHBvbHk4eDE2eDNfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEpIHsKLSAgcG9seTh4MTZ4M190IF9fcmV2MDsKLSAgX19yZXYwLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAudmFsWzBdLCBfX3AwLnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIF9fcmV2MC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLnZhbFsxXSwgX19wMC52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBfX3JldjAudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMC52YWxbMl0sIF9fcDAudmFsWzJdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcG9seTh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSAocG9seTh4MTZfdCkgX19idWlsdGluX25lb25fdnF0YmwzcV92KChpbnQ4eDE2X3QpX19yZXYwLnZhbFswXSwgKGludDh4MTZfdClfX3JldjAudmFsWzFdLCAoaW50OHgxNl90KV9fcmV2MC52YWxbMl0sIChpbnQ4eDE2X3QpX19yZXYxLCAzNik7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50OHgxNl90IHZxdGJsM3FfdTgodWludDh4MTZ4M190IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgewotICB1aW50OHgxNl90IF9fcmV0OwotICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cXRibDNxX3YoKGludDh4MTZfdClfX3AwLnZhbFswXSwgKGludDh4MTZfdClfX3AwLnZhbFsxXSwgKGludDh4MTZfdClfX3AwLnZhbFsyXSwgKGludDh4MTZfdClfX3AxLCA0OCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ4eDE2X3QgdnF0YmwzcV91OCh1aW50OHgxNngzX3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7Ci0gIHVpbnQ4eDE2eDNfdCBfX3JldjA7Ci0gIF9fcmV2MC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLnZhbFswXSwgX19wMC52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBfX3JldjAudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMC52YWxbMV0sIF9fcDAudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgX19yZXYwLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAudmFsWzJdLCBfX3AwLnZhbFsyXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQ4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZxdGJsM3FfdigoaW50OHgxNl90KV9fcmV2MC52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYwLnZhbFsxXSwgKGludDh4MTZfdClfX3JldjAudmFsWzJdLCAoaW50OHgxNl90KV9fcmV2MSwgNDgpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50OHgxNl90IHZxdGJsM3FfczgoaW50OHgxNngzX3QgX19wMCwgaW50OHgxNl90IF9fcDEpIHsKLSAgaW50OHgxNl90IF9fcmV0OwotICBfX3JldCA9IChpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZxdGJsM3FfdigoaW50OHgxNl90KV9fcDAudmFsWzBdLCAoaW50OHgxNl90KV9fcDAudmFsWzFdLCAoaW50OHgxNl90KV9fcDAudmFsWzJdLCAoaW50OHgxNl90KV9fcDEsIDMyKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50OHgxNl90IHZxdGJsM3FfczgoaW50OHgxNngzX3QgX19wMCwgaW50OHgxNl90IF9fcDEpIHsKLSAgaW50OHgxNngzX3QgX19yZXYwOwotICBfX3JldjAudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMC52YWxbMF0sIF9fcDAudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgX19yZXYwLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAudmFsWzFdLCBfX3AwLnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIF9fcmV2MC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLnZhbFsyXSwgX19wMC52YWxbMl0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cXRibDNxX3YoKGludDh4MTZfdClfX3JldjAudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MC52YWxbMV0sIChpbnQ4eDE2X3QpX19yZXYwLnZhbFsyXSwgKGludDh4MTZfdClfX3JldjEsIDMyKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ4eDhfdCB2cXRibDNfdTgodWludDh4MTZ4M190IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7Ci0gIHVpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cXRibDNfdigoaW50OHgxNl90KV9fcDAudmFsWzBdLCAoaW50OHgxNl90KV9fcDAudmFsWzFdLCAoaW50OHgxNl90KV9fcDAudmFsWzJdLCAoaW50OHg4X3QpX19wMSwgMTYpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50OHg4X3QgdnF0YmwzX3U4KHVpbnQ4eDE2eDNfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgewotICB1aW50OHgxNngzX3QgX19yZXYwOwotICBfX3JldjAudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMC52YWxbMF0sIF9fcDAudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgX19yZXYwLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAudmFsWzFdLCBfX3AwLnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIF9fcmV2MC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLnZhbFsyXSwgX19wMC52YWxbMl0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cXRibDNfdigoaW50OHgxNl90KV9fcmV2MC52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYwLnZhbFsxXSwgKGludDh4MTZfdClfX3JldjAudmFsWzJdLCAoaW50OHg4X3QpX19yZXYxLCAxNik7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ4eDhfdCB2cXRibDNfczgoaW50OHgxNngzX3QgX19wMCwgaW50OHg4X3QgX19wMSkgewotICBpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxdGJsM192KChpbnQ4eDE2X3QpX19wMC52YWxbMF0sIChpbnQ4eDE2X3QpX19wMC52YWxbMV0sIChpbnQ4eDE2X3QpX19wMC52YWxbMl0sIChpbnQ4eDhfdClfX3AxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50OHg4X3QgdnF0YmwzX3M4KGludDh4MTZ4M190IF9fcDAsIGludDh4OF90IF9fcDEpIHsKLSAgaW50OHgxNngzX3QgX19yZXYwOwotICBfX3JldjAudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMC52YWxbMF0sIF9fcDAudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgX19yZXYwLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAudmFsWzFdLCBfX3AwLnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIF9fcmV2MC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLnZhbFsyXSwgX19wMC52YWxbMl0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cXRibDNfdigoaW50OHgxNl90KV9fcmV2MC52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYwLnZhbFsxXSwgKGludDh4MTZfdClfX3JldjAudmFsWzJdLCAoaW50OHg4X3QpX19yZXYxLCAwKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHBvbHk4eDhfdCB2cXRibDRfcDgocG9seTh4MTZ4NF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7Ci0gIHBvbHk4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAocG9seTh4OF90KSBfX2J1aWx0aW5fbmVvbl92cXRibDRfdigoaW50OHgxNl90KV9fcDAudmFsWzBdLCAoaW50OHgxNl90KV9fcDAudmFsWzFdLCAoaW50OHgxNl90KV9fcDAudmFsWzJdLCAoaW50OHgxNl90KV9fcDAudmFsWzNdLCAoaW50OHg4X3QpX19wMSwgNCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHBvbHk4eDhfdCB2cXRibDRfcDgocG9seTh4MTZ4NF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7Ci0gIHBvbHk4eDE2eDRfdCBfX3JldjA7Ci0gIF9fcmV2MC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLnZhbFswXSwgX19wMC52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBfX3JldjAudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMC52YWxbMV0sIF9fcDAudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgX19yZXYwLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAudmFsWzJdLCBfX3AwLnZhbFsyXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIF9fcmV2MC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLnZhbFszXSwgX19wMC52YWxbM10sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHBvbHk4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAocG9seTh4OF90KSBfX2J1aWx0aW5fbmVvbl92cXRibDRfdigoaW50OHgxNl90KV9fcmV2MC52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYwLnZhbFsxXSwgKGludDh4MTZfdClfX3JldjAudmFsWzJdLCAoaW50OHgxNl90KV9fcmV2MC52YWxbM10sIChpbnQ4eDhfdClfX3JldjEsIDQpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgcG9seTh4MTZfdCB2cXRibDRxX3A4KHBvbHk4eDE2eDRfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEpIHsKLSAgcG9seTh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSAocG9seTh4MTZfdCkgX19idWlsdGluX25lb25fdnF0Ymw0cV92KChpbnQ4eDE2X3QpX19wMC52YWxbMF0sIChpbnQ4eDE2X3QpX19wMC52YWxbMV0sIChpbnQ4eDE2X3QpX19wMC52YWxbMl0sIChpbnQ4eDE2X3QpX19wMC52YWxbM10sIChpbnQ4eDE2X3QpX19wMSwgMzYpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBwb2x5OHgxNl90IHZxdGJsNHFfcDgocG9seTh4MTZ4NF90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgewotICBwb2x5OHgxNng0X3QgX19yZXYwOwotICBfX3JldjAudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMC52YWxbMF0sIF9fcDAudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgX19yZXYwLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAudmFsWzFdLCBfX3AwLnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIF9fcmV2MC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLnZhbFsyXSwgX19wMC52YWxbMl0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBfX3JldjAudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMC52YWxbM10sIF9fcDAudmFsWzNdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcG9seTh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSAocG9seTh4MTZfdCkgX19idWlsdGluX25lb25fdnF0Ymw0cV92KChpbnQ4eDE2X3QpX19yZXYwLnZhbFswXSwgKGludDh4MTZfdClfX3JldjAudmFsWzFdLCAoaW50OHgxNl90KV9fcmV2MC52YWxbMl0sIChpbnQ4eDE2X3QpX19yZXYwLnZhbFszXSwgKGludDh4MTZfdClfX3JldjEsIDM2KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ4eDE2X3QgdnF0Ymw0cV91OCh1aW50OHgxNng0X3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7Ci0gIHVpbnQ4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZxdGJsNHFfdigoaW50OHgxNl90KV9fcDAudmFsWzBdLCAoaW50OHgxNl90KV9fcDAudmFsWzFdLCAoaW50OHgxNl90KV9fcDAudmFsWzJdLCAoaW50OHgxNl90KV9fcDAudmFsWzNdLCAoaW50OHgxNl90KV9fcDEsIDQ4KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDh4MTZfdCB2cXRibDRxX3U4KHVpbnQ4eDE2eDRfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEpIHsKLSAgdWludDh4MTZ4NF90IF9fcmV2MDsKLSAgX19yZXYwLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAudmFsWzBdLCBfX3AwLnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIF9fcmV2MC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLnZhbFsxXSwgX19wMC52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBfX3JldjAudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMC52YWxbMl0sIF9fcDAudmFsWzJdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgX19yZXYwLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAudmFsWzNdLCBfX3AwLnZhbFszXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQ4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZxdGJsNHFfdigoaW50OHgxNl90KV9fcmV2MC52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYwLnZhbFsxXSwgKGludDh4MTZfdClfX3JldjAudmFsWzJdLCAoaW50OHgxNl90KV9fcmV2MC52YWxbM10sIChpbnQ4eDE2X3QpX19yZXYxLCA0OCk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ4eDE2X3QgdnF0Ymw0cV9zOChpbnQ4eDE2eDRfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgewotICBpbnQ4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDh4MTZfdCkgX19idWlsdGluX25lb25fdnF0Ymw0cV92KChpbnQ4eDE2X3QpX19wMC52YWxbMF0sIChpbnQ4eDE2X3QpX19wMC52YWxbMV0sIChpbnQ4eDE2X3QpX19wMC52YWxbMl0sIChpbnQ4eDE2X3QpX19wMC52YWxbM10sIChpbnQ4eDE2X3QpX19wMSwgMzIpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQ4eDE2X3QgdnF0Ymw0cV9zOChpbnQ4eDE2eDRfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgewotICBpbnQ4eDE2eDRfdCBfX3JldjA7Ci0gIF9fcmV2MC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLnZhbFswXSwgX19wMC52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBfX3JldjAudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMC52YWxbMV0sIF9fcDAudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgX19yZXYwLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAudmFsWzJdLCBfX3AwLnZhbFsyXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIF9fcmV2MC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLnZhbFszXSwgX19wMC52YWxbM10sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cXRibDRxX3YoKGludDh4MTZfdClfX3JldjAudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MC52YWxbMV0sIChpbnQ4eDE2X3QpX19yZXYwLnZhbFsyXSwgKGludDh4MTZfdClfX3JldjAudmFsWzNdLCAoaW50OHgxNl90KV9fcmV2MSwgMzIpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDh4OF90IHZxdGJsNF91OCh1aW50OHgxNng0X3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKLSAgdWludDh4OF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxdGJsNF92KChpbnQ4eDE2X3QpX19wMC52YWxbMF0sIChpbnQ4eDE2X3QpX19wMC52YWxbMV0sIChpbnQ4eDE2X3QpX19wMC52YWxbMl0sIChpbnQ4eDE2X3QpX19wMC52YWxbM10sIChpbnQ4eDhfdClfX3AxLCAxNik7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ4eDhfdCB2cXRibDRfdTgodWludDh4MTZ4NF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7Ci0gIHVpbnQ4eDE2eDRfdCBfX3JldjA7Ci0gIF9fcmV2MC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLnZhbFswXSwgX19wMC52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBfX3JldjAudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMC52YWxbMV0sIF9fcDAudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgX19yZXYwLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAudmFsWzJdLCBfX3AwLnZhbFsyXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIF9fcmV2MC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLnZhbFszXSwgX19wMC52YWxbM10sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cXRibDRfdigoaW50OHgxNl90KV9fcmV2MC52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYwLnZhbFsxXSwgKGludDh4MTZfdClfX3JldjAudmFsWzJdLCAoaW50OHgxNl90KV9fcmV2MC52YWxbM10sIChpbnQ4eDhfdClfX3JldjEsIDE2KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDh4OF90IHZxdGJsNF9zOChpbnQ4eDE2eDRfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7Ci0gIGludDh4OF90IF9fcmV0OwotICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnF0Ymw0X3YoKGludDh4MTZfdClfX3AwLnZhbFswXSwgKGludDh4MTZfdClfX3AwLnZhbFsxXSwgKGludDh4MTZfdClfX3AwLnZhbFsyXSwgKGludDh4MTZfdClfX3AwLnZhbFszXSwgKGludDh4OF90KV9fcDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQ4eDhfdCB2cXRibDRfczgoaW50OHgxNng0X3QgX19wMCwgaW50OHg4X3QgX19wMSkgewotICBpbnQ4eDE2eDRfdCBfX3JldjA7Ci0gIF9fcmV2MC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLnZhbFswXSwgX19wMC52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBfX3JldjAudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMC52YWxbMV0sIF9fcDAudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgX19yZXYwLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAudmFsWzJdLCBfX3AwLnZhbFsyXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIF9fcmV2MC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLnZhbFszXSwgX19wMC52YWxbM10sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cXRibDRfdigoaW50OHgxNl90KV9fcmV2MC52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYwLnZhbFsxXSwgKGludDh4MTZfdClfX3JldjAudmFsWzJdLCAoaW50OHgxNl90KV9fcmV2MC52YWxbM10sIChpbnQ4eDhfdClfX3JldjEsIDApOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgcG9seTh4OF90IHZxdGJ4MV9wOChwb2x5OHg4X3QgX19wMCwgcG9seTh4MTZfdCBfX3AxLCB1aW50OHg4X3QgX19wMikgewotICBwb2x5OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHBvbHk4eDhfdCkgX19idWlsdGluX25lb25fdnF0YngxX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgKGludDh4OF90KV9fcDIsIDQpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBwb2x5OHg4X3QgdnF0YngxX3A4KHBvbHk4eDhfdCBfX3AwLCBwb2x5OHgxNl90IF9fcDEsIHVpbnQ4eDhfdCBfX3AyKSB7Ci0gIHBvbHk4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcG9seTh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDh4OF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBwb2x5OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHBvbHk4eDhfdCkgX19idWlsdGluX25lb25fdnF0YngxX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIChpbnQ4eDhfdClfX3JldjIsIDQpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgcG9seTh4MTZfdCB2cXRieDFxX3A4KHBvbHk4eDE2X3QgX19wMCwgcG9seTh4MTZfdCBfX3AxLCB1aW50OHgxNl90IF9fcDIpIHsKLSAgcG9seTh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSAocG9seTh4MTZfdCkgX19idWlsdGluX25lb25fdnF0YngxcV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAoaW50OHgxNl90KV9fcDIsIDM2KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgcG9seTh4MTZfdCB2cXRieDFxX3A4KHBvbHk4eDE2X3QgX19wMCwgcG9seTh4MTZfdCBfX3AxLCB1aW50OHgxNl90IF9fcDIpIHsKLSAgcG9seTh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcG9seTh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDh4MTZfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcG9seTh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSAocG9seTh4MTZfdCkgX19idWlsdGluX25lb25fdnF0YngxcV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgKGludDh4MTZfdClfX3JldjIsIDM2KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ4eDE2X3QgdnF0YngxcV91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSwgdWludDh4MTZfdCBfX3AyKSB7Ci0gIHVpbnQ4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZxdGJ4MXFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgKGludDh4MTZfdClfX3AyLCA0OCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ4eDE2X3QgdnF0YngxcV91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSwgdWludDh4MTZfdCBfX3AyKSB7Ci0gIHVpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQ4eDE2X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQ4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZxdGJ4MXFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIChpbnQ4eDE2X3QpX19yZXYyLCA0OCk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ4eDE2X3QgdnF0YngxcV9zOChpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEsIGludDh4MTZfdCBfX3AyKSB7Ci0gIGludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cXRieDFxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIChpbnQ4eDE2X3QpX19wMiwgMzIpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQ4eDE2X3QgdnF0YngxcV9zOChpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEsIGludDh4MTZfdCBfX3AyKSB7Ci0gIGludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQ4eDE2X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cXRieDFxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAoaW50OHgxNl90KV9fcmV2MiwgMzIpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDh4OF90IHZxdGJ4MV91OCh1aW50OHg4X3QgX19wMCwgdWludDh4MTZfdCBfX3AxLCB1aW50OHg4X3QgX19wMikgewotICB1aW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnF0YngxX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgKGludDh4OF90KV9fcDIsIDE2KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDh4OF90IHZxdGJ4MV91OCh1aW50OHg4X3QgX19wMCwgdWludDh4MTZfdCBfX3AxLCB1aW50OHg4X3QgX19wMikgewotICB1aW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQ4eDhfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDh4OF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxdGJ4MV92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAoaW50OHg4X3QpX19yZXYyLCAxNik7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ4eDhfdCB2cXRieDFfczgoaW50OHg4X3QgX19wMCwgaW50OHgxNl90IF9fcDEsIGludDh4OF90IF9fcDIpIHsKLSAgaW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cXRieDFfdigoaW50OHg4X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAoaW50OHg4X3QpX19wMiwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDh4OF90IHZxdGJ4MV9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSwgaW50OHg4X3QgX19wMikgewotICBpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQ4eDhfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cXRieDFfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgKGludDh4OF90KV9fcmV2MiwgMCk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBwb2x5OHg4X3QgdnF0YngyX3A4KHBvbHk4eDhfdCBfX3AwLCBwb2x5OHgxNngyX3QgX19wMSwgdWludDh4OF90IF9fcDIpIHsKLSAgcG9seTh4OF90IF9fcmV0OwotICBfX3JldCA9IChwb2x5OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxdGJ4Ml92KChpbnQ4eDhfdClfX3AwLCAoaW50OHgxNl90KV9fcDEudmFsWzBdLCAoaW50OHgxNl90KV9fcDEudmFsWzFdLCAoaW50OHg4X3QpX19wMiwgNCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHBvbHk4eDhfdCB2cXRieDJfcDgocG9seTh4OF90IF9fcDAsIHBvbHk4eDE2eDJfdCBfX3AxLCB1aW50OHg4X3QgX19wMikgewotICBwb2x5OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHBvbHk4eDE2eDJfdCBfX3JldjE7Ci0gIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLnZhbFswXSwgX19wMS52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMS52YWxbMV0sIF9fcDEudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDh4OF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBwb2x5OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHBvbHk4eDhfdCkgX19idWlsdGluX25lb25fdnF0YngyX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDhfdClfX3JldjIsIDQpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgcG9seTh4MTZfdCB2cXRieDJxX3A4KHBvbHk4eDE2X3QgX19wMCwgcG9seTh4MTZ4Ml90IF9fcDEsIHVpbnQ4eDE2X3QgX19wMikgewotICBwb2x5OHgxNl90IF9fcmV0OwotICBfX3JldCA9IChwb2x5OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cXRieDJxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEudmFsWzBdLCAoaW50OHgxNl90KV9fcDEudmFsWzFdLCAoaW50OHgxNl90KV9fcDIsIDM2KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgcG9seTh4MTZfdCB2cXRieDJxX3A4KHBvbHk4eDE2X3QgX19wMCwgcG9seTh4MTZ4Ml90IF9fcDEsIHVpbnQ4eDE2X3QgX19wMikgewotICBwb2x5OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBwb2x5OHgxNngyX3QgX19yZXYxOwotICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMS52YWxbMF0sIF9fcDEudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEudmFsWzFdLCBfX3AxLnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQ4eDE2X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHBvbHk4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHBvbHk4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZxdGJ4MnFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDE2X3QpX19yZXYyLCAzNik7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50OHgxNl90IHZxdGJ4MnFfdTgodWludDh4MTZfdCBfX3AwLCB1aW50OHgxNngyX3QgX19wMSwgdWludDh4MTZfdCBfX3AyKSB7Ci0gIHVpbnQ4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZxdGJ4MnFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMS52YWxbMF0sIChpbnQ4eDE2X3QpX19wMS52YWxbMV0sIChpbnQ4eDE2X3QpX19wMiwgNDgpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50OHgxNl90IHZxdGJ4MnFfdTgodWludDh4MTZfdCBfX3AwLCB1aW50OHgxNngyX3QgX19wMSwgdWludDh4MTZfdCBfX3AyKSB7Ci0gIHVpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQ4eDE2eDJfdCBfX3JldjE7Ci0gIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLnZhbFswXSwgX19wMS52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMS52YWxbMV0sIF9fcDEudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDh4MTZfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdnF0YngycV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgKGludDh4MTZfdClfX3JldjIsIDQ4KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDh4MTZfdCB2cXRieDJxX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2eDJfdCBfX3AxLCBpbnQ4eDE2X3QgX19wMikgewotICBpbnQ4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDh4MTZfdCkgX19idWlsdGluX25lb25fdnF0YngycV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLnZhbFswXSwgKGludDh4MTZfdClfX3AxLnZhbFsxXSwgKGludDh4MTZfdClfX3AyLCAzMik7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDh4MTZfdCB2cXRieDJxX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2eDJfdCBfX3AxLCBpbnQ4eDE2X3QgX19wMikgewotICBpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDh4MTZ4Ml90IF9fcmV2MTsKLSAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEudmFsWzBdLCBfX3AxLnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLnZhbFsxXSwgX19wMS52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQ4eDE2X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cXRieDJxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCAoaW50OHgxNl90KV9fcmV2MiwgMzIpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDh4OF90IHZxdGJ4Ml91OCh1aW50OHg4X3QgX19wMCwgdWludDh4MTZ4Ml90IF9fcDEsIHVpbnQ4eDhfdCBfX3AyKSB7Ci0gIHVpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cXRieDJfdigoaW50OHg4X3QpX19wMCwgKGludDh4MTZfdClfX3AxLnZhbFswXSwgKGludDh4MTZfdClfX3AxLnZhbFsxXSwgKGludDh4OF90KV9fcDIsIDE2KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDh4OF90IHZxdGJ4Ml91OCh1aW50OHg4X3QgX19wMCwgdWludDh4MTZ4Ml90IF9fcDEsIHVpbnQ4eDhfdCBfX3AyKSB7Ci0gIHVpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDh4MTZ4Ml90IF9fcmV2MTsKLSAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEudmFsWzBdLCBfX3AxLnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLnZhbFsxXSwgX19wMS52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50OHg4X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cXRieDJfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgKGludDh4OF90KV9fcmV2MiwgMTYpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50OHg4X3QgdnF0YngyX3M4KGludDh4OF90IF9fcDAsIGludDh4MTZ4Ml90IF9fcDEsIGludDh4OF90IF9fcDIpIHsKLSAgaW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cXRieDJfdigoaW50OHg4X3QpX19wMCwgKGludDh4MTZfdClfX3AxLnZhbFswXSwgKGludDh4MTZfdClfX3AxLnZhbFsxXSwgKGludDh4OF90KV9fcDIsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQ4eDhfdCB2cXRieDJfczgoaW50OHg4X3QgX19wMCwgaW50OHgxNngyX3QgX19wMSwgaW50OHg4X3QgX19wMikgewotICBpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50OHgxNngyX3QgX19yZXYxOwotICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMS52YWxbMF0sIF9fcDEudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEudmFsWzFdLCBfX3AxLnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDh4OF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxdGJ4Ml92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCAoaW50OHg4X3QpX19yZXYyLCAwKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHBvbHk4eDhfdCB2cXRieDNfcDgocG9seTh4OF90IF9fcDAsIHBvbHk4eDE2eDNfdCBfX3AxLCB1aW50OHg4X3QgX19wMikgewotICBwb2x5OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHBvbHk4eDhfdCkgX19idWlsdGluX25lb25fdnF0YngzX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDE2X3QpX19wMS52YWxbMF0sIChpbnQ4eDE2X3QpX19wMS52YWxbMV0sIChpbnQ4eDE2X3QpX19wMS52YWxbMl0sIChpbnQ4eDhfdClfX3AyLCA0KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgcG9seTh4OF90IHZxdGJ4M19wOChwb2x5OHg4X3QgX19wMCwgcG9seTh4MTZ4M190IF9fcDEsIHVpbnQ4eDhfdCBfX3AyKSB7Ci0gIHBvbHk4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcG9seTh4MTZ4M190IF9fcmV2MTsKLSAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEudmFsWzBdLCBfX3AxLnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLnZhbFsxXSwgX19wMS52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMS52YWxbMl0sIF9fcDEudmFsWzJdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDh4OF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBwb2x5OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHBvbHk4eDhfdCkgX19idWlsdGluX25lb25fdnF0YngzX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsyXSwgKGludDh4OF90KV9fcmV2MiwgNCk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBwb2x5OHgxNl90IHZxdGJ4M3FfcDgocG9seTh4MTZfdCBfX3AwLCBwb2x5OHgxNngzX3QgX19wMSwgdWludDh4MTZfdCBfX3AyKSB7Ci0gIHBvbHk4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHBvbHk4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZxdGJ4M3FfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMS52YWxbMF0sIChpbnQ4eDE2X3QpX19wMS52YWxbMV0sIChpbnQ4eDE2X3QpX19wMS52YWxbMl0sIChpbnQ4eDE2X3QpX19wMiwgMzYpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBwb2x5OHgxNl90IHZxdGJ4M3FfcDgocG9seTh4MTZfdCBfX3AwLCBwb2x5OHgxNngzX3QgX19wMSwgdWludDh4MTZfdCBfX3AyKSB7Ci0gIHBvbHk4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHBvbHk4eDE2eDNfdCBfX3JldjE7Ci0gIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLnZhbFswXSwgX19wMS52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMS52YWxbMV0sIF9fcDEudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEudmFsWzJdLCBfX3AxLnZhbFsyXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQ4eDE2X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHBvbHk4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHBvbHk4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZxdGJ4M3FfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsyXSwgKGludDh4MTZfdClfX3JldjIsIDM2KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ4eDE2X3QgdnF0YngzcV91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDE2eDNfdCBfX3AxLCB1aW50OHgxNl90IF9fcDIpIHsKLSAgdWludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdnF0YngzcV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLnZhbFswXSwgKGludDh4MTZfdClfX3AxLnZhbFsxXSwgKGludDh4MTZfdClfX3AxLnZhbFsyXSwgKGludDh4MTZfdClfX3AyLCA0OCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ4eDE2X3QgdnF0YngzcV91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDE2eDNfdCBfX3AxLCB1aW50OHgxNl90IF9fcDIpIHsKLSAgdWludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDh4MTZ4M190IF9fcmV2MTsKLSAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEudmFsWzBdLCBfX3AxLnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLnZhbFsxXSwgX19wMS52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMS52YWxbMl0sIF9fcDEudmFsWzJdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDh4MTZfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdnF0YngzcV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgKGludDh4MTZfdClfX3JldjEudmFsWzJdLCAoaW50OHgxNl90KV9fcmV2MiwgNDgpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50OHgxNl90IHZxdGJ4M3FfczgoaW50OHgxNl90IF9fcDAsIGludDh4MTZ4M190IF9fcDEsIGludDh4MTZfdCBfX3AyKSB7Ci0gIGludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cXRieDNxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEudmFsWzBdLCAoaW50OHgxNl90KV9fcDEudmFsWzFdLCAoaW50OHgxNl90KV9fcDEudmFsWzJdLCAoaW50OHgxNl90KV9fcDIsIDMyKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50OHgxNl90IHZxdGJ4M3FfczgoaW50OHgxNl90IF9fcDAsIGludDh4MTZ4M190IF9fcDEsIGludDh4MTZfdCBfX3AyKSB7Ci0gIGludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50OHgxNngzX3QgX19yZXYxOwotICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMS52YWxbMF0sIF9fcDEudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEudmFsWzFdLCBfX3AxLnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLnZhbFsyXSwgX19wMS52YWxbMl0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQ4eDE2X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cXRieDNxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMl0sIChpbnQ4eDE2X3QpX19yZXYyLCAzMik7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50OHg4X3QgdnF0YngzX3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHgxNngzX3QgX19wMSwgdWludDh4OF90IF9fcDIpIHsKLSAgdWludDh4OF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxdGJ4M192KChpbnQ4eDhfdClfX3AwLCAoaW50OHgxNl90KV9fcDEudmFsWzBdLCAoaW50OHgxNl90KV9fcDEudmFsWzFdLCAoaW50OHgxNl90KV9fcDEudmFsWzJdLCAoaW50OHg4X3QpX19wMiwgMTYpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50OHg4X3QgdnF0YngzX3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHgxNngzX3QgX19wMSwgdWludDh4OF90IF9fcDIpIHsKLSAgdWludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50OHgxNngzX3QgX19yZXYxOwotICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMS52YWxbMF0sIF9fcDEudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEudmFsWzFdLCBfX3AxLnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLnZhbFsyXSwgX19wMS52YWxbMl0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50OHg4X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cXRieDNfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgKGludDh4MTZfdClfX3JldjEudmFsWzJdLCAoaW50OHg4X3QpX19yZXYyLCAxNik7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ4eDhfdCB2cXRieDNfczgoaW50OHg4X3QgX19wMCwgaW50OHgxNngzX3QgX19wMSwgaW50OHg4X3QgX19wMikgewotICBpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxdGJ4M192KChpbnQ4eDhfdClfX3AwLCAoaW50OHgxNl90KV9fcDEudmFsWzBdLCAoaW50OHgxNl90KV9fcDEudmFsWzFdLCAoaW50OHgxNl90KV9fcDEudmFsWzJdLCAoaW50OHg4X3QpX19wMiwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDh4OF90IHZxdGJ4M19zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDE2eDNfdCBfX3AxLCBpbnQ4eDhfdCBfX3AyKSB7Ci0gIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQ4eDE2eDNfdCBfX3JldjE7Ci0gIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLnZhbFswXSwgX19wMS52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMS52YWxbMV0sIF9fcDEudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEudmFsWzJdLCBfX3AxLnZhbFsyXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDh4OF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxdGJ4M192KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMl0sIChpbnQ4eDhfdClfX3JldjIsIDApOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgcG9seTh4OF90IHZxdGJ4NF9wOChwb2x5OHg4X3QgX19wMCwgcG9seTh4MTZ4NF90IF9fcDEsIHVpbnQ4eDhfdCBfX3AyKSB7Ci0gIHBvbHk4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAocG9seTh4OF90KSBfX2J1aWx0aW5fbmVvbl92cXRieDRfdigoaW50OHg4X3QpX19wMCwgKGludDh4MTZfdClfX3AxLnZhbFswXSwgKGludDh4MTZfdClfX3AxLnZhbFsxXSwgKGludDh4MTZfdClfX3AxLnZhbFsyXSwgKGludDh4MTZfdClfX3AxLnZhbFszXSwgKGludDh4OF90KV9fcDIsIDQpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBwb2x5OHg4X3QgdnF0Yng0X3A4KHBvbHk4eDhfdCBfX3AwLCBwb2x5OHgxNng0X3QgX19wMSwgdWludDh4OF90IF9fcDIpIHsKLSAgcG9seTh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBwb2x5OHgxNng0X3QgX19yZXYxOwotICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMS52YWxbMF0sIF9fcDEudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEudmFsWzFdLCBfX3AxLnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLnZhbFsyXSwgX19wMS52YWxbMl0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMS52YWxbM10sIF9fcDEudmFsWzNdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDh4OF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBwb2x5OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHBvbHk4eDhfdCkgX19idWlsdGluX25lb25fdnF0Yng0X3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsyXSwgKGludDh4MTZfdClfX3JldjEudmFsWzNdLCAoaW50OHg4X3QpX19yZXYyLCA0KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHBvbHk4eDE2X3QgdnF0Yng0cV9wOChwb2x5OHgxNl90IF9fcDAsIHBvbHk4eDE2eDRfdCBfX3AxLCB1aW50OHgxNl90IF9fcDIpIHsKLSAgcG9seTh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSAocG9seTh4MTZfdCkgX19idWlsdGluX25lb25fdnF0Yng0cV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLnZhbFswXSwgKGludDh4MTZfdClfX3AxLnZhbFsxXSwgKGludDh4MTZfdClfX3AxLnZhbFsyXSwgKGludDh4MTZfdClfX3AxLnZhbFszXSwgKGludDh4MTZfdClfX3AyLCAzNik7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHBvbHk4eDE2X3QgdnF0Yng0cV9wOChwb2x5OHgxNl90IF9fcDAsIHBvbHk4eDE2eDRfdCBfX3AxLCB1aW50OHgxNl90IF9fcDIpIHsKLSAgcG9seTh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcG9seTh4MTZ4NF90IF9fcmV2MTsKLSAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEudmFsWzBdLCBfX3AxLnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLnZhbFsxXSwgX19wMS52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMS52YWxbMl0sIF9fcDEudmFsWzJdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEudmFsWzNdLCBfX3AxLnZhbFszXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQ4eDE2X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHBvbHk4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHBvbHk4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZxdGJ4NHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsyXSwgKGludDh4MTZfdClfX3JldjEudmFsWzNdLCAoaW50OHgxNl90KV9fcmV2MiwgMzYpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDh4MTZfdCB2cXRieDRxX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZ4NF90IF9fcDEsIHVpbnQ4eDE2X3QgX19wMikgewotICB1aW50OHgxNl90IF9fcmV0OwotICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cXRieDRxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEudmFsWzBdLCAoaW50OHgxNl90KV9fcDEudmFsWzFdLCAoaW50OHgxNl90KV9fcDEudmFsWzJdLCAoaW50OHgxNl90KV9fcDEudmFsWzNdLCAoaW50OHgxNl90KV9fcDIsIDQ4KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDh4MTZfdCB2cXRieDRxX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZ4NF90IF9fcDEsIHVpbnQ4eDE2X3QgX19wMikgewotICB1aW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50OHgxNng0X3QgX19yZXYxOwotICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMS52YWxbMF0sIF9fcDEudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEudmFsWzFdLCBfX3AxLnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLnZhbFsyXSwgX19wMS52YWxbMl0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMS52YWxbM10sIF9fcDEudmFsWzNdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDh4MTZfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdnF0Yng0cV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgKGludDh4MTZfdClfX3JldjEudmFsWzJdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbM10sIChpbnQ4eDE2X3QpX19yZXYyLCA0OCk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ4eDE2X3QgdnF0Yng0cV9zOChpbnQ4eDE2X3QgX19wMCwgaW50OHgxNng0X3QgX19wMSwgaW50OHgxNl90IF9fcDIpIHsKLSAgaW50OHgxNl90IF9fcmV0OwotICBfX3JldCA9IChpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZxdGJ4NHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMS52YWxbMF0sIChpbnQ4eDE2X3QpX19wMS52YWxbMV0sIChpbnQ4eDE2X3QpX19wMS52YWxbMl0sIChpbnQ4eDE2X3QpX19wMS52YWxbM10sIChpbnQ4eDE2X3QpX19wMiwgMzIpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQ4eDE2X3QgdnF0Yng0cV9zOChpbnQ4eDE2X3QgX19wMCwgaW50OHgxNng0X3QgX19wMSwgaW50OHgxNl90IF9fcDIpIHsKLSAgaW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQ4eDE2eDRfdCBfX3JldjE7Ci0gIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLnZhbFswXSwgX19wMS52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMS52YWxbMV0sIF9fcDEudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEudmFsWzJdLCBfX3AxLnZhbFsyXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIF9fcmV2MS52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLnZhbFszXSwgX19wMS52YWxbM10sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQ4eDE2X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cXRieDRxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMl0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFszXSwgKGludDh4MTZfdClfX3JldjIsIDMyKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ4eDhfdCB2cXRieDRfdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDE2eDRfdCBfX3AxLCB1aW50OHg4X3QgX19wMikgewotICB1aW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnF0Yng0X3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDE2X3QpX19wMS52YWxbMF0sIChpbnQ4eDE2X3QpX19wMS52YWxbMV0sIChpbnQ4eDE2X3QpX19wMS52YWxbMl0sIChpbnQ4eDE2X3QpX19wMS52YWxbM10sIChpbnQ4eDhfdClfX3AyLCAxNik7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ4eDhfdCB2cXRieDRfdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDE2eDRfdCBfX3AxLCB1aW50OHg4X3QgX19wMikgewotICB1aW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQ4eDE2eDRfdCBfX3JldjE7Ci0gIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLnZhbFswXSwgX19wMS52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMS52YWxbMV0sIF9fcDEudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEudmFsWzJdLCBfX3AxLnZhbFsyXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIF9fcmV2MS52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLnZhbFszXSwgX19wMS52YWxbM10sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50OHg4X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cXRieDRfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgKGludDh4MTZfdClfX3JldjEudmFsWzJdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbM10sIChpbnQ4eDhfdClfX3JldjIsIDE2KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDh4OF90IHZxdGJ4NF9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDE2eDRfdCBfX3AxLCBpbnQ4eDhfdCBfX3AyKSB7Ci0gIGludDh4OF90IF9fcmV0OwotICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnF0Yng0X3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDE2X3QpX19wMS52YWxbMF0sIChpbnQ4eDE2X3QpX19wMS52YWxbMV0sIChpbnQ4eDE2X3QpX19wMS52YWxbMl0sIChpbnQ4eDE2X3QpX19wMS52YWxbM10sIChpbnQ4eDhfdClfX3AyLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50OHg4X3QgdnF0Yng0X3M4KGludDh4OF90IF9fcDAsIGludDh4MTZ4NF90IF9fcDEsIGludDh4OF90IF9fcDIpIHsKLSAgaW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDh4MTZ4NF90IF9fcmV2MTsKLSAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEudmFsWzBdLCBfX3AxLnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLnZhbFsxXSwgX19wMS52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMS52YWxbMl0sIF9fcDEudmFsWzJdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEudmFsWzNdLCBfX3AxLnZhbFszXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDh4OF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxdGJ4NF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMl0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFszXSwgKGludDh4OF90KV9fcmV2MiwgMCk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MTZ4OF90IHZyYWRkaG5faGlnaF91MzIodWludDE2eDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEsIHVpbnQzMng0X3QgX19wMikgewotICB1aW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IHZjb21iaW5lX3UxNihfX3AwLCB2cmFkZGhuX3UzMihfX3AxLCBfX3AyKSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQxNng4X3QgdnJhZGRobl9oaWdoX3UzMih1aW50MTZ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSwgdWludDMyeDRfdCBfX3AyKSB7Ci0gIHVpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7Ci0gIHVpbnQzMng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMywgMiwgMSwgMCk7Ci0gIHVpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19ub3N3YXBfdmNvbWJpbmVfdTE2KF9fcmV2MCwgX19ub3N3YXBfdnJhZGRobl91MzIoX19yZXYxLCBfX3JldjIpKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQzMng0X3QgdnJhZGRobl9oaWdoX3U2NCh1aW50MzJ4Ml90IF9fcDAsIHVpbnQ2NHgyX3QgX19wMSwgdWludDY0eDJfdCBfX3AyKSB7Ci0gIHVpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gdmNvbWJpbmVfdTMyKF9fcDAsIHZyYWRkaG5fdTY0KF9fcDEsIF9fcDIpKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDMyeDRfdCB2cmFkZGhuX2hpZ2hfdTY0KHVpbnQzMngyX3QgX19wMCwgdWludDY0eDJfdCBfX3AxLCB1aW50NjR4Ml90IF9fcDIpIHsKLSAgdWludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgdWludDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKLSAgdWludDY0eDJfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAxLCAwKTsKLSAgdWludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSBfX25vc3dhcF92Y29tYmluZV91MzIoX19yZXYwLCBfX25vc3dhcF92cmFkZGhuX3U2NChfX3JldjEsIF9fcmV2MikpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDh4MTZfdCB2cmFkZGhuX2hpZ2hfdTE2KHVpbnQ4eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEsIHVpbnQxNng4X3QgX19wMikgewotICB1aW50OHgxNl90IF9fcmV0OwotICBfX3JldCA9IHZjb21iaW5lX3U4KF9fcDAsIHZyYWRkaG5fdTE2KF9fcDEsIF9fcDIpKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDh4MTZfdCB2cmFkZGhuX2hpZ2hfdTE2KHVpbnQ4eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEsIHVpbnQxNng4X3QgX19wMikgewotICB1aW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQxNng4X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQ4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19ub3N3YXBfdmNvbWJpbmVfdTgoX19yZXYwLCBfX25vc3dhcF92cmFkZGhuX3UxNihfX3JldjEsIF9fcmV2MikpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MTZ4OF90IHZyYWRkaG5faGlnaF9zMzIoaW50MTZ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxLCBpbnQzMng0X3QgX19wMikgewotICBpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gdmNvbWJpbmVfczE2KF9fcDAsIHZyYWRkaG5fczMyKF9fcDEsIF9fcDIpKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MTZ4OF90IHZyYWRkaG5faGlnaF9zMzIoaW50MTZ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxLCBpbnQzMng0X3QgX19wMikgewotICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKLSAgaW50MzJ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDMsIDIsIDEsIDApOwotICBpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19ub3N3YXBfdmNvbWJpbmVfczE2KF9fcmV2MCwgX19ub3N3YXBfdnJhZGRobl9zMzIoX19yZXYxLCBfX3JldjIpKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDMyeDRfdCB2cmFkZGhuX2hpZ2hfczY0KGludDMyeDJfdCBfX3AwLCBpbnQ2NHgyX3QgX19wMSwgaW50NjR4Ml90IF9fcDIpIHsKLSAgaW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IHZjb21iaW5lX3MzMihfX3AwLCB2cmFkZGhuX3M2NChfX3AxLCBfX3AyKSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDMyeDRfdCB2cmFkZGhuX2hpZ2hfczY0KGludDMyeDJfdCBfX3AwLCBpbnQ2NHgyX3QgX19wMSwgaW50NjR4Ml90IF9fcDIpIHsKLSAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICBpbnQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7Ci0gIGludDY0eDJfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAxLCAwKTsKLSAgaW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IF9fbm9zd2FwX3Zjb21iaW5lX3MzMihfX3JldjAsIF9fbm9zd2FwX3ZyYWRkaG5fczY0KF9fcmV2MSwgX19yZXYyKSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ4eDE2X3QgdnJhZGRobl9oaWdoX3MxNihpbnQ4eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSwgaW50MTZ4OF90IF9fcDIpIHsKLSAgaW50OHgxNl90IF9fcmV0OwotICBfX3JldCA9IHZjb21iaW5lX3M4KF9fcDAsIHZyYWRkaG5fczE2KF9fcDEsIF9fcDIpKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50OHgxNl90IHZyYWRkaG5faGlnaF9zMTYoaW50OHg4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEsIGludDE2eDhfdCBfX3AyKSB7Ci0gIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDE2eDhfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50OHgxNl90IF9fcmV0OwotICBfX3JldCA9IF9fbm9zd2FwX3Zjb21iaW5lX3M4KF9fcmV2MCwgX19ub3N3YXBfdnJhZGRobl9zMTYoX19yZXYxLCBfX3JldjIpKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHBvbHk4eDhfdCB2cmJpdF9wOChwb2x5OHg4X3QgX19wMCkgewotICBwb2x5OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHBvbHk4eDhfdCkgX19idWlsdGluX25lb25fdnJiaXRfdigoaW50OHg4X3QpX19wMCwgNCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHBvbHk4eDhfdCB2cmJpdF9wOChwb2x5OHg4X3QgX19wMCkgewotICBwb2x5OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHBvbHk4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAocG9seTh4OF90KSBfX2J1aWx0aW5fbmVvbl92cmJpdF92KChpbnQ4eDhfdClfX3JldjAsIDQpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgcG9seTh4MTZfdCB2cmJpdHFfcDgocG9seTh4MTZfdCBfX3AwKSB7Ci0gIHBvbHk4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHBvbHk4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZyYml0cV92KChpbnQ4eDE2X3QpX19wMCwgMzYpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBwb2x5OHgxNl90IHZyYml0cV9wOChwb2x5OHgxNl90IF9fcDApIHsKLSAgcG9seTh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcG9seTh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSAocG9seTh4MTZfdCkgX19idWlsdGluX25lb25fdnJiaXRxX3YoKGludDh4MTZfdClfX3JldjAsIDM2KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ4eDE2X3QgdnJiaXRxX3U4KHVpbnQ4eDE2X3QgX19wMCkgewotICB1aW50OHgxNl90IF9fcmV0OwotICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cmJpdHFfdigoaW50OHgxNl90KV9fcDAsIDQ4KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDh4MTZfdCB2cmJpdHFfdTgodWludDh4MTZfdCBfX3AwKSB7Ci0gIHVpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQ4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZyYml0cV92KChpbnQ4eDE2X3QpX19yZXYwLCA0OCk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ4eDE2X3QgdnJiaXRxX3M4KGludDh4MTZfdCBfX3AwKSB7Ci0gIGludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cmJpdHFfdigoaW50OHgxNl90KV9fcDAsIDMyKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50OHgxNl90IHZyYml0cV9zOChpbnQ4eDE2X3QgX19wMCkgewotICBpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cmJpdHFfdigoaW50OHgxNl90KV9fcmV2MCwgMzIpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDh4OF90IHZyYml0X3U4KHVpbnQ4eDhfdCBfX3AwKSB7Ci0gIHVpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cmJpdF92KChpbnQ4eDhfdClfX3AwLCAxNik7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ4eDhfdCB2cmJpdF91OCh1aW50OHg4X3QgX19wMCkgewotICB1aW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cmJpdF92KChpbnQ4eDhfdClfX3JldjAsIDE2KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDh4OF90IHZyYml0X3M4KGludDh4OF90IF9fcDApIHsKLSAgaW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cmJpdF92KChpbnQ4eDhfdClfX3AwLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50OHg4X3QgdnJiaXRfczgoaW50OHg4X3QgX19wMCkgewotICBpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cmJpdF92KChpbnQ4eDhfdClfX3JldjAsIDApOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgZmxvYXQ2NHgyX3QgdnJlY3BlcV9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgewotICBmbG9hdDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZyZWNwZXFfdigoaW50OHgxNl90KV9fcDAsIDQyKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgZmxvYXQ2NHgyX3QgdnJlY3BlcV9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgewotICBmbG9hdDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgZmxvYXQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92cmVjcGVxX3YoKGludDh4MTZfdClfX3JldjAsIDQyKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGZsb2F0NjR4MV90IHZyZWNwZV9mNjQoZmxvYXQ2NHgxX3QgX19wMCkgewotICBmbG9hdDY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZyZWNwZV92KChpbnQ4eDhfdClfX3AwLCAxMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGZsb2F0NjR4MV90IHZyZWNwZV9mNjQoZmxvYXQ2NHgxX3QgX19wMCkgewotICBmbG9hdDY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZyZWNwZV92KChpbnQ4eDhfdClfX3AwLCAxMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgZmxvYXQ2NF90IHZyZWNwZWRfZjY0KGZsb2F0NjRfdCBfX3AwKSB7Ci0gIGZsb2F0NjRfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQ2NF90KSBfX2J1aWx0aW5fbmVvbl92cmVjcGVkX2Y2NChfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgZmxvYXQ2NF90IHZyZWNwZWRfZjY0KGZsb2F0NjRfdCBfX3AwKSB7Ci0gIGZsb2F0NjRfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQ2NF90KSBfX2J1aWx0aW5fbmVvbl92cmVjcGVkX2Y2NChfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBmbG9hdDMyX3QgdnJlY3Blc19mMzIoZmxvYXQzMl90IF9fcDApIHsKLSAgZmxvYXQzMl90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZyZWNwZXNfZjMyKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBmbG9hdDMyX3QgdnJlY3Blc19mMzIoZmxvYXQzMl90IF9fcDApIHsKLSAgZmxvYXQzMl90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZyZWNwZXNfZjMyKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGZsb2F0NjR4Ml90IHZyZWNwc3FfZjY0KGZsb2F0NjR4Ml90IF9fcDAsIGZsb2F0NjR4Ml90IF9fcDEpIHsKLSAgZmxvYXQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92cmVjcHNxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDQyKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgZmxvYXQ2NHgyX3QgdnJlY3BzcV9mNjQoZmxvYXQ2NHgyX3QgX19wMCwgZmxvYXQ2NHgyX3QgX19wMSkgewotICBmbG9hdDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgZmxvYXQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7Ci0gIGZsb2F0NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDY0eDJfdCkgX19idWlsdGluX25lb25fdnJlY3BzcV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNDIpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgZmxvYXQ2NHgxX3QgdnJlY3BzX2Y2NChmbG9hdDY0eDFfdCBfX3AwLCBmbG9hdDY0eDFfdCBfX3AxKSB7Ci0gIGZsb2F0NjR4MV90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDY0eDFfdCkgX19idWlsdGluX25lb25fdnJlY3BzX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGZsb2F0NjR4MV90IHZyZWNwc19mNjQoZmxvYXQ2NHgxX3QgX19wMCwgZmxvYXQ2NHgxX3QgX19wMSkgewotICBmbG9hdDY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZyZWNwc192KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGZsb2F0NjRfdCB2cmVjcHNkX2Y2NChmbG9hdDY0X3QgX19wMCwgZmxvYXQ2NF90IF9fcDEpIHsKLSAgZmxvYXQ2NF90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZyZWNwc2RfZjY0KF9fcDAsIF9fcDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBmbG9hdDY0X3QgdnJlY3BzZF9mNjQoZmxvYXQ2NF90IF9fcDAsIGZsb2F0NjRfdCBfX3AxKSB7Ci0gIGZsb2F0NjRfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQ2NF90KSBfX2J1aWx0aW5fbmVvbl92cmVjcHNkX2Y2NChfX3AwLCBfX3AxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBmbG9hdDMyX3QgdnJlY3Bzc19mMzIoZmxvYXQzMl90IF9fcDAsIGZsb2F0MzJfdCBfX3AxKSB7Ci0gIGZsb2F0MzJfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQzMl90KSBfX2J1aWx0aW5fbmVvbl92cmVjcHNzX2YzMihfX3AwLCBfX3AxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgZmxvYXQzMl90IHZyZWNwc3NfZjMyKGZsb2F0MzJfdCBfX3AwLCBmbG9hdDMyX3QgX19wMSkgewotICBmbG9hdDMyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0MzJfdCkgX19idWlsdGluX25lb25fdnJlY3Bzc19mMzIoX19wMCwgX19wMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgZmxvYXQ2NF90IHZyZWNweGRfZjY0KGZsb2F0NjRfdCBfX3AwKSB7Ci0gIGZsb2F0NjRfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQ2NF90KSBfX2J1aWx0aW5fbmVvbl92cmVjcHhkX2Y2NChfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgZmxvYXQ2NF90IHZyZWNweGRfZjY0KGZsb2F0NjRfdCBfX3AwKSB7Ci0gIGZsb2F0NjRfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQ2NF90KSBfX2J1aWx0aW5fbmVvbl92cmVjcHhkX2Y2NChfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBmbG9hdDMyX3QgdnJlY3B4c19mMzIoZmxvYXQzMl90IF9fcDApIHsKLSAgZmxvYXQzMl90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZyZWNweHNfZjMyKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBmbG9hdDMyX3QgdnJlY3B4c19mMzIoZmxvYXQzMl90IF9fcDApIHsKLSAgZmxvYXQzMl90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZyZWNweHNfZjMyKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ2NF90IHZyc2hsZF91NjQodWludDY0X3QgX19wMCwgdWludDY0X3QgX19wMSkgewotICB1aW50NjRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc2hsZF91NjQoX19wMCwgX19wMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ2NF90IHZyc2hsZF91NjQodWludDY0X3QgX19wMCwgdWludDY0X3QgX19wMSkgewotICB1aW50NjRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc2hsZF91NjQoX19wMCwgX19wMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50NjRfdCB2cnNobGRfczY0KGludDY0X3QgX19wMCwgaW50NjRfdCBfX3AxKSB7Ci0gIGludDY0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc2hsZF9zNjQoX19wMCwgX19wMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDY0X3QgdnJzaGxkX3M2NChpbnQ2NF90IF9fcDAsIGludDY0X3QgX19wMSkgewotICBpbnQ2NF90IF9fcmV0OwotICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92cnNobGRfczY0KF9fcDAsIF9fcDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZyc2hyZF9uX3U2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDY0X3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDY0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc2hyZF9uX3U2NChfX3MwLCBfX3AxKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZyc2hyZF9uX3U2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDY0X3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDY0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc2hyZF9uX3U2NChfX3MwLCBfX3AxKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnJzaHJkX25fczY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ2NF90IF9fczAgPSBfX3AwOyBcCi0gIGludDY0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdnJzaHJkX25fczY0KF9fczAsIF9fcDEpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnJzaHJkX25fczY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ2NF90IF9fczAgPSBfX3AwOyBcCi0gIGludDY0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdnJzaHJkX25fczY0KF9fczAsIF9fcDEpOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2cnNocm5faGlnaF9uX3UzMihfX3AwXzIwNiwgX19wMV8yMDYsIF9fcDJfMjA2KSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDE2eDRfdCBfX3MwXzIwNiA9IF9fcDBfMjA2OyBcCi0gIHVpbnQzMng0X3QgX19zMV8yMDYgPSBfX3AxXzIwNjsgXAotICB1aW50MTZ4OF90IF9fcmV0XzIwNjsgXAotICBfX3JldF8yMDYgPSAodWludDE2eDhfdCkodmNvbWJpbmVfdTE2KCh1aW50MTZ4NF90KShfX3MwXzIwNiksICh1aW50MTZ4NF90KSh2cnNocm5fbl91MzIoX19zMV8yMDYsIF9fcDJfMjA2KSkpKTsgXAotICBfX3JldF8yMDY7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2cnNocm5faGlnaF9uX3UzMihfX3AwXzIwNywgX19wMV8yMDcsIF9fcDJfMjA3KSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDE2eDRfdCBfX3MwXzIwNyA9IF9fcDBfMjA3OyBcCi0gIHVpbnQzMng0X3QgX19zMV8yMDcgPSBfX3AxXzIwNzsgXAotICB1aW50MTZ4NF90IF9fcmV2MF8yMDc7ICBfX3JldjBfMjA3ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMF8yMDcsIF9fczBfMjA3LCAzLCAyLCAxLCAwKTsgXAotICB1aW50MzJ4NF90IF9fcmV2MV8yMDc7ICBfX3JldjFfMjA3ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMV8yMDcsIF9fczFfMjA3LCAzLCAyLCAxLCAwKTsgXAotICB1aW50MTZ4OF90IF9fcmV0XzIwNzsgXAotICBfX3JldF8yMDcgPSAodWludDE2eDhfdCkoX19ub3N3YXBfdmNvbWJpbmVfdTE2KCh1aW50MTZ4NF90KShfX3JldjBfMjA3KSwgKHVpbnQxNng0X3QpKF9fbm9zd2FwX3Zyc2hybl9uX3UzMihfX3JldjFfMjA3LCBfX3AyXzIwNykpKSk7IFwKLSAgX19yZXRfMjA3ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXRfMjA3LCBfX3JldF8yMDcsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0XzIwNzsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnJzaHJuX2hpZ2hfbl91NjQoX19wMF8yMDgsIF9fcDFfMjA4LCBfX3AyXzIwOCkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQzMngyX3QgX19zMF8yMDggPSBfX3AwXzIwODsgXAotICB1aW50NjR4Ml90IF9fczFfMjA4ID0gX19wMV8yMDg7IFwKLSAgdWludDMyeDRfdCBfX3JldF8yMDg7IFwKLSAgX19yZXRfMjA4ID0gKHVpbnQzMng0X3QpKHZjb21iaW5lX3UzMigodWludDMyeDJfdCkoX19zMF8yMDgpLCAodWludDMyeDJfdCkodnJzaHJuX25fdTY0KF9fczFfMjA4LCBfX3AyXzIwOCkpKSk7IFwKLSAgX19yZXRfMjA4OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnJzaHJuX2hpZ2hfbl91NjQoX19wMF8yMDksIF9fcDFfMjA5LCBfX3AyXzIwOSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQzMngyX3QgX19zMF8yMDkgPSBfX3AwXzIwOTsgXAotICB1aW50NjR4Ml90IF9fczFfMjA5ID0gX19wMV8yMDk7IFwKLSAgdWludDMyeDJfdCBfX3JldjBfMjA5OyAgX19yZXYwXzIwOSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczBfMjA5LCBfX3MwXzIwOSwgMSwgMCk7IFwKLSAgdWludDY0eDJfdCBfX3JldjFfMjA5OyAgX19yZXYxXzIwOSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczFfMjA5LCBfX3MxXzIwOSwgMSwgMCk7IFwKLSAgdWludDMyeDRfdCBfX3JldF8yMDk7IFwKLSAgX19yZXRfMjA5ID0gKHVpbnQzMng0X3QpKF9fbm9zd2FwX3Zjb21iaW5lX3UzMigodWludDMyeDJfdCkoX19yZXYwXzIwOSksICh1aW50MzJ4Ml90KShfX25vc3dhcF92cnNocm5fbl91NjQoX19yZXYxXzIwOSwgX19wMl8yMDkpKSkpOyBcCi0gIF9fcmV0XzIwOSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0XzIwOSwgX19yZXRfMjA5LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldF8yMDk7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZyc2hybl9oaWdoX25fdTE2KF9fcDBfMjEwLCBfX3AxXzIxMCwgX19wMl8yMTApIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50OHg4X3QgX19zMF8yMTAgPSBfX3AwXzIxMDsgXAotICB1aW50MTZ4OF90IF9fczFfMjEwID0gX19wMV8yMTA7IFwKLSAgdWludDh4MTZfdCBfX3JldF8yMTA7IFwKLSAgX19yZXRfMjEwID0gKHVpbnQ4eDE2X3QpKHZjb21iaW5lX3U4KCh1aW50OHg4X3QpKF9fczBfMjEwKSwgKHVpbnQ4eDhfdCkodnJzaHJuX25fdTE2KF9fczFfMjEwLCBfX3AyXzIxMCkpKSk7IFwKLSAgX19yZXRfMjEwOyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnJzaHJuX2hpZ2hfbl91MTYoX19wMF8yMTEsIF9fcDFfMjExLCBfX3AyXzIxMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ4eDhfdCBfX3MwXzIxMSA9IF9fcDBfMjExOyBcCi0gIHVpbnQxNng4X3QgX19zMV8yMTEgPSBfX3AxXzIxMTsgXAotICB1aW50OHg4X3QgX19yZXYwXzIxMTsgIF9fcmV2MF8yMTEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwXzIxMSwgX19zMF8yMTEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIHVpbnQxNng4X3QgX19yZXYxXzIxMTsgIF9fcmV2MV8yMTEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxXzIxMSwgX19zMV8yMTEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIHVpbnQ4eDE2X3QgX19yZXRfMjExOyBcCi0gIF9fcmV0XzIxMSA9ICh1aW50OHgxNl90KShfX25vc3dhcF92Y29tYmluZV91OCgodWludDh4OF90KShfX3JldjBfMjExKSwgKHVpbnQ4eDhfdCkoX19ub3N3YXBfdnJzaHJuX25fdTE2KF9fcmV2MV8yMTEsIF9fcDJfMjExKSkpKTsgXAotICBfX3JldF8yMTEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldF8yMTEsIF9fcmV0XzIxMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXRfMjExOyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2cnNocm5faGlnaF9uX3MzMihfX3AwXzIxMiwgX19wMV8yMTIsIF9fcDJfMjEyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MTZ4NF90IF9fczBfMjEyID0gX19wMF8yMTI7IFwKLSAgaW50MzJ4NF90IF9fczFfMjEyID0gX19wMV8yMTI7IFwKLSAgaW50MTZ4OF90IF9fcmV0XzIxMjsgXAotICBfX3JldF8yMTIgPSAoaW50MTZ4OF90KSh2Y29tYmluZV9zMTYoKGludDE2eDRfdCkoX19zMF8yMTIpLCAoaW50MTZ4NF90KSh2cnNocm5fbl9zMzIoX19zMV8yMTIsIF9fcDJfMjEyKSkpKTsgXAotICBfX3JldF8yMTI7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2cnNocm5faGlnaF9uX3MzMihfX3AwXzIxMywgX19wMV8yMTMsIF9fcDJfMjEzKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MTZ4NF90IF9fczBfMjEzID0gX19wMF8yMTM7IFwKLSAgaW50MzJ4NF90IF9fczFfMjEzID0gX19wMV8yMTM7IFwKLSAgaW50MTZ4NF90IF9fcmV2MF8yMTM7ICBfX3JldjBfMjEzID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMF8yMTMsIF9fczBfMjEzLCAzLCAyLCAxLCAwKTsgXAotICBpbnQzMng0X3QgX19yZXYxXzIxMzsgIF9fcmV2MV8yMTMgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxXzIxMywgX19zMV8yMTMsIDMsIDIsIDEsIDApOyBcCi0gIGludDE2eDhfdCBfX3JldF8yMTM7IFwKLSAgX19yZXRfMjEzID0gKGludDE2eDhfdCkoX19ub3N3YXBfdmNvbWJpbmVfczE2KChpbnQxNng0X3QpKF9fcmV2MF8yMTMpLCAoaW50MTZ4NF90KShfX25vc3dhcF92cnNocm5fbl9zMzIoX19yZXYxXzIxMywgX19wMl8yMTMpKSkpOyBcCi0gIF9fcmV0XzIxMyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0XzIxMywgX19yZXRfMjEzLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldF8yMTM7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZyc2hybl9oaWdoX25fczY0KF9fcDBfMjE0LCBfX3AxXzIxNCwgX19wMl8yMTQpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQzMngyX3QgX19zMF8yMTQgPSBfX3AwXzIxNDsgXAotICBpbnQ2NHgyX3QgX19zMV8yMTQgPSBfX3AxXzIxNDsgXAotICBpbnQzMng0X3QgX19yZXRfMjE0OyBcCi0gIF9fcmV0XzIxNCA9IChpbnQzMng0X3QpKHZjb21iaW5lX3MzMigoaW50MzJ4Ml90KShfX3MwXzIxNCksIChpbnQzMngyX3QpKHZyc2hybl9uX3M2NChfX3MxXzIxNCwgX19wMl8yMTQpKSkpOyBcCi0gIF9fcmV0XzIxNDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZyc2hybl9oaWdoX25fczY0KF9fcDBfMjE1LCBfX3AxXzIxNSwgX19wMl8yMTUpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQzMngyX3QgX19zMF8yMTUgPSBfX3AwXzIxNTsgXAotICBpbnQ2NHgyX3QgX19zMV8yMTUgPSBfX3AxXzIxNTsgXAotICBpbnQzMngyX3QgX19yZXYwXzIxNTsgIF9fcmV2MF8yMTUgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwXzIxNSwgX19zMF8yMTUsIDEsIDApOyBcCi0gIGludDY0eDJfdCBfX3JldjFfMjE1OyAgX19yZXYxXzIxNSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczFfMjE1LCBfX3MxXzIxNSwgMSwgMCk7IFwKLSAgaW50MzJ4NF90IF9fcmV0XzIxNTsgXAotICBfX3JldF8yMTUgPSAoaW50MzJ4NF90KShfX25vc3dhcF92Y29tYmluZV9zMzIoKGludDMyeDJfdCkoX19yZXYwXzIxNSksIChpbnQzMngyX3QpKF9fbm9zd2FwX3Zyc2hybl9uX3M2NChfX3JldjFfMjE1LCBfX3AyXzIxNSkpKSk7IFwKLSAgX19yZXRfMjE1ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXRfMjE1LCBfX3JldF8yMTUsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0XzIxNTsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnJzaHJuX2hpZ2hfbl9zMTYoX19wMF8yMTYsIF9fcDFfMjE2LCBfX3AyXzIxNikgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDh4OF90IF9fczBfMjE2ID0gX19wMF8yMTY7IFwKLSAgaW50MTZ4OF90IF9fczFfMjE2ID0gX19wMV8yMTY7IFwKLSAgaW50OHgxNl90IF9fcmV0XzIxNjsgXAotICBfX3JldF8yMTYgPSAoaW50OHgxNl90KSh2Y29tYmluZV9zOCgoaW50OHg4X3QpKF9fczBfMjE2KSwgKGludDh4OF90KSh2cnNocm5fbl9zMTYoX19zMV8yMTYsIF9fcDJfMjE2KSkpKTsgXAotICBfX3JldF8yMTY7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2cnNocm5faGlnaF9uX3MxNihfX3AwXzIxNywgX19wMV8yMTcsIF9fcDJfMjE3KSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50OHg4X3QgX19zMF8yMTcgPSBfX3AwXzIxNzsgXAotICBpbnQxNng4X3QgX19zMV8yMTcgPSBfX3AxXzIxNzsgXAotICBpbnQ4eDhfdCBfX3JldjBfMjE3OyAgX19yZXYwXzIxNyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczBfMjE3LCBfX3MwXzIxNywgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgaW50MTZ4OF90IF9fcmV2MV8yMTc7ICBfX3JldjFfMjE3ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMV8yMTcsIF9fczFfMjE3LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBpbnQ4eDE2X3QgX19yZXRfMjE3OyBcCi0gIF9fcmV0XzIxNyA9IChpbnQ4eDE2X3QpKF9fbm9zd2FwX3Zjb21iaW5lX3M4KChpbnQ4eDhfdCkoX19yZXYwXzIxNyksIChpbnQ4eDhfdCkoX19ub3N3YXBfdnJzaHJuX25fczE2KF9fcmV2MV8yMTcsIF9fcDJfMjE3KSkpKTsgXAotICBfX3JldF8yMTcgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldF8yMTcsIF9fcmV0XzIxNywgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXRfMjE3OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBmbG9hdDY0eDJfdCB2cnNxcnRlcV9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgewotICBmbG9hdDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3Zyc3FydGVxX3YoKGludDh4MTZfdClfX3AwLCA0Mik7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGZsb2F0NjR4Ml90IHZyc3FydGVxX2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7Ci0gIGZsb2F0NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICBmbG9hdDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3Zyc3FydGVxX3YoKGludDh4MTZfdClfX3JldjAsIDQyKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGZsb2F0NjR4MV90IHZyc3FydGVfZjY0KGZsb2F0NjR4MV90IF9fcDApIHsKLSAgZmxvYXQ2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92cnNxcnRlX3YoKGludDh4OF90KV9fcDAsIDEwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgZmxvYXQ2NHgxX3QgdnJzcXJ0ZV9mNjQoZmxvYXQ2NHgxX3QgX19wMCkgewotICBmbG9hdDY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3Zyc3FydGVfdigoaW50OHg4X3QpX19wMCwgMTApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGZsb2F0NjRfdCB2cnNxcnRlZF9mNjQoZmxvYXQ2NF90IF9fcDApIHsKLSAgZmxvYXQ2NF90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDY0X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc3FydGVkX2Y2NChfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgZmxvYXQ2NF90IHZyc3FydGVkX2Y2NChmbG9hdDY0X3QgX19wMCkgewotICBmbG9hdDY0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0NjRfdCkgX19idWlsdGluX25lb25fdnJzcXJ0ZWRfZjY0KF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGZsb2F0MzJfdCB2cnNxcnRlc19mMzIoZmxvYXQzMl90IF9fcDApIHsKLSAgZmxvYXQzMl90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDMyX3QpIF9fYnVpbHRpbl9uZW9uX3Zyc3FydGVzX2YzMihfX3AwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgZmxvYXQzMl90IHZyc3FydGVzX2YzMihmbG9hdDMyX3QgX19wMCkgewotICBmbG9hdDMyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0MzJfdCkgX19idWlsdGluX25lb25fdnJzcXJ0ZXNfZjMyKF9fcDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGZsb2F0NjR4Ml90IHZyc3FydHNxX2Y2NChmbG9hdDY0eDJfdCBfX3AwLCBmbG9hdDY0eDJfdCBfX3AxKSB7Ci0gIGZsb2F0NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDY0eDJfdCkgX19idWlsdGluX25lb25fdnJzcXJ0c3FfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNDIpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBmbG9hdDY0eDJfdCB2cnNxcnRzcV9mNjQoZmxvYXQ2NHgyX3QgX19wMCwgZmxvYXQ2NHgyX3QgX19wMSkgewotICBmbG9hdDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgZmxvYXQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7Ci0gIGZsb2F0NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDY0eDJfdCkgX19idWlsdGluX25lb25fdnJzcXJ0c3FfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDQyKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGZsb2F0NjR4MV90IHZyc3FydHNfZjY0KGZsb2F0NjR4MV90IF9fcDAsIGZsb2F0NjR4MV90IF9fcDEpIHsKLSAgZmxvYXQ2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92cnNxcnRzX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGZsb2F0NjR4MV90IHZyc3FydHNfZjY0KGZsb2F0NjR4MV90IF9fcDAsIGZsb2F0NjR4MV90IF9fcDEpIHsKLSAgZmxvYXQ2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92cnNxcnRzX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgZmxvYXQ2NF90IHZyc3FydHNkX2Y2NChmbG9hdDY0X3QgX19wMCwgZmxvYXQ2NF90IF9fcDEpIHsKLSAgZmxvYXQ2NF90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDY0X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc3FydHNkX2Y2NChfX3AwLCBfX3AxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgZmxvYXQ2NF90IHZyc3FydHNkX2Y2NChmbG9hdDY0X3QgX19wMCwgZmxvYXQ2NF90IF9fcDEpIHsKLSAgZmxvYXQ2NF90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDY0X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc3FydHNkX2Y2NChfX3AwLCBfX3AxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBmbG9hdDMyX3QgdnJzcXJ0c3NfZjMyKGZsb2F0MzJfdCBfX3AwLCBmbG9hdDMyX3QgX19wMSkgewotICBmbG9hdDMyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0MzJfdCkgX19idWlsdGluX25lb25fdnJzcXJ0c3NfZjMyKF9fcDAsIF9fcDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBmbG9hdDMyX3QgdnJzcXJ0c3NfZjMyKGZsb2F0MzJfdCBfX3AwLCBmbG9hdDMyX3QgX19wMSkgewotICBmbG9hdDMyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0MzJfdCkgX19idWlsdGluX25lb25fdnJzcXJ0c3NfZjMyKF9fcDAsIF9fcDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZyc3JhZF9uX3U2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDY0X3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDY0X3QgX19zMSA9IF9fcDE7IFwKLSAgdWludDY0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc3JhZF9uX3U2NChfX3MwLCBfX3MxLCBfX3AyKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZyc3JhZF9uX3U2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDY0X3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDY0X3QgX19zMSA9IF9fcDE7IFwKLSAgdWludDY0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc3JhZF9uX3U2NChfX3MwLCBfX3MxLCBfX3AyKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnJzcmFkX25fczY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ2NF90IF9fczAgPSBfX3AwOyBcCi0gIGludDY0X3QgX19zMSA9IF9fcDE7IFwKLSAgaW50NjRfdCBfX3JldDsgXAotICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92cnNyYWRfbl9zNjQoX19zMCwgX19zMSwgX19wMik7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2cnNyYWRfbl9zNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDY0X3QgX19zMCA9IF9fcDA7IFwKLSAgaW50NjRfdCBfX3MxID0gX19wMTsgXAotICBpbnQ2NF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc3JhZF9uX3M2NChfX3MwLCBfX3MxLCBfX3AyKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDE2eDhfdCB2cnN1YmhuX2hpZ2hfdTMyKHVpbnQxNng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxLCB1aW50MzJ4NF90IF9fcDIpIHsKLSAgdWludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSB2Y29tYmluZV91MTYoX19wMCwgdnJzdWJobl91MzIoX19wMSwgX19wMikpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MTZ4OF90IHZyc3ViaG5faGlnaF91MzIodWludDE2eDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEsIHVpbnQzMng0X3QgX19wMikgewotICB1aW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICB1aW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOwotICB1aW50MzJ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDMsIDIsIDEsIDApOwotICB1aW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IF9fbm9zd2FwX3Zjb21iaW5lX3UxNihfX3JldjAsIF9fbm9zd2FwX3Zyc3ViaG5fdTMyKF9fcmV2MSwgX19yZXYyKSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MzJ4NF90IHZyc3ViaG5faGlnaF91NjQodWludDMyeDJfdCBfX3AwLCB1aW50NjR4Ml90IF9fcDEsIHVpbnQ2NHgyX3QgX19wMikgewotICB1aW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IHZjb21iaW5lX3UzMihfX3AwLCB2cnN1YmhuX3U2NChfX3AxLCBfX3AyKSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQzMng0X3QgdnJzdWJobl9oaWdoX3U2NCh1aW50MzJ4Ml90IF9fcDAsIHVpbnQ2NHgyX3QgX19wMSwgdWludDY0eDJfdCBfX3AyKSB7Ci0gIHVpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIHVpbnQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7Ci0gIHVpbnQ2NHgyX3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMSwgMCk7Ci0gIHVpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19ub3N3YXBfdmNvbWJpbmVfdTMyKF9fcmV2MCwgX19ub3N3YXBfdnJzdWJobl91NjQoX19yZXYxLCBfX3JldjIpKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ4eDE2X3QgdnJzdWJobl9oaWdoX3UxNih1aW50OHg4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxLCB1aW50MTZ4OF90IF9fcDIpIHsKLSAgdWludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSB2Y29tYmluZV91OChfX3AwLCB2cnN1YmhuX3UxNihfX3AxLCBfX3AyKSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ4eDE2X3QgdnJzdWJobl9oaWdoX3UxNih1aW50OHg4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxLCB1aW50MTZ4OF90IF9fcDIpIHsKLSAgdWludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50MTZ4OF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50OHgxNl90IF9fcmV0OwotICBfX3JldCA9IF9fbm9zd2FwX3Zjb21iaW5lX3U4KF9fcmV2MCwgX19ub3N3YXBfdnJzdWJobl91MTYoX19yZXYxLCBfX3JldjIpKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDE2eDhfdCB2cnN1YmhuX2hpZ2hfczMyKGludDE2eDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSwgaW50MzJ4NF90IF9fcDIpIHsKLSAgaW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IHZjb21iaW5lX3MxNihfX3AwLCB2cnN1YmhuX3MzMihfX3AxLCBfX3AyKSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDE2eDhfdCB2cnN1YmhuX2hpZ2hfczMyKGludDE2eDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSwgaW50MzJ4NF90IF9fcDIpIHsKLSAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7Ci0gIGludDMyeDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAzLCAyLCAxLCAwKTsKLSAgaW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IF9fbm9zd2FwX3Zjb21iaW5lX3MxNihfX3JldjAsIF9fbm9zd2FwX3Zyc3ViaG5fczMyKF9fcmV2MSwgX19yZXYyKSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQzMng0X3QgdnJzdWJobl9oaWdoX3M2NChpbnQzMngyX3QgX19wMCwgaW50NjR4Ml90IF9fcDEsIGludDY0eDJfdCBfX3AyKSB7Ci0gIGludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSB2Y29tYmluZV9zMzIoX19wMCwgdnJzdWJobl9zNjQoX19wMSwgX19wMikpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQzMng0X3QgdnJzdWJobl9oaWdoX3M2NChpbnQzMngyX3QgX19wMCwgaW50NjR4Ml90IF9fcDEsIGludDY0eDJfdCBfX3AyKSB7Ci0gIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgaW50NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOwotICBpbnQ2NHgyX3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMSwgMCk7Ci0gIGludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSBfX25vc3dhcF92Y29tYmluZV9zMzIoX19yZXYwLCBfX25vc3dhcF92cnN1YmhuX3M2NChfX3JldjEsIF9fcmV2MikpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50OHgxNl90IHZyc3ViaG5faGlnaF9zMTYoaW50OHg4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEsIGludDE2eDhfdCBfX3AyKSB7Ci0gIGludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSB2Y29tYmluZV9zOChfX3AwLCB2cnN1YmhuX3MxNihfX3AxLCBfX3AyKSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDh4MTZfdCB2cnN1YmhuX2hpZ2hfczE2KGludDh4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxLCBpbnQxNng4X3QgX19wMikgewotICBpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQxNng4X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSBfX25vc3dhcF92Y29tYmluZV9zOChfX3JldjAsIF9fbm9zd2FwX3Zyc3ViaG5fczE2KF9fcmV2MSwgX19yZXYyKSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c2V0X2xhbmVfcDY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBwb2x5NjRfdCBfX3MwID0gX19wMDsgXAotICBwb2x5NjR4MV90IF9fczEgPSBfX3AxOyBcCi0gIHBvbHk2NHgxX3QgX19yZXQ7IFwKLSAgX19yZXQgPSAocG9seTY0eDFfdCkgX19idWlsdGluX25lb25fdnNldF9sYW5lX2k2NChfX3MwLCAoaW50OHg4X3QpX19zMSwgX19wMik7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c2V0X2xhbmVfcDY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBwb2x5NjRfdCBfX3MwID0gX19wMDsgXAotICBwb2x5NjR4MV90IF9fczEgPSBfX3AxOyBcCi0gIHBvbHk2NHgxX3QgX19yZXQ7IFwKLSAgX19yZXQgPSAocG9seTY0eDFfdCkgX19idWlsdGluX25lb25fdnNldF9sYW5lX2k2NChfX3MwLCAoaW50OHg4X3QpX19zMSwgX19wMik7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZGVmaW5lIF9fbm9zd2FwX3ZzZXRfbGFuZV9wNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHk2NF90IF9fczAgPSBfX3AwOyBcCi0gIHBvbHk2NHgxX3QgX19zMSA9IF9fcDE7IFwKLSAgcG9seTY0eDFfdCBfX3JldDsgXAotICBfX3JldCA9IChwb2x5NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92c2V0X2xhbmVfaTY0KF9fczAsIChpbnQ4eDhfdClfX3MxLCBfX3AyKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnNldHFfbGFuZV9wNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHk2NF90IF9fczAgPSBfX3AwOyBcCi0gIHBvbHk2NHgyX3QgX19zMSA9IF9fcDE7IFwKLSAgcG9seTY0eDJfdCBfX3JldDsgXAotICBfX3JldCA9IChwb2x5NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92c2V0cV9sYW5lX2k2NChfX3MwLCAoaW50OHgxNl90KV9fczEsIF9fcDIpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnNldHFfbGFuZV9wNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHk2NF90IF9fczAgPSBfX3AwOyBcCi0gIHBvbHk2NHgyX3QgX19zMSA9IF9fcDE7IFwKLSAgcG9seTY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxLCAwKTsgXAotICBwb2x5NjR4Ml90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHBvbHk2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZzZXRxX2xhbmVfaTY0KF9fczAsIChpbnQ4eDE2X3QpX19yZXYxLCBfX3AyKTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZGVmaW5lIF9fbm9zd2FwX3ZzZXRxX2xhbmVfcDY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBwb2x5NjRfdCBfX3MwID0gX19wMDsgXAotICBwb2x5NjR4Ml90IF9fczEgPSBfX3AxOyBcCi0gIHBvbHk2NHgyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSAocG9seTY0eDJfdCkgX19idWlsdGluX25lb25fdnNldHFfbGFuZV9pNjQoX19zMCwgKGludDh4MTZfdClfX3MxLCBfX3AyKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnNldHFfbGFuZV9mNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0NjRfdCBfX3MwID0gX19wMDsgXAotICBmbG9hdDY0eDJfdCBfX3MxID0gX19wMTsgXAotICBmbG9hdDY0eDJfdCBfX3JldDsgXAotICBfX3JldCA9IChmbG9hdDY0eDJfdCkgX19idWlsdGluX25lb25fdnNldHFfbGFuZV9mNjQoX19zMCwgKGludDh4MTZfdClfX3MxLCBfX3AyKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzZXRxX2xhbmVfZjY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDY0X3QgX19zMCA9IF9fcDA7IFwKLSAgZmxvYXQ2NHgyX3QgX19zMSA9IF9fcDE7IFwKLSAgZmxvYXQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMSwgMCk7IFwKLSAgZmxvYXQ2NHgyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZzZXRxX2xhbmVfZjY0KF9fczAsIChpbnQ4eDE2X3QpX19yZXYxLCBfX3AyKTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZGVmaW5lIF9fbm9zd2FwX3ZzZXRxX2xhbmVfZjY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDY0X3QgX19zMCA9IF9fcDA7IFwKLSAgZmxvYXQ2NHgyX3QgX19zMSA9IF9fcDE7IFwKLSAgZmxvYXQ2NHgyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZzZXRxX2xhbmVfZjY0KF9fczAsIChpbnQ4eDE2X3QpX19zMSwgX19wMik7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzZXRfbGFuZV9mNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0NjRfdCBfX3MwID0gX19wMDsgXAotICBmbG9hdDY0eDFfdCBfX3MxID0gX19wMTsgXAotICBmbG9hdDY0eDFfdCBfX3JldDsgXAotICBfX3JldCA9IChmbG9hdDY0eDFfdCkgX19idWlsdGluX25lb25fdnNldF9sYW5lX2Y2NChfX3MwLCAoaW50OHg4X3QpX19zMSwgX19wMik7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c2V0X2xhbmVfZjY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDY0X3QgX19zMCA9IF9fcDA7IFwKLSAgZmxvYXQ2NHgxX3QgX19zMSA9IF9fcDE7IFwKLSAgZmxvYXQ2NHgxX3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZzZXRfbGFuZV9mNjQoX19zMCwgKGludDh4OF90KV9fczEsIF9fcDIpOyBcCi0gIF9fcmV0OyBcCi19KQotI2RlZmluZSBfX25vc3dhcF92c2V0X2xhbmVfZjY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDY0X3QgX19zMCA9IF9fcDA7IFwKLSAgZmxvYXQ2NHgxX3QgX19zMSA9IF9fcDE7IFwKLSAgZmxvYXQ2NHgxX3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZzZXRfbGFuZV9mNjQoX19zMCwgKGludDh4OF90KV9fczEsIF9fcDIpOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50NjRfdCB2c2hsZF91NjQodWludDY0X3QgX19wMCwgdWludDY0X3QgX19wMSkgewotICB1aW50NjRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGxkX3U2NChfX3AwLCBfX3AxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDY0X3QgdnNobGRfdTY0KHVpbnQ2NF90IF9fcDAsIHVpbnQ2NF90IF9fcDEpIHsKLSAgdWludDY0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92c2hsZF91NjQoX19wMCwgX19wMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50NjRfdCB2c2hsZF9zNjQoaW50NjRfdCBfX3AwLCBpbnQ2NF90IF9fcDEpIHsKLSAgaW50NjRfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdnNobGRfczY0KF9fcDAsIF9fcDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQ2NF90IHZzaGxkX3M2NChpbnQ2NF90IF9fcDAsIGludDY0X3QgX19wMSkgewotICBpbnQ2NF90IF9fcmV0OwotICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92c2hsZF9zNjQoX19wMCwgX19wMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnNobGRfbl91NjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ2NF90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQ2NF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92c2hsZF9uX3U2NChfX3MwLCBfX3AxKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzaGxkX25fdTY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50NjRfdCBfX3MwID0gX19wMDsgXAotICB1aW50NjRfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50NjRfdCkgX19idWlsdGluX25lb25fdnNobGRfbl91NjQoX19zMCwgX19wMSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzaGxkX25fczY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ2NF90IF9fczAgPSBfX3AwOyBcCi0gIGludDY0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdnNobGRfbl9zNjQoX19zMCwgX19wMSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c2hsZF9uX3M2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50NjRfdCBfX3MwID0gX19wMDsgXAotICBpbnQ2NF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGxkX25fczY0KF9fczAsIF9fcDEpOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c2hsbF9oaWdoX25fdTgoX19wMF8yMTgsIF9fcDFfMjE4KSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDh4MTZfdCBfX3MwXzIxOCA9IF9fcDBfMjE4OyBcCi0gIHVpbnQxNng4X3QgX19yZXRfMjE4OyBcCi0gIF9fcmV0XzIxOCA9ICh1aW50MTZ4OF90KSh2c2hsbF9uX3U4KHZnZXRfaGlnaF91OChfX3MwXzIxOCksIF9fcDFfMjE4KSk7IFwKLSAgX19yZXRfMjE4OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnNobGxfaGlnaF9uX3U4KF9fcDBfMjE5LCBfX3AxXzIxOSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ4eDE2X3QgX19zMF8yMTkgPSBfX3AwXzIxOTsgXAotICB1aW50OHgxNl90IF9fcmV2MF8yMTk7ICBfX3JldjBfMjE5ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMF8yMTksIF9fczBfMjE5LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICB1aW50MTZ4OF90IF9fcmV0XzIxOTsgXAotICBfX3JldF8yMTkgPSAodWludDE2eDhfdCkoX19ub3N3YXBfdnNobGxfbl91OChfX25vc3dhcF92Z2V0X2hpZ2hfdTgoX19yZXYwXzIxOSksIF9fcDFfMjE5KSk7IFwKLSAgX19yZXRfMjE5ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXRfMjE5LCBfX3JldF8yMTksIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0XzIxOTsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnNobGxfaGlnaF9uX3UzMihfX3AwXzIyMCwgX19wMV8yMjApIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MzJ4NF90IF9fczBfMjIwID0gX19wMF8yMjA7IFwKLSAgdWludDY0eDJfdCBfX3JldF8yMjA7IFwKLSAgX19yZXRfMjIwID0gKHVpbnQ2NHgyX3QpKHZzaGxsX25fdTMyKHZnZXRfaGlnaF91MzIoX19zMF8yMjApLCBfX3AxXzIyMCkpOyBcCi0gIF9fcmV0XzIyMDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzaGxsX2hpZ2hfbl91MzIoX19wMF8yMjEsIF9fcDFfMjIxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDMyeDRfdCBfX3MwXzIyMSA9IF9fcDBfMjIxOyBcCi0gIHVpbnQzMng0X3QgX19yZXYwXzIyMTsgIF9fcmV2MF8yMjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwXzIyMSwgX19zMF8yMjEsIDMsIDIsIDEsIDApOyBcCi0gIHVpbnQ2NHgyX3QgX19yZXRfMjIxOyBcCi0gIF9fcmV0XzIyMSA9ICh1aW50NjR4Ml90KShfX25vc3dhcF92c2hsbF9uX3UzMihfX25vc3dhcF92Z2V0X2hpZ2hfdTMyKF9fcmV2MF8yMjEpLCBfX3AxXzIyMSkpOyBcCi0gIF9fcmV0XzIyMSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0XzIyMSwgX19yZXRfMjIxLCAxLCAwKTsgXAotICBfX3JldF8yMjE7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzaGxsX2hpZ2hfbl91MTYoX19wMF8yMjIsIF9fcDFfMjIyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDE2eDhfdCBfX3MwXzIyMiA9IF9fcDBfMjIyOyBcCi0gIHVpbnQzMng0X3QgX19yZXRfMjIyOyBcCi0gIF9fcmV0XzIyMiA9ICh1aW50MzJ4NF90KSh2c2hsbF9uX3UxNih2Z2V0X2hpZ2hfdTE2KF9fczBfMjIyKSwgX19wMV8yMjIpKTsgXAotICBfX3JldF8yMjI7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c2hsbF9oaWdoX25fdTE2KF9fcDBfMjIzLCBfX3AxXzIyMykgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQxNng4X3QgX19zMF8yMjMgPSBfX3AwXzIyMzsgXAotICB1aW50MTZ4OF90IF9fcmV2MF8yMjM7ICBfX3JldjBfMjIzID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMF8yMjMsIF9fczBfMjIzLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICB1aW50MzJ4NF90IF9fcmV0XzIyMzsgXAotICBfX3JldF8yMjMgPSAodWludDMyeDRfdCkoX19ub3N3YXBfdnNobGxfbl91MTYoX19ub3N3YXBfdmdldF9oaWdoX3UxNihfX3JldjBfMjIzKSwgX19wMV8yMjMpKTsgXAotICBfX3JldF8yMjMgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldF8yMjMsIF9fcmV0XzIyMywgMywgMiwgMSwgMCk7IFwKLSAgX19yZXRfMjIzOyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c2hsbF9oaWdoX25fczgoX19wMF8yMjQsIF9fcDFfMjI0KSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50OHgxNl90IF9fczBfMjI0ID0gX19wMF8yMjQ7IFwKLSAgaW50MTZ4OF90IF9fcmV0XzIyNDsgXAotICBfX3JldF8yMjQgPSAoaW50MTZ4OF90KSh2c2hsbF9uX3M4KHZnZXRfaGlnaF9zOChfX3MwXzIyNCksIF9fcDFfMjI0KSk7IFwKLSAgX19yZXRfMjI0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnNobGxfaGlnaF9uX3M4KF9fcDBfMjI1LCBfX3AxXzIyNSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDh4MTZfdCBfX3MwXzIyNSA9IF9fcDBfMjI1OyBcCi0gIGludDh4MTZfdCBfX3JldjBfMjI1OyAgX19yZXYwXzIyNSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczBfMjI1LCBfX3MwXzIyNSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgaW50MTZ4OF90IF9fcmV0XzIyNTsgXAotICBfX3JldF8yMjUgPSAoaW50MTZ4OF90KShfX25vc3dhcF92c2hsbF9uX3M4KF9fbm9zd2FwX3ZnZXRfaGlnaF9zOChfX3JldjBfMjI1KSwgX19wMV8yMjUpKTsgXAotICBfX3JldF8yMjUgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldF8yMjUsIF9fcmV0XzIyNSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXRfMjI1OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c2hsbF9oaWdoX25fczMyKF9fcDBfMjI2LCBfX3AxXzIyNikgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDMyeDRfdCBfX3MwXzIyNiA9IF9fcDBfMjI2OyBcCi0gIGludDY0eDJfdCBfX3JldF8yMjY7IFwKLSAgX19yZXRfMjI2ID0gKGludDY0eDJfdCkodnNobGxfbl9zMzIodmdldF9oaWdoX3MzMihfX3MwXzIyNiksIF9fcDFfMjI2KSk7IFwKLSAgX19yZXRfMjI2OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnNobGxfaGlnaF9uX3MzMihfX3AwXzIyNywgX19wMV8yMjcpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQzMng0X3QgX19zMF8yMjcgPSBfX3AwXzIyNzsgXAotICBpbnQzMng0X3QgX19yZXYwXzIyNzsgIF9fcmV2MF8yMjcgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwXzIyNywgX19zMF8yMjcsIDMsIDIsIDEsIDApOyBcCi0gIGludDY0eDJfdCBfX3JldF8yMjc7IFwKLSAgX19yZXRfMjI3ID0gKGludDY0eDJfdCkoX19ub3N3YXBfdnNobGxfbl9zMzIoX19ub3N3YXBfdmdldF9oaWdoX3MzMihfX3JldjBfMjI3KSwgX19wMV8yMjcpKTsgXAotICBfX3JldF8yMjcgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldF8yMjcsIF9fcmV0XzIyNywgMSwgMCk7IFwKLSAgX19yZXRfMjI3OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c2hsbF9oaWdoX25fczE2KF9fcDBfMjI4LCBfX3AxXzIyOCkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDE2eDhfdCBfX3MwXzIyOCA9IF9fcDBfMjI4OyBcCi0gIGludDMyeDRfdCBfX3JldF8yMjg7IFwKLSAgX19yZXRfMjI4ID0gKGludDMyeDRfdCkodnNobGxfbl9zMTYodmdldF9oaWdoX3MxNihfX3MwXzIyOCksIF9fcDFfMjI4KSk7IFwKLSAgX19yZXRfMjI4OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnNobGxfaGlnaF9uX3MxNihfX3AwXzIyOSwgX19wMV8yMjkpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQxNng4X3QgX19zMF8yMjkgPSBfX3AwXzIyOTsgXAotICBpbnQxNng4X3QgX19yZXYwXzIyOTsgIF9fcmV2MF8yMjkgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwXzIyOSwgX19zMF8yMjksIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIGludDMyeDRfdCBfX3JldF8yMjk7IFwKLSAgX19yZXRfMjI5ID0gKGludDMyeDRfdCkoX19ub3N3YXBfdnNobGxfbl9zMTYoX19ub3N3YXBfdmdldF9oaWdoX3MxNihfX3JldjBfMjI5KSwgX19wMV8yMjkpKTsgXAotICBfX3JldF8yMjkgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldF8yMjksIF9fcmV0XzIyOSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXRfMjI5OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c2hyZF9uX3U2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDY0X3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDY0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaHJkX25fdTY0KF9fczAsIF9fcDEpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnNocmRfbl91NjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ2NF90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQ2NF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92c2hyZF9uX3U2NChfX3MwLCBfX3AxKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnNocmRfbl9zNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDY0X3QgX19zMCA9IF9fcDA7IFwKLSAgaW50NjRfdCBfX3JldDsgXAotICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92c2hyZF9uX3M2NChfX3MwLCBfX3AxKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzaHJkX25fczY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ2NF90IF9fczAgPSBfX3AwOyBcCi0gIGludDY0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdnNocmRfbl9zNjQoX19zMCwgX19wMSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzaHJuX2hpZ2hfbl91MzIoX19wMF8yMzAsIF9fcDFfMjMwLCBfX3AyXzIzMCkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQxNng0X3QgX19zMF8yMzAgPSBfX3AwXzIzMDsgXAotICB1aW50MzJ4NF90IF9fczFfMjMwID0gX19wMV8yMzA7IFwKLSAgdWludDE2eDhfdCBfX3JldF8yMzA7IFwKLSAgX19yZXRfMjMwID0gKHVpbnQxNng4X3QpKHZjb21iaW5lX3UxNigodWludDE2eDRfdCkoX19zMF8yMzApLCAodWludDE2eDRfdCkodnNocm5fbl91MzIoX19zMV8yMzAsIF9fcDJfMjMwKSkpKTsgXAotICBfX3JldF8yMzA7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c2hybl9oaWdoX25fdTMyKF9fcDBfMjMxLCBfX3AxXzIzMSwgX19wMl8yMzEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MTZ4NF90IF9fczBfMjMxID0gX19wMF8yMzE7IFwKLSAgdWludDMyeDRfdCBfX3MxXzIzMSA9IF9fcDFfMjMxOyBcCi0gIHVpbnQxNng0X3QgX19yZXYwXzIzMTsgIF9fcmV2MF8yMzEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwXzIzMSwgX19zMF8yMzEsIDMsIDIsIDEsIDApOyBcCi0gIHVpbnQzMng0X3QgX19yZXYxXzIzMTsgIF9fcmV2MV8yMzEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxXzIzMSwgX19zMV8yMzEsIDMsIDIsIDEsIDApOyBcCi0gIHVpbnQxNng4X3QgX19yZXRfMjMxOyBcCi0gIF9fcmV0XzIzMSA9ICh1aW50MTZ4OF90KShfX25vc3dhcF92Y29tYmluZV91MTYoKHVpbnQxNng0X3QpKF9fcmV2MF8yMzEpLCAodWludDE2eDRfdCkoX19ub3N3YXBfdnNocm5fbl91MzIoX19yZXYxXzIzMSwgX19wMl8yMzEpKSkpOyBcCi0gIF9fcmV0XzIzMSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0XzIzMSwgX19yZXRfMjMxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldF8yMzE7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzaHJuX2hpZ2hfbl91NjQoX19wMF8yMzIsIF9fcDFfMjMyLCBfX3AyXzIzMikgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQzMngyX3QgX19zMF8yMzIgPSBfX3AwXzIzMjsgXAotICB1aW50NjR4Ml90IF9fczFfMjMyID0gX19wMV8yMzI7IFwKLSAgdWludDMyeDRfdCBfX3JldF8yMzI7IFwKLSAgX19yZXRfMjMyID0gKHVpbnQzMng0X3QpKHZjb21iaW5lX3UzMigodWludDMyeDJfdCkoX19zMF8yMzIpLCAodWludDMyeDJfdCkodnNocm5fbl91NjQoX19zMV8yMzIsIF9fcDJfMjMyKSkpKTsgXAotICBfX3JldF8yMzI7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c2hybl9oaWdoX25fdTY0KF9fcDBfMjMzLCBfX3AxXzIzMywgX19wMl8yMzMpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MzJ4Ml90IF9fczBfMjMzID0gX19wMF8yMzM7IFwKLSAgdWludDY0eDJfdCBfX3MxXzIzMyA9IF9fcDFfMjMzOyBcCi0gIHVpbnQzMngyX3QgX19yZXYwXzIzMzsgIF9fcmV2MF8yMzMgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwXzIzMywgX19zMF8yMzMsIDEsIDApOyBcCi0gIHVpbnQ2NHgyX3QgX19yZXYxXzIzMzsgIF9fcmV2MV8yMzMgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxXzIzMywgX19zMV8yMzMsIDEsIDApOyBcCi0gIHVpbnQzMng0X3QgX19yZXRfMjMzOyBcCi0gIF9fcmV0XzIzMyA9ICh1aW50MzJ4NF90KShfX25vc3dhcF92Y29tYmluZV91MzIoKHVpbnQzMngyX3QpKF9fcmV2MF8yMzMpLCAodWludDMyeDJfdCkoX19ub3N3YXBfdnNocm5fbl91NjQoX19yZXYxXzIzMywgX19wMl8yMzMpKSkpOyBcCi0gIF9fcmV0XzIzMyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0XzIzMywgX19yZXRfMjMzLCAzLCAyLCAxLCAwKTsgXAotICBfX3JldF8yMzM7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzaHJuX2hpZ2hfbl91MTYoX19wMF8yMzQsIF9fcDFfMjM0LCBfX3AyXzIzNCkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ4eDhfdCBfX3MwXzIzNCA9IF9fcDBfMjM0OyBcCi0gIHVpbnQxNng4X3QgX19zMV8yMzQgPSBfX3AxXzIzNDsgXAotICB1aW50OHgxNl90IF9fcmV0XzIzNDsgXAotICBfX3JldF8yMzQgPSAodWludDh4MTZfdCkodmNvbWJpbmVfdTgoKHVpbnQ4eDhfdCkoX19zMF8yMzQpLCAodWludDh4OF90KSh2c2hybl9uX3UxNihfX3MxXzIzNCwgX19wMl8yMzQpKSkpOyBcCi0gIF9fcmV0XzIzNDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzaHJuX2hpZ2hfbl91MTYoX19wMF8yMzUsIF9fcDFfMjM1LCBfX3AyXzIzNSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ4eDhfdCBfX3MwXzIzNSA9IF9fcDBfMjM1OyBcCi0gIHVpbnQxNng4X3QgX19zMV8yMzUgPSBfX3AxXzIzNTsgXAotICB1aW50OHg4X3QgX19yZXYwXzIzNTsgIF9fcmV2MF8yMzUgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwXzIzNSwgX19zMF8yMzUsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIHVpbnQxNng4X3QgX19yZXYxXzIzNTsgIF9fcmV2MV8yMzUgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxXzIzNSwgX19zMV8yMzUsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIHVpbnQ4eDE2X3QgX19yZXRfMjM1OyBcCi0gIF9fcmV0XzIzNSA9ICh1aW50OHgxNl90KShfX25vc3dhcF92Y29tYmluZV91OCgodWludDh4OF90KShfX3JldjBfMjM1KSwgKHVpbnQ4eDhfdCkoX19ub3N3YXBfdnNocm5fbl91MTYoX19yZXYxXzIzNSwgX19wMl8yMzUpKSkpOyBcCi0gIF9fcmV0XzIzNSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0XzIzNSwgX19yZXRfMjM1LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldF8yMzU7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzaHJuX2hpZ2hfbl9zMzIoX19wMF8yMzYsIF9fcDFfMjM2LCBfX3AyXzIzNikgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDE2eDRfdCBfX3MwXzIzNiA9IF9fcDBfMjM2OyBcCi0gIGludDMyeDRfdCBfX3MxXzIzNiA9IF9fcDFfMjM2OyBcCi0gIGludDE2eDhfdCBfX3JldF8yMzY7IFwKLSAgX19yZXRfMjM2ID0gKGludDE2eDhfdCkodmNvbWJpbmVfczE2KChpbnQxNng0X3QpKF9fczBfMjM2KSwgKGludDE2eDRfdCkodnNocm5fbl9zMzIoX19zMV8yMzYsIF9fcDJfMjM2KSkpKTsgXAotICBfX3JldF8yMzY7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c2hybl9oaWdoX25fczMyKF9fcDBfMjM3LCBfX3AxXzIzNywgX19wMl8yMzcpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQxNng0X3QgX19zMF8yMzcgPSBfX3AwXzIzNzsgXAotICBpbnQzMng0X3QgX19zMV8yMzcgPSBfX3AxXzIzNzsgXAotICBpbnQxNng0X3QgX19yZXYwXzIzNzsgIF9fcmV2MF8yMzcgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwXzIzNywgX19zMF8yMzcsIDMsIDIsIDEsIDApOyBcCi0gIGludDMyeDRfdCBfX3JldjFfMjM3OyAgX19yZXYxXzIzNyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczFfMjM3LCBfX3MxXzIzNywgMywgMiwgMSwgMCk7IFwKLSAgaW50MTZ4OF90IF9fcmV0XzIzNzsgXAotICBfX3JldF8yMzcgPSAoaW50MTZ4OF90KShfX25vc3dhcF92Y29tYmluZV9zMTYoKGludDE2eDRfdCkoX19yZXYwXzIzNyksIChpbnQxNng0X3QpKF9fbm9zd2FwX3ZzaHJuX25fczMyKF9fcmV2MV8yMzcsIF9fcDJfMjM3KSkpKTsgXAotICBfX3JldF8yMzcgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldF8yMzcsIF9fcmV0XzIzNywgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXRfMjM3OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c2hybl9oaWdoX25fczY0KF9fcDBfMjM4LCBfX3AxXzIzOCwgX19wMl8yMzgpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQzMngyX3QgX19zMF8yMzggPSBfX3AwXzIzODsgXAotICBpbnQ2NHgyX3QgX19zMV8yMzggPSBfX3AxXzIzODsgXAotICBpbnQzMng0X3QgX19yZXRfMjM4OyBcCi0gIF9fcmV0XzIzOCA9IChpbnQzMng0X3QpKHZjb21iaW5lX3MzMigoaW50MzJ4Ml90KShfX3MwXzIzOCksIChpbnQzMngyX3QpKHZzaHJuX25fczY0KF9fczFfMjM4LCBfX3AyXzIzOCkpKSk7IFwKLSAgX19yZXRfMjM4OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnNocm5faGlnaF9uX3M2NChfX3AwXzIzOSwgX19wMV8yMzksIF9fcDJfMjM5KSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MzJ4Ml90IF9fczBfMjM5ID0gX19wMF8yMzk7IFwKLSAgaW50NjR4Ml90IF9fczFfMjM5ID0gX19wMV8yMzk7IFwKLSAgaW50MzJ4Ml90IF9fcmV2MF8yMzk7ICBfX3JldjBfMjM5ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMF8yMzksIF9fczBfMjM5LCAxLCAwKTsgXAotICBpbnQ2NHgyX3QgX19yZXYxXzIzOTsgIF9fcmV2MV8yMzkgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxXzIzOSwgX19zMV8yMzksIDEsIDApOyBcCi0gIGludDMyeDRfdCBfX3JldF8yMzk7IFwKLSAgX19yZXRfMjM5ID0gKGludDMyeDRfdCkoX19ub3N3YXBfdmNvbWJpbmVfczMyKChpbnQzMngyX3QpKF9fcmV2MF8yMzkpLCAoaW50MzJ4Ml90KShfX25vc3dhcF92c2hybl9uX3M2NChfX3JldjFfMjM5LCBfX3AyXzIzOSkpKSk7IFwKLSAgX19yZXRfMjM5ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXRfMjM5LCBfX3JldF8yMzksIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0XzIzOTsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnNocm5faGlnaF9uX3MxNihfX3AwXzI0MCwgX19wMV8yNDAsIF9fcDJfMjQwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50OHg4X3QgX19zMF8yNDAgPSBfX3AwXzI0MDsgXAotICBpbnQxNng4X3QgX19zMV8yNDAgPSBfX3AxXzI0MDsgXAotICBpbnQ4eDE2X3QgX19yZXRfMjQwOyBcCi0gIF9fcmV0XzI0MCA9IChpbnQ4eDE2X3QpKHZjb21iaW5lX3M4KChpbnQ4eDhfdCkoX19zMF8yNDApLCAoaW50OHg4X3QpKHZzaHJuX25fczE2KF9fczFfMjQwLCBfX3AyXzI0MCkpKSk7IFwKLSAgX19yZXRfMjQwOyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnNocm5faGlnaF9uX3MxNihfX3AwXzI0MSwgX19wMV8yNDEsIF9fcDJfMjQxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50OHg4X3QgX19zMF8yNDEgPSBfX3AwXzI0MTsgXAotICBpbnQxNng4X3QgX19zMV8yNDEgPSBfX3AxXzI0MTsgXAotICBpbnQ4eDhfdCBfX3JldjBfMjQxOyAgX19yZXYwXzI0MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczBfMjQxLCBfX3MwXzI0MSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgaW50MTZ4OF90IF9fcmV2MV8yNDE7ICBfX3JldjFfMjQxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMV8yNDEsIF9fczFfMjQxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBpbnQ4eDE2X3QgX19yZXRfMjQxOyBcCi0gIF9fcmV0XzI0MSA9IChpbnQ4eDE2X3QpKF9fbm9zd2FwX3Zjb21iaW5lX3M4KChpbnQ4eDhfdCkoX19yZXYwXzI0MSksIChpbnQ4eDhfdCkoX19ub3N3YXBfdnNocm5fbl9zMTYoX19yZXYxXzI0MSwgX19wMl8yNDEpKSkpOyBcCi0gIF9fcmV0XzI0MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0XzI0MSwgX19yZXRfMjQxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldF8yNDE7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzbGlkX25fdTY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50NjRfdCBfX3MwID0gX19wMDsgXAotICB1aW50NjRfdCBfX3MxID0gX19wMTsgXAotICB1aW50NjRfdCBfX3JldDsgXAotICBfX3JldCA9ICh1aW50NjRfdCkgX19idWlsdGluX25lb25fdnNsaWRfbl91NjQoX19zMCwgX19zMSwgX19wMik7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c2xpZF9uX3U2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDY0X3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDY0X3QgX19zMSA9IF9fcDE7IFwKLSAgdWludDY0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzbGlkX25fdTY0KF9fczAsIF9fczEsIF9fcDIpOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c2xpZF9uX3M2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50NjRfdCBfX3MwID0gX19wMDsgXAotICBpbnQ2NF90IF9fczEgPSBfX3AxOyBcCi0gIGludDY0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdnNsaWRfbl9zNjQoX19zMCwgX19zMSwgX19wMik7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c2xpZF9uX3M2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50NjRfdCBfX3MwID0gX19wMDsgXAotICBpbnQ2NF90IF9fczEgPSBfX3AxOyBcCi0gIGludDY0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdnNsaWRfbl9zNjQoX19zMCwgX19zMSwgX19wMik7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzbGlfbl9wNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHk2NHgxX3QgX19zMCA9IF9fcDA7IFwKLSAgcG9seTY0eDFfdCBfX3MxID0gX19wMTsgXAotICBwb2x5NjR4MV90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHBvbHk2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZzbGlfbl92KChpbnQ4eDhfdClfX3MwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgNik7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c2xpX25fcDY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBwb2x5NjR4MV90IF9fczAgPSBfX3AwOyBcCi0gIHBvbHk2NHgxX3QgX19zMSA9IF9fcDE7IFwKLSAgcG9seTY0eDFfdCBfX3JldDsgXAotICBfX3JldCA9IChwb2x5NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92c2xpX25fdigoaW50OHg4X3QpX19zMCwgKGludDh4OF90KV9fczEsIF9fcDIsIDYpOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c2xpcV9uX3A2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTY0eDJfdCBfX3MwID0gX19wMDsgXAotICBwb2x5NjR4Ml90IF9fczEgPSBfX3AxOyBcCi0gIHBvbHk2NHgyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSAocG9seTY0eDJfdCkgX19idWlsdGluX25lb25fdnNsaXFfbl92KChpbnQ4eDE2X3QpX19zMCwgKGludDh4MTZfdClfX3MxLCBfX3AyLCAzOCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c2xpcV9uX3A2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTY0eDJfdCBfX3MwID0gX19wMDsgXAotICBwb2x5NjR4Ml90IF9fczEgPSBfX3AxOyBcCi0gIHBvbHk2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKLSAgcG9seTY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxLCAwKTsgXAotICBwb2x5NjR4Ml90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHBvbHk2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZzbGlxX25fdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIF9fcDIsIDM4KTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ4X3QgdnNxYWRkYl91OCh1aW50OF90IF9fcDAsIHVpbnQ4X3QgX19wMSkgewotICB1aW50OF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50OF90KSBfX2J1aWx0aW5fbmVvbl92c3FhZGRiX3U4KF9fcDAsIF9fcDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50OF90IHZzcWFkZGJfdTgodWludDhfdCBfX3AwLCB1aW50OF90IF9fcDEpIHsKLSAgdWludDhfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDhfdCkgX19idWlsdGluX25lb25fdnNxYWRkYl91OChfX3AwLCBfX3AxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MzJfdCB2c3FhZGRzX3UzMih1aW50MzJfdCBfX3AwLCB1aW50MzJfdCBfX3AxKSB7Ci0gIHVpbnQzMl90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJfdCkgX19idWlsdGluX25lb25fdnNxYWRkc191MzIoX19wMCwgX19wMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQzMl90IHZzcWFkZHNfdTMyKHVpbnQzMl90IF9fcDAsIHVpbnQzMl90IF9fcDEpIHsKLSAgdWludDMyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92c3FhZGRzX3UzMihfX3AwLCBfX3AxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50NjRfdCB2c3FhZGRkX3U2NCh1aW50NjRfdCBfX3AwLCB1aW50NjRfdCBfX3AxKSB7Ci0gIHVpbnQ2NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50NjRfdCkgX19idWlsdGluX25lb25fdnNxYWRkZF91NjQoX19wMCwgX19wMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ2NF90IHZzcWFkZGRfdTY0KHVpbnQ2NF90IF9fcDAsIHVpbnQ2NF90IF9fcDEpIHsKLSAgdWludDY0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92c3FhZGRkX3U2NChfX3AwLCBfX3AxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MTZfdCB2c3FhZGRoX3UxNih1aW50MTZfdCBfX3AwLCB1aW50MTZfdCBfX3AxKSB7Ci0gIHVpbnQxNl90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MTZfdCkgX19idWlsdGluX25lb25fdnNxYWRkaF91MTYoX19wMCwgX19wMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQxNl90IHZzcWFkZGhfdTE2KHVpbnQxNl90IF9fcDAsIHVpbnQxNl90IF9fcDEpIHsKLSAgdWludDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92c3FhZGRoX3UxNihfX3AwLCBfX3AxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50OHgxNl90IHZzcWFkZHFfdTgodWludDh4MTZfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEpIHsKLSAgdWludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdnNxYWRkcV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA0OCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ4eDE2X3QgdnNxYWRkcV91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgewotICB1aW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50OHgxNl90IF9fcmV0OwotICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92c3FhZGRxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA0OCk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MzJ4NF90IHZzcWFkZHFfdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7Ci0gIHVpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzcWFkZHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNTApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MzJ4NF90IHZzcWFkZHFfdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7Ci0gIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7Ci0gIHVpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzcWFkZHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDUwKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ2NHgyX3QgdnNxYWRkcV91NjQodWludDY0eDJfdCBfX3AwLCB1aW50NjR4Ml90IF9fcDEpIHsKLSAgdWludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdnNxYWRkcV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA1MSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ2NHgyX3QgdnNxYWRkcV91NjQodWludDY0eDJfdCBfX3AwLCB1aW50NjR4Ml90IF9fcDEpIHsKLSAgdWludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgdWludDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKLSAgdWludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdnNxYWRkcV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNTEpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDE2eDhfdCB2c3FhZGRxX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSkgewotICB1aW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92c3FhZGRxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDQ5KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDE2eDhfdCB2c3FhZGRxX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSkgewotICB1aW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92c3FhZGRxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA0OSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50OHg4X3QgdnNxYWRkX3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgewotICB1aW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnNxYWRkX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxNik7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ4eDhfdCB2c3FhZGRfdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7Ci0gIHVpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnNxYWRkX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMTYpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDMyeDJfdCB2c3FhZGRfdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxKSB7Ci0gIHVpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZzcWFkZF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTgpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MzJ4Ml90IHZzcWFkZF91MzIodWludDMyeDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEpIHsKLSAgdWludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgdWludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKLSAgdWludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdnNxYWRkX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMTgpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDY0eDFfdCB2c3FhZGRfdTY0KHVpbnQ2NHgxX3QgX19wMCwgdWludDY0eDFfdCBfX3AxKSB7Ci0gIHVpbnQ2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZzcWFkZF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTkpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50NjR4MV90IHZzcWFkZF91NjQodWludDY0eDFfdCBfX3AwLCB1aW50NjR4MV90IF9fcDEpIHsKLSAgdWludDY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDY0eDFfdCkgX19idWlsdGluX25lb25fdnNxYWRkX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxOSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDE2eDRfdCB2c3FhZGRfdTE2KHVpbnQxNng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxKSB7Ci0gIHVpbnQxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzcWFkZF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTcpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MTZ4NF90IHZzcWFkZF91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEpIHsKLSAgdWludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgdWludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKLSAgdWludDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdnNxYWRkX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMTcpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgZmxvYXQ2NHgyX3QgdnNxcnRxX2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7Ci0gIGZsb2F0NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDY0eDJfdCkgX19idWlsdGluX25lb25fdnNxcnRxX3YoKGludDh4MTZfdClfX3AwLCA0Mik7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGZsb2F0NjR4Ml90IHZzcXJ0cV9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgewotICBmbG9hdDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgZmxvYXQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92c3FydHFfdigoaW50OHgxNl90KV9fcmV2MCwgNDIpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgZmxvYXQzMng0X3QgdnNxcnRxX2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7Ci0gIGZsb2F0MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDMyeDRfdCkgX19idWlsdGluX25lb25fdnNxcnRxX3YoKGludDh4MTZfdClfX3AwLCA0MSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGZsb2F0MzJ4NF90IHZzcXJ0cV9mMzIoZmxvYXQzMng0X3QgX19wMCkgewotICBmbG9hdDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgZmxvYXQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92c3FydHFfdigoaW50OHgxNl90KV9fcmV2MCwgNDEpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgZmxvYXQ2NHgxX3QgdnNxcnRfZjY0KGZsb2F0NjR4MV90IF9fcDApIHsKLSAgZmxvYXQ2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGZsb2F0NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92c3FydF92KChpbnQ4eDhfdClfX3AwLCAxMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGZsb2F0NjR4MV90IHZzcXJ0X2Y2NChmbG9hdDY0eDFfdCBfX3AwKSB7Ci0gIGZsb2F0NjR4MV90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDY0eDFfdCkgX19idWlsdGluX25lb25fdnNxcnRfdigoaW50OHg4X3QpX19wMCwgMTApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGZsb2F0MzJ4Ml90IHZzcXJ0X2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7Ci0gIGZsb2F0MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IChmbG9hdDMyeDJfdCkgX19idWlsdGluX25lb25fdnNxcnRfdigoaW50OHg4X3QpX19wMCwgOSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGZsb2F0MzJ4Ml90IHZzcXJ0X2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7Ci0gIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICBmbG9hdDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSAoZmxvYXQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZzcXJ0X3YoKGludDh4OF90KV9fcmV2MCwgOSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c3JhZF9uX3U2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDY0X3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDY0X3QgX19zMSA9IF9fcDE7IFwKLSAgdWludDY0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzcmFkX25fdTY0KF9fczAsIF9fczEsIF9fcDIpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnNyYWRfbl91NjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ2NF90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQ2NF90IF9fczEgPSBfX3AxOyBcCi0gIHVpbnQ2NF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92c3JhZF9uX3U2NChfX3MwLCBfX3MxLCBfX3AyKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnNyYWRfbl9zNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDY0X3QgX19zMCA9IF9fcDA7IFwKLSAgaW50NjRfdCBfX3MxID0gX19wMTsgXAotICBpbnQ2NF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzcmFkX25fczY0KF9fczAsIF9fczEsIF9fcDIpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnNyYWRfbl9zNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDY0X3QgX19zMCA9IF9fcDA7IFwKLSAgaW50NjRfdCBfX3MxID0gX19wMTsgXAotICBpbnQ2NF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzcmFkX25fczY0KF9fczAsIF9fczEsIF9fcDIpOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c3JpZF9uX3U2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDY0X3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDY0X3QgX19zMSA9IF9fcDE7IFwKLSAgdWludDY0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzcmlkX25fdTY0KF9fczAsIF9fczEsIF9fcDIpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnNyaWRfbl91NjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ2NF90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQ2NF90IF9fczEgPSBfX3AxOyBcCi0gIHVpbnQ2NF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92c3JpZF9uX3U2NChfX3MwLCBfX3MxLCBfX3AyKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnNyaWRfbl9zNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDY0X3QgX19zMCA9IF9fcDA7IFwKLSAgaW50NjRfdCBfX3MxID0gX19wMTsgXAotICBpbnQ2NF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzcmlkX25fczY0KF9fczAsIF9fczEsIF9fcDIpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnNyaWRfbl9zNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDY0X3QgX19zMCA9IF9fcDA7IFwKLSAgaW50NjRfdCBfX3MxID0gX19wMTsgXAotICBpbnQ2NF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzcmlkX25fczY0KF9fczAsIF9fczEsIF9fcDIpOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c3JpX25fcDY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBwb2x5NjR4MV90IF9fczAgPSBfX3AwOyBcCi0gIHBvbHk2NHgxX3QgX19zMSA9IF9fcDE7IFwKLSAgcG9seTY0eDFfdCBfX3JldDsgXAotICBfX3JldCA9IChwb2x5NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92c3JpX25fdigoaW50OHg4X3QpX19zMCwgKGludDh4OF90KV9fczEsIF9fcDIsIDYpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnNyaV9uX3A2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTY0eDFfdCBfX3MwID0gX19wMDsgXAotICBwb2x5NjR4MV90IF9fczEgPSBfX3AxOyBcCi0gIHBvbHk2NHgxX3QgX19yZXQ7IFwKLSAgX19yZXQgPSAocG9seTY0eDFfdCkgX19idWlsdGluX25lb25fdnNyaV9uX3YoKGludDh4OF90KV9fczAsIChpbnQ4eDhfdClfX3MxLCBfX3AyLCA2KTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnNyaXFfbl9wNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHk2NHgyX3QgX19zMCA9IF9fcDA7IFwKLSAgcG9seTY0eDJfdCBfX3MxID0gX19wMTsgXAotICBwb2x5NjR4Ml90IF9fcmV0OyBcCi0gIF9fcmV0ID0gKHBvbHk2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZzcmlxX25fdigoaW50OHgxNl90KV9fczAsIChpbnQ4eDE2X3QpX19zMSwgX19wMiwgMzgpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnNyaXFfbl9wNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHk2NHgyX3QgX19zMCA9IF9fcDA7IFwKLSAgcG9seTY0eDJfdCBfX3MxID0gX19wMTsgXAotICBwb2x5NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCi0gIHBvbHk2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMSwgMCk7IFwKLSAgcG9seTY0eDJfdCBfX3JldDsgXAotICBfX3JldCA9IChwb2x5NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92c3JpcV9uX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCBfX3AyLCAzOCk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c3QxX3A2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTY0eDFfdCBfX3MxID0gX19wMTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QxX3YoX19wMCwgKGludDh4OF90KV9fczEsIDYpOyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnN0MV9wNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHk2NHgxX3QgX19zMSA9IF9fcDE7IFwKLSAgX19idWlsdGluX25lb25fdnN0MV92KF9fcDAsIChpbnQ4eDhfdClfX3MxLCA2KTsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnN0MXFfcDY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBwb2x5NjR4Ml90IF9fczEgPSBfX3AxOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX3YoX19wMCwgKGludDh4MTZfdClfX3MxLCAzOCk7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c3QxcV9wNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHk2NHgyX3QgX19zMSA9IF9fcDE7IFwKLSAgcG9seTY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxLCAwKTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QxcV92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLCAzOCk7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzdDFxX2Y2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQ2NHgyX3QgX19zMSA9IF9fcDE7IFwKLSAgX19idWlsdGluX25lb25fdnN0MXFfdihfX3AwLCAoaW50OHgxNl90KV9fczEsIDQyKTsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzdDFxX2Y2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQ2NHgyX3QgX19zMSA9IF9fcDE7IFwKLSAgZmxvYXQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMSwgMCk7IFwKLSAgX19idWlsdGluX25lb25fdnN0MXFfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MSwgNDIpOyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c3QxX2Y2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQ2NHgxX3QgX19zMSA9IF9fcDE7IFwKLSAgX19idWlsdGluX25lb25fdnN0MV92KF9fcDAsIChpbnQ4eDhfdClfX3MxLCAxMCk7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c3QxX2Y2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQ2NHgxX3QgX19zMSA9IF9fcDE7IFwKLSAgX19idWlsdGluX25lb25fdnN0MV92KF9fcDAsIChpbnQ4eDhfdClfX3MxLCAxMCk7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzdDFfbGFuZV9wNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHk2NHgxX3QgX19zMSA9IF9fcDE7IFwKLSAgX19idWlsdGluX25lb25fdnN0MV9sYW5lX3YoX19wMCwgKGludDh4OF90KV9fczEsIF9fcDIsIDYpOyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnN0MV9sYW5lX3A2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTY0eDFfdCBfX3MxID0gX19wMTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QxX2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgNik7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzdDFxX2xhbmVfcDY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBwb2x5NjR4Ml90IF9fczEgPSBfX3AxOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX2xhbmVfdihfX3AwLCAoaW50OHgxNl90KV9fczEsIF9fcDIsIDM4KTsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzdDFxX2xhbmVfcDY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBwb2x5NjR4Ml90IF9fczEgPSBfX3AxOyBcCi0gIHBvbHk2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMSwgMCk7IFwKLSAgX19idWlsdGluX25lb25fdnN0MXFfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLCBfX3AyLCAzOCk7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzdDFxX2xhbmVfZjY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDY0eDJfdCBfX3MxID0gX19wMTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QxcV9sYW5lX3YoX19wMCwgKGludDh4MTZfdClfX3MxLCBfX3AyLCA0Mik7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c3QxcV9sYW5lX2Y2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQ2NHgyX3QgX19zMSA9IF9fcDE7IFwKLSAgZmxvYXQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMSwgMCk7IFwKLSAgX19idWlsdGluX25lb25fdnN0MXFfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLCBfX3AyLCA0Mik7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzdDFfbGFuZV9mNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0NjR4MV90IF9fczEgPSBfX3AxOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDFfbGFuZV92KF9fcDAsIChpbnQ4eDhfdClfX3MxLCBfX3AyLCAxMCk7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c3QxX2xhbmVfZjY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDY0eDFfdCBfX3MxID0gX19wMTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QxX2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgMTApOyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c3QxX3A4X3gyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBwb2x5OHg4eDJfdCBfX3MxID0gX19wMTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QxX3gyX3YoX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIDQpOyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnN0MV9wOF94MihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTh4OHgyX3QgX19zMSA9IF9fcDE7IFwKLSAgcG9seTh4OHgyX3QgX19yZXYxOyBcCi0gIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDFfeDJfdihfX3AwLCAoaW50OHg4X3QpX19yZXYxLnZhbFswXSwgKGludDh4OF90KV9fcmV2MS52YWxbMV0sIDQpOyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c3QxX3A2NF94MihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTY0eDF4Ml90IF9fczEgPSBfX3AxOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDFfeDJfdihfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgNik7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c3QxX3A2NF94MihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTY0eDF4Ml90IF9fczEgPSBfX3AxOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDFfeDJfdihfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgNik7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzdDFfcDE2X3gyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBwb2x5MTZ4NHgyX3QgX19zMSA9IF9fcDE7IFwKLSAgX19idWlsdGluX25lb25fdnN0MV94Ml92KF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCA1KTsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzdDFfcDE2X3gyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBwb2x5MTZ4NHgyX3QgX19zMSA9IF9fcDE7IFwKLSAgcG9seTE2eDR4Ml90IF9fcmV2MTsgXAotICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QxX3gyX3YoX19wMCwgKGludDh4OF90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDhfdClfX3JldjEudmFsWzFdLCA1KTsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnN0MXFfcDhfeDIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHk4eDE2eDJfdCBfX3MxID0gX19wMTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QxcV94Ml92KF9fcDAsIChpbnQ4eDE2X3QpX19zMS52YWxbMF0sIChpbnQ4eDE2X3QpX19zMS52YWxbMV0sIDM2KTsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzdDFxX3A4X3gyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBwb2x5OHgxNngyX3QgX19zMSA9IF9fcDE7IFwKLSAgcG9seTh4MTZ4Ml90IF9fcmV2MTsgXAotICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QxcV94Ml92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCAzNik7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzdDFxX3A2NF94MihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTY0eDJ4Ml90IF9fczEgPSBfX3AxOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX3gyX3YoX19wMCwgKGludDh4MTZfdClfX3MxLnZhbFswXSwgKGludDh4MTZfdClfX3MxLnZhbFsxXSwgMzgpOyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnN0MXFfcDY0X3gyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBwb2x5NjR4MngyX3QgX19zMSA9IF9fcDE7IFwKLSAgcG9seTY0eDJ4Ml90IF9fcmV2MTsgXAotICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxLCAwKTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QxcV94Ml92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCAzOCk7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzdDFxX3AxNl94MihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTE2eDh4Ml90IF9fczEgPSBfX3AxOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX3gyX3YoX19wMCwgKGludDh4MTZfdClfX3MxLnZhbFswXSwgKGludDh4MTZfdClfX3MxLnZhbFsxXSwgMzcpOyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnN0MXFfcDE2X3gyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBwb2x5MTZ4OHgyX3QgX19zMSA9IF9fcDE7IFwKLSAgcG9seTE2eDh4Ml90IF9fcmV2MTsgXAotICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QxcV94Ml92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCAzNyk7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzdDFxX3U4X3gyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50OHgxNngyX3QgX19zMSA9IF9fcDE7IFwKLSAgX19idWlsdGluX25lb25fdnN0MXFfeDJfdihfX3AwLCAoaW50OHgxNl90KV9fczEudmFsWzBdLCAoaW50OHgxNl90KV9fczEudmFsWzFdLCA0OCk7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c3QxcV91OF94MihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDh4MTZ4Ml90IF9fczEgPSBfX3AxOyBcCi0gIHVpbnQ4eDE2eDJfdCBfX3JldjE7IFwKLSAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19idWlsdGluX25lb25fdnN0MXFfeDJfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgNDgpOyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c3QxcV91MzJfeDIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQzMng0eDJfdCBfX3MxID0gX19wMTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QxcV94Ml92KF9fcDAsIChpbnQ4eDE2X3QpX19zMS52YWxbMF0sIChpbnQ4eDE2X3QpX19zMS52YWxbMV0sIDUwKTsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzdDFxX3UzMl94MihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDMyeDR4Ml90IF9fczEgPSBfX3AxOyBcCi0gIHVpbnQzMng0eDJfdCBfX3JldjE7IFwKLSAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKLSAgX19idWlsdGluX25lb25fdnN0MXFfeDJfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgNTApOyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c3QxcV91NjRfeDIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ2NHgyeDJfdCBfX3MxID0gX19wMTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QxcV94Ml92KF9fcDAsIChpbnQ4eDE2X3QpX19zMS52YWxbMF0sIChpbnQ4eDE2X3QpX19zMS52YWxbMV0sIDUxKTsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzdDFxX3U2NF94MihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDY0eDJ4Ml90IF9fczEgPSBfX3AxOyBcCi0gIHVpbnQ2NHgyeDJfdCBfX3JldjE7IFwKLSAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMSwgMCk7IFwKLSAgX19idWlsdGluX25lb25fdnN0MXFfeDJfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgNTEpOyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c3QxcV91MTZfeDIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQxNng4eDJfdCBfX3MxID0gX19wMTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QxcV94Ml92KF9fcDAsIChpbnQ4eDE2X3QpX19zMS52YWxbMF0sIChpbnQ4eDE2X3QpX19zMS52YWxbMV0sIDQ5KTsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzdDFxX3UxNl94MihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDE2eDh4Ml90IF9fczEgPSBfX3AxOyBcCi0gIHVpbnQxNng4eDJfdCBfX3JldjE7IFwKLSAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19idWlsdGluX25lb25fdnN0MXFfeDJfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgNDkpOyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c3QxcV9zOF94MihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50OHgxNngyX3QgX19zMSA9IF9fcDE7IFwKLSAgX19idWlsdGluX25lb25fdnN0MXFfeDJfdihfX3AwLCAoaW50OHgxNl90KV9fczEudmFsWzBdLCAoaW50OHgxNl90KV9fczEudmFsWzFdLCAzMik7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c3QxcV9zOF94MihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50OHgxNngyX3QgX19zMSA9IF9fcDE7IFwKLSAgaW50OHgxNngyX3QgX19yZXYxOyBcCi0gIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX3gyX3YoX19wMCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIDMyKTsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnN0MXFfZjY0X3gyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDY0eDJ4Ml90IF9fczEgPSBfX3AxOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX3gyX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCA0Mik7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c3QxcV9mNjRfeDIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0NjR4MngyX3QgX19zMSA9IF9fcDE7IFwKLSAgZmxvYXQ2NHgyeDJfdCBfX3JldjE7IFwKLSAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMSwgMCk7IFwKLSAgX19idWlsdGluX25lb25fdnN0MXFfeDJfdihfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCA0Mik7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzdDFxX2YzMl94MihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQzMng0eDJfdCBfX3MxID0gX19wMTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QxcV94Ml92KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgNDEpOyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnN0MXFfZjMyX3gyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDMyeDR4Ml90IF9fczEgPSBfX3AxOyBcCi0gIGZsb2F0MzJ4NHgyX3QgX19yZXYxOyBcCi0gIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDMsIDIsIDEsIDApOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX3gyX3YoX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgNDEpOyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c3QxcV9mMTZfeDIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0MTZ4OHgyX3QgX19zMSA9IF9fcDE7IFwKLSAgX19idWlsdGluX25lb25fdnN0MXFfeDJfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIDQwKTsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzdDFxX2YxNl94MihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQxNng4eDJfdCBfX3MxID0gX19wMTsgXAotICBmbG9hdDE2eDh4Ml90IF9fcmV2MTsgXAotICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QxcV94Ml92KF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIDQwKTsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnN0MXFfczMyX3gyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQzMng0eDJfdCBfX3MxID0gX19wMTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QxcV94Ml92KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgMzQpOyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnN0MXFfczMyX3gyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQzMng0eDJfdCBfX3MxID0gX19wMTsgXAotICBpbnQzMng0eDJfdCBfX3JldjE7IFwKLSAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKLSAgX19idWlsdGluX25lb25fdnN0MXFfeDJfdihfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCAzNCk7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzdDFxX3M2NF94MihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50NjR4MngyX3QgX19zMSA9IF9fcDE7IFwKLSAgX19idWlsdGluX25lb25fdnN0MXFfeDJfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIDM1KTsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzdDFxX3M2NF94MihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50NjR4MngyX3QgX19zMSA9IF9fcDE7IFwKLSAgaW50NjR4MngyX3QgX19yZXYxOyBcCi0gIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDEsIDApOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX3gyX3YoX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgMzUpOyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c3QxcV9zMTZfeDIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDE2eDh4Ml90IF9fczEgPSBfX3AxOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX3gyX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCAzMyk7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c3QxcV9zMTZfeDIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDE2eDh4Ml90IF9fczEgPSBfX3AxOyBcCi0gIGludDE2eDh4Ml90IF9fcmV2MTsgXAotICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QxcV94Ml92KF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIDMzKTsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnN0MV91OF94MihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDh4OHgyX3QgX19zMSA9IF9fcDE7IFwKLSAgX19idWlsdGluX25lb25fdnN0MV94Ml92KF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCAxNik7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c3QxX3U4X3gyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50OHg4eDJfdCBfX3MxID0gX19wMTsgXAotICB1aW50OHg4eDJfdCBfX3JldjE7IFwKLSAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19idWlsdGluX25lb25fdnN0MV94Ml92KF9fcDAsIChpbnQ4eDhfdClfX3JldjEudmFsWzBdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsxXSwgMTYpOyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c3QxX3UzMl94MihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDMyeDJ4Ml90IF9fczEgPSBfX3AxOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDFfeDJfdihfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgMTgpOyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnN0MV91MzJfeDIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQzMngyeDJfdCBfX3MxID0gX19wMTsgXAotICB1aW50MzJ4MngyX3QgX19yZXYxOyBcCi0gIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDEsIDApOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDFfeDJfdihfX3AwLCAoaW50OHg4X3QpX19yZXYxLnZhbFswXSwgKGludDh4OF90KV9fcmV2MS52YWxbMV0sIDE4KTsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnN0MV91NjRfeDIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ2NHgxeDJfdCBfX3MxID0gX19wMTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QxX3gyX3YoX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIDE5KTsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzdDFfdTY0X3gyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50NjR4MXgyX3QgX19zMSA9IF9fcDE7IFwKLSAgX19idWlsdGluX25lb25fdnN0MV94Ml92KF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCAxOSk7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzdDFfdTE2X3gyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MTZ4NHgyX3QgX19zMSA9IF9fcDE7IFwKLSAgX19idWlsdGluX25lb25fdnN0MV94Ml92KF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCAxNyk7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c3QxX3UxNl94MihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDE2eDR4Ml90IF9fczEgPSBfX3AxOyBcCi0gIHVpbnQxNng0eDJfdCBfX3JldjE7IFwKLSAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKLSAgX19idWlsdGluX25lb25fdnN0MV94Ml92KF9fcDAsIChpbnQ4eDhfdClfX3JldjEudmFsWzBdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsxXSwgMTcpOyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c3QxX3M4X3gyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ4eDh4Ml90IF9fczEgPSBfX3AxOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDFfeDJfdihfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgMCk7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c3QxX3M4X3gyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ4eDh4Ml90IF9fczEgPSBfX3AxOyBcCi0gIGludDh4OHgyX3QgX19yZXYxOyBcCi0gIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDFfeDJfdihfX3AwLCAoaW50OHg4X3QpX19yZXYxLnZhbFswXSwgKGludDh4OF90KV9fcmV2MS52YWxbMV0sIDApOyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c3QxX2Y2NF94MihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQ2NHgxeDJfdCBfX3MxID0gX19wMTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QxX3gyX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCAxMCk7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c3QxX2Y2NF94MihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQ2NHgxeDJfdCBfX3MxID0gX19wMTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QxX3gyX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCAxMCk7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzdDFfZjMyX3gyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDMyeDJ4Ml90IF9fczEgPSBfX3AxOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDFfeDJfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIDkpOyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnN0MV9mMzJfeDIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0MzJ4MngyX3QgX19zMSA9IF9fcDE7IFwKLSAgZmxvYXQzMngyeDJfdCBfX3JldjE7IFwKLSAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMSwgMCk7IFwKLSAgX19idWlsdGluX25lb25fdnN0MV94Ml92KF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIDkpOyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c3QxX2YxNl94MihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQxNng0eDJfdCBfX3MxID0gX19wMTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QxX3gyX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCA4KTsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzdDFfZjE2X3gyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDE2eDR4Ml90IF9fczEgPSBfX3AxOyBcCi0gIGZsb2F0MTZ4NHgyX3QgX19yZXYxOyBcCi0gIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDMsIDIsIDEsIDApOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDFfeDJfdihfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCA4KTsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnN0MV9zMzJfeDIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDMyeDJ4Ml90IF9fczEgPSBfX3AxOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDFfeDJfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIDIpOyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnN0MV9zMzJfeDIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDMyeDJ4Ml90IF9fczEgPSBfX3AxOyBcCi0gIGludDMyeDJ4Ml90IF9fcmV2MTsgXAotICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxLCAwKTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QxX3gyX3YoX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgMik7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzdDFfczY0X3gyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ2NHgxeDJfdCBfX3MxID0gX19wMTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QxX3gyX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCAzKTsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzdDFfczY0X3gyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ2NHgxeDJfdCBfX3MxID0gX19wMTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QxX3gyX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCAzKTsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnN0MV9zMTZfeDIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDE2eDR4Ml90IF9fczEgPSBfX3AxOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDFfeDJfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIDEpOyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnN0MV9zMTZfeDIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDE2eDR4Ml90IF9fczEgPSBfX3AxOyBcCi0gIGludDE2eDR4Ml90IF9fcmV2MTsgXAotICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QxX3gyX3YoX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgMSk7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzdDFfcDhfeDMoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHk4eDh4M190IF9fczEgPSBfX3AxOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDFfeDNfdihfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgKGludDh4OF90KV9fczEudmFsWzJdLCA0KTsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzdDFfcDhfeDMoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHk4eDh4M190IF9fczEgPSBfX3AxOyBcCi0gIHBvbHk4eDh4M190IF9fcmV2MTsgXAotICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QxX3gzX3YoX19wMCwgKGludDh4OF90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDhfdClfX3JldjEudmFsWzFdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsyXSwgNCk7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzdDFfcDY0X3gzKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBwb2x5NjR4MXgzX3QgX19zMSA9IF9fcDE7IFwKLSAgX19idWlsdGluX25lb25fdnN0MV94M192KF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCAoaW50OHg4X3QpX19zMS52YWxbMl0sIDYpOyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnN0MV9wNjRfeDMoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHk2NHgxeDNfdCBfX3MxID0gX19wMTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QxX3gzX3YoX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIChpbnQ4eDhfdClfX3MxLnZhbFsyXSwgNik7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzdDFfcDE2X3gzKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBwb2x5MTZ4NHgzX3QgX19zMSA9IF9fcDE7IFwKLSAgX19idWlsdGluX25lb25fdnN0MV94M192KF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCAoaW50OHg4X3QpX19zMS52YWxbMl0sIDUpOyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnN0MV9wMTZfeDMoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHkxNng0eDNfdCBfX3MxID0gX19wMTsgXAotICBwb2x5MTZ4NHgzX3QgX19yZXYxOyBcCi0gIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDMsIDIsIDEsIDApOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDFfeDNfdihfX3AwLCAoaW50OHg4X3QpX19yZXYxLnZhbFswXSwgKGludDh4OF90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDhfdClfX3JldjEudmFsWzJdLCA1KTsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnN0MXFfcDhfeDMoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHk4eDE2eDNfdCBfX3MxID0gX19wMTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QxcV94M192KF9fcDAsIChpbnQ4eDE2X3QpX19zMS52YWxbMF0sIChpbnQ4eDE2X3QpX19zMS52YWxbMV0sIChpbnQ4eDE2X3QpX19zMS52YWxbMl0sIDM2KTsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzdDFxX3A4X3gzKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBwb2x5OHgxNngzX3QgX19zMSA9IF9fcDE7IFwKLSAgcG9seTh4MTZ4M190IF9fcmV2MTsgXAotICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QxcV94M192KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMl0sIDM2KTsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnN0MXFfcDY0X3gzKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBwb2x5NjR4MngzX3QgX19zMSA9IF9fcDE7IFwKLSAgX19idWlsdGluX25lb25fdnN0MXFfeDNfdihfX3AwLCAoaW50OHgxNl90KV9fczEudmFsWzBdLCAoaW50OHgxNl90KV9fczEudmFsWzFdLCAoaW50OHgxNl90KV9fczEudmFsWzJdLCAzOCk7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c3QxcV9wNjRfeDMoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHk2NHgyeDNfdCBfX3MxID0gX19wMTsgXAotICBwb2x5NjR4MngzX3QgX19yZXYxOyBcCi0gIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDEsIDApOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX3gzX3YoX19wMCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsyXSwgMzgpOyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c3QxcV9wMTZfeDMoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHkxNng4eDNfdCBfX3MxID0gX19wMTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QxcV94M192KF9fcDAsIChpbnQ4eDE2X3QpX19zMS52YWxbMF0sIChpbnQ4eDE2X3QpX19zMS52YWxbMV0sIChpbnQ4eDE2X3QpX19zMS52YWxbMl0sIDM3KTsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzdDFxX3AxNl94MyhfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTE2eDh4M190IF9fczEgPSBfX3AxOyBcCi0gIHBvbHkxNng4eDNfdCBfX3JldjE7IFwKLSAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19idWlsdGluX25lb25fdnN0MXFfeDNfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgKGludDh4MTZfdClfX3JldjEudmFsWzJdLCAzNyk7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzdDFxX3U4X3gzKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50OHgxNngzX3QgX19zMSA9IF9fcDE7IFwKLSAgX19idWlsdGluX25lb25fdnN0MXFfeDNfdihfX3AwLCAoaW50OHgxNl90KV9fczEudmFsWzBdLCAoaW50OHgxNl90KV9fczEudmFsWzFdLCAoaW50OHgxNl90KV9fczEudmFsWzJdLCA0OCk7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c3QxcV91OF94MyhfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDh4MTZ4M190IF9fczEgPSBfX3AxOyBcCi0gIHVpbnQ4eDE2eDNfdCBfX3JldjE7IFwKLSAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19idWlsdGluX25lb25fdnN0MXFfeDNfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgKGludDh4MTZfdClfX3JldjEudmFsWzJdLCA0OCk7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzdDFxX3UzMl94MyhfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDMyeDR4M190IF9fczEgPSBfX3AxOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX3gzX3YoX19wMCwgKGludDh4MTZfdClfX3MxLnZhbFswXSwgKGludDh4MTZfdClfX3MxLnZhbFsxXSwgKGludDh4MTZfdClfX3MxLnZhbFsyXSwgNTApOyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnN0MXFfdTMyX3gzKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MzJ4NHgzX3QgX19zMSA9IF9fcDE7IFwKLSAgdWludDMyeDR4M190IF9fcmV2MTsgXAotICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QxcV94M192KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMl0sIDUwKTsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnN0MXFfdTY0X3gzKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50NjR4MngzX3QgX19zMSA9IF9fcDE7IFwKLSAgX19idWlsdGluX25lb25fdnN0MXFfeDNfdihfX3AwLCAoaW50OHgxNl90KV9fczEudmFsWzBdLCAoaW50OHgxNl90KV9fczEudmFsWzFdLCAoaW50OHgxNl90KV9fczEudmFsWzJdLCA1MSk7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c3QxcV91NjRfeDMoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ2NHgyeDNfdCBfX3MxID0gX19wMTsgXAotICB1aW50NjR4MngzX3QgX19yZXYxOyBcCi0gIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDEsIDApOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX3gzX3YoX19wMCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsyXSwgNTEpOyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c3QxcV91MTZfeDMoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQxNng4eDNfdCBfX3MxID0gX19wMTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QxcV94M192KF9fcDAsIChpbnQ4eDE2X3QpX19zMS52YWxbMF0sIChpbnQ4eDE2X3QpX19zMS52YWxbMV0sIChpbnQ4eDE2X3QpX19zMS52YWxbMl0sIDQ5KTsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzdDFxX3UxNl94MyhfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDE2eDh4M190IF9fczEgPSBfX3AxOyBcCi0gIHVpbnQxNng4eDNfdCBfX3JldjE7IFwKLSAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19idWlsdGluX25lb25fdnN0MXFfeDNfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgKGludDh4MTZfdClfX3JldjEudmFsWzJdLCA0OSk7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzdDFxX3M4X3gzKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ4eDE2eDNfdCBfX3MxID0gX19wMTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QxcV94M192KF9fcDAsIChpbnQ4eDE2X3QpX19zMS52YWxbMF0sIChpbnQ4eDE2X3QpX19zMS52YWxbMV0sIChpbnQ4eDE2X3QpX19zMS52YWxbMl0sIDMyKTsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzdDFxX3M4X3gzKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ4eDE2eDNfdCBfX3MxID0gX19wMTsgXAotICBpbnQ4eDE2eDNfdCBfX3JldjE7IFwKLSAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19idWlsdGluX25lb25fdnN0MXFfeDNfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgKGludDh4MTZfdClfX3JldjEudmFsWzJdLCAzMik7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzdDFxX2Y2NF94MyhfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQ2NHgyeDNfdCBfX3MxID0gX19wMTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QxcV94M192KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIDQyKTsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzdDFxX2Y2NF94MyhfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQ2NHgyeDNfdCBfX3MxID0gX19wMTsgXAotICBmbG9hdDY0eDJ4M190IF9fcmV2MTsgXAotICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAxLCAwKTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QxcV94M192KF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcmV2MS52YWxbMl0sIDQyKTsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnN0MXFfZjMyX3gzKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDMyeDR4M190IF9fczEgPSBfX3AxOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX3gzX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgNDEpOyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnN0MXFfZjMyX3gzKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDMyeDR4M190IF9fczEgPSBfX3AxOyBcCi0gIGZsb2F0MzJ4NHgzX3QgX19yZXYxOyBcCi0gIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDMsIDIsIDEsIDApOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX3gzX3YoX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgX19yZXYxLnZhbFsyXSwgNDEpOyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c3QxcV9mMTZfeDMoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0MTZ4OHgzX3QgX19zMSA9IF9fcDE7IFwKLSAgX19idWlsdGluX25lb25fdnN0MXFfeDNfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCA0MCk7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c3QxcV9mMTZfeDMoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0MTZ4OHgzX3QgX19zMSA9IF9fcDE7IFwKLSAgZmxvYXQxNng4eDNfdCBfX3JldjE7IFwKLSAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19idWlsdGluX25lb25fdnN0MXFfeDNfdihfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCBfX3JldjEudmFsWzJdLCA0MCk7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzdDFxX3MzMl94MyhfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MzJ4NHgzX3QgX19zMSA9IF9fcDE7IFwKLSAgX19idWlsdGluX25lb25fdnN0MXFfeDNfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCAzNCk7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c3QxcV9zMzJfeDMoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDMyeDR4M190IF9fczEgPSBfX3AxOyBcCi0gIGludDMyeDR4M190IF9fcmV2MTsgXAotICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QxcV94M192KF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcmV2MS52YWxbMl0sIDM0KTsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnN0MXFfczY0X3gzKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ2NHgyeDNfdCBfX3MxID0gX19wMTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QxcV94M192KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIDM1KTsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzdDFxX3M2NF94MyhfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50NjR4MngzX3QgX19zMSA9IF9fcDE7IFwKLSAgaW50NjR4MngzX3QgX19yZXYxOyBcCi0gIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDEsIDApOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX3gzX3YoX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgX19yZXYxLnZhbFsyXSwgMzUpOyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c3QxcV9zMTZfeDMoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDE2eDh4M190IF9fczEgPSBfX3AxOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX3gzX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgMzMpOyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnN0MXFfczE2X3gzKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQxNng4eDNfdCBfX3MxID0gX19wMTsgXAotICBpbnQxNng4eDNfdCBfX3JldjE7IFwKLSAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19idWlsdGluX25lb25fdnN0MXFfeDNfdihfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCBfX3JldjEudmFsWzJdLCAzMyk7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzdDFfdThfeDMoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ4eDh4M190IF9fczEgPSBfX3AxOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDFfeDNfdihfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgKGludDh4OF90KV9fczEudmFsWzJdLCAxNik7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c3QxX3U4X3gzKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50OHg4eDNfdCBfX3MxID0gX19wMTsgXAotICB1aW50OHg4eDNfdCBfX3JldjE7IFwKLSAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19idWlsdGluX25lb25fdnN0MV94M192KF9fcDAsIChpbnQ4eDhfdClfX3JldjEudmFsWzBdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsxXSwgKGludDh4OF90KV9fcmV2MS52YWxbMl0sIDE2KTsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnN0MV91MzJfeDMoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQzMngyeDNfdCBfX3MxID0gX19wMTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QxX3gzX3YoX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIChpbnQ4eDhfdClfX3MxLnZhbFsyXSwgMTgpOyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnN0MV91MzJfeDMoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQzMngyeDNfdCBfX3MxID0gX19wMTsgXAotICB1aW50MzJ4MngzX3QgX19yZXYxOyBcCi0gIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDEsIDApOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDFfeDNfdihfX3AwLCAoaW50OHg4X3QpX19yZXYxLnZhbFswXSwgKGludDh4OF90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDhfdClfX3JldjEudmFsWzJdLCAxOCk7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzdDFfdTY0X3gzKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50NjR4MXgzX3QgX19zMSA9IF9fcDE7IFwKLSAgX19idWlsdGluX25lb25fdnN0MV94M192KF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCAoaW50OHg4X3QpX19zMS52YWxbMl0sIDE5KTsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzdDFfdTY0X3gzKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50NjR4MXgzX3QgX19zMSA9IF9fcDE7IFwKLSAgX19idWlsdGluX25lb25fdnN0MV94M192KF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCAoaW50OHg4X3QpX19zMS52YWxbMl0sIDE5KTsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnN0MV91MTZfeDMoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQxNng0eDNfdCBfX3MxID0gX19wMTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QxX3gzX3YoX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIChpbnQ4eDhfdClfX3MxLnZhbFsyXSwgMTcpOyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnN0MV91MTZfeDMoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQxNng0eDNfdCBfX3MxID0gX19wMTsgXAotICB1aW50MTZ4NHgzX3QgX19yZXYxOyBcCi0gIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDMsIDIsIDEsIDApOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDFfeDNfdihfX3AwLCAoaW50OHg4X3QpX19yZXYxLnZhbFswXSwgKGludDh4OF90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDhfdClfX3JldjEudmFsWzJdLCAxNyk7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzdDFfczhfeDMoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDh4OHgzX3QgX19zMSA9IF9fcDE7IFwKLSAgX19idWlsdGluX25lb25fdnN0MV94M192KF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCAoaW50OHg4X3QpX19zMS52YWxbMl0sIDApOyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnN0MV9zOF94MyhfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50OHg4eDNfdCBfX3MxID0gX19wMTsgXAotICBpbnQ4eDh4M190IF9fcmV2MTsgXAotICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QxX3gzX3YoX19wMCwgKGludDh4OF90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDhfdClfX3JldjEudmFsWzFdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsyXSwgMCk7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzdDFfZjY0X3gzKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDY0eDF4M190IF9fczEgPSBfX3AxOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDFfeDNfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCAxMCk7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c3QxX2Y2NF94MyhfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQ2NHgxeDNfdCBfX3MxID0gX19wMTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QxX3gzX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgMTApOyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c3QxX2YzMl94MyhfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQzMngyeDNfdCBfX3MxID0gX19wMTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QxX3gzX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgOSk7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c3QxX2YzMl94MyhfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQzMngyeDNfdCBfX3MxID0gX19wMTsgXAotICBmbG9hdDMyeDJ4M190IF9fcmV2MTsgXAotICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAxLCAwKTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QxX3gzX3YoX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgX19yZXYxLnZhbFsyXSwgOSk7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzdDFfZjE2X3gzKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDE2eDR4M190IF9fczEgPSBfX3AxOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDFfeDNfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCA4KTsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzdDFfZjE2X3gzKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDE2eDR4M190IF9fczEgPSBfX3AxOyBcCi0gIGZsb2F0MTZ4NHgzX3QgX19yZXYxOyBcCi0gIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDMsIDIsIDEsIDApOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDFfeDNfdihfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCBfX3JldjEudmFsWzJdLCA4KTsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnN0MV9zMzJfeDMoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDMyeDJ4M190IF9fczEgPSBfX3AxOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDFfeDNfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCAyKTsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzdDFfczMyX3gzKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQzMngyeDNfdCBfX3MxID0gX19wMTsgXAotICBpbnQzMngyeDNfdCBfX3JldjE7IFwKLSAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMSwgMCk7IFwKLSAgX19idWlsdGluX25lb25fdnN0MV94M192KF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcmV2MS52YWxbMl0sIDIpOyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c3QxX3M2NF94MyhfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50NjR4MXgzX3QgX19zMSA9IF9fcDE7IFwKLSAgX19idWlsdGluX25lb25fdnN0MV94M192KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIDMpOyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnN0MV9zNjRfeDMoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDY0eDF4M190IF9fczEgPSBfX3AxOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDFfeDNfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCAzKTsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnN0MV9zMTZfeDMoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDE2eDR4M190IF9fczEgPSBfX3AxOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDFfeDNfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCAxKTsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzdDFfczE2X3gzKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQxNng0eDNfdCBfX3MxID0gX19wMTsgXAotICBpbnQxNng0eDNfdCBfX3JldjE7IFwKLSAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKLSAgX19idWlsdGluX25lb25fdnN0MV94M192KF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcmV2MS52YWxbMl0sIDEpOyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c3QxX3A4X3g0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBwb2x5OHg4eDRfdCBfX3MxID0gX19wMTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QxX3g0X3YoX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIChpbnQ4eDhfdClfX3MxLnZhbFsyXSwgKGludDh4OF90KV9fczEudmFsWzNdLCA0KTsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzdDFfcDhfeDQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHk4eDh4NF90IF9fczEgPSBfX3AxOyBcCi0gIHBvbHk4eDh4NF90IF9fcmV2MTsgXAotICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbM10sIF9fczEudmFsWzNdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QxX3g0X3YoX19wMCwgKGludDh4OF90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDhfdClfX3JldjEudmFsWzFdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsyXSwgKGludDh4OF90KV9fcmV2MS52YWxbM10sIDQpOyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c3QxX3A2NF94NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTY0eDF4NF90IF9fczEgPSBfX3AxOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDFfeDRfdihfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgKGludDh4OF90KV9fczEudmFsWzJdLCAoaW50OHg4X3QpX19zMS52YWxbM10sIDYpOyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnN0MV9wNjRfeDQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHk2NHgxeDRfdCBfX3MxID0gX19wMTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QxX3g0X3YoX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIChpbnQ4eDhfdClfX3MxLnZhbFsyXSwgKGludDh4OF90KV9fczEudmFsWzNdLCA2KTsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnN0MV9wMTZfeDQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHkxNng0eDRfdCBfX3MxID0gX19wMTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QxX3g0X3YoX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIChpbnQ4eDhfdClfX3MxLnZhbFsyXSwgKGludDh4OF90KV9fczEudmFsWzNdLCA1KTsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzdDFfcDE2X3g0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBwb2x5MTZ4NHg0X3QgX19zMSA9IF9fcDE7IFwKLSAgcG9seTE2eDR4NF90IF9fcmV2MTsgXAotICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbM10sIF9fczEudmFsWzNdLCAzLCAyLCAxLCAwKTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QxX3g0X3YoX19wMCwgKGludDh4OF90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDhfdClfX3JldjEudmFsWzFdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsyXSwgKGludDh4OF90KV9fcmV2MS52YWxbM10sIDUpOyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c3QxcV9wOF94NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTh4MTZ4NF90IF9fczEgPSBfX3AxOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX3g0X3YoX19wMCwgKGludDh4MTZfdClfX3MxLnZhbFswXSwgKGludDh4MTZfdClfX3MxLnZhbFsxXSwgKGludDh4MTZfdClfX3MxLnZhbFsyXSwgKGludDh4MTZfdClfX3MxLnZhbFszXSwgMzYpOyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnN0MXFfcDhfeDQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHk4eDE2eDRfdCBfX3MxID0gX19wMTsgXAotICBwb2x5OHgxNng0X3QgX19yZXYxOyBcCi0gIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFszXSwgX19zMS52YWxbM10sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX3g0X3YoX19wMCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsyXSwgKGludDh4MTZfdClfX3JldjEudmFsWzNdLCAzNik7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzdDFxX3A2NF94NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTY0eDJ4NF90IF9fczEgPSBfX3AxOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX3g0X3YoX19wMCwgKGludDh4MTZfdClfX3MxLnZhbFswXSwgKGludDh4MTZfdClfX3MxLnZhbFsxXSwgKGludDh4MTZfdClfX3MxLnZhbFsyXSwgKGludDh4MTZfdClfX3MxLnZhbFszXSwgMzgpOyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnN0MXFfcDY0X3g0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBwb2x5NjR4Mng0X3QgX19zMSA9IF9fcDE7IFwKLSAgcG9seTY0eDJ4NF90IF9fcmV2MTsgXAotICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbM10sIF9fczEudmFsWzNdLCAxLCAwKTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QxcV94NF92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMl0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFszXSwgMzgpOyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c3QxcV9wMTZfeDQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHkxNng4eDRfdCBfX3MxID0gX19wMTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QxcV94NF92KF9fcDAsIChpbnQ4eDE2X3QpX19zMS52YWxbMF0sIChpbnQ4eDE2X3QpX19zMS52YWxbMV0sIChpbnQ4eDE2X3QpX19zMS52YWxbMl0sIChpbnQ4eDE2X3QpX19zMS52YWxbM10sIDM3KTsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzdDFxX3AxNl94NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTE2eDh4NF90IF9fczEgPSBfX3AxOyBcCi0gIHBvbHkxNng4eDRfdCBfX3JldjE7IFwKLSAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzNdLCBfX3MxLnZhbFszXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19idWlsdGluX25lb25fdnN0MXFfeDRfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgKGludDh4MTZfdClfX3JldjEudmFsWzJdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbM10sIDM3KTsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnN0MXFfdThfeDQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ4eDE2eDRfdCBfX3MxID0gX19wMTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QxcV94NF92KF9fcDAsIChpbnQ4eDE2X3QpX19zMS52YWxbMF0sIChpbnQ4eDE2X3QpX19zMS52YWxbMV0sIChpbnQ4eDE2X3QpX19zMS52YWxbMl0sIChpbnQ4eDE2X3QpX19zMS52YWxbM10sIDQ4KTsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzdDFxX3U4X3g0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50OHgxNng0X3QgX19zMSA9IF9fcDE7IFwKLSAgdWludDh4MTZ4NF90IF9fcmV2MTsgXAotICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbM10sIF9fczEudmFsWzNdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QxcV94NF92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMl0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFszXSwgNDgpOyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c3QxcV91MzJfeDQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQzMng0eDRfdCBfX3MxID0gX19wMTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QxcV94NF92KF9fcDAsIChpbnQ4eDE2X3QpX19zMS52YWxbMF0sIChpbnQ4eDE2X3QpX19zMS52YWxbMV0sIChpbnQ4eDE2X3QpX19zMS52YWxbMl0sIChpbnQ4eDE2X3QpX19zMS52YWxbM10sIDUwKTsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzdDFxX3UzMl94NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDMyeDR4NF90IF9fczEgPSBfX3AxOyBcCi0gIHVpbnQzMng0eDRfdCBfX3JldjE7IFwKLSAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzNdLCBfX3MxLnZhbFszXSwgMywgMiwgMSwgMCk7IFwKLSAgX19idWlsdGluX25lb25fdnN0MXFfeDRfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgKGludDh4MTZfdClfX3JldjEudmFsWzJdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbM10sIDUwKTsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnN0MXFfdTY0X3g0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50NjR4Mng0X3QgX19zMSA9IF9fcDE7IFwKLSAgX19idWlsdGluX25lb25fdnN0MXFfeDRfdihfX3AwLCAoaW50OHgxNl90KV9fczEudmFsWzBdLCAoaW50OHgxNl90KV9fczEudmFsWzFdLCAoaW50OHgxNl90KV9fczEudmFsWzJdLCAoaW50OHgxNl90KV9fczEudmFsWzNdLCA1MSk7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c3QxcV91NjRfeDQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ2NHgyeDRfdCBfX3MxID0gX19wMTsgXAotICB1aW50NjR4Mng0X3QgX19yZXYxOyBcCi0gIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFszXSwgX19zMS52YWxbM10sIDEsIDApOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX3g0X3YoX19wMCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsyXSwgKGludDh4MTZfdClfX3JldjEudmFsWzNdLCA1MSk7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzdDFxX3UxNl94NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDE2eDh4NF90IF9fczEgPSBfX3AxOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX3g0X3YoX19wMCwgKGludDh4MTZfdClfX3MxLnZhbFswXSwgKGludDh4MTZfdClfX3MxLnZhbFsxXSwgKGludDh4MTZfdClfX3MxLnZhbFsyXSwgKGludDh4MTZfdClfX3MxLnZhbFszXSwgNDkpOyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnN0MXFfdTE2X3g0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MTZ4OHg0X3QgX19zMSA9IF9fcDE7IFwKLSAgdWludDE2eDh4NF90IF9fcmV2MTsgXAotICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbM10sIF9fczEudmFsWzNdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QxcV94NF92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMl0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFszXSwgNDkpOyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c3QxcV9zOF94NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50OHgxNng0X3QgX19zMSA9IF9fcDE7IFwKLSAgX19idWlsdGluX25lb25fdnN0MXFfeDRfdihfX3AwLCAoaW50OHgxNl90KV9fczEudmFsWzBdLCAoaW50OHgxNl90KV9fczEudmFsWzFdLCAoaW50OHgxNl90KV9fczEudmFsWzJdLCAoaW50OHgxNl90KV9fczEudmFsWzNdLCAzMik7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c3QxcV9zOF94NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50OHgxNng0X3QgX19zMSA9IF9fcDE7IFwKLSAgaW50OHgxNng0X3QgX19yZXYxOyBcCi0gIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFszXSwgX19zMS52YWxbM10sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX3g0X3YoX19wMCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsyXSwgKGludDh4MTZfdClfX3JldjEudmFsWzNdLCAzMik7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzdDFxX2Y2NF94NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQ2NHgyeDRfdCBfX3MxID0gX19wMTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QxcV94NF92KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIF9fczEudmFsWzNdLCA0Mik7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c3QxcV9mNjRfeDQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0NjR4Mng0X3QgX19zMSA9IF9fcDE7IFwKLSAgZmxvYXQ2NHgyeDRfdCBfX3JldjE7IFwKLSAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzNdLCBfX3MxLnZhbFszXSwgMSwgMCk7IFwKLSAgX19idWlsdGluX25lb25fdnN0MXFfeDRfdihfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCBfX3JldjEudmFsWzJdLCBfX3JldjEudmFsWzNdLCA0Mik7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzdDFxX2YzMl94NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQzMng0eDRfdCBfX3MxID0gX19wMTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QxcV94NF92KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIF9fczEudmFsWzNdLCA0MSk7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c3QxcV9mMzJfeDQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0MzJ4NHg0X3QgX19zMSA9IF9fcDE7IFwKLSAgZmxvYXQzMng0eDRfdCBfX3JldjE7IFwKLSAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzNdLCBfX3MxLnZhbFszXSwgMywgMiwgMSwgMCk7IFwKLSAgX19idWlsdGluX25lb25fdnN0MXFfeDRfdihfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCBfX3JldjEudmFsWzJdLCBfX3JldjEudmFsWzNdLCA0MSk7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzdDFxX2YxNl94NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQxNng4eDRfdCBfX3MxID0gX19wMTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QxcV94NF92KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIF9fczEudmFsWzNdLCA0MCk7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c3QxcV9mMTZfeDQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0MTZ4OHg0X3QgX19zMSA9IF9fcDE7IFwKLSAgZmxvYXQxNng4eDRfdCBfX3JldjE7IFwKLSAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzNdLCBfX3MxLnZhbFszXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19idWlsdGluX25lb25fdnN0MXFfeDRfdihfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCBfX3JldjEudmFsWzJdLCBfX3JldjEudmFsWzNdLCA0MCk7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzdDFxX3MzMl94NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MzJ4NHg0X3QgX19zMSA9IF9fcDE7IFwKLSAgX19idWlsdGluX25lb25fdnN0MXFfeDRfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCBfX3MxLnZhbFszXSwgMzQpOyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnN0MXFfczMyX3g0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQzMng0eDRfdCBfX3MxID0gX19wMTsgXAotICBpbnQzMng0eDRfdCBfX3JldjE7IFwKLSAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzNdLCBfX3MxLnZhbFszXSwgMywgMiwgMSwgMCk7IFwKLSAgX19idWlsdGluX25lb25fdnN0MXFfeDRfdihfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCBfX3JldjEudmFsWzJdLCBfX3JldjEudmFsWzNdLCAzNCk7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzdDFxX3M2NF94NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50NjR4Mng0X3QgX19zMSA9IF9fcDE7IFwKLSAgX19idWlsdGluX25lb25fdnN0MXFfeDRfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCBfX3MxLnZhbFszXSwgMzUpOyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnN0MXFfczY0X3g0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ2NHgyeDRfdCBfX3MxID0gX19wMTsgXAotICBpbnQ2NHgyeDRfdCBfX3JldjE7IFwKLSAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzNdLCBfX3MxLnZhbFszXSwgMSwgMCk7IFwKLSAgX19idWlsdGluX25lb25fdnN0MXFfeDRfdihfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCBfX3JldjEudmFsWzJdLCBfX3JldjEudmFsWzNdLCAzNSk7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzdDFxX3MxNl94NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MTZ4OHg0X3QgX19zMSA9IF9fcDE7IFwKLSAgX19idWlsdGluX25lb25fdnN0MXFfeDRfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCBfX3MxLnZhbFszXSwgMzMpOyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnN0MXFfczE2X3g0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQxNng4eDRfdCBfX3MxID0gX19wMTsgXAotICBpbnQxNng4eDRfdCBfX3JldjE7IFwKLSAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzNdLCBfX3MxLnZhbFszXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19idWlsdGluX25lb25fdnN0MXFfeDRfdihfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCBfX3JldjEudmFsWzJdLCBfX3JldjEudmFsWzNdLCAzMyk7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzdDFfdThfeDQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ4eDh4NF90IF9fczEgPSBfX3AxOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDFfeDRfdihfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgKGludDh4OF90KV9fczEudmFsWzJdLCAoaW50OHg4X3QpX19zMS52YWxbM10sIDE2KTsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzdDFfdThfeDQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ4eDh4NF90IF9fczEgPSBfX3AxOyBcCi0gIHVpbnQ4eDh4NF90IF9fcmV2MTsgXAotICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbM10sIF9fczEudmFsWzNdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QxX3g0X3YoX19wMCwgKGludDh4OF90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDhfdClfX3JldjEudmFsWzFdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsyXSwgKGludDh4OF90KV9fcmV2MS52YWxbM10sIDE2KTsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnN0MV91MzJfeDQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQzMngyeDRfdCBfX3MxID0gX19wMTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QxX3g0X3YoX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIChpbnQ4eDhfdClfX3MxLnZhbFsyXSwgKGludDh4OF90KV9fczEudmFsWzNdLCAxOCk7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c3QxX3UzMl94NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDMyeDJ4NF90IF9fczEgPSBfX3AxOyBcCi0gIHVpbnQzMngyeDRfdCBfX3JldjE7IFwKLSAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzNdLCBfX3MxLnZhbFszXSwgMSwgMCk7IFwKLSAgX19idWlsdGluX25lb25fdnN0MV94NF92KF9fcDAsIChpbnQ4eDhfdClfX3JldjEudmFsWzBdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsxXSwgKGludDh4OF90KV9fcmV2MS52YWxbMl0sIChpbnQ4eDhfdClfX3JldjEudmFsWzNdLCAxOCk7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzdDFfdTY0X3g0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50NjR4MXg0X3QgX19zMSA9IF9fcDE7IFwKLSAgX19idWlsdGluX25lb25fdnN0MV94NF92KF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCAoaW50OHg4X3QpX19zMS52YWxbMl0sIChpbnQ4eDhfdClfX3MxLnZhbFszXSwgMTkpOyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnN0MV91NjRfeDQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ2NHgxeDRfdCBfX3MxID0gX19wMTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QxX3g0X3YoX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIChpbnQ4eDhfdClfX3MxLnZhbFsyXSwgKGludDh4OF90KV9fczEudmFsWzNdLCAxOSk7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzdDFfdTE2X3g0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MTZ4NHg0X3QgX19zMSA9IF9fcDE7IFwKLSAgX19idWlsdGluX25lb25fdnN0MV94NF92KF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCAoaW50OHg4X3QpX19zMS52YWxbMl0sIChpbnQ4eDhfdClfX3MxLnZhbFszXSwgMTcpOyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnN0MV91MTZfeDQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQxNng0eDRfdCBfX3MxID0gX19wMTsgXAotICB1aW50MTZ4NHg0X3QgX19yZXYxOyBcCi0gIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFszXSwgX19zMS52YWxbM10sIDMsIDIsIDEsIDApOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDFfeDRfdihfX3AwLCAoaW50OHg4X3QpX19yZXYxLnZhbFswXSwgKGludDh4OF90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDhfdClfX3JldjEudmFsWzJdLCAoaW50OHg4X3QpX19yZXYxLnZhbFszXSwgMTcpOyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c3QxX3M4X3g0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ4eDh4NF90IF9fczEgPSBfX3AxOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDFfeDRfdihfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgKGludDh4OF90KV9fczEudmFsWzJdLCAoaW50OHg4X3QpX19zMS52YWxbM10sIDApOyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnN0MV9zOF94NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50OHg4eDRfdCBfX3MxID0gX19wMTsgXAotICBpbnQ4eDh4NF90IF9fcmV2MTsgXAotICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbM10sIF9fczEudmFsWzNdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QxX3g0X3YoX19wMCwgKGludDh4OF90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDhfdClfX3JldjEudmFsWzFdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsyXSwgKGludDh4OF90KV9fcmV2MS52YWxbM10sIDApOyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c3QxX2Y2NF94NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQ2NHgxeDRfdCBfX3MxID0gX19wMTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QxX3g0X3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgX19zMS52YWxbM10sIDEwKTsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzdDFfZjY0X3g0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDY0eDF4NF90IF9fczEgPSBfX3AxOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDFfeDRfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCBfX3MxLnZhbFszXSwgMTApOyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c3QxX2YzMl94NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQzMngyeDRfdCBfX3MxID0gX19wMTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QxX3g0X3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgX19zMS52YWxbM10sIDkpOyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnN0MV9mMzJfeDQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0MzJ4Mng0X3QgX19zMSA9IF9fcDE7IFwKLSAgZmxvYXQzMngyeDRfdCBfX3JldjE7IFwKLSAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzNdLCBfX3MxLnZhbFszXSwgMSwgMCk7IFwKLSAgX19idWlsdGluX25lb25fdnN0MV94NF92KF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcmV2MS52YWxbMl0sIF9fcmV2MS52YWxbM10sIDkpOyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c3QxX2YxNl94NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQxNng0eDRfdCBfX3MxID0gX19wMTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QxX3g0X3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgX19zMS52YWxbM10sIDgpOyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnN0MV9mMTZfeDQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0MTZ4NHg0X3QgX19zMSA9IF9fcDE7IFwKLSAgZmxvYXQxNng0eDRfdCBfX3JldjE7IFwKLSAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzNdLCBfX3MxLnZhbFszXSwgMywgMiwgMSwgMCk7IFwKLSAgX19idWlsdGluX25lb25fdnN0MV94NF92KF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcmV2MS52YWxbMl0sIF9fcmV2MS52YWxbM10sIDgpOyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c3QxX3MzMl94NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MzJ4Mng0X3QgX19zMSA9IF9fcDE7IFwKLSAgX19idWlsdGluX25lb25fdnN0MV94NF92KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIF9fczEudmFsWzNdLCAyKTsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzdDFfczMyX3g0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQzMngyeDRfdCBfX3MxID0gX19wMTsgXAotICBpbnQzMngyeDRfdCBfX3JldjE7IFwKLSAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzNdLCBfX3MxLnZhbFszXSwgMSwgMCk7IFwKLSAgX19idWlsdGluX25lb25fdnN0MV94NF92KF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcmV2MS52YWxbMl0sIF9fcmV2MS52YWxbM10sIDIpOyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c3QxX3M2NF94NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50NjR4MXg0X3QgX19zMSA9IF9fcDE7IFwKLSAgX19idWlsdGluX25lb25fdnN0MV94NF92KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIF9fczEudmFsWzNdLCAzKTsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzdDFfczY0X3g0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ2NHgxeDRfdCBfX3MxID0gX19wMTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QxX3g0X3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgX19zMS52YWxbM10sIDMpOyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c3QxX3MxNl94NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MTZ4NHg0X3QgX19zMSA9IF9fcDE7IFwKLSAgX19idWlsdGluX25lb25fdnN0MV94NF92KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIF9fczEudmFsWzNdLCAxKTsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzdDFfczE2X3g0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQxNng0eDRfdCBfX3MxID0gX19wMTsgXAotICBpbnQxNng0eDRfdCBfX3JldjE7IFwKLSAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzNdLCBfX3MxLnZhbFszXSwgMywgMiwgMSwgMCk7IFwKLSAgX19idWlsdGluX25lb25fdnN0MV94NF92KF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcmV2MS52YWxbMl0sIF9fcmV2MS52YWxbM10sIDEpOyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c3QyX3A2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTY0eDF4Ml90IF9fczEgPSBfX3AxOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDJfdihfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgNik7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c3QyX3A2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTY0eDF4Ml90IF9fczEgPSBfX3AxOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDJfdihfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgNik7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzdDJxX3A2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTY0eDJ4Ml90IF9fczEgPSBfX3AxOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDJxX3YoX19wMCwgKGludDh4MTZfdClfX3MxLnZhbFswXSwgKGludDh4MTZfdClfX3MxLnZhbFsxXSwgMzgpOyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnN0MnFfcDY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBwb2x5NjR4MngyX3QgX19zMSA9IF9fcDE7IFwKLSAgcG9seTY0eDJ4Ml90IF9fcmV2MTsgXAotICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxLCAwKTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QycV92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCAzOCk7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzdDJxX3U2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDY0eDJ4Ml90IF9fczEgPSBfX3AxOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDJxX3YoX19wMCwgKGludDh4MTZfdClfX3MxLnZhbFswXSwgKGludDh4MTZfdClfX3MxLnZhbFsxXSwgNTEpOyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnN0MnFfdTY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50NjR4MngyX3QgX19zMSA9IF9fcDE7IFwKLSAgdWludDY0eDJ4Ml90IF9fcmV2MTsgXAotICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxLCAwKTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QycV92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCA1MSk7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzdDJxX2Y2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQ2NHgyeDJfdCBfX3MxID0gX19wMTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QycV92KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgNDIpOyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnN0MnFfZjY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDY0eDJ4Ml90IF9fczEgPSBfX3AxOyBcCi0gIGZsb2F0NjR4MngyX3QgX19yZXYxOyBcCi0gIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDEsIDApOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDJxX3YoX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgNDIpOyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c3QycV9zNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDY0eDJ4Ml90IF9fczEgPSBfX3AxOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDJxX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCAzNSk7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c3QycV9zNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDY0eDJ4Ml90IF9fczEgPSBfX3AxOyBcCi0gIGludDY0eDJ4Ml90IF9fcmV2MTsgXAotICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxLCAwKTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QycV92KF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIDM1KTsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnN0Ml9mNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0NjR4MXgyX3QgX19zMSA9IF9fcDE7IFwKLSAgX19idWlsdGluX25lb25fdnN0Ml92KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgMTApOyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnN0Ml9mNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0NjR4MXgyX3QgX19zMSA9IF9fcDE7IFwKLSAgX19idWlsdGluX25lb25fdnN0Ml92KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgMTApOyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c3QyX2xhbmVfcDY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBwb2x5NjR4MXgyX3QgX19zMSA9IF9fcDE7IFwKLSAgX19idWlsdGluX25lb25fdnN0Ml9sYW5lX3YoX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIF9fcDIsIDYpOyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnN0Ml9sYW5lX3A2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTY0eDF4Ml90IF9fczEgPSBfX3AxOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDJfbGFuZV92KF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCBfX3AyLCA2KTsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnN0MnFfbGFuZV9wOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTh4MTZ4Ml90IF9fczEgPSBfX3AxOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDJxX2xhbmVfdihfX3AwLCAoaW50OHgxNl90KV9fczEudmFsWzBdLCAoaW50OHgxNl90KV9fczEudmFsWzFdLCBfX3AyLCAzNik7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c3QycV9sYW5lX3A4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBwb2x5OHgxNngyX3QgX19zMSA9IF9fcDE7IFwKLSAgcG9seTh4MTZ4Ml90IF9fcmV2MTsgXAotICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QycV9sYW5lX3YoX19wMCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIF9fcDIsIDM2KTsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnN0MnFfbGFuZV9wNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHk2NHgyeDJfdCBfX3MxID0gX19wMTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QycV9sYW5lX3YoX19wMCwgKGludDh4MTZfdClfX3MxLnZhbFswXSwgKGludDh4MTZfdClfX3MxLnZhbFsxXSwgX19wMiwgMzgpOyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnN0MnFfbGFuZV9wNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHk2NHgyeDJfdCBfX3MxID0gX19wMTsgXAotICBwb2x5NjR4MngyX3QgX19yZXYxOyBcCi0gIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDEsIDApOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDJxX2xhbmVfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgX19wMiwgMzgpOyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c3QycV9sYW5lX3U4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50OHgxNngyX3QgX19zMSA9IF9fcDE7IFwKLSAgX19idWlsdGluX25lb25fdnN0MnFfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19zMS52YWxbMF0sIChpbnQ4eDE2X3QpX19zMS52YWxbMV0sIF9fcDIsIDQ4KTsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzdDJxX2xhbmVfdTgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ4eDE2eDJfdCBfX3MxID0gX19wMTsgXAotICB1aW50OHgxNngyX3QgX19yZXYxOyBcCi0gIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDJxX2xhbmVfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgX19wMiwgNDgpOyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c3QycV9sYW5lX3U2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDY0eDJ4Ml90IF9fczEgPSBfX3AxOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDJxX2xhbmVfdihfX3AwLCAoaW50OHgxNl90KV9fczEudmFsWzBdLCAoaW50OHgxNl90KV9fczEudmFsWzFdLCBfX3AyLCA1MSk7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c3QycV9sYW5lX3U2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDY0eDJ4Ml90IF9fczEgPSBfX3AxOyBcCi0gIHVpbnQ2NHgyeDJfdCBfX3JldjE7IFwKLSAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMSwgMCk7IFwKLSAgX19idWlsdGluX25lb25fdnN0MnFfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCBfX3AyLCA1MSk7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzdDJxX2xhbmVfczgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDh4MTZ4Ml90IF9fczEgPSBfX3AxOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDJxX2xhbmVfdihfX3AwLCAoaW50OHgxNl90KV9fczEudmFsWzBdLCAoaW50OHgxNl90KV9fczEudmFsWzFdLCBfX3AyLCAzMik7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c3QycV9sYW5lX3M4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ4eDE2eDJfdCBfX3MxID0gX19wMTsgXAotICBpbnQ4eDE2eDJfdCBfX3JldjE7IFwKLSAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19idWlsdGluX25lb25fdnN0MnFfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCBfX3AyLCAzMik7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzdDJxX2xhbmVfZjY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDY0eDJ4Ml90IF9fczEgPSBfX3AxOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDJxX2xhbmVfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fcDIsIDQyKTsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzdDJxX2xhbmVfZjY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDY0eDJ4Ml90IF9fczEgPSBfX3AxOyBcCi0gIGZsb2F0NjR4MngyX3QgX19yZXYxOyBcCi0gIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDEsIDApOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDJxX2xhbmVfdihfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCBfX3AyLCA0Mik7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzdDJxX2xhbmVfczY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ2NHgyeDJfdCBfX3MxID0gX19wMTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QycV9sYW5lX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3AyLCAzNSk7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c3QycV9sYW5lX3M2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50NjR4MngyX3QgX19zMSA9IF9fcDE7IFwKLSAgaW50NjR4MngyX3QgX19yZXYxOyBcCi0gIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDEsIDApOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDJxX2xhbmVfdihfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCBfX3AyLCAzNSk7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzdDJfbGFuZV91NjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ2NHgxeDJfdCBfX3MxID0gX19wMTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QyX2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgX19wMiwgMTkpOyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnN0Ml9sYW5lX3U2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDY0eDF4Ml90IF9fczEgPSBfX3AxOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDJfbGFuZV92KF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCBfX3AyLCAxOSk7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzdDJfbGFuZV9mNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0NjR4MXgyX3QgX19zMSA9IF9fcDE7IFwKLSAgX19idWlsdGluX25lb25fdnN0Ml9sYW5lX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3AyLCAxMCk7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c3QyX2xhbmVfZjY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDY0eDF4Ml90IF9fczEgPSBfX3AxOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDJfbGFuZV92KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19wMiwgMTApOyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c3QyX2xhbmVfczY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ2NHgxeDJfdCBfX3MxID0gX19wMTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QyX2xhbmVfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fcDIsIDMpOyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnN0Ml9sYW5lX3M2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50NjR4MXgyX3QgX19zMSA9IF9fcDE7IFwKLSAgX19idWlsdGluX25lb25fdnN0Ml9sYW5lX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3AyLCAzKTsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnN0M19wNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHk2NHgxeDNfdCBfX3MxID0gX19wMTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QzX3YoX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIChpbnQ4eDhfdClfX3MxLnZhbFsyXSwgNik7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c3QzX3A2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTY0eDF4M190IF9fczEgPSBfX3AxOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDNfdihfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgKGludDh4OF90KV9fczEudmFsWzJdLCA2KTsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnN0M3FfcDY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBwb2x5NjR4MngzX3QgX19zMSA9IF9fcDE7IFwKLSAgX19idWlsdGluX25lb25fdnN0M3FfdihfX3AwLCAoaW50OHgxNl90KV9fczEudmFsWzBdLCAoaW50OHgxNl90KV9fczEudmFsWzFdLCAoaW50OHgxNl90KV9fczEudmFsWzJdLCAzOCk7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c3QzcV9wNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHk2NHgyeDNfdCBfX3MxID0gX19wMTsgXAotICBwb2x5NjR4MngzX3QgX19yZXYxOyBcCi0gIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDEsIDApOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDNxX3YoX19wMCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsyXSwgMzgpOyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c3QzcV91NjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ2NHgyeDNfdCBfX3MxID0gX19wMTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QzcV92KF9fcDAsIChpbnQ4eDE2X3QpX19zMS52YWxbMF0sIChpbnQ4eDE2X3QpX19zMS52YWxbMV0sIChpbnQ4eDE2X3QpX19zMS52YWxbMl0sIDUxKTsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzdDNxX3U2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDY0eDJ4M190IF9fczEgPSBfX3AxOyBcCi0gIHVpbnQ2NHgyeDNfdCBfX3JldjE7IFwKLSAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMSwgMCk7IFwKLSAgX19idWlsdGluX25lb25fdnN0M3FfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgKGludDh4MTZfdClfX3JldjEudmFsWzJdLCA1MSk7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzdDNxX2Y2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQ2NHgyeDNfdCBfX3MxID0gX19wMTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QzcV92KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIDQyKTsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzdDNxX2Y2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQ2NHgyeDNfdCBfX3MxID0gX19wMTsgXAotICBmbG9hdDY0eDJ4M190IF9fcmV2MTsgXAotICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAxLCAwKTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QzcV92KF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcmV2MS52YWxbMl0sIDQyKTsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnN0M3FfczY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ2NHgyeDNfdCBfX3MxID0gX19wMTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QzcV92KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIDM1KTsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzdDNxX3M2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50NjR4MngzX3QgX19zMSA9IF9fcDE7IFwKLSAgaW50NjR4MngzX3QgX19yZXYxOyBcCi0gIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDEsIDApOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDNxX3YoX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgX19yZXYxLnZhbFsyXSwgMzUpOyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c3QzX2Y2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQ2NHgxeDNfdCBfX3MxID0gX19wMTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QzX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgMTApOyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnN0M19mNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0NjR4MXgzX3QgX19zMSA9IF9fcDE7IFwKLSAgX19idWlsdGluX25lb25fdnN0M192KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIDEwKTsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnN0M19sYW5lX3A2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTY0eDF4M190IF9fczEgPSBfX3AxOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDNfbGFuZV92KF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCAoaW50OHg4X3QpX19zMS52YWxbMl0sIF9fcDIsIDYpOyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnN0M19sYW5lX3A2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTY0eDF4M190IF9fczEgPSBfX3AxOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDNfbGFuZV92KF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCAoaW50OHg4X3QpX19zMS52YWxbMl0sIF9fcDIsIDYpOyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c3QzcV9sYW5lX3A4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBwb2x5OHgxNngzX3QgX19zMSA9IF9fcDE7IFwKLSAgX19idWlsdGluX25lb25fdnN0M3FfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19zMS52YWxbMF0sIChpbnQ4eDE2X3QpX19zMS52YWxbMV0sIChpbnQ4eDE2X3QpX19zMS52YWxbMl0sIF9fcDIsIDM2KTsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzdDNxX2xhbmVfcDgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHk4eDE2eDNfdCBfX3MxID0gX19wMTsgXAotICBwb2x5OHgxNngzX3QgX19yZXYxOyBcCi0gIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDNxX2xhbmVfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgKGludDh4MTZfdClfX3JldjEudmFsWzJdLCBfX3AyLCAzNik7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzdDNxX2xhbmVfcDY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBwb2x5NjR4MngzX3QgX19zMSA9IF9fcDE7IFwKLSAgX19idWlsdGluX25lb25fdnN0M3FfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19zMS52YWxbMF0sIChpbnQ4eDE2X3QpX19zMS52YWxbMV0sIChpbnQ4eDE2X3QpX19zMS52YWxbMl0sIF9fcDIsIDM4KTsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzdDNxX2xhbmVfcDY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBwb2x5NjR4MngzX3QgX19zMSA9IF9fcDE7IFwKLSAgcG9seTY0eDJ4M190IF9fcmV2MTsgXAotICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAxLCAwKTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QzcV9sYW5lX3YoX19wMCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsyXSwgX19wMiwgMzgpOyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c3QzcV9sYW5lX3U4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50OHgxNngzX3QgX19zMSA9IF9fcDE7IFwKLSAgX19idWlsdGluX25lb25fdnN0M3FfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19zMS52YWxbMF0sIChpbnQ4eDE2X3QpX19zMS52YWxbMV0sIChpbnQ4eDE2X3QpX19zMS52YWxbMl0sIF9fcDIsIDQ4KTsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzdDNxX2xhbmVfdTgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ4eDE2eDNfdCBfX3MxID0gX19wMTsgXAotICB1aW50OHgxNngzX3QgX19yZXYxOyBcCi0gIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDNxX2xhbmVfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgKGludDh4MTZfdClfX3JldjEudmFsWzJdLCBfX3AyLCA0OCk7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzdDNxX2xhbmVfdTY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50NjR4MngzX3QgX19zMSA9IF9fcDE7IFwKLSAgX19idWlsdGluX25lb25fdnN0M3FfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19zMS52YWxbMF0sIChpbnQ4eDE2X3QpX19zMS52YWxbMV0sIChpbnQ4eDE2X3QpX19zMS52YWxbMl0sIF9fcDIsIDUxKTsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzdDNxX2xhbmVfdTY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50NjR4MngzX3QgX19zMSA9IF9fcDE7IFwKLSAgdWludDY0eDJ4M190IF9fcmV2MTsgXAotICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAxLCAwKTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QzcV9sYW5lX3YoX19wMCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsyXSwgX19wMiwgNTEpOyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c3QzcV9sYW5lX3M4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ4eDE2eDNfdCBfX3MxID0gX19wMTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QzcV9sYW5lX3YoX19wMCwgKGludDh4MTZfdClfX3MxLnZhbFswXSwgKGludDh4MTZfdClfX3MxLnZhbFsxXSwgKGludDh4MTZfdClfX3MxLnZhbFsyXSwgX19wMiwgMzIpOyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnN0M3FfbGFuZV9zOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50OHgxNngzX3QgX19zMSA9IF9fcDE7IFwKLSAgaW50OHgxNngzX3QgX19yZXYxOyBcCi0gIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDNxX2xhbmVfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgKGludDh4MTZfdClfX3JldjEudmFsWzJdLCBfX3AyLCAzMik7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzdDNxX2xhbmVfZjY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDY0eDJ4M190IF9fczEgPSBfX3AxOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDNxX2xhbmVfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCBfX3AyLCA0Mik7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c3QzcV9sYW5lX2Y2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQ2NHgyeDNfdCBfX3MxID0gX19wMTsgXAotICBmbG9hdDY0eDJ4M190IF9fcmV2MTsgXAotICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAxLCAwKTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QzcV9sYW5lX3YoX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgX19yZXYxLnZhbFsyXSwgX19wMiwgNDIpOyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c3QzcV9sYW5lX3M2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50NjR4MngzX3QgX19zMSA9IF9fcDE7IFwKLSAgX19idWlsdGluX25lb25fdnN0M3FfbGFuZV92KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIF9fcDIsIDM1KTsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzdDNxX2xhbmVfczY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ2NHgyeDNfdCBfX3MxID0gX19wMTsgXAotICBpbnQ2NHgyeDNfdCBfX3JldjE7IFwKLSAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMSwgMCk7IFwKLSAgX19idWlsdGluX25lb25fdnN0M3FfbGFuZV92KF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcmV2MS52YWxbMl0sIF9fcDIsIDM1KTsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnN0M19sYW5lX3U2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDY0eDF4M190IF9fczEgPSBfX3AxOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDNfbGFuZV92KF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCAoaW50OHg4X3QpX19zMS52YWxbMl0sIF9fcDIsIDE5KTsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzdDNfbGFuZV91NjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ2NHgxeDNfdCBfX3MxID0gX19wMTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QzX2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgKGludDh4OF90KV9fczEudmFsWzJdLCBfX3AyLCAxOSk7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzdDNfbGFuZV9mNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0NjR4MXgzX3QgX19zMSA9IF9fcDE7IFwKLSAgX19idWlsdGluX25lb25fdnN0M19sYW5lX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgX19wMiwgMTApOyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnN0M19sYW5lX2Y2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQ2NHgxeDNfdCBfX3MxID0gX19wMTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3QzX2xhbmVfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCBfX3AyLCAxMCk7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzdDNfbGFuZV9zNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDY0eDF4M190IF9fczEgPSBfX3AxOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDNfbGFuZV92KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIF9fcDIsIDMpOyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnN0M19sYW5lX3M2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50NjR4MXgzX3QgX19zMSA9IF9fcDE7IFwKLSAgX19idWlsdGluX25lb25fdnN0M19sYW5lX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgX19wMiwgMyk7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzdDRfcDY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBwb2x5NjR4MXg0X3QgX19zMSA9IF9fcDE7IFwKLSAgX19idWlsdGluX25lb25fdnN0NF92KF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCAoaW50OHg4X3QpX19zMS52YWxbMl0sIChpbnQ4eDhfdClfX3MxLnZhbFszXSwgNik7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c3Q0X3A2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTY0eDF4NF90IF9fczEgPSBfX3AxOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDRfdihfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgKGludDh4OF90KV9fczEudmFsWzJdLCAoaW50OHg4X3QpX19zMS52YWxbM10sIDYpOyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c3Q0cV9wNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHk2NHgyeDRfdCBfX3MxID0gX19wMTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3Q0cV92KF9fcDAsIChpbnQ4eDE2X3QpX19zMS52YWxbMF0sIChpbnQ4eDE2X3QpX19zMS52YWxbMV0sIChpbnQ4eDE2X3QpX19zMS52YWxbMl0sIChpbnQ4eDE2X3QpX19zMS52YWxbM10sIDM4KTsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzdDRxX3A2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTY0eDJ4NF90IF9fczEgPSBfX3AxOyBcCi0gIHBvbHk2NHgyeDRfdCBfX3JldjE7IFwKLSAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzNdLCBfX3MxLnZhbFszXSwgMSwgMCk7IFwKLSAgX19idWlsdGluX25lb25fdnN0NHFfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgKGludDh4MTZfdClfX3JldjEudmFsWzJdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbM10sIDM4KTsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnN0NHFfdTY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50NjR4Mng0X3QgX19zMSA9IF9fcDE7IFwKLSAgX19idWlsdGluX25lb25fdnN0NHFfdihfX3AwLCAoaW50OHgxNl90KV9fczEudmFsWzBdLCAoaW50OHgxNl90KV9fczEudmFsWzFdLCAoaW50OHgxNl90KV9fczEudmFsWzJdLCAoaW50OHgxNl90KV9fczEudmFsWzNdLCA1MSk7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c3Q0cV91NjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ2NHgyeDRfdCBfX3MxID0gX19wMTsgXAotICB1aW50NjR4Mng0X3QgX19yZXYxOyBcCi0gIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFszXSwgX19zMS52YWxbM10sIDEsIDApOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDRxX3YoX19wMCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsyXSwgKGludDh4MTZfdClfX3JldjEudmFsWzNdLCA1MSk7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzdDRxX2Y2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQ2NHgyeDRfdCBfX3MxID0gX19wMTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3Q0cV92KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIF9fczEudmFsWzNdLCA0Mik7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c3Q0cV9mNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0NjR4Mng0X3QgX19zMSA9IF9fcDE7IFwKLSAgZmxvYXQ2NHgyeDRfdCBfX3JldjE7IFwKLSAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzNdLCBfX3MxLnZhbFszXSwgMSwgMCk7IFwKLSAgX19idWlsdGluX25lb25fdnN0NHFfdihfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCBfX3JldjEudmFsWzJdLCBfX3JldjEudmFsWzNdLCA0Mik7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzdDRxX3M2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50NjR4Mng0X3QgX19zMSA9IF9fcDE7IFwKLSAgX19idWlsdGluX25lb25fdnN0NHFfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCBfX3MxLnZhbFszXSwgMzUpOyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnN0NHFfczY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQ2NHgyeDRfdCBfX3MxID0gX19wMTsgXAotICBpbnQ2NHgyeDRfdCBfX3JldjE7IFwKLSAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzNdLCBfX3MxLnZhbFszXSwgMSwgMCk7IFwKLSAgX19idWlsdGluX25lb25fdnN0NHFfdihfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCBfX3JldjEudmFsWzJdLCBfX3JldjEudmFsWzNdLCAzNSk7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzdDRfZjY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDY0eDF4NF90IF9fczEgPSBfX3AxOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDRfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCBfX3MxLnZhbFszXSwgMTApOyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnN0NF9mNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0NjR4MXg0X3QgX19zMSA9IF9fcDE7IFwKLSAgX19idWlsdGluX25lb25fdnN0NF92KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIF9fczEudmFsWzNdLCAxMCk7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzdDRfbGFuZV9wNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHk2NHgxeDRfdCBfX3MxID0gX19wMTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3Q0X2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgKGludDh4OF90KV9fczEudmFsWzJdLCAoaW50OHg4X3QpX19zMS52YWxbM10sIF9fcDIsIDYpOyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnN0NF9sYW5lX3A2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTY0eDF4NF90IF9fczEgPSBfX3AxOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDRfbGFuZV92KF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCAoaW50OHg4X3QpX19zMS52YWxbMl0sIChpbnQ4eDhfdClfX3MxLnZhbFszXSwgX19wMiwgNik7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzdDRxX2xhbmVfcDgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHk4eDE2eDRfdCBfX3MxID0gX19wMTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3Q0cV9sYW5lX3YoX19wMCwgKGludDh4MTZfdClfX3MxLnZhbFswXSwgKGludDh4MTZfdClfX3MxLnZhbFsxXSwgKGludDh4MTZfdClfX3MxLnZhbFsyXSwgKGludDh4MTZfdClfX3MxLnZhbFszXSwgX19wMiwgMzYpOyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnN0NHFfbGFuZV9wOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTh4MTZ4NF90IF9fczEgPSBfX3AxOyBcCi0gIHBvbHk4eDE2eDRfdCBfX3JldjE7IFwKLSAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzNdLCBfX3MxLnZhbFszXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgX19idWlsdGluX25lb25fdnN0NHFfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMl0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFszXSwgX19wMiwgMzYpOyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c3Q0cV9sYW5lX3A2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTY0eDJ4NF90IF9fczEgPSBfX3AxOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDRxX2xhbmVfdihfX3AwLCAoaW50OHgxNl90KV9fczEudmFsWzBdLCAoaW50OHgxNl90KV9fczEudmFsWzFdLCAoaW50OHgxNl90KV9fczEudmFsWzJdLCAoaW50OHgxNl90KV9fczEudmFsWzNdLCBfX3AyLCAzOCk7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c3Q0cV9sYW5lX3A2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTY0eDJ4NF90IF9fczEgPSBfX3AxOyBcCi0gIHBvbHk2NHgyeDRfdCBfX3JldjE7IFwKLSAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzNdLCBfX3MxLnZhbFszXSwgMSwgMCk7IFwKLSAgX19idWlsdGluX25lb25fdnN0NHFfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMl0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFszXSwgX19wMiwgMzgpOyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c3Q0cV9sYW5lX3U4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50OHgxNng0X3QgX19zMSA9IF9fcDE7IFwKLSAgX19idWlsdGluX25lb25fdnN0NHFfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19zMS52YWxbMF0sIChpbnQ4eDE2X3QpX19zMS52YWxbMV0sIChpbnQ4eDE2X3QpX19zMS52YWxbMl0sIChpbnQ4eDE2X3QpX19zMS52YWxbM10sIF9fcDIsIDQ4KTsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzdDRxX2xhbmVfdTgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ4eDE2eDRfdCBfX3MxID0gX19wMTsgXAotICB1aW50OHgxNng0X3QgX19yZXYxOyBcCi0gIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFszXSwgX19zMS52YWxbM10sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDRxX2xhbmVfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgKGludDh4MTZfdClfX3JldjEudmFsWzJdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbM10sIF9fcDIsIDQ4KTsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnN0NHFfbGFuZV91NjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ2NHgyeDRfdCBfX3MxID0gX19wMTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3Q0cV9sYW5lX3YoX19wMCwgKGludDh4MTZfdClfX3MxLnZhbFswXSwgKGludDh4MTZfdClfX3MxLnZhbFsxXSwgKGludDh4MTZfdClfX3MxLnZhbFsyXSwgKGludDh4MTZfdClfX3MxLnZhbFszXSwgX19wMiwgNTEpOyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnN0NHFfbGFuZV91NjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ2NHgyeDRfdCBfX3MxID0gX19wMTsgXAotICB1aW50NjR4Mng0X3QgX19yZXYxOyBcCi0gIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDEsIDApOyBcCi0gIF9fcmV2MS52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFszXSwgX19zMS52YWxbM10sIDEsIDApOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDRxX2xhbmVfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgKGludDh4MTZfdClfX3JldjEudmFsWzJdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbM10sIF9fcDIsIDUxKTsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnN0NHFfbGFuZV9zOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50OHgxNng0X3QgX19zMSA9IF9fcDE7IFwKLSAgX19idWlsdGluX25lb25fdnN0NHFfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19zMS52YWxbMF0sIChpbnQ4eDE2X3QpX19zMS52YWxbMV0sIChpbnQ4eDE2X3QpX19zMS52YWxbMl0sIChpbnQ4eDE2X3QpX19zMS52YWxbM10sIF9fcDIsIDMyKTsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzdDRxX2xhbmVfczgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDh4MTZ4NF90IF9fczEgPSBfX3AxOyBcCi0gIGludDh4MTZ4NF90IF9fcmV2MTsgXAotICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbM10sIF9fczEudmFsWzNdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3Q0cV9sYW5lX3YoX19wMCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsyXSwgKGludDh4MTZfdClfX3JldjEudmFsWzNdLCBfX3AyLCAzMik7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzdDRxX2xhbmVfZjY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDY0eDJ4NF90IF9fczEgPSBfX3AxOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDRxX2xhbmVfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCBfX3MxLnZhbFszXSwgX19wMiwgNDIpOyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnN0NHFfbGFuZV9mNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0NjR4Mng0X3QgX19zMSA9IF9fcDE7IFwKLSAgZmxvYXQ2NHgyeDRfdCBfX3JldjE7IFwKLSAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMSwgMCk7IFwKLSAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzNdLCBfX3MxLnZhbFszXSwgMSwgMCk7IFwKLSAgX19idWlsdGluX25lb25fdnN0NHFfbGFuZV92KF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcmV2MS52YWxbMl0sIF9fcmV2MS52YWxbM10sIF9fcDIsIDQyKTsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnN0NHFfbGFuZV9zNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDY0eDJ4NF90IF9fczEgPSBfX3AxOyBcCi0gIF9fYnVpbHRpbl9uZW9uX3ZzdDRxX2xhbmVfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCBfX3MxLnZhbFszXSwgX19wMiwgMzUpOyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnN0NHFfbGFuZV9zNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDY0eDJ4NF90IF9fczEgPSBfX3AxOyBcCi0gIGludDY0eDJ4NF90IF9fcmV2MTsgXAotICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAxLCAwKTsgXAotICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbM10sIF9fczEudmFsWzNdLCAxLCAwKTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3Q0cV9sYW5lX3YoX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgX19yZXYxLnZhbFsyXSwgX19yZXYxLnZhbFszXSwgX19wMiwgMzUpOyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c3Q0X2xhbmVfdTY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50NjR4MXg0X3QgX19zMSA9IF9fcDE7IFwKLSAgX19idWlsdGluX25lb25fdnN0NF9sYW5lX3YoX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIChpbnQ4eDhfdClfX3MxLnZhbFsyXSwgKGludDh4OF90KV9fczEudmFsWzNdLCBfX3AyLCAxOSk7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c3Q0X2xhbmVfdTY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50NjR4MXg0X3QgX19zMSA9IF9fcDE7IFwKLSAgX19idWlsdGluX25lb25fdnN0NF9sYW5lX3YoX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIChpbnQ4eDhfdClfX3MxLnZhbFsyXSwgKGludDh4OF90KV9fczEudmFsWzNdLCBfX3AyLCAxOSk7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzdDRfbGFuZV9mNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0NjR4MXg0X3QgX19zMSA9IF9fcDE7IFwKLSAgX19idWlsdGluX25lb25fdnN0NF9sYW5lX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgX19zMS52YWxbM10sIF9fcDIsIDEwKTsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzdDRfbGFuZV9mNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0NjR4MXg0X3QgX19zMSA9IF9fcDE7IFwKLSAgX19idWlsdGluX25lb25fdnN0NF9sYW5lX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgX19zMS52YWxbM10sIF9fcDIsIDEwKTsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnN0NF9sYW5lX3M2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50NjR4MXg0X3QgX19zMSA9IF9fcDE7IFwKLSAgX19idWlsdGluX25lb25fdnN0NF9sYW5lX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgX19zMS52YWxbM10sIF9fcDIsIDMpOyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnN0NF9sYW5lX3M2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50NjR4MXg0X3QgX19zMSA9IF9fcDE7IFwKLSAgX19idWlsdGluX25lb25fdnN0NF9sYW5lX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgX19zMS52YWxbM10sIF9fcDIsIDMpOyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2c3RycV9wMTI4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBwb2x5MTI4X3QgX19zMSA9IF9fcDE7IFwKLSAgX19idWlsdGluX25lb25fdnN0cnFfcDEyOChfX3AwLCBfX3MxKTsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZzdHJxX3AxMjgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHkxMjhfdCBfX3MxID0gX19wMTsgXAotICBfX2J1aWx0aW5fbmVvbl92c3RycV9wMTI4KF9fcDAsIF9fczEpOyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50NjRfdCB2c3ViZF91NjQodWludDY0X3QgX19wMCwgdWludDY0X3QgX19wMSkgewotICB1aW50NjRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzdWJkX3U2NChfX3AwLCBfX3AxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDY0X3QgdnN1YmRfdTY0KHVpbnQ2NF90IF9fcDAsIHVpbnQ2NF90IF9fcDEpIHsKLSAgdWludDY0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92c3ViZF91NjQoX19wMCwgX19wMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50NjRfdCB2c3ViZF9zNjQoaW50NjRfdCBfX3AwLCBpbnQ2NF90IF9fcDEpIHsKLSAgaW50NjRfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdnN1YmRfczY0KF9fcDAsIF9fcDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQ2NF90IHZzdWJkX3M2NChpbnQ2NF90IF9fcDAsIGludDY0X3QgX19wMSkgewotICBpbnQ2NF90IF9fcmV0OwotICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92c3ViZF9zNjQoX19wMCwgX19wMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgZmxvYXQ2NHgyX3QgdnN1YnFfZjY0KGZsb2F0NjR4Ml90IF9fcDAsIGZsb2F0NjR4Ml90IF9fcDEpIHsKLSAgZmxvYXQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19wMCAtIF9fcDE7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGZsb2F0NjR4Ml90IHZzdWJxX2Y2NChmbG9hdDY0eDJfdCBfX3AwLCBmbG9hdDY0eDJfdCBfX3AxKSB7Ci0gIGZsb2F0NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICBmbG9hdDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKLSAgZmxvYXQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19yZXYwIC0gX19yZXYxOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgZmxvYXQ2NHgxX3QgdnN1Yl9mNjQoZmxvYXQ2NHgxX3QgX19wMCwgZmxvYXQ2NHgxX3QgX19wMSkgewotICBmbG9hdDY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSBfX3AwIC0gX19wMTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgZmxvYXQ2NHgxX3QgdnN1Yl9mNjQoZmxvYXQ2NHgxX3QgX19wMCwgZmxvYXQ2NHgxX3QgX19wMSkgewotICBmbG9hdDY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSBfX3AwIC0gX19wMTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MTZ4OF90IHZzdWJobl9oaWdoX3UzMih1aW50MTZ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSwgdWludDMyeDRfdCBfX3AyKSB7Ci0gIHVpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gdmNvbWJpbmVfdTE2KF9fcDAsIHZzdWJobl91MzIoX19wMSwgX19wMikpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MTZ4OF90IHZzdWJobl9oaWdoX3UzMih1aW50MTZ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSwgdWludDMyeDRfdCBfX3AyKSB7Ci0gIHVpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7Ci0gIHVpbnQzMng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMywgMiwgMSwgMCk7Ci0gIHVpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19ub3N3YXBfdmNvbWJpbmVfdTE2KF9fcmV2MCwgX19ub3N3YXBfdnN1YmhuX3UzMihfX3JldjEsIF9fcmV2MikpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDMyeDRfdCB2c3ViaG5faGlnaF91NjQodWludDMyeDJfdCBfX3AwLCB1aW50NjR4Ml90IF9fcDEsIHVpbnQ2NHgyX3QgX19wMikgewotICB1aW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IHZjb21iaW5lX3UzMihfX3AwLCB2c3ViaG5fdTY0KF9fcDEsIF9fcDIpKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDMyeDRfdCB2c3ViaG5faGlnaF91NjQodWludDMyeDJfdCBfX3AwLCB1aW50NjR4Ml90IF9fcDEsIHVpbnQ2NHgyX3QgX19wMikgewotICB1aW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICB1aW50NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOwotICB1aW50NjR4Ml90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDEsIDApOwotICB1aW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IF9fbm9zd2FwX3Zjb21iaW5lX3UzMihfX3JldjAsIF9fbm9zd2FwX3ZzdWJobl91NjQoX19yZXYxLCBfX3JldjIpKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ4eDE2X3QgdnN1YmhuX2hpZ2hfdTE2KHVpbnQ4eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEsIHVpbnQxNng4X3QgX19wMikgewotICB1aW50OHgxNl90IF9fcmV0OwotICBfX3JldCA9IHZjb21iaW5lX3U4KF9fcDAsIHZzdWJobl91MTYoX19wMSwgX19wMikpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50OHgxNl90IHZzdWJobl9oaWdoX3UxNih1aW50OHg4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxLCB1aW50MTZ4OF90IF9fcDIpIHsKLSAgdWludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50MTZ4OF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50OHgxNl90IF9fcmV0OwotICBfX3JldCA9IF9fbm9zd2FwX3Zjb21iaW5lX3U4KF9fcmV2MCwgX19ub3N3YXBfdnN1YmhuX3UxNihfX3JldjEsIF9fcmV2MikpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MTZ4OF90IHZzdWJobl9oaWdoX3MzMihpbnQxNng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEsIGludDMyeDRfdCBfX3AyKSB7Ci0gIGludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSB2Y29tYmluZV9zMTYoX19wMCwgdnN1YmhuX3MzMihfX3AxLCBfX3AyKSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDE2eDhfdCB2c3ViaG5faGlnaF9zMzIoaW50MTZ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxLCBpbnQzMng0X3QgX19wMikgewotICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKLSAgaW50MzJ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDMsIDIsIDEsIDApOwotICBpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19ub3N3YXBfdmNvbWJpbmVfczE2KF9fcmV2MCwgX19ub3N3YXBfdnN1YmhuX3MzMihfX3JldjEsIF9fcmV2MikpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MzJ4NF90IHZzdWJobl9oaWdoX3M2NChpbnQzMngyX3QgX19wMCwgaW50NjR4Ml90IF9fcDEsIGludDY0eDJfdCBfX3AyKSB7Ci0gIGludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSB2Y29tYmluZV9zMzIoX19wMCwgdnN1YmhuX3M2NChfX3AxLCBfX3AyKSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDMyeDRfdCB2c3ViaG5faGlnaF9zNjQoaW50MzJ4Ml90IF9fcDAsIGludDY0eDJfdCBfX3AxLCBpbnQ2NHgyX3QgX19wMikgewotICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIGludDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKLSAgaW50NjR4Ml90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDEsIDApOwotICBpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19ub3N3YXBfdmNvbWJpbmVfczMyKF9fcmV2MCwgX19ub3N3YXBfdnN1YmhuX3M2NChfX3JldjEsIF9fcmV2MikpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50OHgxNl90IHZzdWJobl9oaWdoX3MxNihpbnQ4eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSwgaW50MTZ4OF90IF9fcDIpIHsKLSAgaW50OHgxNl90IF9fcmV0OwotICBfX3JldCA9IHZjb21iaW5lX3M4KF9fcDAsIHZzdWJobl9zMTYoX19wMSwgX19wMikpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQ4eDE2X3QgdnN1YmhuX2hpZ2hfczE2KGludDh4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxLCBpbnQxNng4X3QgX19wMikgewotICBpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQxNng4X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSBfX25vc3dhcF92Y29tYmluZV9zOChfX3JldjAsIF9fbm9zd2FwX3ZzdWJobl9zMTYoX19yZXYxLCBfX3JldjIpKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQxNng4X3QgdnN1YmxfaGlnaF91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgewotICB1aW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IHZtb3ZsX2hpZ2hfdTgoX19wMCkgLSB2bW92bF9oaWdoX3U4KF9fcDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MTZ4OF90IHZzdWJsX2hpZ2hfdTgodWludDh4MTZfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEpIHsKLSAgdWludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSBfX25vc3dhcF92bW92bF9oaWdoX3U4KF9fcmV2MCkgLSBfX25vc3dhcF92bW92bF9oaWdoX3U4KF9fcmV2MSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50NjR4Ml90IHZzdWJsX2hpZ2hfdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7Ci0gIHVpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gdm1vdmxfaGlnaF91MzIoX19wMCkgLSB2bW92bF9oaWdoX3UzMihfX3AxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDY0eDJfdCB2c3VibF9oaWdoX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgewotICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICB1aW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOwotICB1aW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IF9fbm9zd2FwX3Ztb3ZsX2hpZ2hfdTMyKF9fcmV2MCkgLSBfX25vc3dhcF92bW92bF9oaWdoX3UzMihfX3JldjEpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDMyeDRfdCB2c3VibF9oaWdoX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSkgewotICB1aW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IHZtb3ZsX2hpZ2hfdTE2KF9fcDApIC0gdm1vdmxfaGlnaF91MTYoX19wMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQzMng0X3QgdnN1YmxfaGlnaF91MTYodWludDE2eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEpIHsKLSAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSBfX25vc3dhcF92bW92bF9oaWdoX3UxNihfX3JldjApIC0gX19ub3N3YXBfdm1vdmxfaGlnaF91MTYoX19yZXYxKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDE2eDhfdCB2c3VibF9oaWdoX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgewotICBpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gdm1vdmxfaGlnaF9zOChfX3AwKSAtIHZtb3ZsX2hpZ2hfczgoX19wMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDE2eDhfdCB2c3VibF9oaWdoX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgewotICBpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IF9fbm9zd2FwX3Ztb3ZsX2hpZ2hfczgoX19yZXYwKSAtIF9fbm9zd2FwX3Ztb3ZsX2hpZ2hfczgoX19yZXYxKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDY0eDJfdCB2c3VibF9oaWdoX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKLSAgaW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IHZtb3ZsX2hpZ2hfczMyKF9fcDApIC0gdm1vdmxfaGlnaF9zMzIoX19wMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDY0eDJfdCB2c3VibF9oaWdoX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKLSAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7Ci0gIGludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSBfX25vc3dhcF92bW92bF9oaWdoX3MzMihfX3JldjApIC0gX19ub3N3YXBfdm1vdmxfaGlnaF9zMzIoX19yZXYxKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDMyeDRfdCB2c3VibF9oaWdoX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKLSAgaW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IHZtb3ZsX2hpZ2hfczE2KF9fcDApIC0gdm1vdmxfaGlnaF9zMTYoX19wMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDMyeDRfdCB2c3VibF9oaWdoX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKLSAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSBfX25vc3dhcF92bW92bF9oaWdoX3MxNihfX3JldjApIC0gX19ub3N3YXBfdm1vdmxfaGlnaF9zMTYoX19yZXYxKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQxNng4X3QgdnN1YndfaGlnaF91OCh1aW50MTZ4OF90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgewotICB1aW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IF9fcDAgLSB2bW92bF9oaWdoX3U4KF9fcDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MTZ4OF90IHZzdWJ3X2hpZ2hfdTgodWludDE2eDhfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEpIHsKLSAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSBfX3JldjAgLSBfX25vc3dhcF92bW92bF9oaWdoX3U4KF9fcmV2MSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50NjR4Ml90IHZzdWJ3X2hpZ2hfdTMyKHVpbnQ2NHgyX3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7Ci0gIHVpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19wMCAtIHZtb3ZsX2hpZ2hfdTMyKF9fcDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50NjR4Ml90IHZzdWJ3X2hpZ2hfdTMyKHVpbnQ2NHgyX3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7Ci0gIHVpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIHVpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7Ci0gIHVpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19yZXYwIC0gX19ub3N3YXBfdm1vdmxfaGlnaF91MzIoX19yZXYxKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQzMng0X3QgdnN1YndfaGlnaF91MTYodWludDMyeDRfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEpIHsKLSAgdWludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSBfX3AwIC0gdm1vdmxfaGlnaF91MTYoX19wMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQzMng0X3QgdnN1YndfaGlnaF91MTYodWludDMyeDRfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEpIHsKLSAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgdWludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSBfX3JldjAgLSBfX25vc3dhcF92bW92bF9oaWdoX3UxNihfX3JldjEpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MTZ4OF90IHZzdWJ3X2hpZ2hfczgoaW50MTZ4OF90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7Ci0gIGludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSBfX3AwIC0gdm1vdmxfaGlnaF9zOChfX3AxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MTZ4OF90IHZzdWJ3X2hpZ2hfczgoaW50MTZ4OF90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7Ci0gIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19yZXYwIC0gX19ub3N3YXBfdm1vdmxfaGlnaF9zOChfX3JldjEpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50NjR4Ml90IHZzdWJ3X2hpZ2hfczMyKGludDY0eDJfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgewotICBpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19wMCAtIHZtb3ZsX2hpZ2hfczMyKF9fcDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQ2NHgyX3QgdnN1YndfaGlnaF9zMzIoaW50NjR4Ml90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7Ci0gIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOwotICBpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19yZXYwIC0gX19ub3N3YXBfdm1vdmxfaGlnaF9zMzIoX19yZXYxKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDMyeDRfdCB2c3Vid19oaWdoX3MxNihpbnQzMng0X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKLSAgaW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IF9fcDAgLSB2bW92bF9oaWdoX3MxNihfX3AxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MzJ4NF90IHZzdWJ3X2hpZ2hfczE2KGludDMyeDRfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgewotICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IF9fcmV2MCAtIF9fbm9zd2FwX3Ztb3ZsX2hpZ2hfczE2KF9fcmV2MSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBwb2x5OHg4X3QgdnRybjFfcDgocG9seTh4OF90IF9fcDAsIHBvbHk4eDhfdCBfX3AxKSB7Ci0gIHBvbHk4eDhfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAwLCA4LCAyLCAxMCwgNCwgMTIsIDYsIDE0KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgcG9seTh4OF90IHZ0cm4xX3A4KHBvbHk4eDhfdCBfX3AwLCBwb2x5OHg4X3QgX19wMSkgewotICBwb2x5OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHBvbHk4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcG9seTh4OF90IF9fcmV0OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAwLCA4LCAyLCAxMCwgNCwgMTIsIDYsIDE0KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHBvbHkxNng0X3QgdnRybjFfcDE2KHBvbHkxNng0X3QgX19wMCwgcG9seTE2eDRfdCBfX3AxKSB7Ci0gIHBvbHkxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMCwgNCwgMiwgNik7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHBvbHkxNng0X3QgdnRybjFfcDE2KHBvbHkxNng0X3QgX19wMCwgcG9seTE2eDRfdCBfX3AxKSB7Ci0gIHBvbHkxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIHBvbHkxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7Ci0gIHBvbHkxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDAsIDQsIDIsIDYpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgcG9seTh4MTZfdCB2dHJuMXFfcDgocG9seTh4MTZfdCBfX3AwLCBwb2x5OHgxNl90IF9fcDEpIHsKLSAgcG9seTh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAwLCAxNiwgMiwgMTgsIDQsIDIwLCA2LCAyMiwgOCwgMjQsIDEwLCAyNiwgMTIsIDI4LCAxNCwgMzApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBwb2x5OHgxNl90IHZ0cm4xcV9wOChwb2x5OHgxNl90IF9fcDAsIHBvbHk4eDE2X3QgX19wMSkgewotICBwb2x5OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBwb2x5OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBwb2x5OHgxNl90IF9fcmV0OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAwLCAxNiwgMiwgMTgsIDQsIDIwLCA2LCAyMiwgOCwgMjQsIDEwLCAyNiwgMTIsIDI4LCAxNCwgMzApOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgcG9seTY0eDJfdCB2dHJuMXFfcDY0KHBvbHk2NHgyX3QgX19wMCwgcG9seTY0eDJfdCBfX3AxKSB7Ci0gIHBvbHk2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMCwgMik7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHBvbHk2NHgyX3QgdnRybjFxX3A2NChwb2x5NjR4Ml90IF9fcDAsIHBvbHk2NHgyX3QgX19wMSkgewotICBwb2x5NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICBwb2x5NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOwotICBwb2x5NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAwLCAyKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHBvbHkxNng4X3QgdnRybjFxX3AxNihwb2x5MTZ4OF90IF9fcDAsIHBvbHkxNng4X3QgX19wMSkgewotICBwb2x5MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDAsIDgsIDIsIDEwLCA0LCAxMiwgNiwgMTQpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBwb2x5MTZ4OF90IHZ0cm4xcV9wMTYocG9seTE2eDhfdCBfX3AwLCBwb2x5MTZ4OF90IF9fcDEpIHsKLSAgcG9seTE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcG9seTE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcG9seTE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMCwgOCwgMiwgMTAsIDQsIDEyLCA2LCAxNCk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50OHgxNl90IHZ0cm4xcV91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgewotICB1aW50OHgxNl90IF9fcmV0OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDAsIDE2LCAyLCAxOCwgNCwgMjAsIDYsIDIyLCA4LCAyNCwgMTAsIDI2LCAxMiwgMjgsIDE0LCAzMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ4eDE2X3QgdnRybjFxX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7Ci0gIHVpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQ4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDAsIDE2LCAyLCAxOCwgNCwgMjAsIDYsIDIyLCA4LCAyNCwgMTAsIDI2LCAxMiwgMjgsIDE0LCAzMCk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MzJ4NF90IHZ0cm4xcV91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEpIHsKLSAgdWludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAwLCA0LCAyLCA2KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDMyeDRfdCB2dHJuMXFfdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7Ci0gIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7Ci0gIHVpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDAsIDQsIDIsIDYpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDY0eDJfdCB2dHJuMXFfdTY0KHVpbnQ2NHgyX3QgX19wMCwgdWludDY0eDJfdCBfX3AxKSB7Ci0gIHVpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMCwgMik7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ2NHgyX3QgdnRybjFxX3U2NCh1aW50NjR4Ml90IF9fcDAsIHVpbnQ2NHgyX3QgX19wMSkgewotICB1aW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICB1aW50NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOwotICB1aW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAwLCAyKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQxNng4X3QgdnRybjFxX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSkgewotICB1aW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDAsIDgsIDIsIDEwLCA0LCAxMiwgNiwgMTQpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MTZ4OF90IHZ0cm4xcV91MTYodWludDE2eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEpIHsKLSAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMCwgOCwgMiwgMTAsIDQsIDEyLCA2LCAxNCk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ4eDE2X3QgdnRybjFxX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgewotICBpbnQ4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMCwgMTYsIDIsIDE4LCA0LCAyMCwgNiwgMjIsIDgsIDI0LCAxMCwgMjYsIDEyLCAyOCwgMTQsIDMwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50OHgxNl90IHZ0cm4xcV9zOChpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEpIHsKLSAgaW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMCwgMTYsIDIsIDE4LCA0LCAyMCwgNiwgMjIsIDgsIDI0LCAxMCwgMjYsIDEyLCAyOCwgMTQsIDMwKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGZsb2F0NjR4Ml90IHZ0cm4xcV9mNjQoZmxvYXQ2NHgyX3QgX19wMCwgZmxvYXQ2NHgyX3QgX19wMSkgewotICBmbG9hdDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAwLCAyKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgZmxvYXQ2NHgyX3QgdnRybjFxX2Y2NChmbG9hdDY0eDJfdCBfX3AwLCBmbG9hdDY0eDJfdCBfX3AxKSB7Ci0gIGZsb2F0NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICBmbG9hdDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKLSAgZmxvYXQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDAsIDIpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgZmxvYXQzMng0X3QgdnRybjFxX2YzMihmbG9hdDMyeDRfdCBfX3AwLCBmbG9hdDMyeDRfdCBfX3AxKSB7Ci0gIGZsb2F0MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDAsIDQsIDIsIDYpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBmbG9hdDMyeDRfdCB2dHJuMXFfZjMyKGZsb2F0MzJ4NF90IF9fcDAsIGZsb2F0MzJ4NF90IF9fcDEpIHsKLSAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIGZsb2F0MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOwotICBmbG9hdDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMCwgNCwgMiwgNik7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQzMng0X3QgdnRybjFxX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKLSAgaW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDAsIDQsIDIsIDYpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQzMng0X3QgdnRybjFxX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKLSAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7Ci0gIGludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMCwgNCwgMiwgNik7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ2NHgyX3QgdnRybjFxX3M2NChpbnQ2NHgyX3QgX19wMCwgaW50NjR4Ml90IF9fcDEpIHsKLSAgaW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDAsIDIpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQ2NHgyX3QgdnRybjFxX3M2NChpbnQ2NHgyX3QgX19wMCwgaW50NjR4Ml90IF9fcDEpIHsKLSAgaW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICBpbnQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7Ci0gIGludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMCwgMik7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQxNng4X3QgdnRybjFxX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKLSAgaW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDAsIDgsIDIsIDEwLCA0LCAxMiwgNiwgMTQpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQxNng4X3QgdnRybjFxX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKLSAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMCwgOCwgMiwgMTAsIDQsIDEyLCA2LCAxNCk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50OHg4X3QgdnRybjFfdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7Ci0gIHVpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAwLCA4LCAyLCAxMCwgNCwgMTIsIDYsIDE0KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDh4OF90IHZ0cm4xX3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgewotICB1aW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDh4OF90IF9fcmV0OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAwLCA4LCAyLCAxMCwgNCwgMTIsIDYsIDE0KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQzMngyX3QgdnRybjFfdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxKSB7Ci0gIHVpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMCwgMik7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQzMngyX3QgdnRybjFfdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxKSB7Ci0gIHVpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIHVpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7Ci0gIHVpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDAsIDIpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDE2eDRfdCB2dHJuMV91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEpIHsKLSAgdWludDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAwLCA0LCAyLCA2KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDE2eDRfdCB2dHJuMV91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEpIHsKLSAgdWludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgdWludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKLSAgdWludDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMCwgNCwgMiwgNik7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ4eDhfdCB2dHJuMV9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7Ci0gIGludDh4OF90IF9fcmV0OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDAsIDgsIDIsIDEwLCA0LCAxMiwgNiwgMTQpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQ4eDhfdCB2dHJuMV9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7Ci0gIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDAsIDgsIDIsIDEwLCA0LCAxMiwgNiwgMTQpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgZmxvYXQzMngyX3QgdnRybjFfZjMyKGZsb2F0MzJ4Ml90IF9fcDAsIGZsb2F0MzJ4Ml90IF9fcDEpIHsKLSAgZmxvYXQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMCwgMik7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGZsb2F0MzJ4Ml90IHZ0cm4xX2YzMihmbG9hdDMyeDJfdCBfX3AwLCBmbG9hdDMyeDJfdCBfX3AxKSB7Ci0gIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICBmbG9hdDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKLSAgZmxvYXQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDAsIDIpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MzJ4Ml90IHZ0cm4xX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKLSAgaW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDAsIDIpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQzMngyX3QgdnRybjFfczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgewotICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIGludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKLSAgaW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAwLCAyKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDE2eDRfdCB2dHJuMV9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7Ci0gIGludDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAwLCA0LCAyLCA2KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MTZ4NF90IHZ0cm4xX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKLSAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICBpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7Ci0gIGludDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMCwgNCwgMiwgNik7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBwb2x5OHg4X3QgdnRybjJfcDgocG9seTh4OF90IF9fcDAsIHBvbHk4eDhfdCBfX3AxKSB7Ci0gIHBvbHk4eDhfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAxLCA5LCAzLCAxMSwgNSwgMTMsIDcsIDE1KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgcG9seTh4OF90IHZ0cm4yX3A4KHBvbHk4eDhfdCBfX3AwLCBwb2x5OHg4X3QgX19wMSkgewotICBwb2x5OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHBvbHk4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcG9seTh4OF90IF9fcmV0OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAxLCA5LCAzLCAxMSwgNSwgMTMsIDcsIDE1KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHBvbHkxNng0X3QgdnRybjJfcDE2KHBvbHkxNng0X3QgX19wMCwgcG9seTE2eDRfdCBfX3AxKSB7Ci0gIHBvbHkxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMSwgNSwgMywgNyk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHBvbHkxNng0X3QgdnRybjJfcDE2KHBvbHkxNng0X3QgX19wMCwgcG9seTE2eDRfdCBfX3AxKSB7Ci0gIHBvbHkxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIHBvbHkxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7Ci0gIHBvbHkxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDEsIDUsIDMsIDcpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgcG9seTh4MTZfdCB2dHJuMnFfcDgocG9seTh4MTZfdCBfX3AwLCBwb2x5OHgxNl90IF9fcDEpIHsKLSAgcG9seTh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAxLCAxNywgMywgMTksIDUsIDIxLCA3LCAyMywgOSwgMjUsIDExLCAyNywgMTMsIDI5LCAxNSwgMzEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBwb2x5OHgxNl90IHZ0cm4ycV9wOChwb2x5OHgxNl90IF9fcDAsIHBvbHk4eDE2X3QgX19wMSkgewotICBwb2x5OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBwb2x5OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBwb2x5OHgxNl90IF9fcmV0OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAxLCAxNywgMywgMTksIDUsIDIxLCA3LCAyMywgOSwgMjUsIDExLCAyNywgMTMsIDI5LCAxNSwgMzEpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgcG9seTY0eDJfdCB2dHJuMnFfcDY0KHBvbHk2NHgyX3QgX19wMCwgcG9seTY0eDJfdCBfX3AxKSB7Ci0gIHBvbHk2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMSwgMyk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHBvbHk2NHgyX3QgdnRybjJxX3A2NChwb2x5NjR4Ml90IF9fcDAsIHBvbHk2NHgyX3QgX19wMSkgewotICBwb2x5NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICBwb2x5NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOwotICBwb2x5NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAxLCAzKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHBvbHkxNng4X3QgdnRybjJxX3AxNihwb2x5MTZ4OF90IF9fcDAsIHBvbHkxNng4X3QgX19wMSkgewotICBwb2x5MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDEsIDksIDMsIDExLCA1LCAxMywgNywgMTUpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBwb2x5MTZ4OF90IHZ0cm4ycV9wMTYocG9seTE2eDhfdCBfX3AwLCBwb2x5MTZ4OF90IF9fcDEpIHsKLSAgcG9seTE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcG9seTE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcG9seTE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMSwgOSwgMywgMTEsIDUsIDEzLCA3LCAxNSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50OHgxNl90IHZ0cm4ycV91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgewotICB1aW50OHgxNl90IF9fcmV0OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDEsIDE3LCAzLCAxOSwgNSwgMjEsIDcsIDIzLCA5LCAyNSwgMTEsIDI3LCAxMywgMjksIDE1LCAzMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ4eDE2X3QgdnRybjJxX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7Ci0gIHVpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQ4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDEsIDE3LCAzLCAxOSwgNSwgMjEsIDcsIDIzLCA5LCAyNSwgMTEsIDI3LCAxMywgMjksIDE1LCAzMSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MzJ4NF90IHZ0cm4ycV91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEpIHsKLSAgdWludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAxLCA1LCAzLCA3KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDMyeDRfdCB2dHJuMnFfdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7Ci0gIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7Ci0gIHVpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDEsIDUsIDMsIDcpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDY0eDJfdCB2dHJuMnFfdTY0KHVpbnQ2NHgyX3QgX19wMCwgdWludDY0eDJfdCBfX3AxKSB7Ci0gIHVpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMSwgMyk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ2NHgyX3QgdnRybjJxX3U2NCh1aW50NjR4Ml90IF9fcDAsIHVpbnQ2NHgyX3QgX19wMSkgewotICB1aW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICB1aW50NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOwotICB1aW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAxLCAzKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQxNng4X3QgdnRybjJxX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSkgewotICB1aW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDEsIDksIDMsIDExLCA1LCAxMywgNywgMTUpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MTZ4OF90IHZ0cm4ycV91MTYodWludDE2eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEpIHsKLSAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMSwgOSwgMywgMTEsIDUsIDEzLCA3LCAxNSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ4eDE2X3QgdnRybjJxX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgewotICBpbnQ4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMSwgMTcsIDMsIDE5LCA1LCAyMSwgNywgMjMsIDksIDI1LCAxMSwgMjcsIDEzLCAyOSwgMTUsIDMxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50OHgxNl90IHZ0cm4ycV9zOChpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEpIHsKLSAgaW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMSwgMTcsIDMsIDE5LCA1LCAyMSwgNywgMjMsIDksIDI1LCAxMSwgMjcsIDEzLCAyOSwgMTUsIDMxKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGZsb2F0NjR4Ml90IHZ0cm4ycV9mNjQoZmxvYXQ2NHgyX3QgX19wMCwgZmxvYXQ2NHgyX3QgX19wMSkgewotICBmbG9hdDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAxLCAzKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgZmxvYXQ2NHgyX3QgdnRybjJxX2Y2NChmbG9hdDY0eDJfdCBfX3AwLCBmbG9hdDY0eDJfdCBfX3AxKSB7Ci0gIGZsb2F0NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICBmbG9hdDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKLSAgZmxvYXQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDEsIDMpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgZmxvYXQzMng0X3QgdnRybjJxX2YzMihmbG9hdDMyeDRfdCBfX3AwLCBmbG9hdDMyeDRfdCBfX3AxKSB7Ci0gIGZsb2F0MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDEsIDUsIDMsIDcpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBmbG9hdDMyeDRfdCB2dHJuMnFfZjMyKGZsb2F0MzJ4NF90IF9fcDAsIGZsb2F0MzJ4NF90IF9fcDEpIHsKLSAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIGZsb2F0MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOwotICBmbG9hdDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMSwgNSwgMywgNyk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQzMng0X3QgdnRybjJxX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKLSAgaW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDEsIDUsIDMsIDcpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQzMng0X3QgdnRybjJxX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKLSAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7Ci0gIGludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMSwgNSwgMywgNyk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ2NHgyX3QgdnRybjJxX3M2NChpbnQ2NHgyX3QgX19wMCwgaW50NjR4Ml90IF9fcDEpIHsKLSAgaW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDEsIDMpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQ2NHgyX3QgdnRybjJxX3M2NChpbnQ2NHgyX3QgX19wMCwgaW50NjR4Ml90IF9fcDEpIHsKLSAgaW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICBpbnQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7Ci0gIGludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMSwgMyk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQxNng4X3QgdnRybjJxX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKLSAgaW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDEsIDksIDMsIDExLCA1LCAxMywgNywgMTUpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQxNng4X3QgdnRybjJxX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKLSAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMSwgOSwgMywgMTEsIDUsIDEzLCA3LCAxNSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50OHg4X3QgdnRybjJfdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7Ci0gIHVpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAxLCA5LCAzLCAxMSwgNSwgMTMsIDcsIDE1KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDh4OF90IHZ0cm4yX3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgewotICB1aW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDh4OF90IF9fcmV0OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAxLCA5LCAzLCAxMSwgNSwgMTMsIDcsIDE1KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQzMngyX3QgdnRybjJfdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxKSB7Ci0gIHVpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMSwgMyk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQzMngyX3QgdnRybjJfdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxKSB7Ci0gIHVpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIHVpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7Ci0gIHVpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDEsIDMpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDE2eDRfdCB2dHJuMl91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEpIHsKLSAgdWludDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAxLCA1LCAzLCA3KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDE2eDRfdCB2dHJuMl91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEpIHsKLSAgdWludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgdWludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKLSAgdWludDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMSwgNSwgMywgNyk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ4eDhfdCB2dHJuMl9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7Ci0gIGludDh4OF90IF9fcmV0OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDEsIDksIDMsIDExLCA1LCAxMywgNywgMTUpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQ4eDhfdCB2dHJuMl9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7Ci0gIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDEsIDksIDMsIDExLCA1LCAxMywgNywgMTUpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgZmxvYXQzMngyX3QgdnRybjJfZjMyKGZsb2F0MzJ4Ml90IF9fcDAsIGZsb2F0MzJ4Ml90IF9fcDEpIHsKLSAgZmxvYXQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMSwgMyk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGZsb2F0MzJ4Ml90IHZ0cm4yX2YzMihmbG9hdDMyeDJfdCBfX3AwLCBmbG9hdDMyeDJfdCBfX3AxKSB7Ci0gIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICBmbG9hdDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKLSAgZmxvYXQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDEsIDMpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MzJ4Ml90IHZ0cm4yX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKLSAgaW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDEsIDMpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQzMngyX3QgdnRybjJfczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgewotICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIGludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKLSAgaW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAxLCAzKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDE2eDRfdCB2dHJuMl9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7Ci0gIGludDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAxLCA1LCAzLCA3KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MTZ4NF90IHZ0cm4yX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKLSAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICBpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7Ci0gIGludDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMSwgNSwgMywgNyk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50NjR4MV90IHZ0c3RfcDY0KHBvbHk2NHgxX3QgX19wMCwgcG9seTY0eDFfdCBfX3AxKSB7Ci0gIHVpbnQ2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3Z0c3RfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDE5KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDY0eDFfdCB2dHN0X3A2NChwb2x5NjR4MV90IF9fcDAsIHBvbHk2NHgxX3QgX19wMSkgewotICB1aW50NjR4MV90IF9fcmV0OwotICBfX3JldCA9ICh1aW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92dHN0X3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxOSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDY0eDJfdCB2dHN0cV9wNjQocG9seTY0eDJfdCBfX3AwLCBwb2x5NjR4Ml90IF9fcDEpIHsKLSAgdWludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdnRzdHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNTEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50NjR4Ml90IHZ0c3RxX3A2NChwb2x5NjR4Ml90IF9fcDAsIHBvbHk2NHgyX3QgX19wMSkgewotICBwb2x5NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICBwb2x5NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOwotICB1aW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92dHN0cV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNTEpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDY0eDJfdCB2dHN0cV91NjQodWludDY0eDJfdCBfX3AwLCB1aW50NjR4Ml90IF9fcDEpIHsKLSAgdWludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdnRzdHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNTEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50NjR4Ml90IHZ0c3RxX3U2NCh1aW50NjR4Ml90IF9fcDAsIHVpbnQ2NHgyX3QgX19wMSkgewotICB1aW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICB1aW50NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOwotICB1aW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92dHN0cV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNTEpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDY0eDJfdCB2dHN0cV9zNjQoaW50NjR4Ml90IF9fcDAsIGludDY0eDJfdCBfX3AxKSB7Ci0gIHVpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3Z0c3RxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDUxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDY0eDJfdCB2dHN0cV9zNjQoaW50NjR4Ml90IF9fcDAsIGludDY0eDJfdCBfX3AxKSB7Ci0gIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgaW50NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOwotICB1aW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92dHN0cV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNTEpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDY0eDFfdCB2dHN0X3U2NCh1aW50NjR4MV90IF9fcDAsIHVpbnQ2NHgxX3QgX19wMSkgewotICB1aW50NjR4MV90IF9fcmV0OwotICBfX3JldCA9ICh1aW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92dHN0X3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxOSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ2NHgxX3QgdnRzdF91NjQodWludDY0eDFfdCBfX3AwLCB1aW50NjR4MV90IF9fcDEpIHsKLSAgdWludDY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDY0eDFfdCkgX19idWlsdGluX25lb25fdnRzdF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTkpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ2NHgxX3QgdnRzdF9zNjQoaW50NjR4MV90IF9fcDAsIGludDY0eDFfdCBfX3AxKSB7Ci0gIHVpbnQ2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3Z0c3RfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDE5KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDY0eDFfdCB2dHN0X3M2NChpbnQ2NHgxX3QgX19wMCwgaW50NjR4MV90IF9fcDEpIHsKLSAgdWludDY0eDFfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDY0eDFfdCkgX19idWlsdGluX25lb25fdnRzdF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTkpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ2NF90IHZ0c3RkX3U2NCh1aW50NjRfdCBfX3AwLCB1aW50NjRfdCBfX3AxKSB7Ci0gIHVpbnQ2NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50NjRfdCkgX19idWlsdGluX25lb25fdnRzdGRfdTY0KF9fcDAsIF9fcDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50NjRfdCB2dHN0ZF91NjQodWludDY0X3QgX19wMCwgdWludDY0X3QgX19wMSkgewotICB1aW50NjRfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3Z0c3RkX3U2NChfX3AwLCBfX3AxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ2NF90IHZ0c3RkX3M2NChpbnQ2NF90IF9fcDAsIGludDY0X3QgX19wMSkgewotICBpbnQ2NF90IF9fcmV0OwotICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92dHN0ZF9zNjQoX19wMCwgX19wMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDY0X3QgdnRzdGRfczY0KGludDY0X3QgX19wMCwgaW50NjRfdCBfX3AxKSB7Ci0gIGludDY0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3Z0c3RkX3M2NChfX3AwLCBfX3AxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ4X3QgdnVxYWRkYl9zOChpbnQ4X3QgX19wMCwgaW50OF90IF9fcDEpIHsKLSAgaW50OF90IF9fcmV0OwotICBfX3JldCA9IChpbnQ4X3QpIF9fYnVpbHRpbl9uZW9uX3Z1cWFkZGJfczgoX19wMCwgX19wMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDhfdCB2dXFhZGRiX3M4KGludDhfdCBfX3AwLCBpbnQ4X3QgX19wMSkgewotICBpbnQ4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDhfdCkgX19idWlsdGluX25lb25fdnVxYWRkYl9zOChfX3AwLCBfX3AxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQzMl90IHZ1cWFkZHNfczMyKGludDMyX3QgX19wMCwgaW50MzJfdCBfX3AxKSB7Ci0gIGludDMyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3Z1cWFkZHNfczMyKF9fcDAsIF9fcDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQzMl90IHZ1cWFkZHNfczMyKGludDMyX3QgX19wMCwgaW50MzJfdCBfX3AxKSB7Ci0gIGludDMyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3Z1cWFkZHNfczMyKF9fcDAsIF9fcDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDY0X3QgdnVxYWRkZF9zNjQoaW50NjRfdCBfX3AwLCBpbnQ2NF90IF9fcDEpIHsKLSAgaW50NjRfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdnVxYWRkZF9zNjQoX19wMCwgX19wMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDY0X3QgdnVxYWRkZF9zNjQoaW50NjRfdCBfX3AwLCBpbnQ2NF90IF9fcDEpIHsKLSAgaW50NjRfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdnVxYWRkZF9zNjQoX19wMCwgX19wMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MTZfdCB2dXFhZGRoX3MxNihpbnQxNl90IF9fcDAsIGludDE2X3QgX19wMSkgewotICBpbnQxNl90IF9fcmV0OwotICBfX3JldCA9IChpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92dXFhZGRoX3MxNihfX3AwLCBfX3AxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MTZfdCB2dXFhZGRoX3MxNihpbnQxNl90IF9fcDAsIGludDE2X3QgX19wMSkgewotICBpbnQxNl90IF9fcmV0OwotICBfX3JldCA9IChpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92dXFhZGRoX3MxNihfX3AwLCBfX3AxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ4eDE2X3QgdnVxYWRkcV9zOChpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEpIHsKLSAgaW50OHgxNl90IF9fcmV0OwotICBfX3JldCA9IChpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3Z1cWFkZHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMzIpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQ4eDE2X3QgdnVxYWRkcV9zOChpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEpIHsKLSAgaW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92dXFhZGRxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAzMik7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQzMng0X3QgdnVxYWRkcV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7Ci0gIGludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92dXFhZGRxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDM0KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MzJ4NF90IHZ1cWFkZHFfczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgewotICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKLSAgaW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3Z1cWFkZHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDM0KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDY0eDJfdCB2dXFhZGRxX3M2NChpbnQ2NHgyX3QgX19wMCwgaW50NjR4Ml90IF9fcDEpIHsKLSAgaW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3Z1cWFkZHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMzUpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQ2NHgyX3QgdnVxYWRkcV9zNjQoaW50NjR4Ml90IF9fcDAsIGludDY0eDJfdCBfX3AxKSB7Ci0gIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgaW50NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOwotICBpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDY0eDJfdCkgX19idWlsdGluX25lb25fdnVxYWRkcV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMzUpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MTZ4OF90IHZ1cWFkZHFfczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgewotICBpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDE2eDhfdCkgX19idWlsdGluX25lb25fdnVxYWRkcV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAzMyk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDE2eDhfdCB2dXFhZGRxX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKLSAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92dXFhZGRxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAzMyk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ4eDhfdCB2dXFhZGRfczgoaW50OHg4X3QgX19wMCwgaW50OHg4X3QgX19wMSkgewotICBpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Z1cWFkZF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDh4OF90IHZ1cWFkZF9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7Ci0gIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92dXFhZGRfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAwKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDMyeDJfdCB2dXFhZGRfczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgewotICBpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdnVxYWRkX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAyKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MzJ4Ml90IHZ1cWFkZF9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7Ci0gIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOwotICBpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdnVxYWRkX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMik7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ2NHgxX3QgdnVxYWRkX3M2NChpbnQ2NHgxX3QgX19wMCwgaW50NjR4MV90IF9fcDEpIHsKLSAgaW50NjR4MV90IF9fcmV0OwotICBfX3JldCA9IChpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3Z1cWFkZF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMyk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDY0eDFfdCB2dXFhZGRfczY0KGludDY0eDFfdCBfX3AwLCBpbnQ2NHgxX3QgX19wMSkgewotICBpbnQ2NHgxX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDY0eDFfdCkgX19idWlsdGluX25lb25fdnVxYWRkX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAzKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQxNng0X3QgdnVxYWRkX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKLSAgaW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3Z1cWFkZF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDE2eDRfdCB2dXFhZGRfczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgewotICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKLSAgaW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3Z1cWFkZF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDEpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgcG9seTh4OF90IHZ1enAxX3A4KHBvbHk4eDhfdCBfX3AwLCBwb2x5OHg4X3QgX19wMSkgewotICBwb2x5OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMCwgMiwgNCwgNiwgOCwgMTAsIDEyLCAxNCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHBvbHk4eDhfdCB2dXpwMV9wOChwb2x5OHg4X3QgX19wMCwgcG9seTh4OF90IF9fcDEpIHsKLSAgcG9seTh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBwb2x5OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHBvbHk4eDhfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMCwgMiwgNCwgNiwgOCwgMTAsIDEyLCAxNCk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBwb2x5MTZ4NF90IHZ1enAxX3AxNihwb2x5MTZ4NF90IF9fcDAsIHBvbHkxNng0X3QgX19wMSkgewotICBwb2x5MTZ4NF90IF9fcmV0OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDAsIDIsIDQsIDYpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBwb2x5MTZ4NF90IHZ1enAxX3AxNihwb2x5MTZ4NF90IF9fcDAsIHBvbHkxNng0X3QgX19wMSkgewotICBwb2x5MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICBwb2x5MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOwotICBwb2x5MTZ4NF90IF9fcmV0OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAwLCAyLCA0LCA2KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHBvbHk4eDE2X3QgdnV6cDFxX3A4KHBvbHk4eDE2X3QgX19wMCwgcG9seTh4MTZfdCBfX3AxKSB7Ci0gIHBvbHk4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMCwgMiwgNCwgNiwgOCwgMTAsIDEyLCAxNCwgMTYsIDE4LCAyMCwgMjIsIDI0LCAyNiwgMjgsIDMwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgcG9seTh4MTZfdCB2dXpwMXFfcDgocG9seTh4MTZfdCBfX3AwLCBwb2x5OHgxNl90IF9fcDEpIHsKLSAgcG9seTh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcG9seTh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcG9seTh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMCwgMiwgNCwgNiwgOCwgMTAsIDEyLCAxNCwgMTYsIDE4LCAyMCwgMjIsIDI0LCAyNiwgMjgsIDMwKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHBvbHk2NHgyX3QgdnV6cDFxX3A2NChwb2x5NjR4Ml90IF9fcDAsIHBvbHk2NHgyX3QgX19wMSkgewotICBwb2x5NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDAsIDIpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBwb2x5NjR4Ml90IHZ1enAxcV9wNjQocG9seTY0eDJfdCBfX3AwLCBwb2x5NjR4Ml90IF9fcDEpIHsKLSAgcG9seTY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgcG9seTY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKLSAgcG9seTY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMCwgMik7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBwb2x5MTZ4OF90IHZ1enAxcV9wMTYocG9seTE2eDhfdCBfX3AwLCBwb2x5MTZ4OF90IF9fcDEpIHsKLSAgcG9seTE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAwLCAyLCA0LCA2LCA4LCAxMCwgMTIsIDE0KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgcG9seTE2eDhfdCB2dXpwMXFfcDE2KHBvbHkxNng4X3QgX19wMCwgcG9seTE2eDhfdCBfX3AxKSB7Ci0gIHBvbHkxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHBvbHkxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHBvbHkxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDAsIDIsIDQsIDYsIDgsIDEwLCAxMiwgMTQpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDh4MTZfdCB2dXpwMXFfdTgodWludDh4MTZfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEpIHsKLSAgdWludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAwLCAyLCA0LCA2LCA4LCAxMCwgMTIsIDE0LCAxNiwgMTgsIDIwLCAyMiwgMjQsIDI2LCAyOCwgMzApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50OHgxNl90IHZ1enAxcV91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgewotICB1aW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50OHgxNl90IF9fcmV0OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAwLCAyLCA0LCA2LCA4LCAxMCwgMTIsIDE0LCAxNiwgMTgsIDIwLCAyMiwgMjQsIDI2LCAyOCwgMzApOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDMyeDRfdCB2dXpwMXFfdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7Ci0gIHVpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMCwgMiwgNCwgNik7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQzMng0X3QgdnV6cDFxX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgewotICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICB1aW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOwotICB1aW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAwLCAyLCA0LCA2KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ2NHgyX3QgdnV6cDFxX3U2NCh1aW50NjR4Ml90IF9fcDAsIHVpbnQ2NHgyX3QgX19wMSkgewotICB1aW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDAsIDIpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50NjR4Ml90IHZ1enAxcV91NjQodWludDY0eDJfdCBfX3AwLCB1aW50NjR4Ml90IF9fcDEpIHsKLSAgdWludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgdWludDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKLSAgdWludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMCwgMik7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MTZ4OF90IHZ1enAxcV91MTYodWludDE2eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEpIHsKLSAgdWludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAwLCAyLCA0LCA2LCA4LCAxMCwgMTIsIDE0KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDE2eDhfdCB2dXpwMXFfdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxKSB7Ci0gIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDAsIDIsIDQsIDYsIDgsIDEwLCAxMiwgMTQpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50OHgxNl90IHZ1enAxcV9zOChpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEpIHsKLSAgaW50OHgxNl90IF9fcmV0OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDAsIDIsIDQsIDYsIDgsIDEwLCAxMiwgMTQsIDE2LCAxOCwgMjAsIDIyLCAyNCwgMjYsIDI4LCAzMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDh4MTZfdCB2dXpwMXFfczgoaW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7Ci0gIGludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQ4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDAsIDIsIDQsIDYsIDgsIDEwLCAxMiwgMTQsIDE2LCAxOCwgMjAsIDIyLCAyNCwgMjYsIDI4LCAzMCk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBmbG9hdDY0eDJfdCB2dXpwMXFfZjY0KGZsb2F0NjR4Ml90IF9fcDAsIGZsb2F0NjR4Ml90IF9fcDEpIHsKLSAgZmxvYXQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMCwgMik7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGZsb2F0NjR4Ml90IHZ1enAxcV9mNjQoZmxvYXQ2NHgyX3QgX19wMCwgZmxvYXQ2NHgyX3QgX19wMSkgewotICBmbG9hdDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgZmxvYXQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7Ci0gIGZsb2F0NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAwLCAyKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGZsb2F0MzJ4NF90IHZ1enAxcV9mMzIoZmxvYXQzMng0X3QgX19wMCwgZmxvYXQzMng0X3QgX19wMSkgewotICBmbG9hdDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAwLCAyLCA0LCA2KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgZmxvYXQzMng0X3QgdnV6cDFxX2YzMihmbG9hdDMyeDRfdCBfX3AwLCBmbG9hdDMyeDRfdCBfX3AxKSB7Ci0gIGZsb2F0MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICBmbG9hdDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKLSAgZmxvYXQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDAsIDIsIDQsIDYpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MzJ4NF90IHZ1enAxcV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7Ci0gIGludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAwLCAyLCA0LCA2KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MzJ4NF90IHZ1enAxcV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7Ci0gIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOwotICBpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDAsIDIsIDQsIDYpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50NjR4Ml90IHZ1enAxcV9zNjQoaW50NjR4Ml90IF9fcDAsIGludDY0eDJfdCBfX3AxKSB7Ci0gIGludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAwLCAyKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50NjR4Ml90IHZ1enAxcV9zNjQoaW50NjR4Ml90IF9fcDAsIGludDY0eDJfdCBfX3AxKSB7Ci0gIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgaW50NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOwotICBpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDAsIDIpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MTZ4OF90IHZ1enAxcV9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7Ci0gIGludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAwLCAyLCA0LCA2LCA4LCAxMCwgMTIsIDE0KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MTZ4OF90IHZ1enAxcV9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7Ci0gIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDAsIDIsIDQsIDYsIDgsIDEwLCAxMiwgMTQpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDh4OF90IHZ1enAxX3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgewotICB1aW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMCwgMiwgNCwgNiwgOCwgMTAsIDEyLCAxNCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ4eDhfdCB2dXpwMV91OCh1aW50OHg4X3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKLSAgdWludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMCwgMiwgNCwgNiwgOCwgMTAsIDEyLCAxNCk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MzJ4Ml90IHZ1enAxX3UzMih1aW50MzJ4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSkgewotICB1aW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDAsIDIpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MzJ4Ml90IHZ1enAxX3UzMih1aW50MzJ4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSkgewotICB1aW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICB1aW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOwotICB1aW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAwLCAyKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQxNng0X3QgdnV6cDFfdTE2KHVpbnQxNng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxKSB7Ci0gIHVpbnQxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMCwgMiwgNCwgNik7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQxNng0X3QgdnV6cDFfdTE2KHVpbnQxNng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxKSB7Ci0gIHVpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7Ci0gIHVpbnQxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDAsIDIsIDQsIDYpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50OHg4X3QgdnV6cDFfczgoaW50OHg4X3QgX19wMCwgaW50OHg4X3QgX19wMSkgewotICBpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAwLCAyLCA0LCA2LCA4LCAxMCwgMTIsIDE0KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50OHg4X3QgdnV6cDFfczgoaW50OHg4X3QgX19wMCwgaW50OHg4X3QgX19wMSkgewotICBpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDh4OF90IF9fcmV0OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAwLCAyLCA0LCA2LCA4LCAxMCwgMTIsIDE0KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGZsb2F0MzJ4Ml90IHZ1enAxX2YzMihmbG9hdDMyeDJfdCBfX3AwLCBmbG9hdDMyeDJfdCBfX3AxKSB7Ci0gIGZsb2F0MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDAsIDIpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBmbG9hdDMyeDJfdCB2dXpwMV9mMzIoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSkgewotICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgZmxvYXQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7Ci0gIGZsb2F0MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAwLCAyKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDMyeDJfdCB2dXpwMV9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7Ci0gIGludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAwLCAyKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MzJ4Ml90IHZ1enAxX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKLSAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7Ci0gIGludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMCwgMik7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQxNng0X3QgdnV6cDFfczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgewotICBpbnQxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMCwgMiwgNCwgNik7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDE2eDRfdCB2dXpwMV9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7Ci0gIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOwotICBpbnQxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDAsIDIsIDQsIDYpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgcG9seTh4OF90IHZ1enAyX3A4KHBvbHk4eDhfdCBfX3AwLCBwb2x5OHg4X3QgX19wMSkgewotICBwb2x5OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMSwgMywgNSwgNywgOSwgMTEsIDEzLCAxNSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHBvbHk4eDhfdCB2dXpwMl9wOChwb2x5OHg4X3QgX19wMCwgcG9seTh4OF90IF9fcDEpIHsKLSAgcG9seTh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBwb2x5OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHBvbHk4eDhfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMSwgMywgNSwgNywgOSwgMTEsIDEzLCAxNSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBwb2x5MTZ4NF90IHZ1enAyX3AxNihwb2x5MTZ4NF90IF9fcDAsIHBvbHkxNng0X3QgX19wMSkgewotICBwb2x5MTZ4NF90IF9fcmV0OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDEsIDMsIDUsIDcpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBwb2x5MTZ4NF90IHZ1enAyX3AxNihwb2x5MTZ4NF90IF9fcDAsIHBvbHkxNng0X3QgX19wMSkgewotICBwb2x5MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICBwb2x5MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOwotICBwb2x5MTZ4NF90IF9fcmV0OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAxLCAzLCA1LCA3KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHBvbHk4eDE2X3QgdnV6cDJxX3A4KHBvbHk4eDE2X3QgX19wMCwgcG9seTh4MTZfdCBfX3AxKSB7Ci0gIHBvbHk4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMSwgMywgNSwgNywgOSwgMTEsIDEzLCAxNSwgMTcsIDE5LCAyMSwgMjMsIDI1LCAyNywgMjksIDMxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgcG9seTh4MTZfdCB2dXpwMnFfcDgocG9seTh4MTZfdCBfX3AwLCBwb2x5OHgxNl90IF9fcDEpIHsKLSAgcG9seTh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcG9seTh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcG9seTh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMSwgMywgNSwgNywgOSwgMTEsIDEzLCAxNSwgMTcsIDE5LCAyMSwgMjMsIDI1LCAyNywgMjksIDMxKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHBvbHk2NHgyX3QgdnV6cDJxX3A2NChwb2x5NjR4Ml90IF9fcDAsIHBvbHk2NHgyX3QgX19wMSkgewotICBwb2x5NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDEsIDMpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBwb2x5NjR4Ml90IHZ1enAycV9wNjQocG9seTY0eDJfdCBfX3AwLCBwb2x5NjR4Ml90IF9fcDEpIHsKLSAgcG9seTY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgcG9seTY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKLSAgcG9seTY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMSwgMyk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBwb2x5MTZ4OF90IHZ1enAycV9wMTYocG9seTE2eDhfdCBfX3AwLCBwb2x5MTZ4OF90IF9fcDEpIHsKLSAgcG9seTE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAxLCAzLCA1LCA3LCA5LCAxMSwgMTMsIDE1KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgcG9seTE2eDhfdCB2dXpwMnFfcDE2KHBvbHkxNng4X3QgX19wMCwgcG9seTE2eDhfdCBfX3AxKSB7Ci0gIHBvbHkxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHBvbHkxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHBvbHkxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDEsIDMsIDUsIDcsIDksIDExLCAxMywgMTUpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDh4MTZfdCB2dXpwMnFfdTgodWludDh4MTZfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEpIHsKLSAgdWludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAxLCAzLCA1LCA3LCA5LCAxMSwgMTMsIDE1LCAxNywgMTksIDIxLCAyMywgMjUsIDI3LCAyOSwgMzEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50OHgxNl90IHZ1enAycV91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgewotICB1aW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50OHgxNl90IF9fcmV0OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAxLCAzLCA1LCA3LCA5LCAxMSwgMTMsIDE1LCAxNywgMTksIDIxLCAyMywgMjUsIDI3LCAyOSwgMzEpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDMyeDRfdCB2dXpwMnFfdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7Ci0gIHVpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMSwgMywgNSwgNyk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQzMng0X3QgdnV6cDJxX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgewotICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICB1aW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOwotICB1aW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAxLCAzLCA1LCA3KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ2NHgyX3QgdnV6cDJxX3U2NCh1aW50NjR4Ml90IF9fcDAsIHVpbnQ2NHgyX3QgX19wMSkgewotICB1aW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDEsIDMpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50NjR4Ml90IHZ1enAycV91NjQodWludDY0eDJfdCBfX3AwLCB1aW50NjR4Ml90IF9fcDEpIHsKLSAgdWludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgdWludDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKLSAgdWludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMSwgMyk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MTZ4OF90IHZ1enAycV91MTYodWludDE2eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEpIHsKLSAgdWludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAxLCAzLCA1LCA3LCA5LCAxMSwgMTMsIDE1KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDE2eDhfdCB2dXpwMnFfdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxKSB7Ci0gIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDEsIDMsIDUsIDcsIDksIDExLCAxMywgMTUpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50OHgxNl90IHZ1enAycV9zOChpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEpIHsKLSAgaW50OHgxNl90IF9fcmV0OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDEsIDMsIDUsIDcsIDksIDExLCAxMywgMTUsIDE3LCAxOSwgMjEsIDIzLCAyNSwgMjcsIDI5LCAzMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDh4MTZfdCB2dXpwMnFfczgoaW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7Ci0gIGludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQ4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDEsIDMsIDUsIDcsIDksIDExLCAxMywgMTUsIDE3LCAxOSwgMjEsIDIzLCAyNSwgMjcsIDI5LCAzMSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBmbG9hdDY0eDJfdCB2dXpwMnFfZjY0KGZsb2F0NjR4Ml90IF9fcDAsIGZsb2F0NjR4Ml90IF9fcDEpIHsKLSAgZmxvYXQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMSwgMyk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGZsb2F0NjR4Ml90IHZ1enAycV9mNjQoZmxvYXQ2NHgyX3QgX19wMCwgZmxvYXQ2NHgyX3QgX19wMSkgewotICBmbG9hdDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgZmxvYXQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7Ci0gIGZsb2F0NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAxLCAzKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGZsb2F0MzJ4NF90IHZ1enAycV9mMzIoZmxvYXQzMng0X3QgX19wMCwgZmxvYXQzMng0X3QgX19wMSkgewotICBmbG9hdDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAxLCAzLCA1LCA3KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgZmxvYXQzMng0X3QgdnV6cDJxX2YzMihmbG9hdDMyeDRfdCBfX3AwLCBmbG9hdDMyeDRfdCBfX3AxKSB7Ci0gIGZsb2F0MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICBmbG9hdDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKLSAgZmxvYXQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDEsIDMsIDUsIDcpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MzJ4NF90IHZ1enAycV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7Ci0gIGludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAxLCAzLCA1LCA3KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MzJ4NF90IHZ1enAycV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7Ci0gIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOwotICBpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDEsIDMsIDUsIDcpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50NjR4Ml90IHZ1enAycV9zNjQoaW50NjR4Ml90IF9fcDAsIGludDY0eDJfdCBfX3AxKSB7Ci0gIGludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAxLCAzKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50NjR4Ml90IHZ1enAycV9zNjQoaW50NjR4Ml90IF9fcDAsIGludDY0eDJfdCBfX3AxKSB7Ci0gIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgaW50NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOwotICBpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDEsIDMpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MTZ4OF90IHZ1enAycV9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7Ci0gIGludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAxLCAzLCA1LCA3LCA5LCAxMSwgMTMsIDE1KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MTZ4OF90IHZ1enAycV9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7Ci0gIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDEsIDMsIDUsIDcsIDksIDExLCAxMywgMTUpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDh4OF90IHZ1enAyX3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgewotICB1aW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMSwgMywgNSwgNywgOSwgMTEsIDEzLCAxNSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ4eDhfdCB2dXpwMl91OCh1aW50OHg4X3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKLSAgdWludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMSwgMywgNSwgNywgOSwgMTEsIDEzLCAxNSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MzJ4Ml90IHZ1enAyX3UzMih1aW50MzJ4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSkgewotICB1aW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDEsIDMpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MzJ4Ml90IHZ1enAyX3UzMih1aW50MzJ4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSkgewotICB1aW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICB1aW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOwotICB1aW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAxLCAzKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQxNng0X3QgdnV6cDJfdTE2KHVpbnQxNng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxKSB7Ci0gIHVpbnQxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMSwgMywgNSwgNyk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQxNng0X3QgdnV6cDJfdTE2KHVpbnQxNng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxKSB7Ci0gIHVpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7Ci0gIHVpbnQxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDEsIDMsIDUsIDcpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50OHg4X3QgdnV6cDJfczgoaW50OHg4X3QgX19wMCwgaW50OHg4X3QgX19wMSkgewotICBpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAxLCAzLCA1LCA3LCA5LCAxMSwgMTMsIDE1KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50OHg4X3QgdnV6cDJfczgoaW50OHg4X3QgX19wMCwgaW50OHg4X3QgX19wMSkgewotICBpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDh4OF90IF9fcmV0OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAxLCAzLCA1LCA3LCA5LCAxMSwgMTMsIDE1KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGZsb2F0MzJ4Ml90IHZ1enAyX2YzMihmbG9hdDMyeDJfdCBfX3AwLCBmbG9hdDMyeDJfdCBfX3AxKSB7Ci0gIGZsb2F0MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDEsIDMpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBmbG9hdDMyeDJfdCB2dXpwMl9mMzIoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSkgewotICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgZmxvYXQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7Ci0gIGZsb2F0MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAxLCAzKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDMyeDJfdCB2dXpwMl9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7Ci0gIGludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAxLCAzKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MzJ4Ml90IHZ1enAyX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKLSAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7Ci0gIGludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMSwgMyk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQxNng0X3QgdnV6cDJfczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgewotICBpbnQxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMSwgMywgNSwgNyk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDE2eDRfdCB2dXpwMl9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7Ci0gIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOwotICBpbnQxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDEsIDMsIDUsIDcpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgcG9seTh4OF90IHZ6aXAxX3A4KHBvbHk4eDhfdCBfX3AwLCBwb2x5OHg4X3QgX19wMSkgewotICBwb2x5OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMCwgOCwgMSwgOSwgMiwgMTAsIDMsIDExKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgcG9seTh4OF90IHZ6aXAxX3A4KHBvbHk4eDhfdCBfX3AwLCBwb2x5OHg4X3QgX19wMSkgewotICBwb2x5OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHBvbHk4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcG9seTh4OF90IF9fcmV0OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAwLCA4LCAxLCA5LCAyLCAxMCwgMywgMTEpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgcG9seTE2eDRfdCB2emlwMV9wMTYocG9seTE2eDRfdCBfX3AwLCBwb2x5MTZ4NF90IF9fcDEpIHsKLSAgcG9seTE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAwLCA0LCAxLCA1KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgcG9seTE2eDRfdCB2emlwMV9wMTYocG9seTE2eDRfdCBfX3AwLCBwb2x5MTZ4NF90IF9fcDEpIHsKLSAgcG9seTE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgcG9seTE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKLSAgcG9seTE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMCwgNCwgMSwgNSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBwb2x5OHgxNl90IHZ6aXAxcV9wOChwb2x5OHgxNl90IF9fcDAsIHBvbHk4eDE2X3QgX19wMSkgewotICBwb2x5OHgxNl90IF9fcmV0OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDAsIDE2LCAxLCAxNywgMiwgMTgsIDMsIDE5LCA0LCAyMCwgNSwgMjEsIDYsIDIyLCA3LCAyMyk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHBvbHk4eDE2X3QgdnppcDFxX3A4KHBvbHk4eDE2X3QgX19wMCwgcG9seTh4MTZfdCBfX3AxKSB7Ci0gIHBvbHk4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHBvbHk4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHBvbHk4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDAsIDE2LCAxLCAxNywgMiwgMTgsIDMsIDE5LCA0LCAyMCwgNSwgMjEsIDYsIDIyLCA3LCAyMyk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBwb2x5NjR4Ml90IHZ6aXAxcV9wNjQocG9seTY0eDJfdCBfX3AwLCBwb2x5NjR4Ml90IF9fcDEpIHsKLSAgcG9seTY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAwLCAyKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgcG9seTY0eDJfdCB2emlwMXFfcDY0KHBvbHk2NHgyX3QgX19wMCwgcG9seTY0eDJfdCBfX3AxKSB7Ci0gIHBvbHk2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIHBvbHk2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7Ci0gIHBvbHk2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDAsIDIpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgcG9seTE2eDhfdCB2emlwMXFfcDE2KHBvbHkxNng4X3QgX19wMCwgcG9seTE2eDhfdCBfX3AxKSB7Ci0gIHBvbHkxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMCwgOCwgMSwgOSwgMiwgMTAsIDMsIDExKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgcG9seTE2eDhfdCB2emlwMXFfcDE2KHBvbHkxNng4X3QgX19wMCwgcG9seTE2eDhfdCBfX3AxKSB7Ci0gIHBvbHkxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHBvbHkxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHBvbHkxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDAsIDgsIDEsIDksIDIsIDEwLCAzLCAxMSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50OHgxNl90IHZ6aXAxcV91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgewotICB1aW50OHgxNl90IF9fcmV0OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDAsIDE2LCAxLCAxNywgMiwgMTgsIDMsIDE5LCA0LCAyMCwgNSwgMjEsIDYsIDIyLCA3LCAyMyk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ4eDE2X3QgdnppcDFxX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7Ci0gIHVpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQ4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDAsIDE2LCAxLCAxNywgMiwgMTgsIDMsIDE5LCA0LCAyMCwgNSwgMjEsIDYsIDIyLCA3LCAyMyk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MzJ4NF90IHZ6aXAxcV91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEpIHsKLSAgdWludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAwLCA0LCAxLCA1KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDMyeDRfdCB2emlwMXFfdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7Ci0gIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7Ci0gIHVpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDAsIDQsIDEsIDUpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDY0eDJfdCB2emlwMXFfdTY0KHVpbnQ2NHgyX3QgX19wMCwgdWludDY0eDJfdCBfX3AxKSB7Ci0gIHVpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMCwgMik7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ2NHgyX3QgdnppcDFxX3U2NCh1aW50NjR4Ml90IF9fcDAsIHVpbnQ2NHgyX3QgX19wMSkgewotICB1aW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICB1aW50NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOwotICB1aW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAwLCAyKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQxNng4X3QgdnppcDFxX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSkgewotICB1aW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDAsIDgsIDEsIDksIDIsIDEwLCAzLCAxMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQxNng4X3QgdnppcDFxX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSkgewotICB1aW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAwLCA4LCAxLCA5LCAyLCAxMCwgMywgMTEpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50OHgxNl90IHZ6aXAxcV9zOChpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEpIHsKLSAgaW50OHgxNl90IF9fcmV0OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDAsIDE2LCAxLCAxNywgMiwgMTgsIDMsIDE5LCA0LCAyMCwgNSwgMjEsIDYsIDIyLCA3LCAyMyk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDh4MTZfdCB2emlwMXFfczgoaW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7Ci0gIGludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQ4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDAsIDE2LCAxLCAxNywgMiwgMTgsIDMsIDE5LCA0LCAyMCwgNSwgMjEsIDYsIDIyLCA3LCAyMyk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBmbG9hdDY0eDJfdCB2emlwMXFfZjY0KGZsb2F0NjR4Ml90IF9fcDAsIGZsb2F0NjR4Ml90IF9fcDEpIHsKLSAgZmxvYXQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMCwgMik7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGZsb2F0NjR4Ml90IHZ6aXAxcV9mNjQoZmxvYXQ2NHgyX3QgX19wMCwgZmxvYXQ2NHgyX3QgX19wMSkgewotICBmbG9hdDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgZmxvYXQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7Ci0gIGZsb2F0NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAwLCAyKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGZsb2F0MzJ4NF90IHZ6aXAxcV9mMzIoZmxvYXQzMng0X3QgX19wMCwgZmxvYXQzMng0X3QgX19wMSkgewotICBmbG9hdDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAwLCA0LCAxLCA1KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgZmxvYXQzMng0X3QgdnppcDFxX2YzMihmbG9hdDMyeDRfdCBfX3AwLCBmbG9hdDMyeDRfdCBfX3AxKSB7Ci0gIGZsb2F0MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICBmbG9hdDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKLSAgZmxvYXQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDAsIDQsIDEsIDUpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MzJ4NF90IHZ6aXAxcV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7Ci0gIGludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAwLCA0LCAxLCA1KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MzJ4NF90IHZ6aXAxcV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7Ci0gIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOwotICBpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDAsIDQsIDEsIDUpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50NjR4Ml90IHZ6aXAxcV9zNjQoaW50NjR4Ml90IF9fcDAsIGludDY0eDJfdCBfX3AxKSB7Ci0gIGludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAwLCAyKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50NjR4Ml90IHZ6aXAxcV9zNjQoaW50NjR4Ml90IF9fcDAsIGludDY0eDJfdCBfX3AxKSB7Ci0gIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgaW50NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOwotICBpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDAsIDIpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MTZ4OF90IHZ6aXAxcV9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7Ci0gIGludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAwLCA4LCAxLCA5LCAyLCAxMCwgMywgMTEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQxNng4X3QgdnppcDFxX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKLSAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMCwgOCwgMSwgOSwgMiwgMTAsIDMsIDExKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ4eDhfdCB2emlwMV91OCh1aW50OHg4X3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKLSAgdWludDh4OF90IF9fcmV0OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDAsIDgsIDEsIDksIDIsIDEwLCAzLCAxMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ4eDhfdCB2emlwMV91OCh1aW50OHg4X3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKLSAgdWludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMCwgOCwgMSwgOSwgMiwgMTAsIDMsIDExKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQzMngyX3QgdnppcDFfdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxKSB7Ci0gIHVpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMCwgMik7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQzMngyX3QgdnppcDFfdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxKSB7Ci0gIHVpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIHVpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7Ci0gIHVpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDAsIDIpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDE2eDRfdCB2emlwMV91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEpIHsKLSAgdWludDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAwLCA0LCAxLCA1KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDE2eDRfdCB2emlwMV91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEpIHsKLSAgdWludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgdWludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKLSAgdWludDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMCwgNCwgMSwgNSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ4eDhfdCB2emlwMV9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7Ci0gIGludDh4OF90IF9fcmV0OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDAsIDgsIDEsIDksIDIsIDEwLCAzLCAxMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDh4OF90IHZ6aXAxX3M4KGludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKLSAgaW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMCwgOCwgMSwgOSwgMiwgMTAsIDMsIDExKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGZsb2F0MzJ4Ml90IHZ6aXAxX2YzMihmbG9hdDMyeDJfdCBfX3AwLCBmbG9hdDMyeDJfdCBfX3AxKSB7Ci0gIGZsb2F0MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDAsIDIpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBmbG9hdDMyeDJfdCB2emlwMV9mMzIoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSkgewotICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgZmxvYXQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7Ci0gIGZsb2F0MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAwLCAyKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDMyeDJfdCB2emlwMV9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7Ci0gIGludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAwLCAyKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MzJ4Ml90IHZ6aXAxX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKLSAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7Ci0gIGludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMCwgMik7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQxNng0X3QgdnppcDFfczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgewotICBpbnQxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMCwgNCwgMSwgNSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDE2eDRfdCB2emlwMV9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7Ci0gIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOwotICBpbnQxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDAsIDQsIDEsIDUpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgcG9seTh4OF90IHZ6aXAyX3A4KHBvbHk4eDhfdCBfX3AwLCBwb2x5OHg4X3QgX19wMSkgewotICBwb2x5OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgNCwgMTIsIDUsIDEzLCA2LCAxNCwgNywgMTUpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBwb2x5OHg4X3QgdnppcDJfcDgocG9seTh4OF90IF9fcDAsIHBvbHk4eDhfdCBfX3AxKSB7Ci0gIHBvbHk4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcG9seTh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBwb2x5OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDQsIDEyLCA1LCAxMywgNiwgMTQsIDcsIDE1KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHBvbHkxNng0X3QgdnppcDJfcDE2KHBvbHkxNng0X3QgX19wMCwgcG9seTE2eDRfdCBfX3AxKSB7Ci0gIHBvbHkxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMiwgNiwgMywgNyk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHBvbHkxNng0X3QgdnppcDJfcDE2KHBvbHkxNng0X3QgX19wMCwgcG9seTE2eDRfdCBfX3AxKSB7Ci0gIHBvbHkxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIHBvbHkxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7Ci0gIHBvbHkxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDIsIDYsIDMsIDcpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgcG9seTh4MTZfdCB2emlwMnFfcDgocG9seTh4MTZfdCBfX3AwLCBwb2x5OHgxNl90IF9fcDEpIHsKLSAgcG9seTh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCA4LCAyNCwgOSwgMjUsIDEwLCAyNiwgMTEsIDI3LCAxMiwgMjgsIDEzLCAyOSwgMTQsIDMwLCAxNSwgMzEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBwb2x5OHgxNl90IHZ6aXAycV9wOChwb2x5OHgxNl90IF9fcDAsIHBvbHk4eDE2X3QgX19wMSkgewotICBwb2x5OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBwb2x5OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBwb2x5OHgxNl90IF9fcmV0OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCA4LCAyNCwgOSwgMjUsIDEwLCAyNiwgMTEsIDI3LCAxMiwgMjgsIDEzLCAyOSwgMTQsIDMwLCAxNSwgMzEpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgcG9seTY0eDJfdCB2emlwMnFfcDY0KHBvbHk2NHgyX3QgX19wMCwgcG9seTY0eDJfdCBfX3AxKSB7Ci0gIHBvbHk2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMSwgMyk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHBvbHk2NHgyX3QgdnppcDJxX3A2NChwb2x5NjR4Ml90IF9fcDAsIHBvbHk2NHgyX3QgX19wMSkgewotICBwb2x5NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICBwb2x5NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOwotICBwb2x5NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAxLCAzKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHBvbHkxNng4X3QgdnppcDJxX3AxNihwb2x5MTZ4OF90IF9fcDAsIHBvbHkxNng4X3QgX19wMSkgewotICBwb2x5MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDQsIDEyLCA1LCAxMywgNiwgMTQsIDcsIDE1KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgcG9seTE2eDhfdCB2emlwMnFfcDE2KHBvbHkxNng4X3QgX19wMCwgcG9seTE2eDhfdCBfX3AxKSB7Ci0gIHBvbHkxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHBvbHkxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHBvbHkxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDQsIDEyLCA1LCAxMywgNiwgMTQsIDcsIDE1KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ4eDE2X3QgdnppcDJxX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7Ci0gIHVpbnQ4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgOCwgMjQsIDksIDI1LCAxMCwgMjYsIDExLCAyNywgMTIsIDI4LCAxMywgMjksIDE0LCAzMCwgMTUsIDMxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDh4MTZfdCB2emlwMnFfdTgodWludDh4MTZfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEpIHsKLSAgdWludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgOCwgMjQsIDksIDI1LCAxMCwgMjYsIDExLCAyNywgMTIsIDI4LCAxMywgMjksIDE0LCAzMCwgMTUsIDMxKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQzMng0X3QgdnppcDJxX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgewotICB1aW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDIsIDYsIDMsIDcpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MzJ4NF90IHZ6aXAycV91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEpIHsKLSAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgdWludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKLSAgdWludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMiwgNiwgMywgNyk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50NjR4Ml90IHZ6aXAycV91NjQodWludDY0eDJfdCBfX3AwLCB1aW50NjR4Ml90IF9fcDEpIHsKLSAgdWludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAxLCAzKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDY0eDJfdCB2emlwMnFfdTY0KHVpbnQ2NHgyX3QgX19wMCwgdWludDY0eDJfdCBfX3AxKSB7Ci0gIHVpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIHVpbnQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7Ci0gIHVpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDEsIDMpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDE2eDhfdCB2emlwMnFfdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxKSB7Ci0gIHVpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgNCwgMTIsIDUsIDEzLCA2LCAxNCwgNywgMTUpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MTZ4OF90IHZ6aXAycV91MTYodWludDE2eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEpIHsKLSAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgNCwgMTIsIDUsIDEzLCA2LCAxNCwgNywgMTUpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50OHgxNl90IHZ6aXAycV9zOChpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEpIHsKLSAgaW50OHgxNl90IF9fcmV0OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDgsIDI0LCA5LCAyNSwgMTAsIDI2LCAxMSwgMjcsIDEyLCAyOCwgMTMsIDI5LCAxNCwgMzAsIDE1LCAzMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDh4MTZfdCB2emlwMnFfczgoaW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7Ci0gIGludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQ4eDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDgsIDI0LCA5LCAyNSwgMTAsIDI2LCAxMSwgMjcsIDEyLCAyOCwgMTMsIDI5LCAxNCwgMzAsIDE1LCAzMSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBmbG9hdDY0eDJfdCB2emlwMnFfZjY0KGZsb2F0NjR4Ml90IF9fcDAsIGZsb2F0NjR4Ml90IF9fcDEpIHsKLSAgZmxvYXQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMSwgMyk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGZsb2F0NjR4Ml90IHZ6aXAycV9mNjQoZmxvYXQ2NHgyX3QgX19wMCwgZmxvYXQ2NHgyX3QgX19wMSkgewotICBmbG9hdDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgZmxvYXQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7Ci0gIGZsb2F0NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAxLCAzKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGZsb2F0MzJ4NF90IHZ6aXAycV9mMzIoZmxvYXQzMng0X3QgX19wMCwgZmxvYXQzMng0X3QgX19wMSkgewotICBmbG9hdDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAyLCA2LCAzLCA3KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgZmxvYXQzMng0X3QgdnppcDJxX2YzMihmbG9hdDMyeDRfdCBfX3AwLCBmbG9hdDMyeDRfdCBfX3AxKSB7Ci0gIGZsb2F0MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICBmbG9hdDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKLSAgZmxvYXQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDIsIDYsIDMsIDcpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MzJ4NF90IHZ6aXAycV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7Ci0gIGludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAyLCA2LCAzLCA3KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MzJ4NF90IHZ6aXAycV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7Ci0gIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOwotICBpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDIsIDYsIDMsIDcpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50NjR4Ml90IHZ6aXAycV9zNjQoaW50NjR4Ml90IF9fcDAsIGludDY0eDJfdCBfX3AxKSB7Ci0gIGludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAxLCAzKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50NjR4Ml90IHZ6aXAycV9zNjQoaW50NjR4Ml90IF9fcDAsIGludDY0eDJfdCBfX3AxKSB7Ci0gIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgaW50NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOwotICBpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDEsIDMpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MTZ4OF90IHZ6aXAycV9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7Ci0gIGludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCA0LCAxMiwgNSwgMTMsIDYsIDE0LCA3LCAxNSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDE2eDhfdCB2emlwMnFfczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgewotICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCA0LCAxMiwgNSwgMTMsIDYsIDE0LCA3LCAxNSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50OHg4X3QgdnppcDJfdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7Ci0gIHVpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCA0LCAxMiwgNSwgMTMsIDYsIDE0LCA3LCAxNSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ4eDhfdCB2emlwMl91OCh1aW50OHg4X3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKLSAgdWludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgNCwgMTIsIDUsIDEzLCA2LCAxNCwgNywgMTUpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDMyeDJfdCB2emlwMl91MzIodWludDMyeDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEpIHsKLSAgdWludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAxLCAzKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDMyeDJfdCB2emlwMl91MzIodWludDMyeDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEpIHsKLSAgdWludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgdWludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKLSAgdWludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMSwgMyk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MTZ4NF90IHZ6aXAyX3UxNih1aW50MTZ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSkgewotICB1aW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDIsIDYsIDMsIDcpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MTZ4NF90IHZ6aXAyX3UxNih1aW50MTZ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSkgewotICB1aW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICB1aW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOwotICB1aW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAyLCA2LCAzLCA3KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDh4OF90IHZ6aXAyX3M4KGludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKLSAgaW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgNCwgMTIsIDUsIDEzLCA2LCAxNCwgNywgMTUpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQ4eDhfdCB2emlwMl9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7Ci0gIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDQsIDEyLCA1LCAxMywgNiwgMTQsIDcsIDE1KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGZsb2F0MzJ4Ml90IHZ6aXAyX2YzMihmbG9hdDMyeDJfdCBfX3AwLCBmbG9hdDMyeDJfdCBfX3AxKSB7Ci0gIGZsb2F0MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDEsIDMpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBmbG9hdDMyeDJfdCB2emlwMl9mMzIoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSkgewotICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgZmxvYXQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7Ci0gIGZsb2F0MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAxLCAzKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDMyeDJfdCB2emlwMl9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7Ci0gIGludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAxLCAzKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MzJ4Ml90IHZ6aXAyX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKLSAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7Ci0gIGludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMSwgMyk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQxNng0X3QgdnppcDJfczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgewotICBpbnQxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMiwgNiwgMywgNyk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDE2eDRfdCB2emlwMl9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7Ci0gIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOwotICBpbnQxNng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDIsIDYsIDMsIDcpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jZW5kaWYKLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50OHgxNl90IHZhYmFxX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZfdCBfX3AxLCB1aW50OHgxNl90IF9fcDIpIHsKLSAgdWludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSBfX3AwICsgdmFiZHFfdTgoX19wMSwgX19wMik7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ4eDE2X3QgdmFiYXFfdTgodWludDh4MTZfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEsIHVpbnQ4eDE2X3QgX19wMikgewotICB1aW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50OHgxNl90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50OHgxNl90IF9fcmV0OwotICBfX3JldCA9IF9fcmV2MCArIF9fbm9zd2FwX3ZhYmRxX3U4KF9fcmV2MSwgX19yZXYyKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQzMng0X3QgdmFiYXFfdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxLCB1aW50MzJ4NF90IF9fcDIpIHsKLSAgdWludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSBfX3AwICsgdmFiZHFfdTMyKF9fcDEsIF9fcDIpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MzJ4NF90IHZhYmFxX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSwgdWludDMyeDRfdCBfX3AyKSB7Ci0gIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7Ci0gIHVpbnQzMng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMywgMiwgMSwgMCk7Ci0gIHVpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19yZXYwICsgX19ub3N3YXBfdmFiZHFfdTMyKF9fcmV2MSwgX19yZXYyKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQxNng4X3QgdmFiYXFfdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxLCB1aW50MTZ4OF90IF9fcDIpIHsKLSAgdWludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSBfX3AwICsgdmFiZHFfdTE2KF9fcDEsIF9fcDIpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MTZ4OF90IHZhYmFxX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSwgdWludDE2eDhfdCBfX3AyKSB7Ci0gIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQxNng4X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19yZXYwICsgX19ub3N3YXBfdmFiZHFfdTE2KF9fcmV2MSwgX19yZXYyKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDh4MTZfdCB2YWJhcV9zOChpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEsIGludDh4MTZfdCBfX3AyKSB7Ci0gIGludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSBfX3AwICsgdmFiZHFfczgoX19wMSwgX19wMik7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDh4MTZfdCB2YWJhcV9zOChpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEsIGludDh4MTZfdCBfX3AyKSB7Ci0gIGludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQ4eDE2X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDh4MTZfdCBfX3JldDsKLSAgX19yZXQgPSBfX3JldjAgKyBfX25vc3dhcF92YWJkcV9zOChfX3JldjEsIF9fcmV2Mik7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQzMng0X3QgdmFiYXFfczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSwgaW50MzJ4NF90IF9fcDIpIHsKLSAgaW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IF9fcDAgKyB2YWJkcV9zMzIoX19wMSwgX19wMik7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDMyeDRfdCB2YWJhcV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxLCBpbnQzMng0X3QgX19wMikgewotICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKLSAgaW50MzJ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDMsIDIsIDEsIDApOwotICBpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19yZXYwICsgX19ub3N3YXBfdmFiZHFfczMyKF9fcmV2MSwgX19yZXYyKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDE2eDhfdCB2YWJhcV9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxLCBpbnQxNng4X3QgX19wMikgewotICBpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19wMCArIHZhYmRxX3MxNihfX3AxLCBfX3AyKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MTZ4OF90IHZhYmFxX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEsIGludDE2eDhfdCBfX3AyKSB7Ci0gIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQxNng4X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSBfX3JldjAgKyBfX25vc3dhcF92YWJkcV9zMTYoX19yZXYxLCBfX3JldjIpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDh4OF90IHZhYmFfdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxLCB1aW50OHg4X3QgX19wMikgewotICB1aW50OHg4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19wMCArIHZhYmRfdTgoX19wMSwgX19wMik7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ4eDhfdCB2YWJhX3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSwgdWludDh4OF90IF9fcDIpIHsKLSAgdWludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQ4eDhfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDh4OF90IF9fcmV0OwotICBfX3JldCA9IF9fcmV2MCArIF9fbm9zd2FwX3ZhYmRfdTgoX19yZXYxLCBfX3JldjIpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDMyeDJfdCB2YWJhX3UzMih1aW50MzJ4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSwgdWludDMyeDJfdCBfX3AyKSB7Ci0gIHVpbnQzMngyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19wMCArIHZhYmRfdTMyKF9fcDEsIF9fcDIpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MzJ4Ml90IHZhYmFfdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxLCB1aW50MzJ4Ml90IF9fcDIpIHsKLSAgdWludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgdWludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKLSAgdWludDMyeDJfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAxLCAwKTsKLSAgdWludDMyeDJfdCBfX3JldDsKLSAgX19yZXQgPSBfX3JldjAgKyBfX25vc3dhcF92YWJkX3UzMihfX3JldjEsIF9fcmV2Mik7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MTZ4NF90IHZhYmFfdTE2KHVpbnQxNng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxLCB1aW50MTZ4NF90IF9fcDIpIHsKLSAgdWludDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSBfX3AwICsgdmFiZF91MTYoX19wMSwgX19wMik7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQxNng0X3QgdmFiYV91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEsIHVpbnQxNng0X3QgX19wMikgewotICB1aW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICB1aW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOwotICB1aW50MTZ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDMsIDIsIDEsIDApOwotICB1aW50MTZ4NF90IF9fcmV0OwotICBfX3JldCA9IF9fcmV2MCArIF9fbm9zd2FwX3ZhYmRfdTE2KF9fcmV2MSwgX19yZXYyKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDh4OF90IHZhYmFfczgoaW50OHg4X3QgX19wMCwgaW50OHg4X3QgX19wMSwgaW50OHg4X3QgX19wMikgewotICBpbnQ4eDhfdCBfX3JldDsKLSAgX19yZXQgPSBfX3AwICsgdmFiZF9zOChfX3AxLCBfX3AyKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50OHg4X3QgdmFiYV9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxLCBpbnQ4eDhfdCBfX3AyKSB7Ci0gIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50OHg4X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDh4OF90IF9fcmV0OwotICBfX3JldCA9IF9fcmV2MCArIF9fbm9zd2FwX3ZhYmRfczgoX19yZXYxLCBfX3JldjIpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MzJ4Ml90IHZhYmFfczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSwgaW50MzJ4Ml90IF9fcDIpIHsKLSAgaW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IF9fcDAgKyB2YWJkX3MzMihfX3AxLCBfX3AyKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MzJ4Ml90IHZhYmFfczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSwgaW50MzJ4Ml90IF9fcDIpIHsKLSAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7Ci0gIGludDMyeDJfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAxLCAwKTsKLSAgaW50MzJ4Ml90IF9fcmV0OwotICBfX3JldCA9IF9fcmV2MCArIF9fbm9zd2FwX3ZhYmRfczMyKF9fcmV2MSwgX19yZXYyKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDE2eDRfdCB2YWJhX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEsIGludDE2eDRfdCBfX3AyKSB7Ci0gIGludDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSBfX3AwICsgdmFiZF9zMTYoX19wMSwgX19wMik7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDE2eDRfdCB2YWJhX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEsIGludDE2eDRfdCBfX3AyKSB7Ci0gIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOwotICBpbnQxNng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMywgMiwgMSwgMCk7Ci0gIGludDE2eDRfdCBfX3JldDsKLSAgX19yZXQgPSBfX3JldjAgKyBfX25vc3dhcF92YWJkX3MxNihfX3JldjEsIF9fcmV2Mik7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MTZ4OF90IHZhYmRsX3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgewotICB1aW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MTZ4OF90KSh2bW92bF91OCgodWludDh4OF90KSh2YWJkX3U4KF9fcDAsIF9fcDEpKSkpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MTZ4OF90IHZhYmRsX3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgewotICB1aW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDE2eDhfdCkoX19ub3N3YXBfdm1vdmxfdTgoKHVpbnQ4eDhfdCkoX19ub3N3YXBfdmFiZF91OChfX3JldjAsIF9fcmV2MSkpKSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotX19haSB1aW50MTZ4OF90IF9fbm9zd2FwX3ZhYmRsX3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgewotICB1aW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MTZ4OF90KShfX25vc3dhcF92bW92bF91OCgodWludDh4OF90KShfX25vc3dhcF92YWJkX3U4KF9fcDAsIF9fcDEpKSkpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ2NHgyX3QgdmFiZGxfdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxKSB7Ci0gIHVpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NHgyX3QpKHZtb3ZsX3UzMigodWludDMyeDJfdCkodmFiZF91MzIoX19wMCwgX19wMSkpKSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ2NHgyX3QgdmFiZGxfdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxKSB7Ci0gIHVpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIHVpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7Ci0gIHVpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQ2NHgyX3QpKF9fbm9zd2FwX3Ztb3ZsX3UzMigodWludDMyeDJfdCkoX19ub3N3YXBfdmFiZF91MzIoX19yZXYwLCBfX3JldjEpKSkpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLV9fYWkgdWludDY0eDJfdCBfX25vc3dhcF92YWJkbF91MzIodWludDMyeDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEpIHsKLSAgdWludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSAodWludDY0eDJfdCkoX19ub3N3YXBfdm1vdmxfdTMyKCh1aW50MzJ4Ml90KShfX25vc3dhcF92YWJkX3UzMihfX3AwLCBfX3AxKSkpKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MzJ4NF90IHZhYmRsX3UxNih1aW50MTZ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSkgewotICB1aW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJ4NF90KSh2bW92bF91MTYoKHVpbnQxNng0X3QpKHZhYmRfdTE2KF9fcDAsIF9fcDEpKSkpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MzJ4NF90IHZhYmRsX3UxNih1aW50MTZ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSkgewotICB1aW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICB1aW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOwotICB1aW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9ICh1aW50MzJ4NF90KShfX25vc3dhcF92bW92bF91MTYoKHVpbnQxNng0X3QpKF9fbm9zd2FwX3ZhYmRfdTE2KF9fcmV2MCwgX19yZXYxKSkpKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci1fX2FpIHVpbnQzMng0X3QgX19ub3N3YXBfdmFiZGxfdTE2KHVpbnQxNng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxKSB7Ci0gIHVpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKHVpbnQzMng0X3QpKF9fbm9zd2FwX3Ztb3ZsX3UxNigodWludDE2eDRfdCkoX19ub3N3YXBfdmFiZF91MTYoX19wMCwgX19wMSkpKSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MTZ4OF90IHZhYmRsX3M4KGludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKLSAgaW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IChpbnQxNng4X3QpKHZtb3ZsX3U4KCh1aW50OHg4X3QpKHZhYmRfczgoX19wMCwgX19wMSkpKSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDE2eDhfdCB2YWJkbF9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7Ci0gIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IChpbnQxNng4X3QpKF9fbm9zd2FwX3Ztb3ZsX3U4KCh1aW50OHg4X3QpKF9fbm9zd2FwX3ZhYmRfczgoX19yZXYwLCBfX3JldjEpKSkpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLV9fYWkgaW50MTZ4OF90IF9fbm9zd2FwX3ZhYmRsX3M4KGludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKLSAgaW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IChpbnQxNng4X3QpKF9fbm9zd2FwX3Ztb3ZsX3U4KCh1aW50OHg4X3QpKF9fbm9zd2FwX3ZhYmRfczgoX19wMCwgX19wMSkpKSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50NjR4Ml90IHZhYmRsX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKLSAgaW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IChpbnQ2NHgyX3QpKHZtb3ZsX3UzMigodWludDMyeDJfdCkodmFiZF9zMzIoX19wMCwgX19wMSkpKSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDY0eDJfdCB2YWJkbF9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7Ci0gIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOwotICBpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDY0eDJfdCkoX19ub3N3YXBfdm1vdmxfdTMyKCh1aW50MzJ4Ml90KShfX25vc3dhcF92YWJkX3MzMihfX3JldjAsIF9fcmV2MSkpKSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotX19haSBpbnQ2NHgyX3QgX19ub3N3YXBfdmFiZGxfczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgewotICBpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDY0eDJfdCkoX19ub3N3YXBfdm1vdmxfdTMyKCh1aW50MzJ4Ml90KShfX25vc3dhcF92YWJkX3MzMihfX3AwLCBfX3AxKSkpKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQzMng0X3QgdmFiZGxfczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgewotICBpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gKGludDMyeDRfdCkodm1vdmxfdTE2KCh1aW50MTZ4NF90KSh2YWJkX3MxNihfX3AwLCBfX3AxKSkpKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MzJ4NF90IHZhYmRsX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKLSAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICBpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7Ci0gIGludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MzJ4NF90KShfX25vc3dhcF92bW92bF91MTYoKHVpbnQxNng0X3QpKF9fbm9zd2FwX3ZhYmRfczE2KF9fcmV2MCwgX19yZXYxKSkpKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci1fX2FpIGludDMyeDRfdCBfX25vc3dhcF92YWJkbF9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7Ci0gIGludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSAoaW50MzJ4NF90KShfX25vc3dhcF92bW92bF91MTYoKHVpbnQxNng0X3QpKF9fbm9zd2FwX3ZhYmRfczE2KF9fcDAsIF9fcDEpKSkpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQxNng4X3QgdmFkZGxfdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7Ci0gIHVpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gdm1vdmxfdTgoX19wMCkgKyB2bW92bF91OChfX3AxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDE2eDhfdCB2YWRkbF91OCh1aW50OHg4X3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKLSAgdWludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19ub3N3YXBfdm1vdmxfdTgoX19yZXYwKSArIF9fbm9zd2FwX3Ztb3ZsX3U4KF9fcmV2MSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50NjR4Ml90IHZhZGRsX3UzMih1aW50MzJ4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSkgewotICB1aW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IHZtb3ZsX3UzMihfX3AwKSArIHZtb3ZsX3UzMihfX3AxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDY0eDJfdCB2YWRkbF91MzIodWludDMyeDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEpIHsKLSAgdWludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgdWludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKLSAgdWludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSBfX25vc3dhcF92bW92bF91MzIoX19yZXYwKSArIF9fbm9zd2FwX3Ztb3ZsX3UzMihfX3JldjEpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDMyeDRfdCB2YWRkbF91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEpIHsKLSAgdWludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSB2bW92bF91MTYoX19wMCkgKyB2bW92bF91MTYoX19wMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQzMng0X3QgdmFkZGxfdTE2KHVpbnQxNng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxKSB7Ci0gIHVpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7Ci0gIHVpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19ub3N3YXBfdm1vdmxfdTE2KF9fcmV2MCkgKyBfX25vc3dhcF92bW92bF91MTYoX19yZXYxKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDE2eDhfdCB2YWRkbF9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7Ci0gIGludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSB2bW92bF9zOChfX3AwKSArIHZtb3ZsX3M4KF9fcDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQxNng4X3QgdmFkZGxfczgoaW50OHg4X3QgX19wMCwgaW50OHg4X3QgX19wMSkgewotICBpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSBfX25vc3dhcF92bW92bF9zOChfX3JldjApICsgX19ub3N3YXBfdm1vdmxfczgoX19yZXYxKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDY0eDJfdCB2YWRkbF9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7Ci0gIGludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSB2bW92bF9zMzIoX19wMCkgKyB2bW92bF9zMzIoX19wMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDY0eDJfdCB2YWRkbF9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7Ci0gIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOwotICBpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19ub3N3YXBfdm1vdmxfczMyKF9fcmV2MCkgKyBfX25vc3dhcF92bW92bF9zMzIoX19yZXYxKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDMyeDRfdCB2YWRkbF9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7Ci0gIGludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSB2bW92bF9zMTYoX19wMCkgKyB2bW92bF9zMTYoX19wMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDMyeDRfdCB2YWRkbF9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7Ci0gIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOwotICBpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19ub3N3YXBfdm1vdmxfczE2KF9fcmV2MCkgKyBfX25vc3dhcF92bW92bF9zMTYoX19yZXYxKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQxNng4X3QgdmFkZHdfdTgodWludDE2eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgewotICB1aW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IF9fcDAgKyB2bW92bF91OChfX3AxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDE2eDhfdCB2YWRkd191OCh1aW50MTZ4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7Ci0gIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSBfX3JldjAgKyBfX25vc3dhcF92bW92bF91OChfX3JldjEpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDY0eDJfdCB2YWRkd191MzIodWludDY0eDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEpIHsKLSAgdWludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSBfX3AwICsgdm1vdmxfdTMyKF9fcDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50NjR4Ml90IHZhZGR3X3UzMih1aW50NjR4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSkgewotICB1aW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICB1aW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOwotICB1aW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IF9fcmV2MCArIF9fbm9zd2FwX3Ztb3ZsX3UzMihfX3JldjEpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDMyeDRfdCB2YWRkd191MTYodWludDMyeDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEpIHsKLSAgdWludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSBfX3AwICsgdm1vdmxfdTE2KF9fcDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MzJ4NF90IHZhZGR3X3UxNih1aW50MzJ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSkgewotICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICB1aW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOwotICB1aW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IF9fcmV2MCArIF9fbm9zd2FwX3Ztb3ZsX3UxNihfX3JldjEpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MTZ4OF90IHZhZGR3X3M4KGludDE2eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7Ci0gIGludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSBfX3AwICsgdm1vdmxfczgoX19wMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDE2eDhfdCB2YWRkd19zOChpbnQxNng4X3QgX19wMCwgaW50OHg4X3QgX19wMSkgewotICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19yZXYwICsgX19ub3N3YXBfdm1vdmxfczgoX19yZXYxKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDY0eDJfdCB2YWRkd19zMzIoaW50NjR4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7Ci0gIGludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSBfX3AwICsgdm1vdmxfczMyKF9fcDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQ2NHgyX3QgdmFkZHdfczMyKGludDY0eDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgewotICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIGludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKLSAgaW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IF9fcmV2MCArIF9fbm9zd2FwX3Ztb3ZsX3MzMihfX3JldjEpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MzJ4NF90IHZhZGR3X3MxNihpbnQzMng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKLSAgaW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IF9fcDAgKyB2bW92bF9zMTYoX19wMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDMyeDRfdCB2YWRkd19zMTYoaW50MzJ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7Ci0gIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOwotICBpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19yZXYwICsgX19ub3N3YXBfdm1vdmxfczE2KF9fcmV2MSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2Z2V0X2xhbmVfZjE2KF9fcDBfMjQyLCBfX3AxXzI0MikgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0MTZ4NF90IF9fczBfMjQyID0gX19wMF8yNDI7IFwKLSAgZmxvYXQxNl90IF9fcmV0XzI0MjsgXAotZmxvYXQxNng0X3QgX19yZWludF8yNDIgPSBfX3MwXzI0MjsgXAotaW50MTZfdCBfX3JlaW50MV8yNDIgPSB2Z2V0X2xhbmVfczE2KCooaW50MTZ4NF90ICopICZfX3JlaW50XzI0MiwgX19wMV8yNDIpOyBcCi0gIF9fcmV0XzI0MiA9ICooZmxvYXQxNl90ICopICZfX3JlaW50MV8yNDI7IFwKLSAgX19yZXRfMjQyOyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmdldF9sYW5lX2YxNihfX3AwXzI0MywgX19wMV8yNDMpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDE2eDRfdCBfX3MwXzI0MyA9IF9fcDBfMjQzOyBcCi0gIGZsb2F0MTZ4NF90IF9fcmV2MF8yNDM7ICBfX3JldjBfMjQzID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMF8yNDMsIF9fczBfMjQzLCAzLCAyLCAxLCAwKTsgXAotICBmbG9hdDE2X3QgX19yZXRfMjQzOyBcCi1mbG9hdDE2eDRfdCBfX3JlaW50XzI0MyA9IF9fcmV2MF8yNDM7IFwKLWludDE2X3QgX19yZWludDFfMjQzID0gX19ub3N3YXBfdmdldF9sYW5lX3MxNigqKGludDE2eDRfdCAqKSAmX19yZWludF8yNDMsIF9fcDFfMjQzKTsgXAotICBfX3JldF8yNDMgPSAqKGZsb2F0MTZfdCAqKSAmX19yZWludDFfMjQzOyBcCi0gIF9fcmV0XzI0MzsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmdldHFfbGFuZV9mMTYoX19wMF8yNDQsIF9fcDFfMjQ0KSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQxNng4X3QgX19zMF8yNDQgPSBfX3AwXzI0NDsgXAotICBmbG9hdDE2X3QgX19yZXRfMjQ0OyBcCi1mbG9hdDE2eDhfdCBfX3JlaW50XzI0NCA9IF9fczBfMjQ0OyBcCi1pbnQxNl90IF9fcmVpbnQxXzI0NCA9IHZnZXRxX2xhbmVfczE2KCooaW50MTZ4OF90ICopICZfX3JlaW50XzI0NCwgX19wMV8yNDQpOyBcCi0gIF9fcmV0XzI0NCA9ICooZmxvYXQxNl90ICopICZfX3JlaW50MV8yNDQ7IFwKLSAgX19yZXRfMjQ0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmdldHFfbGFuZV9mMTYoX19wMF8yNDUsIF9fcDFfMjQ1KSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQxNng4X3QgX19zMF8yNDUgPSBfX3AwXzI0NTsgXAotICBmbG9hdDE2eDhfdCBfX3JldjBfMjQ1OyAgX19yZXYwXzI0NSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczBfMjQ1LCBfX3MwXzI0NSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgZmxvYXQxNl90IF9fcmV0XzI0NTsgXAotZmxvYXQxNng4X3QgX19yZWludF8yNDUgPSBfX3JldjBfMjQ1OyBcCi1pbnQxNl90IF9fcmVpbnQxXzI0NSA9IF9fbm9zd2FwX3ZnZXRxX2xhbmVfczE2KCooaW50MTZ4OF90ICopICZfX3JlaW50XzI0NSwgX19wMV8yNDUpOyBcCi0gIF9fcmV0XzI0NSA9ICooZmxvYXQxNl90ICopICZfX3JlaW50MV8yNDU7IFwKLSAgX19yZXRfMjQ1OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MTZ4OF90IHZtbGFsX3U4KHVpbnQxNng4X3QgX19wMCwgdWludDh4OF90IF9fcDEsIHVpbnQ4eDhfdCBfX3AyKSB7Ci0gIHVpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19wMCArIHZtdWxsX3U4KF9fcDEsIF9fcDIpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MTZ4OF90IHZtbGFsX3U4KHVpbnQxNng4X3QgX19wMCwgdWludDh4OF90IF9fcDEsIHVpbnQ4eDhfdCBfX3AyKSB7Ci0gIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDh4OF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IF9fcmV2MCArIF9fbm9zd2FwX3ZtdWxsX3U4KF9fcmV2MSwgX19yZXYyKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci1fX2FpIHVpbnQxNng4X3QgX19ub3N3YXBfdm1sYWxfdTgodWludDE2eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSwgdWludDh4OF90IF9fcDIpIHsKLSAgdWludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSBfX3AwICsgX19ub3N3YXBfdm11bGxfdTgoX19wMSwgX19wMik7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDY0eDJfdCB2bWxhbF91MzIodWludDY0eDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEsIHVpbnQzMngyX3QgX19wMikgewotICB1aW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IF9fcDAgKyB2bXVsbF91MzIoX19wMSwgX19wMik7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ2NHgyX3Qgdm1sYWxfdTMyKHVpbnQ2NHgyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxLCB1aW50MzJ4Ml90IF9fcDIpIHsKLSAgdWludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgdWludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKLSAgdWludDMyeDJfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAxLCAwKTsKLSAgdWludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSBfX3JldjAgKyBfX25vc3dhcF92bXVsbF91MzIoX19yZXYxLCBfX3JldjIpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLV9fYWkgdWludDY0eDJfdCBfX25vc3dhcF92bWxhbF91MzIodWludDY0eDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEsIHVpbnQzMngyX3QgX19wMikgewotICB1aW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IF9fcDAgKyBfX25vc3dhcF92bXVsbF91MzIoX19wMSwgX19wMik7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDMyeDRfdCB2bWxhbF91MTYodWludDMyeDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEsIHVpbnQxNng0X3QgX19wMikgewotICB1aW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IF9fcDAgKyB2bXVsbF91MTYoX19wMSwgX19wMik7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQzMng0X3Qgdm1sYWxfdTE2KHVpbnQzMng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxLCB1aW50MTZ4NF90IF9fcDIpIHsKLSAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgdWludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKLSAgdWludDE2eDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAzLCAyLCAxLCAwKTsKLSAgdWludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSBfX3JldjAgKyBfX25vc3dhcF92bXVsbF91MTYoX19yZXYxLCBfX3JldjIpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLV9fYWkgdWludDMyeDRfdCBfX25vc3dhcF92bWxhbF91MTYodWludDMyeDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEsIHVpbnQxNng0X3QgX19wMikgewotICB1aW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IF9fcDAgKyBfX25vc3dhcF92bXVsbF91MTYoX19wMSwgX19wMik7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MTZ4OF90IHZtbGFsX3M4KGludDE2eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxLCBpbnQ4eDhfdCBfX3AyKSB7Ci0gIGludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSBfX3AwICsgdm11bGxfczgoX19wMSwgX19wMik7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDE2eDhfdCB2bWxhbF9zOChpbnQxNng4X3QgX19wMCwgaW50OHg4X3QgX19wMSwgaW50OHg4X3QgX19wMikgewotICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQ4eDhfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IF9fcmV2MCArIF9fbm9zd2FwX3ZtdWxsX3M4KF9fcmV2MSwgX19yZXYyKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci1fX2FpIGludDE2eDhfdCBfX25vc3dhcF92bWxhbF9zOChpbnQxNng4X3QgX19wMCwgaW50OHg4X3QgX19wMSwgaW50OHg4X3QgX19wMikgewotICBpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19wMCArIF9fbm9zd2FwX3ZtdWxsX3M4KF9fcDEsIF9fcDIpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDY0eDJfdCB2bWxhbF9zMzIoaW50NjR4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxLCBpbnQzMngyX3QgX19wMikgewotICBpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19wMCArIHZtdWxsX3MzMihfX3AxLCBfX3AyKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50NjR4Ml90IHZtbGFsX3MzMihpbnQ2NHgyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEsIGludDMyeDJfdCBfX3AyKSB7Ci0gIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOwotICBpbnQzMngyX3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMSwgMCk7Ci0gIGludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSBfX3JldjAgKyBfX25vc3dhcF92bXVsbF9zMzIoX19yZXYxLCBfX3JldjIpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLV9fYWkgaW50NjR4Ml90IF9fbm9zd2FwX3ZtbGFsX3MzMihpbnQ2NHgyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEsIGludDMyeDJfdCBfX3AyKSB7Ci0gIGludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSBfX3AwICsgX19ub3N3YXBfdm11bGxfczMyKF9fcDEsIF9fcDIpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDMyeDRfdCB2bWxhbF9zMTYoaW50MzJ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxLCBpbnQxNng0X3QgX19wMikgewotICBpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19wMCArIHZtdWxsX3MxNihfX3AxLCBfX3AyKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MzJ4NF90IHZtbGFsX3MxNihpbnQzMng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEsIGludDE2eDRfdCBfX3AyKSB7Ci0gIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOwotICBpbnQxNng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMywgMiwgMSwgMCk7Ci0gIGludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSBfX3JldjAgKyBfX25vc3dhcF92bXVsbF9zMTYoX19yZXYxLCBfX3JldjIpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLV9fYWkgaW50MzJ4NF90IF9fbm9zd2FwX3ZtbGFsX3MxNihpbnQzMng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEsIGludDE2eDRfdCBfX3AyKSB7Ci0gIGludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSBfX3AwICsgX19ub3N3YXBfdm11bGxfczE2KF9fcDEsIF9fcDIpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZtbGFsX2xhbmVfdTMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKLSAgdWludDMyeDJfdCBfX3MyID0gX19wMjsgXAotICB1aW50NjR4Ml90IF9fcmV0OyBcCi0gIF9fcmV0ID0gX19zMCArIHZtdWxsX3UzMihfX3MxLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCBfX3AzLCBfX3AzKSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bWxhbF9sYW5lX3UzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDY0eDJfdCBfX3MwID0gX19wMDsgXAotICB1aW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCi0gIHVpbnQzMngyX3QgX19zMiA9IF9fcDI7IFwKLSAgdWludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAotICB1aW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCi0gIHVpbnQzMngyX3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgMSwgMCk7IFwKLSAgdWludDY0eDJfdCBfX3JldDsgXAotICBfX3JldCA9IF9fcmV2MCArIF9fbm9zd2FwX3ZtdWxsX3UzMihfX3JldjEsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MiwgX19yZXYyLCBfX3AzLCBfX3AzKSk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bWxhbF9sYW5lX3UxNihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDMyeDRfdCBfX3MwID0gX19wMDsgXAotICB1aW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCi0gIHVpbnQxNng0X3QgX19zMiA9IF9fcDI7IFwKLSAgdWludDMyeDRfdCBfX3JldDsgXAotICBfX3JldCA9IF9fczAgKyB2bXVsbF91MTYoX19zMSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMywgX19wMywgX19wMykpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdm1sYWxfbGFuZV91MTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDE2eDRfdCBfX3MxID0gX19wMTsgXAotICB1aW50MTZ4NF90IF9fczIgPSBfX3AyOyBcCi0gIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKLSAgdWludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAotICB1aW50MTZ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDMsIDIsIDEsIDApOyBcCi0gIHVpbnQzMng0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSBfX3JldjAgKyBfX25vc3dhcF92bXVsbF91MTYoX19yZXYxLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMywgX19wMywgX19wMykpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdm1sYWxfbGFuZV9zMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDY0eDJfdCBfX3MwID0gX19wMDsgXAotICBpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKLSAgaW50MzJ4Ml90IF9fczIgPSBfX3AyOyBcCi0gIGludDY0eDJfdCBfX3JldDsgXAotICBfX3JldCA9IF9fczAgKyB2bXVsbF9zMzIoX19zMSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMykpOyBcCi0gIF9fcmV0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdm1sYWxfbGFuZV9zMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDY0eDJfdCBfX3MwID0gX19wMDsgXAotICBpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKLSAgaW50MzJ4Ml90IF9fczIgPSBfX3AyOyBcCi0gIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAotICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMSwgMCk7IFwKLSAgaW50MzJ4Ml90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDEsIDApOyBcCi0gIGludDY0eDJfdCBfX3JldDsgXAotICBfX3JldCA9IF9fcmV2MCArIF9fbm9zd2FwX3ZtdWxsX3MzMihfX3JldjEsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MiwgX19yZXYyLCBfX3AzLCBfX3AzKSk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bWxhbF9sYW5lX3MxNihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCi0gIGludDE2eDRfdCBfX3MxID0gX19wMTsgXAotICBpbnQxNng0X3QgX19zMiA9IF9fcDI7IFwKLSAgaW50MzJ4NF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gX19zMCArIHZtdWxsX3MxNihfX3MxLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bWxhbF9sYW5lX3MxNihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCi0gIGludDE2eDRfdCBfX3MxID0gX19wMTsgXAotICBpbnQxNng0X3QgX19zMiA9IF9fcDI7IFwKLSAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCi0gIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAotICBpbnQxNng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgMywgMiwgMSwgMCk7IFwKLSAgaW50MzJ4NF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gX19yZXYwICsgX19ub3N3YXBfdm11bGxfczE2KF9fcmV2MSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpKTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ2NHgyX3Qgdm1sYWxfbl91MzIodWludDY0eDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEsIHVpbnQzMl90IF9fcDIpIHsKLSAgdWludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSBfX3AwICsgdm11bGxfdTMyKF9fcDEsICh1aW50MzJ4Ml90KSB7X19wMiwgX19wMn0pOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50NjR4Ml90IHZtbGFsX25fdTMyKHVpbnQ2NHgyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxLCB1aW50MzJfdCBfX3AyKSB7Ci0gIHVpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIHVpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7Ci0gIHVpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19yZXYwICsgX19ub3N3YXBfdm11bGxfdTMyKF9fcmV2MSwgKHVpbnQzMngyX3QpIHtfX3AyLCBfX3AyfSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotX19haSB1aW50NjR4Ml90IF9fbm9zd2FwX3ZtbGFsX25fdTMyKHVpbnQ2NHgyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxLCB1aW50MzJfdCBfX3AyKSB7Ci0gIHVpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19wMCArIF9fbm9zd2FwX3ZtdWxsX3UzMihfX3AxLCAodWludDMyeDJfdCkge19fcDIsIF9fcDJ9KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MzJ4NF90IHZtbGFsX25fdTE2KHVpbnQzMng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxLCB1aW50MTZfdCBfX3AyKSB7Ci0gIHVpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19wMCArIHZtdWxsX3UxNihfX3AxLCAodWludDE2eDRfdCkge19fcDIsIF9fcDIsIF9fcDIsIF9fcDJ9KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDMyeDRfdCB2bWxhbF9uX3UxNih1aW50MzJ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSwgdWludDE2X3QgX19wMikgewotICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICB1aW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOwotICB1aW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IF9fcmV2MCArIF9fbm9zd2FwX3ZtdWxsX3UxNihfX3JldjEsICh1aW50MTZ4NF90KSB7X19wMiwgX19wMiwgX19wMiwgX19wMn0pOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLV9fYWkgdWludDMyeDRfdCBfX25vc3dhcF92bWxhbF9uX3UxNih1aW50MzJ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSwgdWludDE2X3QgX19wMikgewotICB1aW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IF9fcDAgKyBfX25vc3dhcF92bXVsbF91MTYoX19wMSwgKHVpbnQxNng0X3QpIHtfX3AyLCBfX3AyLCBfX3AyLCBfX3AyfSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50NjR4Ml90IHZtbGFsX25fczMyKGludDY0eDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSwgaW50MzJfdCBfX3AyKSB7Ci0gIGludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSBfX3AwICsgdm11bGxfczMyKF9fcDEsIChpbnQzMngyX3QpIHtfX3AyLCBfX3AyfSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDY0eDJfdCB2bWxhbF9uX3MzMihpbnQ2NHgyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEsIGludDMyX3QgX19wMikgewotICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIGludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKLSAgaW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IF9fcmV2MCArIF9fbm9zd2FwX3ZtdWxsX3MzMihfX3JldjEsIChpbnQzMngyX3QpIHtfX3AyLCBfX3AyfSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotX19haSBpbnQ2NHgyX3QgX19ub3N3YXBfdm1sYWxfbl9zMzIoaW50NjR4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxLCBpbnQzMl90IF9fcDIpIHsKLSAgaW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IF9fcDAgKyBfX25vc3dhcF92bXVsbF9zMzIoX19wMSwgKGludDMyeDJfdCkge19fcDIsIF9fcDJ9KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQzMng0X3Qgdm1sYWxfbl9zMTYoaW50MzJ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxLCBpbnQxNl90IF9fcDIpIHsKLSAgaW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IF9fcDAgKyB2bXVsbF9zMTYoX19wMSwgKGludDE2eDRfdCkge19fcDIsIF9fcDIsIF9fcDIsIF9fcDJ9KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MzJ4NF90IHZtbGFsX25fczE2KGludDMyeDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSwgaW50MTZfdCBfX3AyKSB7Ci0gIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOwotICBpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19yZXYwICsgX19ub3N3YXBfdm11bGxfczE2KF9fcmV2MSwgKGludDE2eDRfdCkge19fcDIsIF9fcDIsIF9fcDIsIF9fcDJ9KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci1fX2FpIGludDMyeDRfdCBfX25vc3dhcF92bWxhbF9uX3MxNihpbnQzMng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEsIGludDE2X3QgX19wMikgewotICBpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19wMCArIF9fbm9zd2FwX3ZtdWxsX3MxNihfX3AxLCAoaW50MTZ4NF90KSB7X19wMiwgX19wMiwgX19wMiwgX19wMn0pOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQxNng4X3Qgdm1sc2xfdTgodWludDE2eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSwgdWludDh4OF90IF9fcDIpIHsKLSAgdWludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSBfX3AwIC0gdm11bGxfdTgoX19wMSwgX19wMik7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQxNng4X3Qgdm1sc2xfdTgodWludDE2eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSwgdWludDh4OF90IF9fcDIpIHsKLSAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50OHg4X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19yZXYwIC0gX19ub3N3YXBfdm11bGxfdTgoX19yZXYxLCBfX3JldjIpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLV9fYWkgdWludDE2eDhfdCBfX25vc3dhcF92bWxzbF91OCh1aW50MTZ4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxLCB1aW50OHg4X3QgX19wMikgewotICB1aW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IF9fcDAgLSBfX25vc3dhcF92bXVsbF91OChfX3AxLCBfX3AyKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50NjR4Ml90IHZtbHNsX3UzMih1aW50NjR4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSwgdWludDMyeDJfdCBfX3AyKSB7Ci0gIHVpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19wMCAtIHZtdWxsX3UzMihfX3AxLCBfX3AyKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDY0eDJfdCB2bWxzbF91MzIodWludDY0eDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEsIHVpbnQzMngyX3QgX19wMikgewotICB1aW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICB1aW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOwotICB1aW50MzJ4Ml90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDEsIDApOwotICB1aW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IF9fcmV2MCAtIF9fbm9zd2FwX3ZtdWxsX3UzMihfX3JldjEsIF9fcmV2Mik7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotX19haSB1aW50NjR4Ml90IF9fbm9zd2FwX3ZtbHNsX3UzMih1aW50NjR4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSwgdWludDMyeDJfdCBfX3AyKSB7Ci0gIHVpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19wMCAtIF9fbm9zd2FwX3ZtdWxsX3UzMihfX3AxLCBfX3AyKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MzJ4NF90IHZtbHNsX3UxNih1aW50MzJ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSwgdWludDE2eDRfdCBfX3AyKSB7Ci0gIHVpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19wMCAtIHZtdWxsX3UxNihfX3AxLCBfX3AyKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDMyeDRfdCB2bWxzbF91MTYodWludDMyeDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEsIHVpbnQxNng0X3QgX19wMikgewotICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICB1aW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOwotICB1aW50MTZ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDMsIDIsIDEsIDApOwotICB1aW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IF9fcmV2MCAtIF9fbm9zd2FwX3ZtdWxsX3UxNihfX3JldjEsIF9fcmV2Mik7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotX19haSB1aW50MzJ4NF90IF9fbm9zd2FwX3ZtbHNsX3UxNih1aW50MzJ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSwgdWludDE2eDRfdCBfX3AyKSB7Ci0gIHVpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19wMCAtIF9fbm9zd2FwX3ZtdWxsX3UxNihfX3AxLCBfX3AyKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQxNng4X3Qgdm1sc2xfczgoaW50MTZ4OF90IF9fcDAsIGludDh4OF90IF9fcDEsIGludDh4OF90IF9fcDIpIHsKLSAgaW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IF9fcDAgLSB2bXVsbF9zOChfX3AxLCBfX3AyKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MTZ4OF90IHZtbHNsX3M4KGludDE2eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxLCBpbnQ4eDhfdCBfX3AyKSB7Ci0gIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDh4OF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19yZXYwIC0gX19ub3N3YXBfdm11bGxfczgoX19yZXYxLCBfX3JldjIpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLV9fYWkgaW50MTZ4OF90IF9fbm9zd2FwX3ZtbHNsX3M4KGludDE2eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxLCBpbnQ4eDhfdCBfX3AyKSB7Ci0gIGludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSBfX3AwIC0gX19ub3N3YXBfdm11bGxfczgoX19wMSwgX19wMik7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50NjR4Ml90IHZtbHNsX3MzMihpbnQ2NHgyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEsIGludDMyeDJfdCBfX3AyKSB7Ci0gIGludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSBfX3AwIC0gdm11bGxfczMyKF9fcDEsIF9fcDIpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQ2NHgyX3Qgdm1sc2xfczMyKGludDY0eDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSwgaW50MzJ4Ml90IF9fcDIpIHsKLSAgaW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7Ci0gIGludDMyeDJfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAxLCAwKTsKLSAgaW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IF9fcmV2MCAtIF9fbm9zd2FwX3ZtdWxsX3MzMihfX3JldjEsIF9fcmV2Mik7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotX19haSBpbnQ2NHgyX3QgX19ub3N3YXBfdm1sc2xfczMyKGludDY0eDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSwgaW50MzJ4Ml90IF9fcDIpIHsKLSAgaW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IF9fcDAgLSBfX25vc3dhcF92bXVsbF9zMzIoX19wMSwgX19wMik7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MzJ4NF90IHZtbHNsX3MxNihpbnQzMng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEsIGludDE2eDRfdCBfX3AyKSB7Ci0gIGludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSBfX3AwIC0gdm11bGxfczE2KF9fcDEsIF9fcDIpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQzMng0X3Qgdm1sc2xfczE2KGludDMyeDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSwgaW50MTZ4NF90IF9fcDIpIHsKLSAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICBpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7Ci0gIGludDE2eDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAzLCAyLCAxLCAwKTsKLSAgaW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IF9fcmV2MCAtIF9fbm9zd2FwX3ZtdWxsX3MxNihfX3JldjEsIF9fcmV2Mik7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotX19haSBpbnQzMng0X3QgX19ub3N3YXBfdm1sc2xfczE2KGludDMyeDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSwgaW50MTZ4NF90IF9fcDIpIHsKLSAgaW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IF9fcDAgLSBfX25vc3dhcF92bXVsbF9zMTYoX19wMSwgX19wMik7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdm1sc2xfbGFuZV91MzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCi0gIHVpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKLSAgdWludDMyeDJfdCBfX3MxID0gX19wMTsgXAotICB1aW50MzJ4Ml90IF9fczIgPSBfX3AyOyBcCi0gIHVpbnQ2NHgyX3QgX19yZXQ7IFwKLSAgX19yZXQgPSBfX3MwIC0gdm11bGxfdTMyKF9fczEsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIF9fcDMsIF9fcDMpKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZtbHNsX2xhbmVfdTMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKLSAgdWludDMyeDJfdCBfX3MyID0gX19wMjsgXAotICB1aW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCi0gIHVpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMSwgMCk7IFwKLSAgdWludDMyeDJfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCAxLCAwKTsgXAotICB1aW50NjR4Ml90IF9fcmV0OyBcCi0gIF9fcmV0ID0gX19yZXYwIC0gX19ub3N3YXBfdm11bGxfdTMyKF9fcmV2MSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMpKTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZtbHNsX2xhbmVfdTE2KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAotICB1aW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCi0gIHVpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKLSAgdWludDE2eDRfdCBfX3MyID0gX19wMjsgXAotICB1aW50MzJ4NF90IF9fcmV0OyBcCi0gIF9fcmV0ID0gX19zMCAtIHZtdWxsX3UxNihfX3MxLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bWxzbF9sYW5lX3UxNihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgdWludDMyeDRfdCBfX3MwID0gX19wMDsgXAotICB1aW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCi0gIHVpbnQxNng0X3QgX19zMiA9IF9fcDI7IFwKLSAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAotICB1aW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCi0gIHVpbnQxNng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgMywgMiwgMSwgMCk7IFwKLSAgdWludDMyeDRfdCBfX3JldDsgXAotICBfX3JldCA9IF9fcmV2MCAtIF9fbm9zd2FwX3ZtdWxsX3UxNihfX3JldjEsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MiwgX19yZXYyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKSk7IFwKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2bWxzbF9sYW5lX3MzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCi0gIGludDMyeDJfdCBfX3MxID0gX19wMTsgXAotICBpbnQzMngyX3QgX19zMiA9IF9fcDI7IFwKLSAgaW50NjR4Ml90IF9fcmV0OyBcCi0gIF9fcmV0ID0gX19zMCAtIHZtdWxsX3MzMihfX3MxLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCBfX3AzLCBfX3AzKSk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2bWxzbF9sYW5lX3MzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCi0gIGludDMyeDJfdCBfX3MxID0gX19wMTsgXAotICBpbnQzMngyX3QgX19zMiA9IF9fcDI7IFwKLSAgaW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCi0gIGludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxLCAwKTsgXAotICBpbnQzMngyX3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgMSwgMCk7IFwKLSAgaW50NjR4Ml90IF9fcmV0OyBcCi0gIF9fcmV0ID0gX19yZXYwIC0gX19ub3N3YXBfdm11bGxfczMyKF9fcmV2MSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMpKTsgXAotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKLSAgX19yZXQ7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZtbHNsX2xhbmVfczE2KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCi0gIGludDE2eDRfdCBfX3MyID0gX19wMjsgXAotICBpbnQzMng0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSBfX3MwIC0gdm11bGxfczE2KF9fczEsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpKTsgXAotICBfX3JldDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZtbHNsX2xhbmVfczE2KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKLSAgaW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCi0gIGludDE2eDRfdCBfX3MyID0gX19wMjsgXAotICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKLSAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCi0gIGludDE2eDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCAzLCAyLCAxLCAwKTsgXAotICBpbnQzMng0X3QgX19yZXQ7IFwKLSAgX19yZXQgPSBfX3JldjAgLSBfX25vc3dhcF92bXVsbF9zMTYoX19yZXYxLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMywgX19wMywgX19wMykpOyBcCi0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDY0eDJfdCB2bWxzbF9uX3UzMih1aW50NjR4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSwgdWludDMyX3QgX19wMikgewotICB1aW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IF9fcDAgLSB2bXVsbF91MzIoX19wMSwgKHVpbnQzMngyX3QpIHtfX3AyLCBfX3AyfSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQ2NHgyX3Qgdm1sc2xfbl91MzIodWludDY0eDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEsIHVpbnQzMl90IF9fcDIpIHsKLSAgdWludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgdWludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKLSAgdWludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSBfX3JldjAgLSBfX25vc3dhcF92bXVsbF91MzIoX19yZXYxLCAodWludDMyeDJfdCkge19fcDIsIF9fcDJ9KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci1fX2FpIHVpbnQ2NHgyX3QgX19ub3N3YXBfdm1sc2xfbl91MzIodWludDY0eDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEsIHVpbnQzMl90IF9fcDIpIHsKLSAgdWludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSBfX3AwIC0gX19ub3N3YXBfdm11bGxfdTMyKF9fcDEsICh1aW50MzJ4Ml90KSB7X19wMiwgX19wMn0pOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQzMng0X3Qgdm1sc2xfbl91MTYodWludDMyeDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEsIHVpbnQxNl90IF9fcDIpIHsKLSAgdWludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSBfX3AwIC0gdm11bGxfdTE2KF9fcDEsICh1aW50MTZ4NF90KSB7X19wMiwgX19wMiwgX19wMiwgX19wMn0pOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MzJ4NF90IHZtbHNsX25fdTE2KHVpbnQzMng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxLCB1aW50MTZfdCBfX3AyKSB7Ci0gIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7Ci0gIHVpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19yZXYwIC0gX19ub3N3YXBfdm11bGxfdTE2KF9fcmV2MSwgKHVpbnQxNng0X3QpIHtfX3AyLCBfX3AyLCBfX3AyLCBfX3AyfSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotX19haSB1aW50MzJ4NF90IF9fbm9zd2FwX3ZtbHNsX25fdTE2KHVpbnQzMng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxLCB1aW50MTZfdCBfX3AyKSB7Ci0gIHVpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19wMCAtIF9fbm9zd2FwX3ZtdWxsX3UxNihfX3AxLCAodWludDE2eDRfdCkge19fcDIsIF9fcDIsIF9fcDIsIF9fcDJ9KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ2NHgyX3Qgdm1sc2xfbl9zMzIoaW50NjR4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxLCBpbnQzMl90IF9fcDIpIHsKLSAgaW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IF9fcDAgLSB2bXVsbF9zMzIoX19wMSwgKGludDMyeDJfdCkge19fcDIsIF9fcDJ9KTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50NjR4Ml90IHZtbHNsX25fczMyKGludDY0eDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSwgaW50MzJfdCBfX3AyKSB7Ci0gIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOwotICBpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19yZXYwIC0gX19ub3N3YXBfdm11bGxfczMyKF9fcmV2MSwgKGludDMyeDJfdCkge19fcDIsIF9fcDJ9KTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci1fX2FpIGludDY0eDJfdCBfX25vc3dhcF92bWxzbF9uX3MzMihpbnQ2NHgyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEsIGludDMyX3QgX19wMikgewotICBpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19wMCAtIF9fbm9zd2FwX3ZtdWxsX3MzMihfX3AxLCAoaW50MzJ4Ml90KSB7X19wMiwgX19wMn0pOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDMyeDRfdCB2bWxzbF9uX3MxNihpbnQzMng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEsIGludDE2X3QgX19wMikgewotICBpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19wMCAtIHZtdWxsX3MxNihfX3AxLCAoaW50MTZ4NF90KSB7X19wMiwgX19wMiwgX19wMiwgX19wMn0pOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQzMng0X3Qgdm1sc2xfbl9zMTYoaW50MzJ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxLCBpbnQxNl90IF9fcDIpIHsKLSAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICBpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7Ci0gIGludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSBfX3JldjAgLSBfX25vc3dhcF92bXVsbF9zMTYoX19yZXYxLCAoaW50MTZ4NF90KSB7X19wMiwgX19wMiwgX19wMiwgX19wMn0pOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLV9fYWkgaW50MzJ4NF90IF9fbm9zd2FwX3ZtbHNsX25fczE2KGludDMyeDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSwgaW50MTZfdCBfX3AyKSB7Ci0gIGludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSBfX3AwIC0gX19ub3N3YXBfdm11bGxfczE2KF9fcDEsIChpbnQxNng0X3QpIHtfX3AyLCBfX3AyLCBfX3AyLCBfX3AyfSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnNldF9sYW5lX2YxNihfX3AwXzI0NiwgX19wMV8yNDYsIF9fcDJfMjQ2KSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQxNl90IF9fczBfMjQ2ID0gX19wMF8yNDY7IFwKLSAgZmxvYXQxNng0X3QgX19zMV8yNDYgPSBfX3AxXzI0NjsgXAotICBmbG9hdDE2eDRfdCBfX3JldF8yNDY7IFwKLWZsb2F0MTZfdCBfX3JlaW50XzI0NiA9IF9fczBfMjQ2OyBcCi1mbG9hdDE2eDRfdCBfX3JlaW50MV8yNDYgPSBfX3MxXzI0NjsgXAotaW50MTZ4NF90IF9fcmVpbnQyXzI0NiA9IHZzZXRfbGFuZV9zMTYoKihpbnQxNl90ICopICZfX3JlaW50XzI0NiwgKihpbnQxNng0X3QgKikgJl9fcmVpbnQxXzI0NiwgX19wMl8yNDYpOyBcCi0gIF9fcmV0XzI0NiA9ICooZmxvYXQxNng0X3QgKikgJl9fcmVpbnQyXzI0NjsgXAotICBfX3JldF8yNDY7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c2V0X2xhbmVfZjE2KF9fcDBfMjQ3LCBfX3AxXzI0NywgX19wMl8yNDcpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDE2X3QgX19zMF8yNDcgPSBfX3AwXzI0NzsgXAotICBmbG9hdDE2eDRfdCBfX3MxXzI0NyA9IF9fcDFfMjQ3OyBcCi0gIGZsb2F0MTZ4NF90IF9fcmV2MV8yNDc7ICBfX3JldjFfMjQ3ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMV8yNDcsIF9fczFfMjQ3LCAzLCAyLCAxLCAwKTsgXAotICBmbG9hdDE2eDRfdCBfX3JldF8yNDc7IFwKLWZsb2F0MTZfdCBfX3JlaW50XzI0NyA9IF9fczBfMjQ3OyBcCi1mbG9hdDE2eDRfdCBfX3JlaW50MV8yNDcgPSBfX3JldjFfMjQ3OyBcCi1pbnQxNng0X3QgX19yZWludDJfMjQ3ID0gX19ub3N3YXBfdnNldF9sYW5lX3MxNigqKGludDE2X3QgKikgJl9fcmVpbnRfMjQ3LCAqKGludDE2eDRfdCAqKSAmX19yZWludDFfMjQ3LCBfX3AyXzI0Nyk7IFwKLSAgX19yZXRfMjQ3ID0gKihmbG9hdDE2eDRfdCAqKSAmX19yZWludDJfMjQ3OyBcCi0gIF9fcmV0XzI0NyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0XzI0NywgX19yZXRfMjQ3LCAzLCAyLCAxLCAwKTsgXAotICBfX3JldF8yNDc7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZzZXRxX2xhbmVfZjE2KF9fcDBfMjQ4LCBfX3AxXzI0OCwgX19wMl8yNDgpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDE2X3QgX19zMF8yNDggPSBfX3AwXzI0ODsgXAotICBmbG9hdDE2eDhfdCBfX3MxXzI0OCA9IF9fcDFfMjQ4OyBcCi0gIGZsb2F0MTZ4OF90IF9fcmV0XzI0ODsgXAotZmxvYXQxNl90IF9fcmVpbnRfMjQ4ID0gX19zMF8yNDg7IFwKLWZsb2F0MTZ4OF90IF9fcmVpbnQxXzI0OCA9IF9fczFfMjQ4OyBcCi1pbnQxNng4X3QgX19yZWludDJfMjQ4ID0gdnNldHFfbGFuZV9zMTYoKihpbnQxNl90ICopICZfX3JlaW50XzI0OCwgKihpbnQxNng4X3QgKikgJl9fcmVpbnQxXzI0OCwgX19wMl8yNDgpOyBcCi0gIF9fcmV0XzI0OCA9ICooZmxvYXQxNng4X3QgKikgJl9fcmVpbnQyXzI0ODsgXAotICBfX3JldF8yNDg7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2c2V0cV9sYW5lX2YxNihfX3AwXzI0OSwgX19wMV8yNDksIF9fcDJfMjQ5KSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQxNl90IF9fczBfMjQ5ID0gX19wMF8yNDk7IFwKLSAgZmxvYXQxNng4X3QgX19zMV8yNDkgPSBfX3AxXzI0OTsgXAotICBmbG9hdDE2eDhfdCBfX3JldjFfMjQ5OyAgX19yZXYxXzI0OSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczFfMjQ5LCBfX3MxXzI0OSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKLSAgZmxvYXQxNng4X3QgX19yZXRfMjQ5OyBcCi1mbG9hdDE2X3QgX19yZWludF8yNDkgPSBfX3MwXzI0OTsgXAotZmxvYXQxNng4X3QgX19yZWludDFfMjQ5ID0gX19yZXYxXzI0OTsgXAotaW50MTZ4OF90IF9fcmVpbnQyXzI0OSA9IF9fbm9zd2FwX3ZzZXRxX2xhbmVfczE2KCooaW50MTZfdCAqKSAmX19yZWludF8yNDksICooaW50MTZ4OF90ICopICZfX3JlaW50MV8yNDksIF9fcDJfMjQ5KTsgXAotICBfX3JldF8yNDkgPSAqKGZsb2F0MTZ4OF90ICopICZfX3JlaW50Ml8yNDk7IFwKLSAgX19yZXRfMjQ5ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXRfMjQ5LCBfX3JldF8yNDksIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCi0gIF9fcmV0XzI0OTsgXAotfSkKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChfX0FSTV9GRUFUVVJFX1FSRE1YKSAmJiBkZWZpbmVkKF9fYWFyY2g2NF9fKQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDMyX3QgdnFyZG1sYWhzX3MzMihpbnQzMl90IF9fcDAsIGludDMyX3QgX19wMSwgaW50MzJfdCBfX3AyKSB7Ci0gIGludDMyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gdnFhZGRzX3MzMihfX3AwLCB2cXJkbXVsaHNfczMyKF9fcDEsIF9fcDIpKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MzJfdCB2cXJkbWxhaHNfczMyKGludDMyX3QgX19wMCwgaW50MzJfdCBfX3AxLCBpbnQzMl90IF9fcDIpIHsKLSAgaW50MzJfdCBfX3JldDsKLSAgX19yZXQgPSBfX25vc3dhcF92cWFkZHNfczMyKF9fcDAsIF9fbm9zd2FwX3ZxcmRtdWxoc19zMzIoX19wMSwgX19wMikpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDE2X3QgdnFyZG1sYWhoX3MxNihpbnQxNl90IF9fcDAsIGludDE2X3QgX19wMSwgaW50MTZfdCBfX3AyKSB7Ci0gIGludDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gdnFhZGRoX3MxNihfX3AwLCB2cXJkbXVsaGhfczE2KF9fcDEsIF9fcDIpKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MTZfdCB2cXJkbWxhaGhfczE2KGludDE2X3QgX19wMCwgaW50MTZfdCBfX3AxLCBpbnQxNl90IF9fcDIpIHsKLSAgaW50MTZfdCBfX3JldDsKLSAgX19yZXQgPSBfX25vc3dhcF92cWFkZGhfczE2KF9fcDAsIF9fbm9zd2FwX3ZxcmRtdWxoaF9zMTYoX19wMSwgX19wMikpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZxcmRtbGFoc19sYW5lX3MzMihfX3AwXzI1MCwgX19wMV8yNTAsIF9fcDJfMjUwLCBfX3AzXzI1MCkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDMyX3QgX19zMF8yNTAgPSBfX3AwXzI1MDsgXAotICBpbnQzMl90IF9fczFfMjUwID0gX19wMV8yNTA7IFwKLSAgaW50MzJ4Ml90IF9fczJfMjUwID0gX19wMl8yNTA7IFwKLSAgaW50MzJfdCBfX3JldF8yNTA7IFwKLSAgX19yZXRfMjUwID0gdnFhZGRzX3MzMihfX3MwXzI1MCwgdnFyZG11bGhzX3MzMihfX3MxXzI1MCwgdmdldF9sYW5lX3MzMihfX3MyXzI1MCwgX19wM18yNTApKSk7IFwKLSAgX19yZXRfMjUwOyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnFyZG1sYWhzX2xhbmVfczMyKF9fcDBfMjUxLCBfX3AxXzI1MSwgX19wMl8yNTEsIF9fcDNfMjUxKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MzJfdCBfX3MwXzI1MSA9IF9fcDBfMjUxOyBcCi0gIGludDMyX3QgX19zMV8yNTEgPSBfX3AxXzI1MTsgXAotICBpbnQzMngyX3QgX19zMl8yNTEgPSBfX3AyXzI1MTsgXAotICBpbnQzMngyX3QgX19yZXYyXzI1MTsgIF9fcmV2Ml8yNTEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyXzI1MSwgX19zMl8yNTEsIDEsIDApOyBcCi0gIGludDMyX3QgX19yZXRfMjUxOyBcCi0gIF9fcmV0XzI1MSA9IF9fbm9zd2FwX3ZxYWRkc19zMzIoX19zMF8yNTEsIF9fbm9zd2FwX3ZxcmRtdWxoc19zMzIoX19zMV8yNTEsIF9fbm9zd2FwX3ZnZXRfbGFuZV9zMzIoX19yZXYyXzI1MSwgX19wM18yNTEpKSk7IFwKLSAgX19yZXRfMjUxOyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2cXJkbWxhaGhfbGFuZV9zMTYoX19wMF8yNTIsIF9fcDFfMjUyLCBfX3AyXzI1MiwgX19wM18yNTIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQxNl90IF9fczBfMjUyID0gX19wMF8yNTI7IFwKLSAgaW50MTZfdCBfX3MxXzI1MiA9IF9fcDFfMjUyOyBcCi0gIGludDE2eDRfdCBfX3MyXzI1MiA9IF9fcDJfMjUyOyBcCi0gIGludDE2X3QgX19yZXRfMjUyOyBcCi0gIF9fcmV0XzI1MiA9IHZxYWRkaF9zMTYoX19zMF8yNTIsIHZxcmRtdWxoaF9zMTYoX19zMV8yNTIsIHZnZXRfbGFuZV9zMTYoX19zMl8yNTIsIF9fcDNfMjUyKSkpOyBcCi0gIF9fcmV0XzI1MjsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZxcmRtbGFoaF9sYW5lX3MxNihfX3AwXzI1MywgX19wMV8yNTMsIF9fcDJfMjUzLCBfX3AzXzI1MykgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDE2X3QgX19zMF8yNTMgPSBfX3AwXzI1MzsgXAotICBpbnQxNl90IF9fczFfMjUzID0gX19wMV8yNTM7IFwKLSAgaW50MTZ4NF90IF9fczJfMjUzID0gX19wMl8yNTM7IFwKLSAgaW50MTZ4NF90IF9fcmV2Ml8yNTM7ICBfX3JldjJfMjUzID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMl8yNTMsIF9fczJfMjUzLCAzLCAyLCAxLCAwKTsgXAotICBpbnQxNl90IF9fcmV0XzI1MzsgXAotICBfX3JldF8yNTMgPSBfX25vc3dhcF92cWFkZGhfczE2KF9fczBfMjUzLCBfX25vc3dhcF92cXJkbXVsaGhfczE2KF9fczFfMjUzLCBfX25vc3dhcF92Z2V0X2xhbmVfczE2KF9fcmV2Ml8yNTMsIF9fcDNfMjUzKSkpOyBcCi0gIF9fcmV0XzI1MzsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnFyZG1sYWhzX2xhbmVxX3MzMihfX3AwXzI1NCwgX19wMV8yNTQsIF9fcDJfMjU0LCBfX3AzXzI1NCkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDMyX3QgX19zMF8yNTQgPSBfX3AwXzI1NDsgXAotICBpbnQzMl90IF9fczFfMjU0ID0gX19wMV8yNTQ7IFwKLSAgaW50MzJ4NF90IF9fczJfMjU0ID0gX19wMl8yNTQ7IFwKLSAgaW50MzJfdCBfX3JldF8yNTQ7IFwKLSAgX19yZXRfMjU0ID0gdnFhZGRzX3MzMihfX3MwXzI1NCwgdnFyZG11bGhzX3MzMihfX3MxXzI1NCwgdmdldHFfbGFuZV9zMzIoX19zMl8yNTQsIF9fcDNfMjU0KSkpOyBcCi0gIF9fcmV0XzI1NDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZxcmRtbGFoc19sYW5lcV9zMzIoX19wMF8yNTUsIF9fcDFfMjU1LCBfX3AyXzI1NSwgX19wM18yNTUpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQzMl90IF9fczBfMjU1ID0gX19wMF8yNTU7IFwKLSAgaW50MzJfdCBfX3MxXzI1NSA9IF9fcDFfMjU1OyBcCi0gIGludDMyeDRfdCBfX3MyXzI1NSA9IF9fcDJfMjU1OyBcCi0gIGludDMyeDRfdCBfX3JldjJfMjU1OyAgX19yZXYyXzI1NSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczJfMjU1LCBfX3MyXzI1NSwgMywgMiwgMSwgMCk7IFwKLSAgaW50MzJfdCBfX3JldF8yNTU7IFwKLSAgX19yZXRfMjU1ID0gX19ub3N3YXBfdnFhZGRzX3MzMihfX3MwXzI1NSwgX19ub3N3YXBfdnFyZG11bGhzX3MzMihfX3MxXzI1NSwgX19ub3N3YXBfdmdldHFfbGFuZV9zMzIoX19yZXYyXzI1NSwgX19wM18yNTUpKSk7IFwKLSAgX19yZXRfMjU1OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2cXJkbWxhaGhfbGFuZXFfczE2KF9fcDBfMjU2LCBfX3AxXzI1NiwgX19wMl8yNTYsIF9fcDNfMjU2KSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MTZfdCBfX3MwXzI1NiA9IF9fcDBfMjU2OyBcCi0gIGludDE2X3QgX19zMV8yNTYgPSBfX3AxXzI1NjsgXAotICBpbnQxNng4X3QgX19zMl8yNTYgPSBfX3AyXzI1NjsgXAotICBpbnQxNl90IF9fcmV0XzI1NjsgXAotICBfX3JldF8yNTYgPSB2cWFkZGhfczE2KF9fczBfMjU2LCB2cXJkbXVsaGhfczE2KF9fczFfMjU2LCB2Z2V0cV9sYW5lX3MxNihfX3MyXzI1NiwgX19wM18yNTYpKSk7IFwKLSAgX19yZXRfMjU2OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnFyZG1sYWhoX2xhbmVxX3MxNihfX3AwXzI1NywgX19wMV8yNTcsIF9fcDJfMjU3LCBfX3AzXzI1NykgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDE2X3QgX19zMF8yNTcgPSBfX3AwXzI1NzsgXAotICBpbnQxNl90IF9fczFfMjU3ID0gX19wMV8yNTc7IFwKLSAgaW50MTZ4OF90IF9fczJfMjU3ID0gX19wMl8yNTc7IFwKLSAgaW50MTZ4OF90IF9fcmV2Ml8yNTc7ICBfX3JldjJfMjU3ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMl8yNTcsIF9fczJfMjU3LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBpbnQxNl90IF9fcmV0XzI1NzsgXAotICBfX3JldF8yNTcgPSBfX25vc3dhcF92cWFkZGhfczE2KF9fczBfMjU3LCBfX25vc3dhcF92cXJkbXVsaGhfczE2KF9fczFfMjU3LCBfX25vc3dhcF92Z2V0cV9sYW5lX3MxNihfX3JldjJfMjU3LCBfX3AzXzI1NykpKTsgXAotICBfX3JldF8yNTc7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDMyX3QgdnFyZG1sc2hzX3MzMihpbnQzMl90IF9fcDAsIGludDMyX3QgX19wMSwgaW50MzJfdCBfX3AyKSB7Ci0gIGludDMyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gdnFzdWJzX3MzMihfX3AwLCB2cXJkbXVsaHNfczMyKF9fcDEsIF9fcDIpKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MzJfdCB2cXJkbWxzaHNfczMyKGludDMyX3QgX19wMCwgaW50MzJfdCBfX3AxLCBpbnQzMl90IF9fcDIpIHsKLSAgaW50MzJfdCBfX3JldDsKLSAgX19yZXQgPSBfX25vc3dhcF92cXN1YnNfczMyKF9fcDAsIF9fbm9zd2FwX3ZxcmRtdWxoc19zMzIoX19wMSwgX19wMikpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDE2X3QgdnFyZG1sc2hoX3MxNihpbnQxNl90IF9fcDAsIGludDE2X3QgX19wMSwgaW50MTZfdCBfX3AyKSB7Ci0gIGludDE2X3QgX19yZXQ7Ci0gIF9fcmV0ID0gdnFzdWJoX3MxNihfX3AwLCB2cXJkbXVsaGhfczE2KF9fcDEsIF9fcDIpKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MTZfdCB2cXJkbWxzaGhfczE2KGludDE2X3QgX19wMCwgaW50MTZfdCBfX3AxLCBpbnQxNl90IF9fcDIpIHsKLSAgaW50MTZfdCBfX3JldDsKLSAgX19yZXQgPSBfX25vc3dhcF92cXN1YmhfczE2KF9fcDAsIF9fbm9zd2FwX3ZxcmRtdWxoaF9zMTYoX19wMSwgX19wMikpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZxcmRtbHNoc19sYW5lX3MzMihfX3AwXzI1OCwgX19wMV8yNTgsIF9fcDJfMjU4LCBfX3AzXzI1OCkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDMyX3QgX19zMF8yNTggPSBfX3AwXzI1ODsgXAotICBpbnQzMl90IF9fczFfMjU4ID0gX19wMV8yNTg7IFwKLSAgaW50MzJ4Ml90IF9fczJfMjU4ID0gX19wMl8yNTg7IFwKLSAgaW50MzJfdCBfX3JldF8yNTg7IFwKLSAgX19yZXRfMjU4ID0gdnFzdWJzX3MzMihfX3MwXzI1OCwgdnFyZG11bGhzX3MzMihfX3MxXzI1OCwgdmdldF9sYW5lX3MzMihfX3MyXzI1OCwgX19wM18yNTgpKSk7IFwKLSAgX19yZXRfMjU4OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnFyZG1sc2hzX2xhbmVfczMyKF9fcDBfMjU5LCBfX3AxXzI1OSwgX19wMl8yNTksIF9fcDNfMjU5KSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MzJfdCBfX3MwXzI1OSA9IF9fcDBfMjU5OyBcCi0gIGludDMyX3QgX19zMV8yNTkgPSBfX3AxXzI1OTsgXAotICBpbnQzMngyX3QgX19zMl8yNTkgPSBfX3AyXzI1OTsgXAotICBpbnQzMngyX3QgX19yZXYyXzI1OTsgIF9fcmV2Ml8yNTkgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyXzI1OSwgX19zMl8yNTksIDEsIDApOyBcCi0gIGludDMyX3QgX19yZXRfMjU5OyBcCi0gIF9fcmV0XzI1OSA9IF9fbm9zd2FwX3Zxc3Vic19zMzIoX19zMF8yNTksIF9fbm9zd2FwX3ZxcmRtdWxoc19zMzIoX19zMV8yNTksIF9fbm9zd2FwX3ZnZXRfbGFuZV9zMzIoX19yZXYyXzI1OSwgX19wM18yNTkpKSk7IFwKLSAgX19yZXRfMjU5OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2cXJkbWxzaGhfbGFuZV9zMTYoX19wMF8yNjAsIF9fcDFfMjYwLCBfX3AyXzI2MCwgX19wM18yNjApIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQxNl90IF9fczBfMjYwID0gX19wMF8yNjA7IFwKLSAgaW50MTZfdCBfX3MxXzI2MCA9IF9fcDFfMjYwOyBcCi0gIGludDE2eDRfdCBfX3MyXzI2MCA9IF9fcDJfMjYwOyBcCi0gIGludDE2X3QgX19yZXRfMjYwOyBcCi0gIF9fcmV0XzI2MCA9IHZxc3ViaF9zMTYoX19zMF8yNjAsIHZxcmRtdWxoaF9zMTYoX19zMV8yNjAsIHZnZXRfbGFuZV9zMTYoX19zMl8yNjAsIF9fcDNfMjYwKSkpOyBcCi0gIF9fcmV0XzI2MDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZxcmRtbHNoaF9sYW5lX3MxNihfX3AwXzI2MSwgX19wMV8yNjEsIF9fcDJfMjYxLCBfX3AzXzI2MSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDE2X3QgX19zMF8yNjEgPSBfX3AwXzI2MTsgXAotICBpbnQxNl90IF9fczFfMjYxID0gX19wMV8yNjE7IFwKLSAgaW50MTZ4NF90IF9fczJfMjYxID0gX19wMl8yNjE7IFwKLSAgaW50MTZ4NF90IF9fcmV2Ml8yNjE7ICBfX3JldjJfMjYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMl8yNjEsIF9fczJfMjYxLCAzLCAyLCAxLCAwKTsgXAotICBpbnQxNl90IF9fcmV0XzI2MTsgXAotICBfX3JldF8yNjEgPSBfX25vc3dhcF92cXN1YmhfczE2KF9fczBfMjYxLCBfX25vc3dhcF92cXJkbXVsaGhfczE2KF9fczFfMjYxLCBfX25vc3dhcF92Z2V0X2xhbmVfczE2KF9fcmV2Ml8yNjEsIF9fcDNfMjYxKSkpOyBcCi0gIF9fcmV0XzI2MTsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdnFyZG1sc2hzX2xhbmVxX3MzMihfX3AwXzI2MiwgX19wMV8yNjIsIF9fcDJfMjYyLCBfX3AzXzI2MikgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDMyX3QgX19zMF8yNjIgPSBfX3AwXzI2MjsgXAotICBpbnQzMl90IF9fczFfMjYyID0gX19wMV8yNjI7IFwKLSAgaW50MzJ4NF90IF9fczJfMjYyID0gX19wMl8yNjI7IFwKLSAgaW50MzJfdCBfX3JldF8yNjI7IFwKLSAgX19yZXRfMjYyID0gdnFzdWJzX3MzMihfX3MwXzI2MiwgdnFyZG11bGhzX3MzMihfX3MxXzI2MiwgdmdldHFfbGFuZV9zMzIoX19zMl8yNjIsIF9fcDNfMjYyKSkpOyBcCi0gIF9fcmV0XzI2MjsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZxcmRtbHNoc19sYW5lcV9zMzIoX19wMF8yNjMsIF9fcDFfMjYzLCBfX3AyXzI2MywgX19wM18yNjMpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBpbnQzMl90IF9fczBfMjYzID0gX19wMF8yNjM7IFwKLSAgaW50MzJfdCBfX3MxXzI2MyA9IF9fcDFfMjYzOyBcCi0gIGludDMyeDRfdCBfX3MyXzI2MyA9IF9fcDJfMjYzOyBcCi0gIGludDMyeDRfdCBfX3JldjJfMjYzOyAgX19yZXYyXzI2MyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczJfMjYzLCBfX3MyXzI2MywgMywgMiwgMSwgMCk7IFwKLSAgaW50MzJfdCBfX3JldF8yNjM7IFwKLSAgX19yZXRfMjYzID0gX19ub3N3YXBfdnFzdWJzX3MzMihfX3MwXzI2MywgX19ub3N3YXBfdnFyZG11bGhzX3MzMihfX3MxXzI2MywgX19ub3N3YXBfdmdldHFfbGFuZV9zMzIoX19yZXYyXzI2MywgX19wM18yNjMpKSk7IFwKLSAgX19yZXRfMjYzOyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2cXJkbWxzaGhfbGFuZXFfczE2KF9fcDBfMjY0LCBfX3AxXzI2NCwgX19wMl8yNjQsIF9fcDNfMjY0KSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgaW50MTZfdCBfX3MwXzI2NCA9IF9fcDBfMjY0OyBcCi0gIGludDE2X3QgX19zMV8yNjQgPSBfX3AxXzI2NDsgXAotICBpbnQxNng4X3QgX19zMl8yNjQgPSBfX3AyXzI2NDsgXAotICBpbnQxNl90IF9fcmV0XzI2NDsgXAotICBfX3JldF8yNjQgPSB2cXN1YmhfczE2KF9fczBfMjY0LCB2cXJkbXVsaGhfczE2KF9fczFfMjY0LCB2Z2V0cV9sYW5lX3MxNihfX3MyXzI2NCwgX19wM18yNjQpKSk7IFwKLSAgX19yZXRfMjY0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdnFyZG1sc2hoX2xhbmVxX3MxNihfX3AwXzI2NSwgX19wMV8yNjUsIF9fcDJfMjY1LCBfX3AzXzI2NSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGludDE2X3QgX19zMF8yNjUgPSBfX3AwXzI2NTsgXAotICBpbnQxNl90IF9fczFfMjY1ID0gX19wMV8yNjU7IFwKLSAgaW50MTZ4OF90IF9fczJfMjY1ID0gX19wMl8yNjU7IFwKLSAgaW50MTZ4OF90IF9fcmV2Ml8yNjU7ICBfX3JldjJfMjY1ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMl8yNjUsIF9fczJfMjY1LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAotICBpbnQxNl90IF9fcmV0XzI2NTsgXAotICBfX3JldF8yNjUgPSBfX25vc3dhcF92cXN1YmhfczE2KF9fczBfMjY1LCBfX25vc3dhcF92cXJkbXVsaGhfczE2KF9fczFfMjY1LCBfX25vc3dhcF92Z2V0cV9sYW5lX3MxNihfX3JldjJfMjY1LCBfX3AzXzI2NSkpKTsgXAotICBfX3JldF8yNjU7IFwKLX0pCi0jZW5kaWYKLQotI2VuZGlmCi0jaWYgZGVmaW5lZChfX2FhcmNoNjRfXykKLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MTZ4OF90IHZhYmRsX2hpZ2hfdTgodWludDh4MTZfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEpIHsKLSAgdWludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSB2YWJkbF91OCh2Z2V0X2hpZ2hfdTgoX19wMCksIHZnZXRfaGlnaF91OChfX3AxKSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQxNng4X3QgdmFiZGxfaGlnaF91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgewotICB1aW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IF9fbm9zd2FwX3ZhYmRsX3U4KF9fbm9zd2FwX3ZnZXRfaGlnaF91OChfX3JldjApLCBfX25vc3dhcF92Z2V0X2hpZ2hfdTgoX19yZXYxKSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50NjR4Ml90IHZhYmRsX2hpZ2hfdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7Ci0gIHVpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gdmFiZGxfdTMyKHZnZXRfaGlnaF91MzIoX19wMCksIHZnZXRfaGlnaF91MzIoX19wMSkpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50NjR4Ml90IHZhYmRsX2hpZ2hfdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7Ci0gIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7Ci0gIHVpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19ub3N3YXBfdmFiZGxfdTMyKF9fbm9zd2FwX3ZnZXRfaGlnaF91MzIoX19yZXYwKSwgX19ub3N3YXBfdmdldF9oaWdoX3UzMihfX3JldjEpKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQzMng0X3QgdmFiZGxfaGlnaF91MTYodWludDE2eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEpIHsKLSAgdWludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSB2YWJkbF91MTYodmdldF9oaWdoX3UxNihfX3AwKSwgdmdldF9oaWdoX3UxNihfX3AxKSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQzMng0X3QgdmFiZGxfaGlnaF91MTYodWludDE2eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEpIHsKLSAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSBfX25vc3dhcF92YWJkbF91MTYoX19ub3N3YXBfdmdldF9oaWdoX3UxNihfX3JldjApLCBfX25vc3dhcF92Z2V0X2hpZ2hfdTE2KF9fcmV2MSkpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MTZ4OF90IHZhYmRsX2hpZ2hfczgoaW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7Ci0gIGludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSB2YWJkbF9zOCh2Z2V0X2hpZ2hfczgoX19wMCksIHZnZXRfaGlnaF9zOChfX3AxKSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDE2eDhfdCB2YWJkbF9oaWdoX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgewotICBpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IF9fbm9zd2FwX3ZhYmRsX3M4KF9fbm9zd2FwX3ZnZXRfaGlnaF9zOChfX3JldjApLCBfX25vc3dhcF92Z2V0X2hpZ2hfczgoX19yZXYxKSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ2NHgyX3QgdmFiZGxfaGlnaF9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7Ci0gIGludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSB2YWJkbF9zMzIodmdldF9oaWdoX3MzMihfX3AwKSwgdmdldF9oaWdoX3MzMihfX3AxKSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDY0eDJfdCB2YWJkbF9oaWdoX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKLSAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7Ci0gIGludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSBfX25vc3dhcF92YWJkbF9zMzIoX19ub3N3YXBfdmdldF9oaWdoX3MzMihfX3JldjApLCBfX25vc3dhcF92Z2V0X2hpZ2hfczMyKF9fcmV2MSkpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MzJ4NF90IHZhYmRsX2hpZ2hfczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgewotICBpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gdmFiZGxfczE2KHZnZXRfaGlnaF9zMTYoX19wMCksIHZnZXRfaGlnaF9zMTYoX19wMSkpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQzMng0X3QgdmFiZGxfaGlnaF9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7Ci0gIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19ub3N3YXBfdmFiZGxfczE2KF9fbm9zd2FwX3ZnZXRfaGlnaF9zMTYoX19yZXYwKSwgX19ub3N3YXBfdmdldF9oaWdoX3MxNihfX3JldjEpKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQxNng4X3QgdmFkZGxfaGlnaF91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgewotICB1aW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IHZtb3ZsX2hpZ2hfdTgoX19wMCkgKyB2bW92bF9oaWdoX3U4KF9fcDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MTZ4OF90IHZhZGRsX2hpZ2hfdTgodWludDh4MTZfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEpIHsKLSAgdWludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSBfX25vc3dhcF92bW92bF9oaWdoX3U4KF9fcmV2MCkgKyBfX25vc3dhcF92bW92bF9oaWdoX3U4KF9fcmV2MSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50NjR4Ml90IHZhZGRsX2hpZ2hfdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7Ci0gIHVpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gdm1vdmxfaGlnaF91MzIoX19wMCkgKyB2bW92bF9oaWdoX3UzMihfX3AxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDY0eDJfdCB2YWRkbF9oaWdoX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgewotICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICB1aW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOwotICB1aW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IF9fbm9zd2FwX3Ztb3ZsX2hpZ2hfdTMyKF9fcmV2MCkgKyBfX25vc3dhcF92bW92bF9oaWdoX3UzMihfX3JldjEpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDMyeDRfdCB2YWRkbF9oaWdoX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSkgewotICB1aW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IHZtb3ZsX2hpZ2hfdTE2KF9fcDApICsgdm1vdmxfaGlnaF91MTYoX19wMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQzMng0X3QgdmFkZGxfaGlnaF91MTYodWludDE2eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEpIHsKLSAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSBfX25vc3dhcF92bW92bF9oaWdoX3UxNihfX3JldjApICsgX19ub3N3YXBfdm1vdmxfaGlnaF91MTYoX19yZXYxKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDE2eDhfdCB2YWRkbF9oaWdoX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgewotICBpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gdm1vdmxfaGlnaF9zOChfX3AwKSArIHZtb3ZsX2hpZ2hfczgoX19wMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDE2eDhfdCB2YWRkbF9oaWdoX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgewotICBpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IF9fbm9zd2FwX3Ztb3ZsX2hpZ2hfczgoX19yZXYwKSArIF9fbm9zd2FwX3Ztb3ZsX2hpZ2hfczgoX19yZXYxKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDY0eDJfdCB2YWRkbF9oaWdoX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKLSAgaW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IHZtb3ZsX2hpZ2hfczMyKF9fcDApICsgdm1vdmxfaGlnaF9zMzIoX19wMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDY0eDJfdCB2YWRkbF9oaWdoX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKLSAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7Ci0gIGludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSBfX25vc3dhcF92bW92bF9oaWdoX3MzMihfX3JldjApICsgX19ub3N3YXBfdm1vdmxfaGlnaF9zMzIoX19yZXYxKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDMyeDRfdCB2YWRkbF9oaWdoX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKLSAgaW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IHZtb3ZsX2hpZ2hfczE2KF9fcDApICsgdm1vdmxfaGlnaF9zMTYoX19wMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDMyeDRfdCB2YWRkbF9oaWdoX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKLSAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSBfX25vc3dhcF92bW92bF9oaWdoX3MxNihfX3JldjApICsgX19ub3N3YXBfdm1vdmxfaGlnaF9zMTYoX19yZXYxKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQxNng4X3QgdmFkZHdfaGlnaF91OCh1aW50MTZ4OF90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgewotICB1aW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IF9fcDAgKyB2bW92bF9oaWdoX3U4KF9fcDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MTZ4OF90IHZhZGR3X2hpZ2hfdTgodWludDE2eDhfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEpIHsKLSAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSBfX3JldjAgKyBfX25vc3dhcF92bW92bF9oaWdoX3U4KF9fcmV2MSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50NjR4Ml90IHZhZGR3X2hpZ2hfdTMyKHVpbnQ2NHgyX3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7Ci0gIHVpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19wMCArIHZtb3ZsX2hpZ2hfdTMyKF9fcDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50NjR4Ml90IHZhZGR3X2hpZ2hfdTMyKHVpbnQ2NHgyX3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7Ci0gIHVpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIHVpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7Ci0gIHVpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19yZXYwICsgX19ub3N3YXBfdm1vdmxfaGlnaF91MzIoX19yZXYxKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQzMng0X3QgdmFkZHdfaGlnaF91MTYodWludDMyeDRfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEpIHsKLSAgdWludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSBfX3AwICsgdm1vdmxfaGlnaF91MTYoX19wMSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQzMng0X3QgdmFkZHdfaGlnaF91MTYodWludDMyeDRfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEpIHsKLSAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgdWludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSBfX3JldjAgKyBfX25vc3dhcF92bW92bF9oaWdoX3UxNihfX3JldjEpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50MTZ4OF90IHZhZGR3X2hpZ2hfczgoaW50MTZ4OF90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7Ci0gIGludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSBfX3AwICsgdm1vdmxfaGlnaF9zOChfX3AxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MTZ4OF90IHZhZGR3X2hpZ2hfczgoaW50MTZ4OF90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7Ci0gIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19yZXYwICsgX19ub3N3YXBfdm1vdmxfaGlnaF9zOChfX3JldjEpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50NjR4Ml90IHZhZGR3X2hpZ2hfczMyKGludDY0eDJfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgewotICBpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19wMCArIHZtb3ZsX2hpZ2hfczMyKF9fcDEpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQ2NHgyX3QgdmFkZHdfaGlnaF9zMzIoaW50NjR4Ml90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7Ci0gIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOwotICBpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19yZXYwICsgX19ub3N3YXBfdm1vdmxfaGlnaF9zMzIoX19yZXYxKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDMyeDRfdCB2YWRkd19oaWdoX3MxNihpbnQzMng0X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKLSAgaW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IF9fcDAgKyB2bW92bF9oaWdoX3MxNihfX3AxKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MzJ4NF90IHZhZGR3X2hpZ2hfczE2KGludDMyeDRfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgewotICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IF9fcmV2MCArIF9fbm9zd2FwX3Ztb3ZsX2hpZ2hfczE2KF9fcmV2MSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2Y29weXFfbGFuZV9wNjQoX19wMF8yNjYsIF9fcDFfMjY2LCBfX3AyXzI2NiwgX19wM18yNjYpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBwb2x5NjR4Ml90IF9fczBfMjY2ID0gX19wMF8yNjY7IFwKLSAgcG9seTY0eDFfdCBfX3MyXzI2NiA9IF9fcDJfMjY2OyBcCi0gIHBvbHk2NHgyX3QgX19yZXRfMjY2OyBcCi0gIF9fcmV0XzI2NiA9IHZzZXRxX2xhbmVfcDY0KHZnZXRfbGFuZV9wNjQoX19zMl8yNjYsIF9fcDNfMjY2KSwgX19zMF8yNjYsIF9fcDFfMjY2KTsgXAotICBfX3JldF8yNjY7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2Y29weXFfbGFuZV9wNjQoX19wMF8yNjcsIF9fcDFfMjY3LCBfX3AyXzI2NywgX19wM18yNjcpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBwb2x5NjR4Ml90IF9fczBfMjY3ID0gX19wMF8yNjc7IFwKLSAgcG9seTY0eDFfdCBfX3MyXzI2NyA9IF9fcDJfMjY3OyBcCi0gIHBvbHk2NHgyX3QgX19yZXYwXzI2NzsgIF9fcmV2MF8yNjcgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwXzI2NywgX19zMF8yNjcsIDEsIDApOyBcCi0gIHBvbHk2NHgyX3QgX19yZXRfMjY3OyBcCi0gIF9fcmV0XzI2NyA9IF9fbm9zd2FwX3ZzZXRxX2xhbmVfcDY0KF9fbm9zd2FwX3ZnZXRfbGFuZV9wNjQoX19zMl8yNjcsIF9fcDNfMjY3KSwgX19yZXYwXzI2NywgX19wMV8yNjcpOyBcCi0gIF9fcmV0XzI2NyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0XzI2NywgX19yZXRfMjY3LCAxLCAwKTsgXAotICBfX3JldF8yNjc7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZjb3B5cV9sYW5lX2Y2NChfX3AwXzI2OCwgX19wMV8yNjgsIF9fcDJfMjY4LCBfX3AzXzI2OCkgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0NjR4Ml90IF9fczBfMjY4ID0gX19wMF8yNjg7IFwKLSAgZmxvYXQ2NHgxX3QgX19zMl8yNjggPSBfX3AyXzI2ODsgXAotICBmbG9hdDY0eDJfdCBfX3JldF8yNjg7IFwKLSAgX19yZXRfMjY4ID0gdnNldHFfbGFuZV9mNjQodmdldF9sYW5lX2Y2NChfX3MyXzI2OCwgX19wM18yNjgpLCBfX3MwXzI2OCwgX19wMV8yNjgpOyBcCi0gIF9fcmV0XzI2ODsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZjb3B5cV9sYW5lX2Y2NChfX3AwXzI2OSwgX19wMV8yNjksIF9fcDJfMjY5LCBfX3AzXzI2OSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0NjR4Ml90IF9fczBfMjY5ID0gX19wMF8yNjk7IFwKLSAgZmxvYXQ2NHgxX3QgX19zMl8yNjkgPSBfX3AyXzI2OTsgXAotICBmbG9hdDY0eDJfdCBfX3JldjBfMjY5OyAgX19yZXYwXzI2OSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczBfMjY5LCBfX3MwXzI2OSwgMSwgMCk7IFwKLSAgZmxvYXQ2NHgyX3QgX19yZXRfMjY5OyBcCi0gIF9fcmV0XzI2OSA9IF9fbm9zd2FwX3ZzZXRxX2xhbmVfZjY0KF9fbm9zd2FwX3ZnZXRfbGFuZV9mNjQoX19zMl8yNjksIF9fcDNfMjY5KSwgX19yZXYwXzI2OSwgX19wMV8yNjkpOyBcCi0gIF9fcmV0XzI2OSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0XzI2OSwgX19yZXRfMjY5LCAxLCAwKTsgXAotICBfX3JldF8yNjk7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZjb3B5X2xhbmVfcDY0KF9fcDBfMjcwLCBfX3AxXzI3MCwgX19wMl8yNzAsIF9fcDNfMjcwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTY0eDFfdCBfX3MwXzI3MCA9IF9fcDBfMjcwOyBcCi0gIHBvbHk2NHgxX3QgX19zMl8yNzAgPSBfX3AyXzI3MDsgXAotICBwb2x5NjR4MV90IF9fcmV0XzI3MDsgXAotICBfX3JldF8yNzAgPSB2c2V0X2xhbmVfcDY0KHZnZXRfbGFuZV9wNjQoX19zMl8yNzAsIF9fcDNfMjcwKSwgX19zMF8yNzAsIF9fcDFfMjcwKTsgXAotICBfX3JldF8yNzA7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2Y29weV9sYW5lX3A2NChfX3AwXzI3MSwgX19wMV8yNzEsIF9fcDJfMjcxLCBfX3AzXzI3MSkgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHk2NHgxX3QgX19zMF8yNzEgPSBfX3AwXzI3MTsgXAotICBwb2x5NjR4MV90IF9fczJfMjcxID0gX19wMl8yNzE7IFwKLSAgcG9seTY0eDFfdCBfX3JldF8yNzE7IFwKLSAgX19yZXRfMjcxID0gX19ub3N3YXBfdnNldF9sYW5lX3A2NChfX25vc3dhcF92Z2V0X2xhbmVfcDY0KF9fczJfMjcxLCBfX3AzXzI3MSksIF9fczBfMjcxLCBfX3AxXzI3MSk7IFwKLSAgX19yZXRfMjcxOyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2Y29weV9sYW5lX2Y2NChfX3AwXzI3MiwgX19wMV8yNzIsIF9fcDJfMjcyLCBfX3AzXzI3MikgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0NjR4MV90IF9fczBfMjcyID0gX19wMF8yNzI7IFwKLSAgZmxvYXQ2NHgxX3QgX19zMl8yNzIgPSBfX3AyXzI3MjsgXAotICBmbG9hdDY0eDFfdCBfX3JldF8yNzI7IFwKLSAgX19yZXRfMjcyID0gdnNldF9sYW5lX2Y2NCh2Z2V0X2xhbmVfZjY0KF9fczJfMjcyLCBfX3AzXzI3MiksIF9fczBfMjcyLCBfX3AxXzI3Mik7IFwKLSAgX19yZXRfMjcyOyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmNvcHlfbGFuZV9mNjQoX19wMF8yNzMsIF9fcDFfMjczLCBfX3AyXzI3MywgX19wM18yNzMpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDY0eDFfdCBfX3MwXzI3MyA9IF9fcDBfMjczOyBcCi0gIGZsb2F0NjR4MV90IF9fczJfMjczID0gX19wMl8yNzM7IFwKLSAgZmxvYXQ2NHgxX3QgX19yZXRfMjczOyBcCi0gIF9fcmV0XzI3MyA9IF9fbm9zd2FwX3ZzZXRfbGFuZV9mNjQoX19ub3N3YXBfdmdldF9sYW5lX2Y2NChfX3MyXzI3MywgX19wM18yNzMpLCBfX3MwXzI3MywgX19wMV8yNzMpOyBcCi0gIF9fcmV0XzI3MzsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmNvcHlxX2xhbmVxX3A2NChfX3AwXzI3NCwgX19wMV8yNzQsIF9fcDJfMjc0LCBfX3AzXzI3NCkgX19leHRlbnNpb25fXyAoeyBcCi0gIHBvbHk2NHgyX3QgX19zMF8yNzQgPSBfX3AwXzI3NDsgXAotICBwb2x5NjR4Ml90IF9fczJfMjc0ID0gX19wMl8yNzQ7IFwKLSAgcG9seTY0eDJfdCBfX3JldF8yNzQ7IFwKLSAgX19yZXRfMjc0ID0gdnNldHFfbGFuZV9wNjQodmdldHFfbGFuZV9wNjQoX19zMl8yNzQsIF9fcDNfMjc0KSwgX19zMF8yNzQsIF9fcDFfMjc0KTsgXAotICBfX3JldF8yNzQ7IFwKLX0pCi0jZWxzZQotI2RlZmluZSB2Y29weXFfbGFuZXFfcDY0KF9fcDBfMjc1LCBfX3AxXzI3NSwgX19wMl8yNzUsIF9fcDNfMjc1KSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTY0eDJfdCBfX3MwXzI3NSA9IF9fcDBfMjc1OyBcCi0gIHBvbHk2NHgyX3QgX19zMl8yNzUgPSBfX3AyXzI3NTsgXAotICBwb2x5NjR4Ml90IF9fcmV2MF8yNzU7ICBfX3JldjBfMjc1ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMF8yNzUsIF9fczBfMjc1LCAxLCAwKTsgXAotICBwb2x5NjR4Ml90IF9fcmV2Ml8yNzU7ICBfX3JldjJfMjc1ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMl8yNzUsIF9fczJfMjc1LCAxLCAwKTsgXAotICBwb2x5NjR4Ml90IF9fcmV0XzI3NTsgXAotICBfX3JldF8yNzUgPSBfX25vc3dhcF92c2V0cV9sYW5lX3A2NChfX25vc3dhcF92Z2V0cV9sYW5lX3A2NChfX3JldjJfMjc1LCBfX3AzXzI3NSksIF9fcmV2MF8yNzUsIF9fcDFfMjc1KTsgXAotICBfX3JldF8yNzUgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldF8yNzUsIF9fcmV0XzI3NSwgMSwgMCk7IFwKLSAgX19yZXRfMjc1OyBcCi19KQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotI2RlZmluZSB2Y29weXFfbGFuZXFfZjY0KF9fcDBfMjc2LCBfX3AxXzI3NiwgX19wMl8yNzYsIF9fcDNfMjc2KSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQ2NHgyX3QgX19zMF8yNzYgPSBfX3AwXzI3NjsgXAotICBmbG9hdDY0eDJfdCBfX3MyXzI3NiA9IF9fcDJfMjc2OyBcCi0gIGZsb2F0NjR4Ml90IF9fcmV0XzI3NjsgXAotICBfX3JldF8yNzYgPSB2c2V0cV9sYW5lX2Y2NCh2Z2V0cV9sYW5lX2Y2NChfX3MyXzI3NiwgX19wM18yNzYpLCBfX3MwXzI3NiwgX19wMV8yNzYpOyBcCi0gIF9fcmV0XzI3NjsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZjb3B5cV9sYW5lcV9mNjQoX19wMF8yNzcsIF9fcDFfMjc3LCBfX3AyXzI3NywgX19wM18yNzcpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDY0eDJfdCBfX3MwXzI3NyA9IF9fcDBfMjc3OyBcCi0gIGZsb2F0NjR4Ml90IF9fczJfMjc3ID0gX19wMl8yNzc7IFwKLSAgZmxvYXQ2NHgyX3QgX19yZXYwXzI3NzsgIF9fcmV2MF8yNzcgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwXzI3NywgX19zMF8yNzcsIDEsIDApOyBcCi0gIGZsb2F0NjR4Ml90IF9fcmV2Ml8yNzc7ICBfX3JldjJfMjc3ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMl8yNzcsIF9fczJfMjc3LCAxLCAwKTsgXAotICBmbG9hdDY0eDJfdCBfX3JldF8yNzc7IFwKLSAgX19yZXRfMjc3ID0gX19ub3N3YXBfdnNldHFfbGFuZV9mNjQoX19ub3N3YXBfdmdldHFfbGFuZV9mNjQoX19yZXYyXzI3NywgX19wM18yNzcpLCBfX3JldjBfMjc3LCBfX3AxXzI3Nyk7IFwKLSAgX19yZXRfMjc3ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXRfMjc3LCBfX3JldF8yNzcsIDEsIDApOyBcCi0gIF9fcmV0XzI3NzsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdmNvcHlfbGFuZXFfcDY0KF9fcDBfMjc4LCBfX3AxXzI3OCwgX19wMl8yNzgsIF9fcDNfMjc4KSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTY0eDFfdCBfX3MwXzI3OCA9IF9fcDBfMjc4OyBcCi0gIHBvbHk2NHgyX3QgX19zMl8yNzggPSBfX3AyXzI3ODsgXAotICBwb2x5NjR4MV90IF9fcmV0XzI3ODsgXAotICBfX3JldF8yNzggPSB2c2V0X2xhbmVfcDY0KHZnZXRxX2xhbmVfcDY0KF9fczJfMjc4LCBfX3AzXzI3OCksIF9fczBfMjc4LCBfX3AxXzI3OCk7IFwKLSAgX19yZXRfMjc4OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdmNvcHlfbGFuZXFfcDY0KF9fcDBfMjc5LCBfX3AxXzI3OSwgX19wMl8yNzksIF9fcDNfMjc5KSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgcG9seTY0eDFfdCBfX3MwXzI3OSA9IF9fcDBfMjc5OyBcCi0gIHBvbHk2NHgyX3QgX19zMl8yNzkgPSBfX3AyXzI3OTsgXAotICBwb2x5NjR4Ml90IF9fcmV2Ml8yNzk7ICBfX3JldjJfMjc5ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMl8yNzksIF9fczJfMjc5LCAxLCAwKTsgXAotICBwb2x5NjR4MV90IF9fcmV0XzI3OTsgXAotICBfX3JldF8yNzkgPSBfX25vc3dhcF92c2V0X2xhbmVfcDY0KF9fbm9zd2FwX3ZnZXRxX2xhbmVfcDY0KF9fcmV2Ml8yNzksIF9fcDNfMjc5KSwgX19zMF8yNzksIF9fcDFfMjc5KTsgXAotICBfX3JldF8yNzk7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZjb3B5X2xhbmVxX2Y2NChfX3AwXzI4MCwgX19wMV8yODAsIF9fcDJfMjgwLCBfX3AzXzI4MCkgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0NjR4MV90IF9fczBfMjgwID0gX19wMF8yODA7IFwKLSAgZmxvYXQ2NHgyX3QgX19zMl8yODAgPSBfX3AyXzI4MDsgXAotICBmbG9hdDY0eDFfdCBfX3JldF8yODA7IFwKLSAgX19yZXRfMjgwID0gdnNldF9sYW5lX2Y2NCh2Z2V0cV9sYW5lX2Y2NChfX3MyXzI4MCwgX19wM18yODApLCBfX3MwXzI4MCwgX19wMV8yODApOyBcCi0gIF9fcmV0XzI4MDsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZjb3B5X2xhbmVxX2Y2NChfX3AwXzI4MSwgX19wMV8yODEsIF9fcDJfMjgxLCBfX3AzXzI4MSkgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0NjR4MV90IF9fczBfMjgxID0gX19wMF8yODE7IFwKLSAgZmxvYXQ2NHgyX3QgX19zMl8yODEgPSBfX3AyXzI4MTsgXAotICBmbG9hdDY0eDJfdCBfX3JldjJfMjgxOyAgX19yZXYyXzI4MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczJfMjgxLCBfX3MyXzI4MSwgMSwgMCk7IFwKLSAgZmxvYXQ2NHgxX3QgX19yZXRfMjgxOyBcCi0gIF9fcmV0XzI4MSA9IF9fbm9zd2FwX3ZzZXRfbGFuZV9mNjQoX19ub3N3YXBfdmdldHFfbGFuZV9mNjQoX19yZXYyXzI4MSwgX19wM18yODEpLCBfX3MwXzI4MSwgX19wMV8yODEpOyBcCi0gIF9fcmV0XzI4MTsgXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDE2eDhfdCB2bWxhbF9oaWdoX3U4KHVpbnQxNng4X3QgX19wMCwgdWludDh4MTZfdCBfX3AxLCB1aW50OHgxNl90IF9fcDIpIHsKLSAgdWludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSB2bWxhbF91OChfX3AwLCB2Z2V0X2hpZ2hfdTgoX19wMSksIHZnZXRfaGlnaF91OChfX3AyKSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQxNng4X3Qgdm1sYWxfaGlnaF91OCh1aW50MTZ4OF90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSwgdWludDh4MTZfdCBfX3AyKSB7Ci0gIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQ4eDE2X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19ub3N3YXBfdm1sYWxfdTgoX19yZXYwLCBfX25vc3dhcF92Z2V0X2hpZ2hfdTgoX19yZXYxKSwgX19ub3N3YXBfdmdldF9oaWdoX3U4KF9fcmV2MikpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDY0eDJfdCB2bWxhbF9oaWdoX3UzMih1aW50NjR4Ml90IF9fcDAsIHVpbnQzMng0X3QgX19wMSwgdWludDMyeDRfdCBfX3AyKSB7Ci0gIHVpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gdm1sYWxfdTMyKF9fcDAsIHZnZXRfaGlnaF91MzIoX19wMSksIHZnZXRfaGlnaF91MzIoX19wMikpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50NjR4Ml90IHZtbGFsX2hpZ2hfdTMyKHVpbnQ2NHgyX3QgX19wMCwgdWludDMyeDRfdCBfX3AxLCB1aW50MzJ4NF90IF9fcDIpIHsKLSAgdWludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgdWludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKLSAgdWludDMyeDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAzLCAyLCAxLCAwKTsKLSAgdWludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSBfX25vc3dhcF92bWxhbF91MzIoX19yZXYwLCBfX25vc3dhcF92Z2V0X2hpZ2hfdTMyKF9fcmV2MSksIF9fbm9zd2FwX3ZnZXRfaGlnaF91MzIoX19yZXYyKSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MzJ4NF90IHZtbGFsX2hpZ2hfdTE2KHVpbnQzMng0X3QgX19wMCwgdWludDE2eDhfdCBfX3AxLCB1aW50MTZ4OF90IF9fcDIpIHsKLSAgdWludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSB2bWxhbF91MTYoX19wMCwgdmdldF9oaWdoX3UxNihfX3AxKSwgdmdldF9oaWdoX3UxNihfX3AyKSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQzMng0X3Qgdm1sYWxfaGlnaF91MTYodWludDMyeDRfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEsIHVpbnQxNng4X3QgX19wMikgewotICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICB1aW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50MTZ4OF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IF9fbm9zd2FwX3ZtbGFsX3UxNihfX3JldjAsIF9fbm9zd2FwX3ZnZXRfaGlnaF91MTYoX19yZXYxKSwgX19ub3N3YXBfdmdldF9oaWdoX3UxNihfX3JldjIpKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDE2eDhfdCB2bWxhbF9oaWdoX3M4KGludDE2eDhfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSwgaW50OHgxNl90IF9fcDIpIHsKLSAgaW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IHZtbGFsX3M4KF9fcDAsIHZnZXRfaGlnaF9zOChfX3AxKSwgdmdldF9oaWdoX3M4KF9fcDIpKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MTZ4OF90IHZtbGFsX2hpZ2hfczgoaW50MTZ4OF90IF9fcDAsIGludDh4MTZfdCBfX3AxLCBpbnQ4eDE2X3QgX19wMikgewotICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50OHgxNl90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19ub3N3YXBfdm1sYWxfczgoX19yZXYwLCBfX25vc3dhcF92Z2V0X2hpZ2hfczgoX19yZXYxKSwgX19ub3N3YXBfdmdldF9oaWdoX3M4KF9fcmV2MikpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50NjR4Ml90IHZtbGFsX2hpZ2hfczMyKGludDY0eDJfdCBfX3AwLCBpbnQzMng0X3QgX19wMSwgaW50MzJ4NF90IF9fcDIpIHsKLSAgaW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IHZtbGFsX3MzMihfX3AwLCB2Z2V0X2hpZ2hfczMyKF9fcDEpLCB2Z2V0X2hpZ2hfczMyKF9fcDIpKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50NjR4Ml90IHZtbGFsX2hpZ2hfczMyKGludDY0eDJfdCBfX3AwLCBpbnQzMng0X3QgX19wMSwgaW50MzJ4NF90IF9fcDIpIHsKLSAgaW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7Ci0gIGludDMyeDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAzLCAyLCAxLCAwKTsKLSAgaW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IF9fbm9zd2FwX3ZtbGFsX3MzMihfX3JldjAsIF9fbm9zd2FwX3ZnZXRfaGlnaF9zMzIoX19yZXYxKSwgX19ub3N3YXBfdmdldF9oaWdoX3MzMihfX3JldjIpKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDMyeDRfdCB2bWxhbF9oaWdoX3MxNihpbnQzMng0X3QgX19wMCwgaW50MTZ4OF90IF9fcDEsIGludDE2eDhfdCBfX3AyKSB7Ci0gIGludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSB2bWxhbF9zMTYoX19wMCwgdmdldF9oaWdoX3MxNihfX3AxKSwgdmdldF9oaWdoX3MxNihfX3AyKSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDMyeDRfdCB2bWxhbF9oaWdoX3MxNihpbnQzMng0X3QgX19wMCwgaW50MTZ4OF90IF9fcDEsIGludDE2eDhfdCBfX3AyKSB7Ci0gIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQxNng4X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSBfX25vc3dhcF92bWxhbF9zMTYoX19yZXYwLCBfX25vc3dhcF92Z2V0X2hpZ2hfczE2KF9fcmV2MSksIF9fbm9zd2FwX3ZnZXRfaGlnaF9zMTYoX19yZXYyKSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50NjR4Ml90IHZtbGFsX2hpZ2hfbl91MzIodWludDY0eDJfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEsIHVpbnQzMl90IF9fcDIpIHsKLSAgdWludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSB2bWxhbF9uX3UzMihfX3AwLCB2Z2V0X2hpZ2hfdTMyKF9fcDEpLCBfX3AyKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDY0eDJfdCB2bWxhbF9oaWdoX25fdTMyKHVpbnQ2NHgyX3QgX19wMCwgdWludDMyeDRfdCBfX3AxLCB1aW50MzJfdCBfX3AyKSB7Ci0gIHVpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIHVpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7Ci0gIHVpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19ub3N3YXBfdm1sYWxfbl91MzIoX19yZXYwLCBfX25vc3dhcF92Z2V0X2hpZ2hfdTMyKF9fcmV2MSksIF9fcDIpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDMyeDRfdCB2bWxhbF9oaWdoX25fdTE2KHVpbnQzMng0X3QgX19wMCwgdWludDE2eDhfdCBfX3AxLCB1aW50MTZfdCBfX3AyKSB7Ci0gIHVpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gdm1sYWxfbl91MTYoX19wMCwgdmdldF9oaWdoX3UxNihfX3AxKSwgX19wMik7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQzMng0X3Qgdm1sYWxfaGlnaF9uX3UxNih1aW50MzJ4NF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSwgdWludDE2X3QgX19wMikgewotICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICB1aW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IF9fbm9zd2FwX3ZtbGFsX25fdTE2KF9fcmV2MCwgX19ub3N3YXBfdmdldF9oaWdoX3UxNihfX3JldjEpLCBfX3AyKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDY0eDJfdCB2bWxhbF9oaWdoX25fczMyKGludDY0eDJfdCBfX3AwLCBpbnQzMng0X3QgX19wMSwgaW50MzJfdCBfX3AyKSB7Ci0gIGludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSB2bWxhbF9uX3MzMihfX3AwLCB2Z2V0X2hpZ2hfczMyKF9fcDEpLCBfX3AyKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50NjR4Ml90IHZtbGFsX2hpZ2hfbl9zMzIoaW50NjR4Ml90IF9fcDAsIGludDMyeDRfdCBfX3AxLCBpbnQzMl90IF9fcDIpIHsKLSAgaW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7Ci0gIGludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSBfX25vc3dhcF92bWxhbF9uX3MzMihfX3JldjAsIF9fbm9zd2FwX3ZnZXRfaGlnaF9zMzIoX19yZXYxKSwgX19wMik7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQzMng0X3Qgdm1sYWxfaGlnaF9uX3MxNihpbnQzMng0X3QgX19wMCwgaW50MTZ4OF90IF9fcDEsIGludDE2X3QgX19wMikgewotICBpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gdm1sYWxfbl9zMTYoX19wMCwgdmdldF9oaWdoX3MxNihfX3AxKSwgX19wMik7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDMyeDRfdCB2bWxhbF9oaWdoX25fczE2KGludDMyeDRfdCBfX3AwLCBpbnQxNng4X3QgX19wMSwgaW50MTZfdCBfX3AyKSB7Ci0gIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19ub3N3YXBfdm1sYWxfbl9zMTYoX19yZXYwLCBfX25vc3dhcF92Z2V0X2hpZ2hfczE2KF9fcmV2MSksIF9fcDIpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDE2eDhfdCB2bWxzbF9oaWdoX3U4KHVpbnQxNng4X3QgX19wMCwgdWludDh4MTZfdCBfX3AxLCB1aW50OHgxNl90IF9fcDIpIHsKLSAgdWludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSB2bWxzbF91OChfX3AwLCB2Z2V0X2hpZ2hfdTgoX19wMSksIHZnZXRfaGlnaF91OChfX3AyKSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQxNng4X3Qgdm1sc2xfaGlnaF91OCh1aW50MTZ4OF90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSwgdWludDh4MTZfdCBfX3AyKSB7Ci0gIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQ4eDE2X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19ub3N3YXBfdm1sc2xfdTgoX19yZXYwLCBfX25vc3dhcF92Z2V0X2hpZ2hfdTgoX19yZXYxKSwgX19ub3N3YXBfdmdldF9oaWdoX3U4KF9fcmV2MikpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDY0eDJfdCB2bWxzbF9oaWdoX3UzMih1aW50NjR4Ml90IF9fcDAsIHVpbnQzMng0X3QgX19wMSwgdWludDMyeDRfdCBfX3AyKSB7Ci0gIHVpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gdm1sc2xfdTMyKF9fcDAsIHZnZXRfaGlnaF91MzIoX19wMSksIHZnZXRfaGlnaF91MzIoX19wMikpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50NjR4Ml90IHZtbHNsX2hpZ2hfdTMyKHVpbnQ2NHgyX3QgX19wMCwgdWludDMyeDRfdCBfX3AxLCB1aW50MzJ4NF90IF9fcDIpIHsKLSAgdWludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgdWludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKLSAgdWludDMyeDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAzLCAyLCAxLCAwKTsKLSAgdWludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSBfX25vc3dhcF92bWxzbF91MzIoX19yZXYwLCBfX25vc3dhcF92Z2V0X2hpZ2hfdTMyKF9fcmV2MSksIF9fbm9zd2FwX3ZnZXRfaGlnaF91MzIoX19yZXYyKSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50MzJ4NF90IHZtbHNsX2hpZ2hfdTE2KHVpbnQzMng0X3QgX19wMCwgdWludDE2eDhfdCBfX3AxLCB1aW50MTZ4OF90IF9fcDIpIHsKLSAgdWludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSB2bWxzbF91MTYoX19wMCwgdmdldF9oaWdoX3UxNihfX3AxKSwgdmdldF9oaWdoX3UxNihfX3AyKSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQzMng0X3Qgdm1sc2xfaGlnaF91MTYodWludDMyeDRfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEsIHVpbnQxNng4X3QgX19wMikgewotICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICB1aW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50MTZ4OF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IF9fbm9zd2FwX3ZtbHNsX3UxNihfX3JldjAsIF9fbm9zd2FwX3ZnZXRfaGlnaF91MTYoX19yZXYxKSwgX19ub3N3YXBfdmdldF9oaWdoX3UxNihfX3JldjIpKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDE2eDhfdCB2bWxzbF9oaWdoX3M4KGludDE2eDhfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSwgaW50OHgxNl90IF9fcDIpIHsKLSAgaW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IHZtbHNsX3M4KF9fcDAsIHZnZXRfaGlnaF9zOChfX3AxKSwgdmdldF9oaWdoX3M4KF9fcDIpKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50MTZ4OF90IHZtbHNsX2hpZ2hfczgoaW50MTZ4OF90IF9fcDAsIGludDh4MTZfdCBfX3AxLCBpbnQ4eDE2X3QgX19wMikgewotICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50OHgxNl90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19ub3N3YXBfdm1sc2xfczgoX19yZXYwLCBfX25vc3dhcF92Z2V0X2hpZ2hfczgoX19yZXYxKSwgX19ub3N3YXBfdmdldF9oaWdoX3M4KF9fcmV2MikpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgaW50NjR4Ml90IHZtbHNsX2hpZ2hfczMyKGludDY0eDJfdCBfX3AwLCBpbnQzMng0X3QgX19wMSwgaW50MzJ4NF90IF9fcDIpIHsKLSAgaW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IHZtbHNsX3MzMihfX3AwLCB2Z2V0X2hpZ2hfczMyKF9fcDEpLCB2Z2V0X2hpZ2hfczMyKF9fcDIpKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50NjR4Ml90IHZtbHNsX2hpZ2hfczMyKGludDY0eDJfdCBfX3AwLCBpbnQzMng0X3QgX19wMSwgaW50MzJ4NF90IF9fcDIpIHsKLSAgaW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7Ci0gIGludDMyeDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAzLCAyLCAxLCAwKTsKLSAgaW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IF9fbm9zd2FwX3ZtbHNsX3MzMihfX3JldjAsIF9fbm9zd2FwX3ZnZXRfaGlnaF9zMzIoX19yZXYxKSwgX19ub3N3YXBfdmdldF9oaWdoX3MzMihfX3JldjIpKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDMyeDRfdCB2bWxzbF9oaWdoX3MxNihpbnQzMng0X3QgX19wMCwgaW50MTZ4OF90IF9fcDEsIGludDE2eDhfdCBfX3AyKSB7Ci0gIGludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSB2bWxzbF9zMTYoX19wMCwgdmdldF9oaWdoX3MxNihfX3AxKSwgdmdldF9oaWdoX3MxNihfX3AyKSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDMyeDRfdCB2bWxzbF9oaWdoX3MxNihpbnQzMng0X3QgX19wMCwgaW50MTZ4OF90IF9fcDEsIGludDE2eDhfdCBfX3AyKSB7Ci0gIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQxNng4X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSBfX25vc3dhcF92bWxzbF9zMTYoX19yZXYwLCBfX25vc3dhcF92Z2V0X2hpZ2hfczE2KF9fcmV2MSksIF9fbm9zd2FwX3ZnZXRfaGlnaF9zMTYoX19yZXYyKSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSB1aW50NjR4Ml90IHZtbHNsX2hpZ2hfbl91MzIodWludDY0eDJfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEsIHVpbnQzMl90IF9fcDIpIHsKLSAgdWludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSB2bWxzbF9uX3UzMihfX3AwLCB2Z2V0X2hpZ2hfdTMyKF9fcDEpLCBfX3AyKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDY0eDJfdCB2bWxzbF9oaWdoX25fdTMyKHVpbnQ2NHgyX3QgX19wMCwgdWludDMyeDRfdCBfX3AxLCB1aW50MzJfdCBfX3AyKSB7Ci0gIHVpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIHVpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7Ci0gIHVpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19ub3N3YXBfdm1sc2xfbl91MzIoX19yZXYwLCBfX25vc3dhcF92Z2V0X2hpZ2hfdTMyKF9fcmV2MSksIF9fcDIpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDMyeDRfdCB2bWxzbF9oaWdoX25fdTE2KHVpbnQzMng0X3QgX19wMCwgdWludDE2eDhfdCBfX3AxLCB1aW50MTZfdCBfX3AyKSB7Ci0gIHVpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gdm1sc2xfbl91MTYoX19wMCwgdmdldF9oaWdoX3UxNihfX3AxKSwgX19wMik7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIHVpbnQzMng0X3Qgdm1sc2xfaGlnaF9uX3UxNih1aW50MzJ4NF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSwgdWludDE2X3QgX19wMikgewotICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOwotICB1aW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IF9fbm9zd2FwX3ZtbHNsX25fdTE2KF9fcmV2MCwgX19ub3N3YXBfdmdldF9oaWdoX3UxNihfX3JldjEpLCBfX3AyKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDY0eDJfdCB2bWxzbF9oaWdoX25fczMyKGludDY0eDJfdCBfX3AwLCBpbnQzMng0X3QgX19wMSwgaW50MzJfdCBfX3AyKSB7Ci0gIGludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSB2bWxzbF9uX3MzMihfX3AwLCB2Z2V0X2hpZ2hfczMyKF9fcDEpLCBfX3AyKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgaW50NjR4Ml90IHZtbHNsX2hpZ2hfbl9zMzIoaW50NjR4Ml90IF9fcDAsIGludDMyeDRfdCBfX3AxLCBpbnQzMl90IF9fcDIpIHsKLSAgaW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOwotICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7Ci0gIGludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSBfX25vc3dhcF92bWxzbF9uX3MzMihfX3JldjAsIF9fbm9zd2FwX3ZnZXRfaGlnaF9zMzIoX19yZXYxKSwgX19wMik7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQzMng0X3Qgdm1sc2xfaGlnaF9uX3MxNihpbnQzMng0X3QgX19wMCwgaW50MTZ4OF90IF9fcDEsIGludDE2X3QgX19wMikgewotICBpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gdm1sc2xfbl9zMTYoX19wMCwgdmdldF9oaWdoX3MxNihfX3AxKSwgX19wMik7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDMyeDRfdCB2bWxzbF9oaWdoX25fczE2KGludDMyeDRfdCBfX3AwLCBpbnQxNng4X3QgX19wMSwgaW50MTZfdCBfX3AyKSB7Ci0gIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19ub3N3YXBfdm1sc2xfbl9zMTYoX19yZXYwLCBfX25vc3dhcF92Z2V0X2hpZ2hfczE2KF9fcmV2MSksIF9fcDIpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLSNkZWZpbmUgdm11bHhfbGFuZV9mNjQoX19wMF8yODIsIF9fcDFfMjgyLCBfX3AyXzI4MikgX19leHRlbnNpb25fXyAoeyBcCi0gIGZsb2F0NjR4MV90IF9fczBfMjgyID0gX19wMF8yODI7IFwKLSAgZmxvYXQ2NHgxX3QgX19zMV8yODIgPSBfX3AxXzI4MjsgXAotICBmbG9hdDY0eDFfdCBfX3JldF8yODI7IFwKLSAgZmxvYXQ2NF90IF9feF8yODIgPSB2Z2V0X2xhbmVfZjY0KF9fczBfMjgyLCAwKTsgXAotICBmbG9hdDY0X3QgX195XzI4MiA9IHZnZXRfbGFuZV9mNjQoX19zMV8yODIsIF9fcDJfMjgyKTsgXAotICBmbG9hdDY0X3QgX196XzI4MiA9IHZtdWx4ZF9mNjQoX194XzI4MiwgX195XzI4Mik7IFwKLSAgX19yZXRfMjgyID0gdnNldF9sYW5lX2Y2NChfX3pfMjgyLCBfX3MwXzI4MiwgX19wMl8yODIpOyBcCi0gIF9fcmV0XzI4MjsgXAotfSkKLSNlbHNlCi0jZGVmaW5lIHZtdWx4X2xhbmVfZjY0KF9fcDBfMjgzLCBfX3AxXzI4MywgX19wMl8yODMpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDY0eDFfdCBfX3MwXzI4MyA9IF9fcDBfMjgzOyBcCi0gIGZsb2F0NjR4MV90IF9fczFfMjgzID0gX19wMV8yODM7IFwKLSAgZmxvYXQ2NHgxX3QgX19yZXRfMjgzOyBcCi0gIGZsb2F0NjRfdCBfX3hfMjgzID0gX19ub3N3YXBfdmdldF9sYW5lX2Y2NChfX3MwXzI4MywgMCk7IFwKLSAgZmxvYXQ2NF90IF9feV8yODMgPSBfX25vc3dhcF92Z2V0X2xhbmVfZjY0KF9fczFfMjgzLCBfX3AyXzI4Myk7IFwKLSAgZmxvYXQ2NF90IF9fel8yODMgPSBfX25vc3dhcF92bXVseGRfZjY0KF9feF8yODMsIF9feV8yODMpOyBcCi0gIF9fcmV0XzI4MyA9IF9fbm9zd2FwX3ZzZXRfbGFuZV9mNjQoX196XzI4MywgX19zMF8yODMsIF9fcDJfMjgzKTsgXAotICBfX3JldF8yODM7IFwKLX0pCi0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi0jZGVmaW5lIHZtdWx4X2xhbmVxX2Y2NChfX3AwXzI4NCwgX19wMV8yODQsIF9fcDJfMjg0KSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgZmxvYXQ2NHgxX3QgX19zMF8yODQgPSBfX3AwXzI4NDsgXAotICBmbG9hdDY0eDJfdCBfX3MxXzI4NCA9IF9fcDFfMjg0OyBcCi0gIGZsb2F0NjR4MV90IF9fcmV0XzI4NDsgXAotICBmbG9hdDY0X3QgX194XzI4NCA9IHZnZXRfbGFuZV9mNjQoX19zMF8yODQsIDApOyBcCi0gIGZsb2F0NjRfdCBfX3lfMjg0ID0gdmdldHFfbGFuZV9mNjQoX19zMV8yODQsIF9fcDJfMjg0KTsgXAotICBmbG9hdDY0X3QgX196XzI4NCA9IHZtdWx4ZF9mNjQoX194XzI4NCwgX195XzI4NCk7IFwKLSAgX19yZXRfMjg0ID0gdnNldF9sYW5lX2Y2NChfX3pfMjg0LCBfX3MwXzI4NCwgMCk7IFwKLSAgX19yZXRfMjg0OyBcCi19KQotI2Vsc2UKLSNkZWZpbmUgdm11bHhfbGFuZXFfZjY0KF9fcDBfMjg1LCBfX3AxXzI4NSwgX19wMl8yODUpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBmbG9hdDY0eDFfdCBfX3MwXzI4NSA9IF9fcDBfMjg1OyBcCi0gIGZsb2F0NjR4Ml90IF9fczFfMjg1ID0gX19wMV8yODU7IFwKLSAgZmxvYXQ2NHgyX3QgX19yZXYxXzI4NTsgIF9fcmV2MV8yODUgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxXzI4NSwgX19zMV8yODUsIDEsIDApOyBcCi0gIGZsb2F0NjR4MV90IF9fcmV0XzI4NTsgXAotICBmbG9hdDY0X3QgX194XzI4NSA9IF9fbm9zd2FwX3ZnZXRfbGFuZV9mNjQoX19zMF8yODUsIDApOyBcCi0gIGZsb2F0NjRfdCBfX3lfMjg1ID0gX19ub3N3YXBfdmdldHFfbGFuZV9mNjQoX19yZXYxXzI4NSwgX19wMl8yODUpOyBcCi0gIGZsb2F0NjRfdCBfX3pfMjg1ID0gX19ub3N3YXBfdm11bHhkX2Y2NChfX3hfMjg1LCBfX3lfMjg1KTsgXAotICBfX3JldF8yODUgPSBfX25vc3dhcF92c2V0X2xhbmVfZjY0KF9fel8yODUsIF9fczBfMjg1LCAwKTsgXAotICBfX3JldF8yODU7IFwKLX0pCi0jZW5kaWYKLQotI2VuZGlmCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDE2eDhfdCB2YWJhbF91OCh1aW50MTZ4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxLCB1aW50OHg4X3QgX19wMikgewotICB1aW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IF9fcDAgKyB2YWJkbF91OChfX3AxLCBfX3AyKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDE2eDhfdCB2YWJhbF91OCh1aW50MTZ4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxLCB1aW50OHg4X3QgX19wMikgewotICB1aW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQ4eDhfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSBfX3JldjAgKyBfX25vc3dhcF92YWJkbF91OChfX3JldjEsIF9fcmV2Mik7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotX19haSB1aW50MTZ4OF90IF9fbm9zd2FwX3ZhYmFsX3U4KHVpbnQxNng4X3QgX19wMCwgdWludDh4OF90IF9fcDEsIHVpbnQ4eDhfdCBfX3AyKSB7Ci0gIHVpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19wMCArIF9fbm9zd2FwX3ZhYmRsX3U4KF9fcDEsIF9fcDIpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ2NHgyX3QgdmFiYWxfdTMyKHVpbnQ2NHgyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxLCB1aW50MzJ4Ml90IF9fcDIpIHsKLSAgdWludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSBfX3AwICsgdmFiZGxfdTMyKF9fcDEsIF9fcDIpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50NjR4Ml90IHZhYmFsX3UzMih1aW50NjR4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSwgdWludDMyeDJfdCBfX3AyKSB7Ci0gIHVpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIHVpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7Ci0gIHVpbnQzMngyX3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMSwgMCk7Ci0gIHVpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19yZXYwICsgX19ub3N3YXBfdmFiZGxfdTMyKF9fcmV2MSwgX19yZXYyKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci1fX2FpIHVpbnQ2NHgyX3QgX19ub3N3YXBfdmFiYWxfdTMyKHVpbnQ2NHgyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxLCB1aW50MzJ4Ml90IF9fcDIpIHsKLSAgdWludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSBfX3AwICsgX19ub3N3YXBfdmFiZGxfdTMyKF9fcDEsIF9fcDIpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQzMng0X3QgdmFiYWxfdTE2KHVpbnQzMng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxLCB1aW50MTZ4NF90IF9fcDIpIHsKLSAgdWludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSBfX3AwICsgdmFiZGxfdTE2KF9fcDEsIF9fcDIpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MzJ4NF90IHZhYmFsX3UxNih1aW50MzJ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSwgdWludDE2eDRfdCBfX3AyKSB7Ci0gIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIHVpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7Ci0gIHVpbnQxNng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMywgMiwgMSwgMCk7Ci0gIHVpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19yZXYwICsgX19ub3N3YXBfdmFiZGxfdTE2KF9fcmV2MSwgX19yZXYyKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci1fX2FpIHVpbnQzMng0X3QgX19ub3N3YXBfdmFiYWxfdTE2KHVpbnQzMng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxLCB1aW50MTZ4NF90IF9fcDIpIHsKLSAgdWludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSBfX3AwICsgX19ub3N3YXBfdmFiZGxfdTE2KF9fcDEsIF9fcDIpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDE2eDhfdCB2YWJhbF9zOChpbnQxNng4X3QgX19wMCwgaW50OHg4X3QgX19wMSwgaW50OHg4X3QgX19wMikgewotICBpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19wMCArIHZhYmRsX3M4KF9fcDEsIF9fcDIpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQxNng4X3QgdmFiYWxfczgoaW50MTZ4OF90IF9fcDAsIGludDh4OF90IF9fcDEsIGludDh4OF90IF9fcDIpIHsKLSAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50OHg4X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSBfX3JldjAgKyBfX25vc3dhcF92YWJkbF9zOChfX3JldjEsIF9fcmV2Mik7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotX19haSBpbnQxNng4X3QgX19ub3N3YXBfdmFiYWxfczgoaW50MTZ4OF90IF9fcDAsIGludDh4OF90IF9fcDEsIGludDh4OF90IF9fcDIpIHsKLSAgaW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IF9fcDAgKyBfX25vc3dhcF92YWJkbF9zOChfX3AxLCBfX3AyKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQ2NHgyX3QgdmFiYWxfczMyKGludDY0eDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSwgaW50MzJ4Ml90IF9fcDIpIHsKLSAgaW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IF9fcDAgKyB2YWJkbF9zMzIoX19wMSwgX19wMik7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDY0eDJfdCB2YWJhbF9zMzIoaW50NjR4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxLCBpbnQzMngyX3QgX19wMikgewotICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIGludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKLSAgaW50MzJ4Ml90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDEsIDApOwotICBpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19yZXYwICsgX19ub3N3YXBfdmFiZGxfczMyKF9fcmV2MSwgX19yZXYyKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci1fX2FpIGludDY0eDJfdCBfX25vc3dhcF92YWJhbF9zMzIoaW50NjR4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxLCBpbnQzMngyX3QgX19wMikgewotICBpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19wMCArIF9fbm9zd2FwX3ZhYmRsX3MzMihfX3AxLCBfX3AyKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQzMng0X3QgdmFiYWxfczE2KGludDMyeDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSwgaW50MTZ4NF90IF9fcDIpIHsKLSAgaW50MzJ4NF90IF9fcmV0OwotICBfX3JldCA9IF9fcDAgKyB2YWJkbF9zMTYoX19wMSwgX19wMik7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDMyeDRfdCB2YWJhbF9zMTYoaW50MzJ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxLCBpbnQxNng0X3QgX19wMikgewotICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKLSAgaW50MTZ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDMsIDIsIDEsIDApOwotICBpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19yZXYwICsgX19ub3N3YXBfdmFiZGxfczE2KF9fcmV2MSwgX19yZXYyKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci1fX2FpIGludDMyeDRfdCBfX25vc3dhcF92YWJhbF9zMTYoaW50MzJ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxLCBpbnQxNng0X3QgX19wMikgewotICBpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19wMCArIF9fbm9zd2FwX3ZhYmRsX3MxNihfX3AxLCBfX3AyKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKF9fYWFyY2g2NF9fKQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQxNng4X3QgdmFiYWxfaGlnaF91OCh1aW50MTZ4OF90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSwgdWludDh4MTZfdCBfX3AyKSB7Ci0gIHVpbnQxNng4X3QgX19yZXQ7Ci0gIF9fcmV0ID0gdmFiYWxfdTgoX19wMCwgdmdldF9oaWdoX3U4KF9fcDEpLCB2Z2V0X2hpZ2hfdTgoX19wMikpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MTZ4OF90IHZhYmFsX2hpZ2hfdTgodWludDE2eDhfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEsIHVpbnQ4eDE2X3QgX19wMikgewotICB1aW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50OHgxNl90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICB1aW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IF9fbm9zd2FwX3ZhYmFsX3U4KF9fcmV2MCwgX19ub3N3YXBfdmdldF9oaWdoX3U4KF9fcmV2MSksIF9fbm9zd2FwX3ZnZXRfaGlnaF91OChfX3JldjIpKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIHVpbnQ2NHgyX3QgdmFiYWxfaGlnaF91MzIodWludDY0eDJfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEsIHVpbnQzMng0X3QgX19wMikgewotICB1aW50NjR4Ml90IF9fcmV0OwotICBfX3JldCA9IHZhYmFsX3UzMihfX3AwLCB2Z2V0X2hpZ2hfdTMyKF9fcDEpLCB2Z2V0X2hpZ2hfdTMyKF9fcDIpKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2Vsc2UKLV9fYWkgdWludDY0eDJfdCB2YWJhbF9oaWdoX3UzMih1aW50NjR4Ml90IF9fcDAsIHVpbnQzMng0X3QgX19wMSwgdWludDMyeDRfdCBfX3AyKSB7Ci0gIHVpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7Ci0gIHVpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7Ci0gIHVpbnQzMng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMywgMiwgMSwgMCk7Ci0gIHVpbnQ2NHgyX3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19ub3N3YXBfdmFiYWxfdTMyKF9fcmV2MCwgX19ub3N3YXBfdmdldF9oaWdoX3UzMihfX3JldjEpLCBfX25vc3dhcF92Z2V0X2hpZ2hfdTMyKF9fcmV2MikpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLV9fYWkgdWludDMyeDRfdCB2YWJhbF9oaWdoX3UxNih1aW50MzJ4NF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSwgdWludDE2eDhfdCBfX3AyKSB7Ci0gIHVpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gdmFiYWxfdTE2KF9fcDAsIHZnZXRfaGlnaF91MTYoX19wMSksIHZnZXRfaGlnaF91MTYoX19wMikpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSB1aW50MzJ4NF90IHZhYmFsX2hpZ2hfdTE2KHVpbnQzMng0X3QgX19wMCwgdWludDE2eDhfdCBfX3AxLCB1aW50MTZ4OF90IF9fcDIpIHsKLSAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKLSAgdWludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDE2eDhfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgdWludDMyeDRfdCBfX3JldDsKLSAgX19yZXQgPSBfX25vc3dhcF92YWJhbF91MTYoX19yZXYwLCBfX25vc3dhcF92Z2V0X2hpZ2hfdTE2KF9fcmV2MSksIF9fbm9zd2FwX3ZnZXRfaGlnaF91MTYoX19yZXYyKSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQxNng4X3QgdmFiYWxfaGlnaF9zOChpbnQxNng4X3QgX19wMCwgaW50OHgxNl90IF9fcDEsIGludDh4MTZfdCBfX3AyKSB7Ci0gIGludDE2eDhfdCBfX3JldDsKLSAgX19yZXQgPSB2YWJhbF9zOChfX3AwLCB2Z2V0X2hpZ2hfczgoX19wMSksIHZnZXRfaGlnaF9zOChfX3AyKSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDE2eDhfdCB2YWJhbF9oaWdoX3M4KGludDE2eDhfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSwgaW50OHgxNl90IF9fcDIpIHsKLSAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7Ci0gIGludDh4MTZfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50MTZ4OF90IF9fcmV0OwotICBfX3JldCA9IF9fbm9zd2FwX3ZhYmFsX3M4KF9fcmV2MCwgX19ub3N3YXBfdmdldF9oaWdoX3M4KF9fcmV2MSksIF9fbm9zd2FwX3ZnZXRfaGlnaF9zOChfX3JldjIpKTsKLSAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fTElUVExFX0VORElBTl9fCi1fX2FpIGludDY0eDJfdCB2YWJhbF9oaWdoX3MzMihpbnQ2NHgyX3QgX19wMCwgaW50MzJ4NF90IF9fcDEsIGludDMyeDRfdCBfX3AyKSB7Ci0gIGludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSB2YWJhbF9zMzIoX19wMCwgdmdldF9oaWdoX3MzMihfX3AxKSwgdmdldF9oaWdoX3MzMihfX3AyKSk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbHNlCi1fX2FpIGludDY0eDJfdCB2YWJhbF9oaWdoX3MzMihpbnQ2NHgyX3QgX19wMCwgaW50MzJ4NF90IF9fcDEsIGludDMyeDRfdCBfX3AyKSB7Ci0gIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKLSAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOwotICBpbnQzMng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMywgMiwgMSwgMCk7Ci0gIGludDY0eDJfdCBfX3JldDsKLSAgX19yZXQgPSBfX25vc3dhcF92YWJhbF9zMzIoX19yZXYwLCBfX25vc3dhcF92Z2V0X2hpZ2hfczMyKF9fcmV2MSksIF9fbm9zd2FwX3ZnZXRfaGlnaF9zMzIoX19yZXYyKSk7Ci0gIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKLSAgcmV0dXJuIF9fcmV0OwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotX19haSBpbnQzMng0X3QgdmFiYWxfaGlnaF9zMTYoaW50MzJ4NF90IF9fcDAsIGludDE2eDhfdCBfX3AxLCBpbnQxNng4X3QgX19wMikgewotICBpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gdmFiYWxfczE2KF9fcDAsIHZnZXRfaGlnaF9zMTYoX19wMSksIHZnZXRfaGlnaF9zMTYoX19wMikpOwotICByZXR1cm4gX19yZXQ7Ci19Ci0jZWxzZQotX19haSBpbnQzMng0X3QgdmFiYWxfaGlnaF9zMTYoaW50MzJ4NF90IF9fcDAsIGludDE2eDhfdCBfX3AxLCBpbnQxNng4X3QgX19wMikgewotICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7Ci0gIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKLSAgaW50MTZ4OF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOwotICBpbnQzMng0X3QgX19yZXQ7Ci0gIF9fcmV0ID0gX19ub3N3YXBfdmFiYWxfczE2KF9fcmV2MCwgX19ub3N3YXBfdmdldF9oaWdoX3MxNihfX3JldjEpLCBfX25vc3dhcF92Z2V0X2hpZ2hfczE2KF9fcmV2MikpOwotICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7Ci0gIHJldHVybiBfX3JldDsKLX0KLSNlbmRpZgotCi0jZW5kaWYKLQotI3VuZGVmIF9fYWkKLQotI2VuZGlmIC8qIF9fQVJNX05FT05fSCAqLwpkaWZmIC0tZ2l0IGEvY2xhbmctMjU3NzExMy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9hdngyaW50cmluLmggYi9jbGFuZy0yNTc3MTEzL2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL2F2eDJpbnRyaW4uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjc4NjU3Mi4uMDAwMDAwMAotLS0gYS9jbGFuZy0yNTc3MTEzL2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL2F2eDJpbnRyaW4uaAorKysgL2Rldi9udWxsCkBAIC0xLDEyMTUgKzAsMCBAQAotLyo9PT0tLS0tIGF2eDJpbnRyaW4uaCAtIEFWWDIgaW50cmluc2ljcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQotICoKLSAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKLSAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCi0gKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCi0gKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCi0gKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKLSAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Ci0gKgotICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KLSAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgotICoKLSAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCi0gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKLSAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgotICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKLSAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KLSAqIFRIRSBTT0ZUV0FSRS4KLSAqCi0gKj09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09Ci0gKi8KLQotI2lmbmRlZiBfX0lNTUlOVFJJTl9ICi0jZXJyb3IgIk5ldmVyIHVzZSA8YXZ4MmludHJpbi5oPiBkaXJlY3RseTsgaW5jbHVkZSA8aW1taW50cmluLmg+IGluc3RlYWQuIgotI2VuZGlmCi0KLSNpZm5kZWYgX19BVlgySU5UUklOX0gKLSNkZWZpbmUgX19BVlgySU5UUklOX0gKLQotLyogRGVmaW5lIHRoZSBkZWZhdWx0IGF0dHJpYnV0ZXMgZm9yIHRoZSBmdW5jdGlvbnMgaW4gdGhpcyBmaWxlLiAqLwotI2RlZmluZSBfX0RFRkFVTFRfRk5fQVRUUlMgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fLCBfX3RhcmdldF9fKCJhdngyIikpKQotCi0vKiBTU0U0IE11bHRpcGxlIFBhY2tlZCBTdW1zIG9mIEFic29sdXRlIERpZmZlcmVuY2UuICAqLwotI2RlZmluZSBfbW0yNTZfbXBzYWRid19lcHU4KFgsIFksIE0pIF9fYnVpbHRpbl9pYTMyX21wc2FkYncyNTYoKFgpLCAoWSksIChNKSkKLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9hYnNfZXBpOChfX20yNTZpIF9fYSkKLXsKLSAgICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfcGFic2IyNTYoKF9fdjMycWkpX19hKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9hYnNfZXBpMTYoX19tMjU2aSBfX2EpCi17Ci0gICAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3BhYnN3MjU2KChfX3YxNmhpKV9fYSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfYWJzX2VwaTMyKF9fbTI1NmkgX19hKQotewotICAgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9wYWJzZDI1NigoX192OHNpKV9fYSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfcGFja3NfZXBpMTYoX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKQotewotICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfcGFja3Nzd2IyNTYoKF9fdjE2aGkpX19hLCAoX192MTZoaSlfX2IpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X3BhY2tzX2VwaTMyKF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikKLXsKLSAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3BhY2tzc2R3MjU2KChfX3Y4c2kpX19hLCAoX192OHNpKV9fYik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfcGFja3VzX2VwaTE2KF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikKLXsKLSAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3BhY2t1c3diMjU2KChfX3YxNmhpKV9fYSwgKF9fdjE2aGkpX19iKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9wYWNrdXNfZXBpMzIoX19tMjU2aSBfX1YxLCBfX20yNTZpIF9fVjIpCi17Ci0gIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcGFja3VzZHcyNTYoKF9fdjhzaSlfX1YxLCAoX192OHNpKV9fVjIpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X2FkZF9lcGk4KF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikKLXsKLSAgcmV0dXJuIChfX20yNTZpKSgoX192MzJxaSlfX2EgKyAoX192MzJxaSlfX2IpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X2FkZF9lcGkxNihfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpCi17Ci0gIHJldHVybiAoX19tMjU2aSkoKF9fdjE2aGkpX19hICsgKF9fdjE2aGkpX19iKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9hZGRfZXBpMzIoX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKQotewotICByZXR1cm4gKF9fbTI1NmkpKChfX3Y4c2kpX19hICsgKF9fdjhzaSlfX2IpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X2FkZF9lcGk2NChfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpCi17Ci0gIHJldHVybiBfX2EgKyBfX2I7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfYWRkc19lcGk4KF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikKLXsKLSAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3BhZGRzYjI1NigoX192MzJxaSlfX2EsIChfX3YzMnFpKV9fYik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfYWRkc19lcGkxNihfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpCi17Ci0gIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9wYWRkc3cyNTYoKF9fdjE2aGkpX19hLCAoX192MTZoaSlfX2IpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X2FkZHNfZXB1OChfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpCi17Ci0gIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9wYWRkdXNiMjU2KChfX3YzMnFpKV9fYSwgKF9fdjMycWkpX19iKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9hZGRzX2VwdTE2KF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikKLXsKLSAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3BhZGR1c3cyNTYoKF9fdjE2aGkpX19hLCAoX192MTZoaSlfX2IpOwotfQotCi0jZGVmaW5lIF9tbTI1Nl9hbGlnbnJfZXBpOChhLCBiLCBuKSBfX2V4dGVuc2lvbl9fICh7ICAgICAgICBcCi0gIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3BhbGlnbnIyNTYoKF9fdjMycWkpKF9fbTI1NmkpKGEpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjMycWkpKF9fbTI1NmkpKGIpLCAobikpOyB9KQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X2FuZF9zaTI1NihfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpCi17Ci0gIHJldHVybiBfX2EgJiBfX2I7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfYW5kbm90X3NpMjU2KF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikKLXsKLSAgcmV0dXJuIH5fX2EgJiBfX2I7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfYXZnX2VwdTgoX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKQotewotICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfcGF2Z2IyNTYoKF9fdjMycWkpX19hLCAoX192MzJxaSlfX2IpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X2F2Z19lcHUxNihfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpCi17Ci0gIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9wYXZndzI1NigoX192MTZoaSlfX2EsIChfX3YxNmhpKV9fYik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfYmxlbmR2X2VwaTgoX19tMjU2aSBfX1YxLCBfX20yNTZpIF9fVjIsIF9fbTI1NmkgX19NKQotewotICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfcGJsZW5kdmIyNTYoKF9fdjMycWkpX19WMSwgKF9fdjMycWkpX19WMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MzJxaSlfX00pOwotfQotCi0jZGVmaW5lIF9tbTI1Nl9ibGVuZF9lcGkxNihWMSwgVjIsIE0pIF9fZXh0ZW5zaW9uX18gKHsgICAgICAgXAotICAoX19tMjU2aSlfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192MTZoaSkoX19tMjU2aSkoVjEpLCAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2aGkpKF9fbTI1NmkpKFYyKSwgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKE0pICYgMHgwMSkgPyAxNiA6IDApLCAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChNKSAmIDB4MDIpID8gMTcgOiAxKSwgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoTSkgJiAweDA0KSA/IDE4IDogMiksICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKE0pICYgMHgwOCkgPyAxOSA6IDMpLCAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChNKSAmIDB4MTApID8gMjAgOiA0KSwgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoTSkgJiAweDIwKSA/IDIxIDogNSksICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKE0pICYgMHg0MCkgPyAyMiA6IDYpLCAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChNKSAmIDB4ODApID8gMjMgOiA3KSwgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoTSkgJiAweDAxKSA/IDI0IDogOCksICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKE0pICYgMHgwMikgPyAyNSA6IDkpLCAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChNKSAmIDB4MDQpID8gMjYgOiAxMCksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoTSkgJiAweDA4KSA/IDI3IDogMTEpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKE0pICYgMHgxMCkgPyAyOCA6IDEyKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChNKSAmIDB4MjApID8gMjkgOiAxMyksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoTSkgJiAweDQwKSA/IDMwIDogMTQpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKE0pICYgMHg4MCkgPyAzMSA6IDE1KSk7IH0pCi0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfY21wZXFfZXBpOChfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpCi17Ci0gIHJldHVybiAoX19tMjU2aSkoKF9fdjMycWkpX19hID09IChfX3YzMnFpKV9fYik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfY21wZXFfZXBpMTYoX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKQotewotICByZXR1cm4gKF9fbTI1NmkpKChfX3YxNmhpKV9fYSA9PSAoX192MTZoaSlfX2IpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X2NtcGVxX2VwaTMyKF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikKLXsKLSAgcmV0dXJuIChfX20yNTZpKSgoX192OHNpKV9fYSA9PSAoX192OHNpKV9fYik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfY21wZXFfZXBpNjQoX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKQotewotICByZXR1cm4gKF9fbTI1NmkpKF9fYSA9PSBfX2IpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X2NtcGd0X2VwaTgoX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKQotewotICAvKiBUaGlzIGZ1bmN0aW9uIGFsd2F5cyBwZXJmb3JtcyBhIHNpZ25lZCBjb21wYXJpc29uLCBidXQgX192MzJxaSBpcyBhIGNoYXIKLSAgICAgd2hpY2ggbWF5IGJlIHNpZ25lZCBvciB1bnNpZ25lZCwgc28gdXNlIF9fdjMycXMuICovCi0gIHJldHVybiAoX19tMjU2aSkoKF9fdjMycXMpX19hID4gKF9fdjMycXMpX19iKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9jbXBndF9lcGkxNihfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpCi17Ci0gIHJldHVybiAoX19tMjU2aSkoKF9fdjE2aGkpX19hID4gKF9fdjE2aGkpX19iKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9jbXBndF9lcGkzMihfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpCi17Ci0gIHJldHVybiAoX19tMjU2aSkoKF9fdjhzaSlfX2EgPiAoX192OHNpKV9fYik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfY21wZ3RfZXBpNjQoX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKQotewotICByZXR1cm4gKF9fbTI1NmkpKF9fYSA+IF9fYik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfaGFkZF9lcGkxNihfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpCi17Ci0gICAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3BoYWRkdzI1NigoX192MTZoaSlfX2EsIChfX3YxNmhpKV9fYik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfaGFkZF9lcGkzMihfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpCi17Ci0gICAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3BoYWRkZDI1NigoX192OHNpKV9fYSwgKF9fdjhzaSlfX2IpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X2hhZGRzX2VwaTE2KF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikKLXsKLSAgICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfcGhhZGRzdzI1NigoX192MTZoaSlfX2EsIChfX3YxNmhpKV9fYik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfaHN1Yl9lcGkxNihfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpCi17Ci0gICAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3Boc3VidzI1NigoX192MTZoaSlfX2EsIChfX3YxNmhpKV9fYik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfaHN1Yl9lcGkzMihfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpCi17Ci0gICAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3Boc3ViZDI1NigoX192OHNpKV9fYSwgKF9fdjhzaSlfX2IpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X2hzdWJzX2VwaTE2KF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikKLXsKLSAgICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfcGhzdWJzdzI1NigoX192MTZoaSlfX2EsIChfX3YxNmhpKV9fYik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfbWFkZHVic19lcGkxNihfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpCi17Ci0gICAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3BtYWRkdWJzdzI1NigoX192MzJxaSlfX2EsIChfX3YzMnFpKV9fYik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfbWFkZF9lcGkxNihfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpCi17Ci0gIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9wbWFkZHdkMjU2KChfX3YxNmhpKV9fYSwgKF9fdjE2aGkpX19iKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXhfZXBpOChfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpCi17Ci0gIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9wbWF4c2IyNTYoKF9fdjMycWkpX19hLCAoX192MzJxaSlfX2IpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X21heF9lcGkxNihfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpCi17Ci0gIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9wbWF4c3cyNTYoKF9fdjE2aGkpX19hLCAoX192MTZoaSlfX2IpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X21heF9lcGkzMihfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpCi17Ci0gIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9wbWF4c2QyNTYoKF9fdjhzaSlfX2EsIChfX3Y4c2kpX19iKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXhfZXB1OChfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpCi17Ci0gIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9wbWF4dWIyNTYoKF9fdjMycWkpX19hLCAoX192MzJxaSlfX2IpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X21heF9lcHUxNihfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpCi17Ci0gIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9wbWF4dXcyNTYoKF9fdjE2aGkpX19hLCAoX192MTZoaSlfX2IpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X21heF9lcHUzMihfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpCi17Ci0gIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9wbWF4dWQyNTYoKF9fdjhzaSlfX2EsIChfX3Y4c2kpX19iKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9taW5fZXBpOChfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpCi17Ci0gIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9wbWluc2IyNTYoKF9fdjMycWkpX19hLCAoX192MzJxaSlfX2IpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X21pbl9lcGkxNihfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpCi17Ci0gIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9wbWluc3cyNTYoKF9fdjE2aGkpX19hLCAoX192MTZoaSlfX2IpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X21pbl9lcGkzMihfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpCi17Ci0gIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9wbWluc2QyNTYoKF9fdjhzaSlfX2EsIChfX3Y4c2kpX19iKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9taW5fZXB1OChfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpCi17Ci0gIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9wbWludWIyNTYoKF9fdjMycWkpX19hLCAoX192MzJxaSlfX2IpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X21pbl9lcHUxNihfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpCi17Ci0gIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9wbWludXcyNTYgKChfX3YxNmhpKV9fYSwgKF9fdjE2aGkpX19iKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9taW5fZXB1MzIoX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKQotewotICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfcG1pbnVkMjU2KChfX3Y4c2kpX19hLCAoX192OHNpKV9fYik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIGludCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tb3ZlbWFza19lcGk4KF9fbTI1NmkgX19hKQotewotICByZXR1cm4gX19idWlsdGluX2lhMzJfcG1vdm1za2IyNTYoKF9fdjMycWkpX19hKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9jdnRlcGk4X2VwaTE2KF9fbTEyOGkgX19WKQotewotICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfcG1vdnN4YncyNTYoKF9fdjE2cWkpX19WKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9jdnRlcGk4X2VwaTMyKF9fbTEyOGkgX19WKQotewotICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfcG1vdnN4YmQyNTYoKF9fdjE2cWkpX19WKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9jdnRlcGk4X2VwaTY0KF9fbTEyOGkgX19WKQotewotICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfcG1vdnN4YnEyNTYoKF9fdjE2cWkpX19WKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9jdnRlcGkxNl9lcGkzMihfX20xMjhpIF9fVikKLXsKLSAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3Btb3ZzeHdkMjU2KChfX3Y4aGkpX19WKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9jdnRlcGkxNl9lcGk2NChfX20xMjhpIF9fVikKLXsKLSAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3Btb3ZzeHdxMjU2KChfX3Y4aGkpX19WKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9jdnRlcGkzMl9lcGk2NChfX20xMjhpIF9fVikKLXsKLSAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3Btb3ZzeGRxMjU2KChfX3Y0c2kpX19WKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9jdnRlcHU4X2VwaTE2KF9fbTEyOGkgX19WKQotewotICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfcG1vdnp4YncyNTYoKF9fdjE2cWkpX19WKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9jdnRlcHU4X2VwaTMyKF9fbTEyOGkgX19WKQotewotICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfcG1vdnp4YmQyNTYoKF9fdjE2cWkpX19WKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9jdnRlcHU4X2VwaTY0KF9fbTEyOGkgX19WKQotewotICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfcG1vdnp4YnEyNTYoKF9fdjE2cWkpX19WKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9jdnRlcHUxNl9lcGkzMihfX20xMjhpIF9fVikKLXsKLSAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3Btb3Z6eHdkMjU2KChfX3Y4aGkpX19WKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9jdnRlcHUxNl9lcGk2NChfX20xMjhpIF9fVikKLXsKLSAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3Btb3Z6eHdxMjU2KChfX3Y4aGkpX19WKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9jdnRlcHUzMl9lcGk2NChfX20xMjhpIF9fVikKLXsKLSAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3Btb3Z6eGRxMjU2KChfX3Y0c2kpX19WKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfbXVsX2VwaTMyKF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikKLXsKLSAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3BtdWxkcTI1NigoX192OHNpKV9fYSwgKF9fdjhzaSlfX2IpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X211bGhyc19lcGkxNihfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpCi17Ci0gIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9wbXVsaHJzdzI1NigoX192MTZoaSlfX2EsIChfX3YxNmhpKV9fYik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfbXVsaGlfZXB1MTYoX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKQotewotICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfcG11bGh1dzI1NigoX192MTZoaSlfX2EsIChfX3YxNmhpKV9fYik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfbXVsaGlfZXBpMTYoX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKQotewotICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfcG11bGh3MjU2KChfX3YxNmhpKV9fYSwgKF9fdjE2aGkpX19iKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tdWxsb19lcGkxNihfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpCi17Ci0gIHJldHVybiAoX19tMjU2aSkoKF9fdjE2aGkpX19hICogKF9fdjE2aGkpX19iKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfbXVsbG9fZXBpMzIgKF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikKLXsKLSAgcmV0dXJuIChfX20yNTZpKSgoX192OHNpKV9fYSAqIChfX3Y4c2kpX19iKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tdWxfZXB1MzIoX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKQotewotICByZXR1cm4gX19idWlsdGluX2lhMzJfcG11bHVkcTI1NigoX192OHNpKV9fYSwgKF9fdjhzaSlfX2IpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X29yX3NpMjU2KF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikKLXsKLSAgcmV0dXJuIF9fYSB8IF9fYjsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9zYWRfZXB1OChfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpCi17Ci0gIHJldHVybiBfX2J1aWx0aW5faWEzMl9wc2FkYncyNTYoKF9fdjMycWkpX19hLCAoX192MzJxaSlfX2IpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X3NodWZmbGVfZXBpOChfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpCi17Ci0gIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9wc2h1ZmIyNTYoKF9fdjMycWkpX19hLCAoX192MzJxaSlfX2IpOwotfQotCi0jZGVmaW5lIF9tbTI1Nl9zaHVmZmxlX2VwaTMyKGEsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCi0gIChfX20yNTZpKV9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKChfX3Y4c2kpKF9fbTI1NmkpKGEpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2kpX21tMjU2X3NldHplcm9fc2kyNTYoKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW1tKSAmIDB4MywgKChpbW0pICYgMHhjKSA+PiAyLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoaW1tKSAmIDB4MzApID4+IDQsICgoaW1tKSAmIDB4YzApID4+IDYsIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNCArICgoKGltbSkgJiAweDAzKSA+PiAwKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0ICsgKCgoaW1tKSAmIDB4MGMpID4+IDIpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQgKyAoKChpbW0pICYgMHgzMCkgPj4gNCksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNCArICgoKGltbSkgJiAweGMwKSA+PiA2KSk7IH0pCi0KLSNkZWZpbmUgX21tMjU2X3NodWZmbGVoaV9lcGkxNihhLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAotICAoX19tMjU2aSlfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192MTZoaSkoX19tMjU2aSkoYSksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2aGkpX21tMjU2X3NldHplcm9fc2kyNTYoKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAxLCAyLCAzLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQgKyAoKChpbW0pICYgMHgwMykgPj4gMCksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNCArICgoKGltbSkgJiAweDBjKSA+PiAyKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0ICsgKCgoaW1tKSAmIDB4MzApID4+IDQpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQgKyAoKChpbW0pICYgMHhjMCkgPj4gNiksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCwgOSwgMTAsIDExLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyICsgKCgoaW1tKSAmIDB4MDMpID4+IDApLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyICsgKCgoaW1tKSAmIDB4MGMpID4+IDIpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyICsgKCgoaW1tKSAmIDB4MzApID4+IDQpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyICsgKCgoaW1tKSAmIDB4YzApID4+IDYpKTsgfSkKLQotI2RlZmluZSBfbW0yNTZfc2h1ZmZsZWxvX2VwaTE2KGEsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCi0gIChfX20yNTZpKV9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKChfX3YxNmhpKShfX20yNTZpKShhKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZoaSlfbW0yNTZfc2V0emVyb19zaTI1NigpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbW0pICYgMHgzLCgoaW1tKSAmIDB4YykgPj4gMiwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGltbSkgJiAweDMwKSA+PiA0LCAoKGltbSkgJiAweGMwKSA+PiA2LCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQsIDUsIDYsIDcsIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCArICgoKGltbSkgJiAweDAzKSA+PiAwKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4ICsgKCgoaW1tKSAmIDB4MGMpID4+IDIpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDggKyAoKChpbW0pICYgMHgzMCkgPj4gNCksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCArICgoKGltbSkgJiAweGMwKSA+PiA2KSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMiwgMTMsIDE0LCAxNSk7IH0pCi0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfc2lnbl9lcGk4KF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikKLXsKLSAgICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfcHNpZ25iMjU2KChfX3YzMnFpKV9fYSwgKF9fdjMycWkpX19iKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9zaWduX2VwaTE2KF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikKLXsKLSAgICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfcHNpZ253MjU2KChfX3YxNmhpKV9fYSwgKF9fdjE2aGkpX19iKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9zaWduX2VwaTMyKF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikKLXsKLSAgICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfcHNpZ25kMjU2KChfX3Y4c2kpX19hLCAoX192OHNpKV9fYik7Ci19Ci0KLSNkZWZpbmUgX21tMjU2X3NsbGlfc2kyNTYoYSwgY291bnQpIF9fZXh0ZW5zaW9uX18gKHsgXAotICAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9wc2xsZHFpMjU2KChfX20yNTZpKShhKSwgKGNvdW50KSo4KTsgfSkKLQotI2RlZmluZSBfbW0yNTZfYnNsbGlfZXBpMTI4KGEsIGNvdW50KSBfbW0yNTZfc2xsaV9zaTI1NigoYSksIChjb3VudCkpCi0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfc2xsaV9lcGkxNihfX20yNTZpIF9fYSwgaW50IF9fY291bnQpCi17Ci0gIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9wc2xsd2kyNTYoKF9fdjE2aGkpX19hLCBfX2NvdW50KTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9zbGxfZXBpMTYoX19tMjU2aSBfX2EsIF9fbTEyOGkgX19jb3VudCkKLXsKLSAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3BzbGx3MjU2KChfX3YxNmhpKV9fYSwgKF9fdjhoaSlfX2NvdW50KTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9zbGxpX2VwaTMyKF9fbTI1NmkgX19hLCBpbnQgX19jb3VudCkKLXsKLSAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3BzbGxkaTI1NigoX192OHNpKV9fYSwgX19jb3VudCk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfc2xsX2VwaTMyKF9fbTI1NmkgX19hLCBfX20xMjhpIF9fY291bnQpCi17Ci0gIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9wc2xsZDI1NigoX192OHNpKV9fYSwgKF9fdjRzaSlfX2NvdW50KTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9zbGxpX2VwaTY0KF9fbTI1NmkgX19hLCBpbnQgX19jb3VudCkKLXsKLSAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3BzbGxxaTI1NihfX2EsIF9fY291bnQpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X3NsbF9lcGk2NChfX20yNTZpIF9fYSwgX19tMTI4aSBfX2NvdW50KQotewotICByZXR1cm4gX19idWlsdGluX2lhMzJfcHNsbHEyNTYoX19hLCBfX2NvdW50KTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9zcmFpX2VwaTE2KF9fbTI1NmkgX19hLCBpbnQgX19jb3VudCkKLXsKLSAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3BzcmF3aTI1NigoX192MTZoaSlfX2EsIF9fY291bnQpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X3NyYV9lcGkxNihfX20yNTZpIF9fYSwgX19tMTI4aSBfX2NvdW50KQotewotICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfcHNyYXcyNTYoKF9fdjE2aGkpX19hLCAoX192OGhpKV9fY291bnQpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X3NyYWlfZXBpMzIoX19tMjU2aSBfX2EsIGludCBfX2NvdW50KQotewotICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfcHNyYWRpMjU2KChfX3Y4c2kpX19hLCBfX2NvdW50KTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9zcmFfZXBpMzIoX19tMjU2aSBfX2EsIF9fbTEyOGkgX19jb3VudCkKLXsKLSAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3BzcmFkMjU2KChfX3Y4c2kpX19hLCAoX192NHNpKV9fY291bnQpOwotfQotCi0jZGVmaW5lIF9tbTI1Nl9zcmxpX3NpMjU2KGEsIGNvdW50KSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgKF9fbTI1NmkpX19idWlsdGluX2lhMzJfcHNybGRxaTI1NigoX19tMjU2aSkoYSksIChjb3VudCkqOCk7IH0pCi0KLSNkZWZpbmUgX21tMjU2X2JzcmxpX2VwaTEyOChhLCBjb3VudCkgX21tMjU2X3NybGlfc2kyNTYoKGEpLCAoY291bnQpKQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X3NybGlfZXBpMTYoX19tMjU2aSBfX2EsIGludCBfX2NvdW50KQotewotICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfcHNybHdpMjU2KChfX3YxNmhpKV9fYSwgX19jb3VudCk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfc3JsX2VwaTE2KF9fbTI1NmkgX19hLCBfX20xMjhpIF9fY291bnQpCi17Ci0gIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9wc3JsdzI1NigoX192MTZoaSlfX2EsIChfX3Y4aGkpX19jb3VudCk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfc3JsaV9lcGkzMihfX20yNTZpIF9fYSwgaW50IF9fY291bnQpCi17Ci0gIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9wc3JsZGkyNTYoKF9fdjhzaSlfX2EsIF9fY291bnQpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X3NybF9lcGkzMihfX20yNTZpIF9fYSwgX19tMTI4aSBfX2NvdW50KQotewotICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfcHNybGQyNTYoKF9fdjhzaSlfX2EsIChfX3Y0c2kpX19jb3VudCk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfc3JsaV9lcGk2NChfX20yNTZpIF9fYSwgaW50IF9fY291bnQpCi17Ci0gIHJldHVybiBfX2J1aWx0aW5faWEzMl9wc3JscWkyNTYoX19hLCBfX2NvdW50KTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9zcmxfZXBpNjQoX19tMjU2aSBfX2EsIF9fbTEyOGkgX19jb3VudCkKLXsKLSAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3BzcmxxMjU2KF9fYSwgX19jb3VudCk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfc3ViX2VwaTgoX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKQotewotICByZXR1cm4gKF9fbTI1NmkpKChfX3YzMnFpKV9fYSAtIChfX3YzMnFpKV9fYik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfc3ViX2VwaTE2KF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikKLXsKLSAgcmV0dXJuIChfX20yNTZpKSgoX192MTZoaSlfX2EgLSAoX192MTZoaSlfX2IpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X3N1Yl9lcGkzMihfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpCi17Ci0gIHJldHVybiAoX19tMjU2aSkoKF9fdjhzaSlfX2EgLSAoX192OHNpKV9fYik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfc3ViX2VwaTY0KF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikKLXsKLSAgcmV0dXJuIF9fYSAtIF9fYjsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9zdWJzX2VwaTgoX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKQotewotICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfcHN1YnNiMjU2KChfX3YzMnFpKV9fYSwgKF9fdjMycWkpX19iKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9zdWJzX2VwaTE2KF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikKLXsKLSAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3BzdWJzdzI1NigoX192MTZoaSlfX2EsIChfX3YxNmhpKV9fYik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfc3Vic19lcHU4KF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikKLXsKLSAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3BzdWJ1c2IyNTYoKF9fdjMycWkpX19hLCAoX192MzJxaSlfX2IpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X3N1YnNfZXB1MTYoX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKQotewotICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfcHN1YnVzdzI1NigoX192MTZoaSlfX2EsIChfX3YxNmhpKV9fYik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfdW5wYWNraGlfZXBpOChfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpCi17Ci0gIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192MzJxaSlfX2EsIChfX3YzMnFpKV9fYiwgOCwgMzIrOCwgOSwgMzIrOSwgMTAsIDMyKzEwLCAxMSwgMzIrMTEsIDEyLCAzMisxMiwgMTMsIDMyKzEzLCAxNCwgMzIrMTQsIDE1LCAzMisxNSwgMjQsIDMyKzI0LCAyNSwgMzIrMjUsIDI2LCAzMisyNiwgMjcsIDMyKzI3LCAyOCwgMzIrMjgsIDI5LCAzMisyOSwgMzAsIDMyKzMwLCAzMSwgMzIrMzEpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X3VucGFja2hpX2VwaTE2KF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikKLXsKLSAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKChfX3YxNmhpKV9fYSwgKF9fdjE2aGkpX19iLCA0LCAxNis0LCA1LCAxNis1LCA2LCAxNis2LCA3LCAxNis3LCAxMiwgMTYrMTIsIDEzLCAxNisxMywgMTQsIDE2KzE0LCAxNSwgMTYrMTUpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X3VucGFja2hpX2VwaTMyKF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikKLXsKLSAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKChfX3Y4c2kpX19hLCAoX192OHNpKV9fYiwgMiwgOCsyLCAzLCA4KzMsIDYsIDgrNiwgNywgOCs3KTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl91bnBhY2toaV9lcGk2NChfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpCi17Ci0gIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX2EsIF9fYiwgMSwgNCsxLCAzLCA0KzMpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X3VucGFja2xvX2VwaTgoX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKQotewotICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjMycWkpX19hLCAoX192MzJxaSlfX2IsIDAsIDMyKzAsIDEsIDMyKzEsIDIsIDMyKzIsIDMsIDMyKzMsIDQsIDMyKzQsIDUsIDMyKzUsIDYsIDMyKzYsIDcsIDMyKzcsIDE2LCAzMisxNiwgMTcsIDMyKzE3LCAxOCwgMzIrMTgsIDE5LCAzMisxOSwgMjAsIDMyKzIwLCAyMSwgMzIrMjEsIDIyLCAzMisyMiwgMjMsIDMyKzIzKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl91bnBhY2tsb19lcGkxNihfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpCi17Ci0gIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192MTZoaSlfX2EsIChfX3YxNmhpKV9fYiwgMCwgMTYrMCwgMSwgMTYrMSwgMiwgMTYrMiwgMywgMTYrMywgOCwgMTYrOCwgOSwgMTYrOSwgMTAsIDE2KzEwLCAxMSwgMTYrMTEpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X3VucGFja2xvX2VwaTMyKF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikKLXsKLSAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKChfX3Y4c2kpX19hLCAoX192OHNpKV9fYiwgMCwgOCswLCAxLCA4KzEsIDQsIDgrNCwgNSwgOCs1KTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl91bnBhY2tsb19lcGk2NChfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpCi17Ci0gIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX2EsIF9fYiwgMCwgNCswLCAyLCA0KzIpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X3hvcl9zaTI1NihfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpCi17Ci0gIHJldHVybiBfX2EgXiBfX2I7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfc3RyZWFtX2xvYWRfc2kyNTYoX19tMjU2aSBjb25zdCAqX19WKQotewotICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfbW92bnRkcWEyNTYoKGNvbnN0IF9fdjRkaSAqKV9fVik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9icm9hZGNhc3Rzc19wcyhfX20xMjggX19YKQotewotICByZXR1cm4gKF9fbTEyOClfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192NHNmKV9fWCwgKF9fdjRzZilfX1gsIDAsIDAsIDAsIDApOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2Jyb2FkY2FzdHNkX3BkKF9fbTEyOGQgX19hKQotewotICByZXR1cm4gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19hLCBfX2EsIDAsIDApOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfYnJvYWRjYXN0c3NfcHMoX19tMTI4IF9fWCkKLXsKLSAgcmV0dXJuIChfX20yNTYpX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjRzZilfX1gsIChfX3Y0c2YpX19YLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9icm9hZGNhc3RzZF9wZChfX20xMjhkIF9fWCkKLXsKLSAgcmV0dXJuIChfX20yNTZkKV9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKChfX3YyZGYpX19YLCAoX192MmRmKV9fWCwgMCwgMCwgMCwgMCk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfYnJvYWRjYXN0c2kxMjhfc2kyNTYoX19tMTI4aSBfX1gpCi17Ci0gIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX1gsIF9fWCwgMCwgMSwgMCwgMSk7Ci19Ci0KLSNkZWZpbmUgX21tX2JsZW5kX2VwaTMyKFYxLCBWMiwgTSkgX19leHRlbnNpb25fXyAoeyBcCi0gIChfX20xMjhpKV9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKChfX3Y0c2kpKF9fbTEyOGkpKFYxKSwgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzaSkoX19tMTI4aSkoVjIpLCAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChNKSAmIDB4MDEpID8gNCA6IDApLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKE0pICYgMHgwMikgPyA1IDogMSksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoTSkgJiAweDA0KSA/IDYgOiAyKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChNKSAmIDB4MDgpID8gNyA6IDMpKTsgfSkKLQotI2RlZmluZSBfbW0yNTZfYmxlbmRfZXBpMzIoVjEsIFYyLCBNKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgKF9fbTI1NmkpX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjhzaSkoX19tMjU2aSkoVjEpLCAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzaSkoX19tMjU2aSkoVjIpLCAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoTSkgJiAweDAxKSA/ICA4IDogMCksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoTSkgJiAweDAyKSA/ICA5IDogMSksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoTSkgJiAweDA0KSA/IDEwIDogMiksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoTSkgJiAweDA4KSA/IDExIDogMyksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoTSkgJiAweDEwKSA/IDEyIDogNCksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoTSkgJiAweDIwKSA/IDEzIDogNSksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoTSkgJiAweDQwKSA/IDE0IDogNiksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoTSkgJiAweDgwKSA/IDE1IDogNykpOyB9KQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X2Jyb2FkY2FzdGJfZXBpOChfX20xMjhpIF9fWCkKLXsKLSAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKChfX3YxNnFpKV9fWCwgKF9fdjE2cWkpX19YLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9icm9hZGNhc3R3X2VwaTE2KF9fbTEyOGkgX19YKQotewotICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjhoaSlfX1gsIChfX3Y4aGkpX19YLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9icm9hZGNhc3RkX2VwaTMyKF9fbTEyOGkgX19YKQotewotICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjRzaSlfX1gsIChfX3Y0c2kpX19YLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9icm9hZGNhc3RxX2VwaTY0KF9fbTEyOGkgX19YKQotewotICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19YLCBfX1gsIDAsIDAsIDAsIDApOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2Jyb2FkY2FzdGJfZXBpOChfX20xMjhpIF9fWCkKLXsKLSAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKChfX3YxNnFpKV9fWCwgKF9fdjE2cWkpX19YLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9icm9hZGNhc3R3X2VwaTE2KF9fbTEyOGkgX19YKQotewotICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjhoaSlfX1gsIChfX3Y4aGkpX19YLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwKTsKLX0KLQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2Jyb2FkY2FzdGRfZXBpMzIoX19tMTI4aSBfX1gpCi17Ci0gIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192NHNpKV9fWCwgKF9fdjRzaSlfX1gsIDAsIDAsIDAsIDApOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2Jyb2FkY2FzdHFfZXBpNjQoX19tMTI4aSBfX1gpCi17Ci0gIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX1gsIF9fWCwgMCwgMCk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfcGVybXV0ZXZhcjh4MzJfZXBpMzIoX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKQotewotICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfcGVybXZhcnNpMjU2KChfX3Y4c2kpX19hLCAoX192OHNpKV9fYik7Ci19Ci0KLSNkZWZpbmUgX21tMjU2X3Blcm11dGU0eDY0X3BkKFYsIE0pIF9fZXh0ZW5zaW9uX18gKHsgXAotICAoX19tMjU2ZClfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192NGRmKShfX20yNTZkKShWKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRmKV9tbTI1Nl9zZXR6ZXJvX3BkKCksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKE0pICYgMHgzLCAoKE0pICYgMHhjKSA+PiAyLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoTSkgJiAweDMwKSA+PiA0LCAoKE0pICYgMHhjMCkgPj4gNik7IH0pCi0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9wZXJtdXRldmFyOHgzMl9wcyhfX20yNTYgX19hLCBfX20yNTZpIF9fYikKLXsKLSAgcmV0dXJuIChfX20yNTYpX19idWlsdGluX2lhMzJfcGVybXZhcnNmMjU2KChfX3Y4c2YpX19hLCAoX192OHNpKV9fYik7Ci19Ci0KLSNkZWZpbmUgX21tMjU2X3Blcm11dGU0eDY0X2VwaTY0KFYsIE0pIF9fZXh0ZW5zaW9uX18gKHsgXAotICAoX19tMjU2aSlfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192NGRpKShfX20yNTZpKShWKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRpKV9tbTI1Nl9zZXR6ZXJvX3NpMjU2KCksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKE0pICYgMHgzLCAoKE0pICYgMHhjKSA+PiAyLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoTSkgJiAweDMwKSA+PiA0LCAoKE0pICYgMHhjMCkgPj4gNik7IH0pCi0KLSNkZWZpbmUgX21tMjU2X3Blcm11dGUyeDEyOF9zaTI1NihWMSwgVjIsIE0pIF9fZXh0ZW5zaW9uX18gKHsgXAotICAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9wZXJtdGkyNTYoKF9fbTI1NmkpKFYxKSwgKF9fbTI1NmkpKFYyKSwgKE0pKTsgfSkKLQotI2RlZmluZSBfbW0yNTZfZXh0cmFjdGkxMjhfc2kyNTYoViwgTSkgX19leHRlbnNpb25fXyAoeyBcCi0gIChfX20xMjhpKV9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKChfX3Y0ZGkpKF9fbTI1NmkpKFYpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGkpX21tMjU2X3NldHplcm9fc2kyNTYoKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChNKSAmIDEpID8gMiA6IDApLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKE0pICYgMSkgPyAzIDogMSkgKTsgfSkKLQotI2RlZmluZSBfbW0yNTZfaW5zZXJ0aTEyOF9zaTI1NihWMSwgVjIsIE0pIF9fZXh0ZW5zaW9uX18gKHsgXAotICAoX19tMjU2aSlfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192NGRpKShfX20yNTZpKShWMSksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkaSlfbW0yNTZfY2FzdHNpMTI4X3NpMjU2KChfX20xMjhpKShWMikpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKE0pICYgMSkgPyAwIDogNCksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoTSkgJiAxKSA/IDEgOiA1KSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChNKSAmIDEpID8gNCA6IDIpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKE0pICYgMSkgPyA1IDogMykgKTsgfSkKLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXNrbG9hZF9lcGkzMihpbnQgY29uc3QgKl9fWCwgX19tMjU2aSBfX00pCi17Ci0gIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9tYXNrbG9hZGQyNTYoKGNvbnN0IF9fdjhzaSAqKV9fWCwgKF9fdjhzaSlfX00pOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X21hc2tsb2FkX2VwaTY0KGxvbmcgbG9uZyBjb25zdCAqX19YLCBfX20yNTZpIF9fTSkKLXsKLSAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX21hc2tsb2FkcTI1NigoY29uc3QgX192NGRpICopX19YLCBfX00pOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2tsb2FkX2VwaTMyKGludCBjb25zdCAqX19YLCBfX20xMjhpIF9fTSkKLXsKLSAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX21hc2tsb2FkZCgoY29uc3QgX192NHNpICopX19YLCAoX192NHNpKV9fTSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWFza2xvYWRfZXBpNjQobG9uZyBsb25nIGNvbnN0ICpfX1gsIF9fbTEyOGkgX19NKQotewotICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfbWFza2xvYWRxKChjb25zdCBfX3YyZGkgKilfX1gsIChfX3YyZGkpX19NKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXNrc3RvcmVfZXBpMzIoaW50ICpfX1gsIF9fbTI1NmkgX19NLCBfX20yNTZpIF9fWSkKLXsKLSAgX19idWlsdGluX2lhMzJfbWFza3N0b3JlZDI1NigoX192OHNpICopX19YLCAoX192OHNpKV9fTSwgKF9fdjhzaSlfX1kpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X21hc2tzdG9yZV9lcGk2NChsb25nIGxvbmcgKl9fWCwgX19tMjU2aSBfX00sIF9fbTI1NmkgX19ZKQotewotICBfX2J1aWx0aW5faWEzMl9tYXNrc3RvcmVxMjU2KChfX3Y0ZGkgKilfX1gsIF9fTSwgX19ZKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tYXNrc3RvcmVfZXBpMzIoaW50ICpfX1gsIF9fbTEyOGkgX19NLCBfX20xMjhpIF9fWSkKLXsKLSAgX19idWlsdGluX2lhMzJfbWFza3N0b3JlZCgoX192NHNpICopX19YLCAoX192NHNpKV9fTSwgKF9fdjRzaSlfX1kpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2tzdG9yZV9lcGk2NChsb25nIGxvbmcgKl9fWCwgX19tMTI4aSBfX00sIF9fbTEyOGkgX19ZKQotewotICBfX2J1aWx0aW5faWEzMl9tYXNrc3RvcmVxKCggX192MmRpICopX19YLCBfX00sIF9fWSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfc2xsdl9lcGkzMihfX20yNTZpIF9fWCwgX19tMjU2aSBfX1kpCi17Ci0gIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9wc2xsdjhzaSgoX192OHNpKV9fWCwgKF9fdjhzaSlfX1kpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX3NsbHZfZXBpMzIoX19tMTI4aSBfX1gsIF9fbTEyOGkgX19ZKQotewotICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfcHNsbHY0c2koKF9fdjRzaSlfX1gsIChfX3Y0c2kpX19ZKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9zbGx2X2VwaTY0KF9fbTI1NmkgX19YLCBfX20yNTZpIF9fWSkKLXsKLSAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3BzbGx2NGRpKF9fWCwgX19ZKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9zbGx2X2VwaTY0KF9fbTEyOGkgX19YLCBfX20xMjhpIF9fWSkKLXsKLSAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3BzbGx2MmRpKF9fWCwgX19ZKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9zcmF2X2VwaTMyKF9fbTI1NmkgX19YLCBfX20yNTZpIF9fWSkKLXsKLSAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3BzcmF2OHNpKChfX3Y4c2kpX19YLCAoX192OHNpKV9fWSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fc3Jhdl9lcGkzMihfX20xMjhpIF9fWCwgX19tMTI4aSBfX1kpCi17Ci0gIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9wc3JhdjRzaSgoX192NHNpKV9fWCwgKF9fdjRzaSlfX1kpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X3NybHZfZXBpMzIoX19tMjU2aSBfX1gsIF9fbTI1NmkgX19ZKQotewotICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfcHNybHY4c2koKF9fdjhzaSlfX1gsIChfX3Y4c2kpX19ZKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9zcmx2X2VwaTMyKF9fbTEyOGkgX19YLCBfX20xMjhpIF9fWSkKLXsKLSAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3Bzcmx2NHNpKChfX3Y0c2kpX19YLCAoX192NHNpKV9fWSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfc3Jsdl9lcGk2NChfX20yNTZpIF9fWCwgX19tMjU2aSBfX1kpCi17Ci0gIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9wc3JsdjRkaShfX1gsIF9fWSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fc3Jsdl9lcGk2NChfX20xMjhpIF9fWCwgX19tMTI4aSBfX1kpCi17Ci0gIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9wc3JsdjJkaShfX1gsIF9fWSk7Ci19Ci0KLSNkZWZpbmUgX21tX21hc2tfaTMyZ2F0aGVyX3BkKGEsIG0sIGksIG1hc2ssIHMpIF9fZXh0ZW5zaW9uX18gKHsgXAotICAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9nYXRoZXJkX3BkKChfX3YyZGYpKF9fbTEyOGkpKGEpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRvdWJsZSBjb25zdCAqKShtKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2kpKF9fbTEyOGkpKGkpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikoX19tMTI4ZCkobWFzayksIChzKSk7IH0pCi0KLSNkZWZpbmUgX21tMjU2X21hc2tfaTMyZ2F0aGVyX3BkKGEsIG0sIGksIG1hc2ssIHMpIF9fZXh0ZW5zaW9uX18gKHsgXAotICAoX19tMjU2ZClfX2J1aWx0aW5faWEzMl9nYXRoZXJkX3BkMjU2KChfX3Y0ZGYpKF9fbTI1NmQpKGEpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRvdWJsZSBjb25zdCAqKShtKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2kpKF9fbTEyOGkpKGkpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkZikoX19tMjU2ZCkobWFzayksIChzKSk7IH0pCi0KLSNkZWZpbmUgX21tX21hc2tfaTY0Z2F0aGVyX3BkKGEsIG0sIGksIG1hc2ssIHMpIF9fZXh0ZW5zaW9uX18gKHsgXAotICAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9nYXRoZXJxX3BkKChfX3YyZGYpKF9fbTEyOGQpKGEpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRvdWJsZSBjb25zdCAqKShtKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGkpKF9fbTEyOGkpKGkpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikoX19tMTI4ZCkobWFzayksIChzKSk7IH0pCi0KLSNkZWZpbmUgX21tMjU2X21hc2tfaTY0Z2F0aGVyX3BkKGEsIG0sIGksIG1hc2ssIHMpIF9fZXh0ZW5zaW9uX18gKHsgXAotICAoX19tMjU2ZClfX2J1aWx0aW5faWEzMl9nYXRoZXJxX3BkMjU2KChfX3Y0ZGYpKF9fbTI1NmQpKGEpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRvdWJsZSBjb25zdCAqKShtKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGkpKF9fbTI1NmkpKGkpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkZikoX19tMjU2ZCkobWFzayksIChzKSk7IH0pCi0KLSNkZWZpbmUgX21tX21hc2tfaTMyZ2F0aGVyX3BzKGEsIG0sIGksIG1hc2ssIHMpIF9fZXh0ZW5zaW9uX18gKHsgXAotICAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX2dhdGhlcmRfcHMoKF9fdjRzZikoX19tMTI4KShhKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZsb2F0IGNvbnN0ICopKG0pLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNpKShfX20xMjhpKShpKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikoX19tMTI4KShtYXNrKSwgKHMpKTsgfSkKLQotI2RlZmluZSBfbW0yNTZfbWFza19pMzJnYXRoZXJfcHMoYSwgbSwgaSwgbWFzaywgcykgX19leHRlbnNpb25fXyAoeyBcCi0gIChfX20yNTYpX19idWlsdGluX2lhMzJfZ2F0aGVyZF9wczI1NigoX192OHNmKShfX20yNTYpKGEpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZmxvYXQgY29uc3QgKikobSksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2kpKF9fbTI1NmkpKGkpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNmKShfX20yNTYpKG1hc2spLCAocykpOyB9KQotCi0jZGVmaW5lIF9tbV9tYXNrX2k2NGdhdGhlcl9wcyhhLCBtLCBpLCBtYXNrLCBzKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgKF9fbTEyOClfX2J1aWx0aW5faWEzMl9nYXRoZXJxX3BzKChfX3Y0c2YpKF9fbTEyOCkoYSksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmbG9hdCBjb25zdCAqKShtKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkaSkoX19tMTI4aSkoaSksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpKF9fbTEyOCkobWFzayksIChzKSk7IH0pCi0KLSNkZWZpbmUgX21tMjU2X21hc2tfaTY0Z2F0aGVyX3BzKGEsIG0sIGksIG1hc2ssIHMpIF9fZXh0ZW5zaW9uX18gKHsgXAotICAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX2dhdGhlcnFfcHMyNTYoKF9fdjRzZikoX19tMTI4KShhKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZsb2F0IGNvbnN0ICopKG0pLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRpKShfX20yNTZpKShpKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikoX19tMTI4KShtYXNrKSwgKHMpKTsgfSkKLQotI2RlZmluZSBfbW1fbWFza19pMzJnYXRoZXJfZXBpMzIoYSwgbSwgaSwgbWFzaywgcykgX19leHRlbnNpb25fXyAoeyBcCi0gIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX2dhdGhlcmRfZCgoX192NHNpKShfX20xMjhpKShhKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCBjb25zdCAqKShtKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzaSkoX19tMTI4aSkoaSksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2kpKF9fbTEyOGkpKG1hc2spLCAocykpOyB9KQotCi0jZGVmaW5lIF9tbTI1Nl9tYXNrX2kzMmdhdGhlcl9lcGkzMihhLCBtLCBpLCBtYXNrLCBzKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgKF9fbTI1NmkpX19idWlsdGluX2lhMzJfZ2F0aGVyZF9kMjU2KChfX3Y4c2kpKF9fbTI1NmkpKGEpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50IGNvbnN0ICopKG0pLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNpKShfX20yNTZpKShpKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzaSkoX19tMjU2aSkobWFzayksIChzKSk7IH0pCi0KLSNkZWZpbmUgX21tX21hc2tfaTY0Z2F0aGVyX2VwaTMyKGEsIG0sIGksIG1hc2ssIHMpIF9fZXh0ZW5zaW9uX18gKHsgXAotICAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9nYXRoZXJxX2QoKF9fdjRzaSkoX19tMTI4aSkoYSksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQgY29uc3QgKikobSksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGkpKF9fbTEyOGkpKGkpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNpKShfX20xMjhpKShtYXNrKSwgKHMpKTsgfSkKLQotI2RlZmluZSBfbW0yNTZfbWFza19pNjRnYXRoZXJfZXBpMzIoYSwgbSwgaSwgbWFzaywgcykgX19leHRlbnNpb25fXyAoeyBcCi0gIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX2dhdGhlcnFfZDI1NigoX192NHNpKShfX20xMjhpKShhKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCBjb25zdCAqKShtKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkaSkoX19tMjU2aSkoaSksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2kpKF9fbTEyOGkpKG1hc2spLCAocykpOyB9KQotCi0jZGVmaW5lIF9tbV9tYXNrX2kzMmdhdGhlcl9lcGk2NChhLCBtLCBpLCBtYXNrLCBzKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgKF9fbTEyOGkpX19idWlsdGluX2lhMzJfZ2F0aGVyZF9xKChfX3YyZGkpKF9fbTEyOGkpKGEpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZyBsb25nIGNvbnN0ICopKG0pLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNpKShfX20xMjhpKShpKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkaSkoX19tMTI4aSkobWFzayksIChzKSk7IH0pCi0KLSNkZWZpbmUgX21tMjU2X21hc2tfaTMyZ2F0aGVyX2VwaTY0KGEsIG0sIGksIG1hc2ssIHMpIF9fZXh0ZW5zaW9uX18gKHsgXAotICAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9nYXRoZXJkX3EyNTYoKF9fdjRkaSkoX19tMjU2aSkoYSksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nIGxvbmcgY29uc3QgKikobSksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2kpKF9fbTEyOGkpKGkpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRpKShfX20yNTZpKShtYXNrKSwgKHMpKTsgfSkKLQotI2RlZmluZSBfbW1fbWFza19pNjRnYXRoZXJfZXBpNjQoYSwgbSwgaSwgbWFzaywgcykgX19leHRlbnNpb25fXyAoeyBcCi0gIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX2dhdGhlcnFfcSgoX192MmRpKShfX20xMjhpKShhKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcgbG9uZyBjb25zdCAqKShtKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkaSkoX19tMTI4aSkoaSksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGkpKF9fbTEyOGkpKG1hc2spLCAocykpOyB9KQotCi0jZGVmaW5lIF9tbTI1Nl9tYXNrX2k2NGdhdGhlcl9lcGk2NChhLCBtLCBpLCBtYXNrLCBzKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgKF9fbTI1NmkpX19idWlsdGluX2lhMzJfZ2F0aGVycV9xMjU2KChfX3Y0ZGkpKF9fbTI1NmkpKGEpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZyBsb25nIGNvbnN0ICopKG0pLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRpKShfX20yNTZpKShpKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkaSkoX19tMjU2aSkobWFzayksIChzKSk7IH0pCi0KLSNkZWZpbmUgX21tX2kzMmdhdGhlcl9wZChtLCBpLCBzKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgKF9fbTEyOGQpX19idWlsdGluX2lhMzJfZ2F0aGVyZF9wZCgoX192MmRmKV9tbV91bmRlZmluZWRfcGQoKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkb3VibGUgY29uc3QgKikobSksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNpKShfX20xMjhpKShpKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpX21tX2NtcGVxX3BkKF9tbV9zZXR6ZXJvX3BkKCksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfbW1fc2V0emVyb19wZCgpKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzKSk7IH0pCi0KLSNkZWZpbmUgX21tMjU2X2kzMmdhdGhlcl9wZChtLCBpLCBzKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgKF9fbTI1NmQpX19idWlsdGluX2lhMzJfZ2F0aGVyZF9wZDI1NigoX192NGRmKV9tbTI1Nl91bmRlZmluZWRfcGQoKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkb3VibGUgY29uc3QgKikobSksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNpKShfX20xMjhpKShpKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGYpX21tMjU2X2NtcF9wZChfbW0yNTZfc2V0emVyb19wZCgpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3BkKCksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0NNUF9FUV9PUSksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocykpOyB9KQotCi0jZGVmaW5lIF9tbV9pNjRnYXRoZXJfcGQobSwgaSwgcykgX19leHRlbnNpb25fXyAoeyBcCi0gIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX2dhdGhlcnFfcGQoKF9fdjJkZilfbW1fdW5kZWZpbmVkX3BkKCksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZG91YmxlIGNvbnN0ICopKG0pLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkaSkoX19tMTI4aSkoaSksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKV9tbV9jbXBlcV9wZChfbW1fc2V0emVyb19wZCgpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX21tX3NldHplcm9fcGQoKSksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocykpOyB9KQotCi0jZGVmaW5lIF9tbTI1Nl9pNjRnYXRoZXJfcGQobSwgaSwgcykgX19leHRlbnNpb25fXyAoeyBcCi0gIChfX20yNTZkKV9fYnVpbHRpbl9pYTMyX2dhdGhlcnFfcGQyNTYoKF9fdjRkZilfbW0yNTZfdW5kZWZpbmVkX3BkKCksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZG91YmxlIGNvbnN0ICopKG0pLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkaSkoX19tMjU2aSkoaSksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRmKV9tbTI1Nl9jbXBfcGQoX21tMjU2X3NldHplcm9fcGQoKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfbW0yNTZfc2V0emVyb19wZCgpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9DTVBfRVFfT1EpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHMpKTsgfSkKLQotI2RlZmluZSBfbW1faTMyZ2F0aGVyX3BzKG0sIGksIHMpIF9fZXh0ZW5zaW9uX18gKHsgXAotICAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX2dhdGhlcmRfcHMoKF9fdjRzZilfbW1fdW5kZWZpbmVkX3BzKCksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmbG9hdCBjb25zdCAqKShtKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzaSkoX19tMTI4aSkoaSksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpX21tX2NtcGVxX3BzKF9tbV9zZXR6ZXJvX3BzKCksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3BzKCkpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocykpOyB9KQotCi0jZGVmaW5lIF9tbTI1Nl9pMzJnYXRoZXJfcHMobSwgaSwgcykgX19leHRlbnNpb25fXyAoeyBcCi0gIChfX20yNTYpX19idWlsdGluX2lhMzJfZ2F0aGVyZF9wczI1NigoX192OHNmKV9tbTI1Nl91bmRlZmluZWRfcHMoKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZsb2F0IGNvbnN0ICopKG0pLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNpKShfX20yNTZpKShpKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzZilfbW0yNTZfY21wX3BzKF9tbTI1Nl9zZXR6ZXJvX3BzKCksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfbW0yNTZfc2V0emVyb19wcygpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0NNUF9FUV9PUSksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzKSk7IH0pCi0KLSNkZWZpbmUgX21tX2k2NGdhdGhlcl9wcyhtLCBpLCBzKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgKF9fbTEyOClfX2J1aWx0aW5faWEzMl9nYXRoZXJxX3BzKChfX3Y0c2YpX21tX3VuZGVmaW5lZF9wcygpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZmxvYXQgY29uc3QgKikobSksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGkpKF9fbTEyOGkpKGkpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKV9tbV9jbXBlcV9wcyhfbW1fc2V0emVyb19wcygpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfbW1fc2V0emVyb19wcygpKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHMpKTsgfSkKLQotI2RlZmluZSBfbW0yNTZfaTY0Z2F0aGVyX3BzKG0sIGksIHMpIF9fZXh0ZW5zaW9uX18gKHsgXAotICAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX2dhdGhlcnFfcHMyNTYoKF9fdjRzZilfbW1fdW5kZWZpbmVkX3BzKCksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmbG9hdCBjb25zdCAqKShtKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkaSkoX19tMjU2aSkoaSksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpX21tX2NtcGVxX3BzKF9tbV9zZXR6ZXJvX3BzKCksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3BzKCkpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocykpOyB9KQotCi0jZGVmaW5lIF9tbV9pMzJnYXRoZXJfZXBpMzIobSwgaSwgcykgX19leHRlbnNpb25fXyAoeyBcCi0gIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX2dhdGhlcmRfZCgoX192NHNpKV9tbV91bmRlZmluZWRfc2kxMjgoKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCBjb25zdCAqKShtKSwgKF9fdjRzaSkoX19tMTI4aSkoaSksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2kpX21tX3NldDFfZXBpMzIoLTEpLCAocykpOyB9KQotCi0jZGVmaW5lIF9tbTI1Nl9pMzJnYXRoZXJfZXBpMzIobSwgaSwgcykgX19leHRlbnNpb25fXyAoeyBcCi0gIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX2dhdGhlcmRfZDI1NigoX192OHNpKV9tbTI1Nl91bmRlZmluZWRfc2kyNTYoKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCBjb25zdCAqKShtKSwgKF9fdjhzaSkoX19tMjU2aSkoaSksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2kpX21tMjU2X3NldDFfZXBpMzIoLTEpLCAocykpOyB9KQotCi0jZGVmaW5lIF9tbV9pNjRnYXRoZXJfZXBpMzIobSwgaSwgcykgX19leHRlbnNpb25fXyAoeyBcCi0gIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX2dhdGhlcnFfZCgoX192NHNpKV9tbV91bmRlZmluZWRfc2kxMjgoKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCBjb25zdCAqKShtKSwgKF9fdjJkaSkoX19tMTI4aSkoaSksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2kpX21tX3NldDFfZXBpMzIoLTEpLCAocykpOyB9KQotCi0jZGVmaW5lIF9tbTI1Nl9pNjRnYXRoZXJfZXBpMzIobSwgaSwgcykgX19leHRlbnNpb25fXyAoeyBcCi0gIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX2dhdGhlcnFfZDI1NigoX192NHNpKV9tbV91bmRlZmluZWRfc2kxMjgoKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCBjb25zdCAqKShtKSwgKF9fdjRkaSkoX19tMjU2aSkoaSksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2kpX21tX3NldDFfZXBpMzIoLTEpLCAocykpOyB9KQotCi0jZGVmaW5lIF9tbV9pMzJnYXRoZXJfZXBpNjQobSwgaSwgcykgX19leHRlbnNpb25fXyAoeyBcCi0gIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX2dhdGhlcmRfcSgoX192MmRpKV9tbV91bmRlZmluZWRfc2kxMjgoKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcgbG9uZyBjb25zdCAqKShtKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzaSkoX19tMTI4aSkoaSksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGkpX21tX3NldDFfZXBpNjR4KC0xKSwgKHMpKTsgfSkKLQotI2RlZmluZSBfbW0yNTZfaTMyZ2F0aGVyX2VwaTY0KG0sIGksIHMpIF9fZXh0ZW5zaW9uX18gKHsgXAotICAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9nYXRoZXJkX3EyNTYoKF9fdjRkaSlfbW0yNTZfdW5kZWZpbmVkX3NpMjU2KCksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nIGxvbmcgY29uc3QgKikobSksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2kpKF9fbTEyOGkpKGkpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRpKV9tbTI1Nl9zZXQxX2VwaTY0eCgtMSksIChzKSk7IH0pCi0KLSNkZWZpbmUgX21tX2k2NGdhdGhlcl9lcGk2NChtLCBpLCBzKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgKF9fbTEyOGkpX19idWlsdGluX2lhMzJfZ2F0aGVycV9xKChfX3YyZGkpX21tX3VuZGVmaW5lZF9zaTEyOCgpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZyBsb25nIGNvbnN0ICopKG0pLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRpKShfX20xMjhpKShpKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkaSlfbW1fc2V0MV9lcGk2NHgoLTEpLCAocykpOyB9KQotCi0jZGVmaW5lIF9tbTI1Nl9pNjRnYXRoZXJfZXBpNjQobSwgaSwgcykgX19leHRlbnNpb25fXyAoeyBcCi0gIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX2dhdGhlcnFfcTI1NigoX192NGRpKV9tbTI1Nl91bmRlZmluZWRfc2kyNTYoKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcgbG9uZyBjb25zdCAqKShtKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkaSkoX19tMjU2aSkoaSksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGkpX21tMjU2X3NldDFfZXBpNjR4KC0xKSwgKHMpKTsgfSkKLQotI3VuZGVmIF9fREVGQVVMVF9GTl9BVFRSUwotCi0jZW5kaWYgLyogX19BVlgySU5UUklOX0ggKi8KZGlmZiAtLWdpdCBhL2NsYW5nLTI1NzcxMTMvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvYXZ4NTEyYndpbnRyaW4uaCBiL2NsYW5nLTI1NzcxMTMvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvYXZ4NTEyYndpbnRyaW4uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjI4OWVkNy4uMDAwMDAwMAotLS0gYS9jbGFuZy0yNTc3MTEzL2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL2F2eDUxMmJ3aW50cmluLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNTQyICswLDAgQEAKLS8qPT09LS0tLS0tLS0tLS0tLSBhdng1MTJid2ludHJpbi5oIC0gQVZYNTEyQlcgaW50cmluc2ljcyAtLS0tLS0tLS0tLS0tLS0tLS09PT0KLSAqCi0gKgotICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQotICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKLSAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKLSAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKLSAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcwotICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKLSAqCi0gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgotICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCi0gKgotICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKLSAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAotICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCi0gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAotICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgotICogVEhFIFNPRlRXQVJFLgotICoKLSAqPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KLSAqLwotI2lmbmRlZiBfX0lNTUlOVFJJTl9ICi0jZXJyb3IgIk5ldmVyIHVzZSA8YXZ4NTEyYndpbnRyaW4uaD4gZGlyZWN0bHk7IGluY2x1ZGUgPGltbWludHJpbi5oPiBpbnN0ZWFkLiIKLSNlbmRpZgotCi0jaWZuZGVmIF9fQVZYNTEyQldJTlRSSU5fSAotI2RlZmluZSBfX0FWWDUxMkJXSU5UUklOX0gKLQotdHlwZWRlZiB1bnNpZ25lZCBpbnQgX19tbWFzazMyOwotdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgX19tbWFzazY0OwotdHlwZWRlZiBjaGFyIF9fdjY0cWkgX19hdHRyaWJ1dGVfXyAoKF9fdmVjdG9yX3NpemVfXyAoNjQpKSk7Ci10eXBlZGVmIHNob3J0IF9fdjMyaGkgX19hdHRyaWJ1dGVfXyAoKF9fdmVjdG9yX3NpemVfXyAoNjQpKSk7Ci0KLS8qIERlZmluZSB0aGUgZGVmYXVsdCBhdHRyaWJ1dGVzIGZvciB0aGUgZnVuY3Rpb25zIGluIHRoaXMgZmlsZS4gKi8KLSNkZWZpbmUgX19ERUZBVUxUX0ZOX0FUVFJTIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXywgX190YXJnZXRfXygiYXZ4NTEyYnciKSkpCi0KLXN0YXRpYyAgX19pbmxpbmUgX192NjRxaSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9zZXR6ZXJvX3FpKHZvaWQpIHsKLSAgcmV0dXJuIChfX3Y2NHFpKXsgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCB9OwotfQotCi1zdGF0aWMgIF9faW5saW5lIF9fdjMyaGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfc2V0emVyb19oaSh2b2lkKSB7Ci0gIHJldHVybiAoX192MzJoaSl7IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCi0gICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCi0gICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCi0gICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAgfTsKLX0KLQotLyogSW50ZWdlciBjb21wYXJlICovCi0KLXN0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s2NCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9jbXBlcV9lcGk4X21hc2soX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7Ci0gIHJldHVybiAoX19tbWFzazY0KV9fYnVpbHRpbl9pYTMyX3BjbXBlcWI1MTJfbWFzaygoX192NjRxaSlfX2EsIChfX3Y2NHFpKV9fYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrNjQpLTEpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrNjQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfbWFza19jbXBlcV9lcGk4X21hc2soX19tbWFzazY0IF9fdSwgX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7Ci0gIHJldHVybiAoX19tbWFzazY0KV9fYnVpbHRpbl9pYTMyX3BjbXBlcWI1MTJfbWFzaygoX192NjRxaSlfX2EsIChfX3Y2NHFpKV9fYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s2NCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9jbXBlcV9lcHU4X21hc2soX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7Ci0gIHJldHVybiAoX19tbWFzazY0KV9fYnVpbHRpbl9pYTMyX3VjbXBiNTEyX21hc2soKF9fdjY0cWkpX19hLCAoX192NjRxaSlfX2IsIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s2NCktMSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s2NCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9tYXNrX2NtcGVxX2VwdThfbWFzayhfX21tYXNrNjQgX191LCBfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpIHsKLSAgcmV0dXJuIChfX21tYXNrNjQpX19idWlsdGluX2lhMzJfdWNtcGI1MTJfbWFzaygoX192NjRxaSlfX2EsIChfX3Y2NHFpKV9fYiwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMzIgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfY21wZXFfZXBpMTZfbWFzayhfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpIHsKLSAgcmV0dXJuIChfX21tYXNrMzIpX19idWlsdGluX2lhMzJfcGNtcGVxdzUxMl9tYXNrKChfX3YzMmhpKV9fYSwgKF9fdjMyaGkpX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2szMiktMSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbW1hc2szMiBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9tYXNrX2NtcGVxX2VwaTE2X21hc2soX19tbWFzazMyIF9fdSwgX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7Ci0gIHJldHVybiAoX19tbWFzazMyKV9fYnVpbHRpbl9pYTMyX3BjbXBlcXc1MTJfbWFzaygoX192MzJoaSlfX2EsIChfX3YzMmhpKV9fYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbW1hc2szMiBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9jbXBlcV9lcHUxNl9tYXNrKF9fbTUxMmkgX19hLCBfX201MTJpIF9fYikgewotICByZXR1cm4gKF9fbW1hc2szMilfX2J1aWx0aW5faWEzMl91Y21wdzUxMl9tYXNrKChfX3YzMmhpKV9fYSwgKF9fdjMyaGkpX19iLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMzIpLTEpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMzIgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfbWFza19jbXBlcV9lcHUxNl9tYXNrKF9fbW1hc2szMiBfX3UsIF9fbTUxMmkgX19hLCBfX201MTJpIF9fYikgewotICByZXR1cm4gKF9fbW1hc2szMilfX2J1aWx0aW5faWEzMl91Y21wdzUxMl9tYXNrKChfX3YzMmhpKV9fYSwgKF9fdjMyaGkpX19iLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s2NCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9jbXBnZV9lcGk4X21hc2soX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7Ci0gIHJldHVybiAoX19tbWFzazY0KV9fYnVpbHRpbl9pYTMyX2NtcGI1MTJfbWFzaygoX192NjRxaSlfX2EsIChfX3Y2NHFpKV9fYiwgNSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrNjQpLTEpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrNjQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfbWFza19jbXBnZV9lcGk4X21hc2soX19tbWFzazY0IF9fdSwgX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7Ci0gIHJldHVybiAoX19tbWFzazY0KV9fYnVpbHRpbl9pYTMyX2NtcGI1MTJfbWFzaygoX192NjRxaSlfX2EsIChfX3Y2NHFpKV9fYiwgNSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s2NCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9jbXBnZV9lcHU4X21hc2soX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7Ci0gIHJldHVybiAoX19tbWFzazY0KV9fYnVpbHRpbl9pYTMyX3VjbXBiNTEyX21hc2soKF9fdjY0cWkpX19hLCAoX192NjRxaSlfX2IsIDUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s2NCktMSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s2NCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9tYXNrX2NtcGdlX2VwdThfbWFzayhfX21tYXNrNjQgX191LCBfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpIHsKLSAgcmV0dXJuIChfX21tYXNrNjQpX19idWlsdGluX2lhMzJfdWNtcGI1MTJfbWFzaygoX192NjRxaSlfX2EsIChfX3Y2NHFpKV9fYiwgNSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMzIgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfY21wZ2VfZXBpMTZfbWFzayhfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpIHsKLSAgcmV0dXJuIChfX21tYXNrMzIpX19idWlsdGluX2lhMzJfY21wdzUxMl9tYXNrKChfX3YzMmhpKV9fYSwgKF9fdjMyaGkpX19iLCA1LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2szMiktMSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbW1hc2szMiBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9tYXNrX2NtcGdlX2VwaTE2X21hc2soX19tbWFzazMyIF9fdSwgX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7Ci0gIHJldHVybiAoX19tbWFzazMyKV9fYnVpbHRpbl9pYTMyX2NtcHc1MTJfbWFzaygoX192MzJoaSlfX2EsIChfX3YzMmhpKV9fYiwgNSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbW1hc2szMiBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9jbXBnZV9lcHUxNl9tYXNrKF9fbTUxMmkgX19hLCBfX201MTJpIF9fYikgewotICByZXR1cm4gKF9fbW1hc2szMilfX2J1aWx0aW5faWEzMl91Y21wdzUxMl9tYXNrKChfX3YzMmhpKV9fYSwgKF9fdjMyaGkpX19iLCA1LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMzIpLTEpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMzIgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfbWFza19jbXBnZV9lcHUxNl9tYXNrKF9fbW1hc2szMiBfX3UsIF9fbTUxMmkgX19hLCBfX201MTJpIF9fYikgewotICByZXR1cm4gKF9fbW1hc2szMilfX2J1aWx0aW5faWEzMl91Y21wdzUxMl9tYXNrKChfX3YzMmhpKV9fYSwgKF9fdjMyaGkpX19iLCA1LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s2NCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9jbXBndF9lcGk4X21hc2soX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7Ci0gIHJldHVybiAoX19tbWFzazY0KV9fYnVpbHRpbl9pYTMyX3BjbXBndGI1MTJfbWFzaygoX192NjRxaSlfX2EsIChfX3Y2NHFpKV9fYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrNjQpLTEpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrNjQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfbWFza19jbXBndF9lcGk4X21hc2soX19tbWFzazY0IF9fdSwgX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7Ci0gIHJldHVybiAoX19tbWFzazY0KV9fYnVpbHRpbl9pYTMyX3BjbXBndGI1MTJfbWFzaygoX192NjRxaSlfX2EsIChfX3Y2NHFpKV9fYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s2NCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9jbXBndF9lcHU4X21hc2soX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7Ci0gIHJldHVybiAoX19tbWFzazY0KV9fYnVpbHRpbl9pYTMyX3VjbXBiNTEyX21hc2soKF9fdjY0cWkpX19hLCAoX192NjRxaSlfX2IsIDYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s2NCktMSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s2NCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9tYXNrX2NtcGd0X2VwdThfbWFzayhfX21tYXNrNjQgX191LCBfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpIHsKLSAgcmV0dXJuIChfX21tYXNrNjQpX19idWlsdGluX2lhMzJfdWNtcGI1MTJfbWFzaygoX192NjRxaSlfX2EsIChfX3Y2NHFpKV9fYiwgNiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMzIgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfY21wZ3RfZXBpMTZfbWFzayhfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpIHsKLSAgcmV0dXJuIChfX21tYXNrMzIpX19idWlsdGluX2lhMzJfcGNtcGd0dzUxMl9tYXNrKChfX3YzMmhpKV9fYSwgKF9fdjMyaGkpX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2szMiktMSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbW1hc2szMiBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9tYXNrX2NtcGd0X2VwaTE2X21hc2soX19tbWFzazMyIF9fdSwgX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7Ci0gIHJldHVybiAoX19tbWFzazMyKV9fYnVpbHRpbl9pYTMyX3BjbXBndHc1MTJfbWFzaygoX192MzJoaSlfX2EsIChfX3YzMmhpKV9fYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbW1hc2szMiBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9jbXBndF9lcHUxNl9tYXNrKF9fbTUxMmkgX19hLCBfX201MTJpIF9fYikgewotICByZXR1cm4gKF9fbW1hc2szMilfX2J1aWx0aW5faWEzMl91Y21wdzUxMl9tYXNrKChfX3YzMmhpKV9fYSwgKF9fdjMyaGkpX19iLCA2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMzIpLTEpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMzIgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfbWFza19jbXBndF9lcHUxNl9tYXNrKF9fbW1hc2szMiBfX3UsIF9fbTUxMmkgX19hLCBfX201MTJpIF9fYikgewotICByZXR1cm4gKF9fbW1hc2szMilfX2J1aWx0aW5faWEzMl91Y21wdzUxMl9tYXNrKChfX3YzMmhpKV9fYSwgKF9fdjMyaGkpX19iLCA2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s2NCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9jbXBsZV9lcGk4X21hc2soX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7Ci0gIHJldHVybiAoX19tbWFzazY0KV9fYnVpbHRpbl9pYTMyX2NtcGI1MTJfbWFzaygoX192NjRxaSlfX2EsIChfX3Y2NHFpKV9fYiwgMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrNjQpLTEpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrNjQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfbWFza19jbXBsZV9lcGk4X21hc2soX19tbWFzazY0IF9fdSwgX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7Ci0gIHJldHVybiAoX19tbWFzazY0KV9fYnVpbHRpbl9pYTMyX2NtcGI1MTJfbWFzaygoX192NjRxaSlfX2EsIChfX3Y2NHFpKV9fYiwgMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s2NCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9jbXBsZV9lcHU4X21hc2soX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7Ci0gIHJldHVybiAoX19tbWFzazY0KV9fYnVpbHRpbl9pYTMyX3VjbXBiNTEyX21hc2soKF9fdjY0cWkpX19hLCAoX192NjRxaSlfX2IsIDIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s2NCktMSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s2NCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9tYXNrX2NtcGxlX2VwdThfbWFzayhfX21tYXNrNjQgX191LCBfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpIHsKLSAgcmV0dXJuIChfX21tYXNrNjQpX19idWlsdGluX2lhMzJfdWNtcGI1MTJfbWFzaygoX192NjRxaSlfX2EsIChfX3Y2NHFpKV9fYiwgMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMzIgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfY21wbGVfZXBpMTZfbWFzayhfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpIHsKLSAgcmV0dXJuIChfX21tYXNrMzIpX19idWlsdGluX2lhMzJfY21wdzUxMl9tYXNrKChfX3YzMmhpKV9fYSwgKF9fdjMyaGkpX19iLCAyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2szMiktMSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbW1hc2szMiBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9tYXNrX2NtcGxlX2VwaTE2X21hc2soX19tbWFzazMyIF9fdSwgX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7Ci0gIHJldHVybiAoX19tbWFzazMyKV9fYnVpbHRpbl9pYTMyX2NtcHc1MTJfbWFzaygoX192MzJoaSlfX2EsIChfX3YzMmhpKV9fYiwgMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbW1hc2szMiBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9jbXBsZV9lcHUxNl9tYXNrKF9fbTUxMmkgX19hLCBfX201MTJpIF9fYikgewotICByZXR1cm4gKF9fbW1hc2szMilfX2J1aWx0aW5faWEzMl91Y21wdzUxMl9tYXNrKChfX3YzMmhpKV9fYSwgKF9fdjMyaGkpX19iLCAyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMzIpLTEpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMzIgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfbWFza19jbXBsZV9lcHUxNl9tYXNrKF9fbW1hc2szMiBfX3UsIF9fbTUxMmkgX19hLCBfX201MTJpIF9fYikgewotICByZXR1cm4gKF9fbW1hc2szMilfX2J1aWx0aW5faWEzMl91Y21wdzUxMl9tYXNrKChfX3YzMmhpKV9fYSwgKF9fdjMyaGkpX19iLCAyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s2NCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9jbXBsdF9lcGk4X21hc2soX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7Ci0gIHJldHVybiAoX19tbWFzazY0KV9fYnVpbHRpbl9pYTMyX2NtcGI1MTJfbWFzaygoX192NjRxaSlfX2EsIChfX3Y2NHFpKV9fYiwgMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrNjQpLTEpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrNjQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfbWFza19jbXBsdF9lcGk4X21hc2soX19tbWFzazY0IF9fdSwgX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7Ci0gIHJldHVybiAoX19tbWFzazY0KV9fYnVpbHRpbl9pYTMyX2NtcGI1MTJfbWFzaygoX192NjRxaSlfX2EsIChfX3Y2NHFpKV9fYiwgMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s2NCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9jbXBsdF9lcHU4X21hc2soX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7Ci0gIHJldHVybiAoX19tbWFzazY0KV9fYnVpbHRpbl9pYTMyX3VjbXBiNTEyX21hc2soKF9fdjY0cWkpX19hLCAoX192NjRxaSlfX2IsIDEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s2NCktMSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s2NCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9tYXNrX2NtcGx0X2VwdThfbWFzayhfX21tYXNrNjQgX191LCBfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpIHsKLSAgcmV0dXJuIChfX21tYXNrNjQpX19idWlsdGluX2lhMzJfdWNtcGI1MTJfbWFzaygoX192NjRxaSlfX2EsIChfX3Y2NHFpKV9fYiwgMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMzIgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfY21wbHRfZXBpMTZfbWFzayhfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpIHsKLSAgcmV0dXJuIChfX21tYXNrMzIpX19idWlsdGluX2lhMzJfY21wdzUxMl9tYXNrKChfX3YzMmhpKV9fYSwgKF9fdjMyaGkpX19iLCAxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2szMiktMSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbW1hc2szMiBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9tYXNrX2NtcGx0X2VwaTE2X21hc2soX19tbWFzazMyIF9fdSwgX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7Ci0gIHJldHVybiAoX19tbWFzazMyKV9fYnVpbHRpbl9pYTMyX2NtcHc1MTJfbWFzaygoX192MzJoaSlfX2EsIChfX3YzMmhpKV9fYiwgMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbW1hc2szMiBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9jbXBsdF9lcHUxNl9tYXNrKF9fbTUxMmkgX19hLCBfX201MTJpIF9fYikgewotICByZXR1cm4gKF9fbW1hc2szMilfX2J1aWx0aW5faWEzMl91Y21wdzUxMl9tYXNrKChfX3YzMmhpKV9fYSwgKF9fdjMyaGkpX19iLCAxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMzIpLTEpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMzIgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfbWFza19jbXBsdF9lcHUxNl9tYXNrKF9fbW1hc2szMiBfX3UsIF9fbTUxMmkgX19hLCBfX201MTJpIF9fYikgewotICByZXR1cm4gKF9fbW1hc2szMilfX2J1aWx0aW5faWEzMl91Y21wdzUxMl9tYXNrKChfX3YzMmhpKV9fYSwgKF9fdjMyaGkpX19iLCAxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s2NCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9jbXBuZXFfZXBpOF9tYXNrKF9fbTUxMmkgX19hLCBfX201MTJpIF9fYikgewotICByZXR1cm4gKF9fbW1hc2s2NClfX2J1aWx0aW5faWEzMl9jbXBiNTEyX21hc2soKF9fdjY0cWkpX19hLCAoX192NjRxaSlfX2IsIDQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazY0KS0xKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tbWFzazY0IF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX21hc2tfY21wbmVxX2VwaThfbWFzayhfX21tYXNrNjQgX191LCBfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpIHsKLSAgcmV0dXJuIChfX21tYXNrNjQpX19idWlsdGluX2lhMzJfY21wYjUxMl9tYXNrKChfX3Y2NHFpKV9fYSwgKF9fdjY0cWkpX19iLCA0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tbWFzazY0IF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX2NtcG5lcV9lcHU4X21hc2soX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7Ci0gIHJldHVybiAoX19tbWFzazY0KV9fYnVpbHRpbl9pYTMyX3VjbXBiNTEyX21hc2soKF9fdjY0cWkpX19hLCAoX192NjRxaSlfX2IsIDQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s2NCktMSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s2NCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9tYXNrX2NtcG5lcV9lcHU4X21hc2soX19tbWFzazY0IF9fdSwgX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7Ci0gIHJldHVybiAoX19tbWFzazY0KV9fYnVpbHRpbl9pYTMyX3VjbXBiNTEyX21hc2soKF9fdjY0cWkpX19hLCAoX192NjRxaSlfX2IsIDQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tbWFzazMyIF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX2NtcG5lcV9lcGkxNl9tYXNrKF9fbTUxMmkgX19hLCBfX201MTJpIF9fYikgewotICByZXR1cm4gKF9fbW1hc2szMilfX2J1aWx0aW5faWEzMl9jbXB3NTEyX21hc2soKF9fdjMyaGkpX19hLCAoX192MzJoaSlfX2IsIDQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazMyKS0xKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tbWFzazMyIF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX21hc2tfY21wbmVxX2VwaTE2X21hc2soX19tbWFzazMyIF9fdSwgX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7Ci0gIHJldHVybiAoX19tbWFzazMyKV9fYnVpbHRpbl9pYTMyX2NtcHc1MTJfbWFzaygoX192MzJoaSlfX2EsIChfX3YzMmhpKV9fYiwgNCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbW1hc2szMiBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9jbXBuZXFfZXB1MTZfbWFzayhfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpIHsKLSAgcmV0dXJuIChfX21tYXNrMzIpX19idWlsdGluX2lhMzJfdWNtcHc1MTJfbWFzaygoX192MzJoaSlfX2EsIChfX3YzMmhpKV9fYiwgNCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazMyKS0xKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tbWFzazMyIF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX21hc2tfY21wbmVxX2VwdTE2X21hc2soX19tbWFzazMyIF9fdSwgX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7Ci0gIHJldHVybiAoX19tbWFzazMyKV9fYnVpbHRpbl9pYTMyX3VjbXB3NTEyX21hc2soKF9fdjMyaGkpX19hLCAoX192MzJoaSlfX2IsIDQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9hZGRfZXBpOCAoX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKSB7Ci0gIHJldHVybiAoX19tNTEyaSkgKChfX3Y2NHFpKSBfX0EgKyAoX192NjRxaSkgX19CKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9tYXNrX2FkZF9lcGk4IChfX201MTJpIF9fVywgX19tbWFzazY0IF9fVSwgX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKSB7Ci0gIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcGFkZGI1MTJfbWFzayAoKF9fdjY0cWkpIF9fQSwKLSAgICAgICAgICAgICAoX192NjRxaSkgX19CLAotICAgICAgICAgICAgIChfX3Y2NHFpKSBfX1csCi0gICAgICAgICAgICAgKF9fbW1hc2s2NCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9tYXNrel9hZGRfZXBpOCAoX19tbWFzazY0IF9fVSwgX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKSB7Ci0gIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcGFkZGI1MTJfbWFzayAoKF9fdjY0cWkpIF9fQSwKLSAgICAgICAgICAgICAoX192NjRxaSkgX19CLAotICAgICAgICAgICAgIChfX3Y2NHFpKSBfbW01MTJfc2V0emVyb19xaSgpLAotICAgICAgICAgICAgIChfX21tYXNrNjQpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfc3ViX2VwaTggKF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikgewotICByZXR1cm4gKF9fbTUxMmkpICgoX192NjRxaSkgX19BIC0gKF9fdjY0cWkpIF9fQik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfbWFza19zdWJfZXBpOCAoX19tNTEyaSBfX1csIF9fbW1hc2s2NCBfX1UsIF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikgewotICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BzdWJiNTEyX21hc2sgKChfX3Y2NHFpKSBfX0EsCi0gICAgICAgICAgICAgKF9fdjY0cWkpIF9fQiwKLSAgICAgICAgICAgICAoX192NjRxaSkgX19XLAotICAgICAgICAgICAgIChfX21tYXNrNjQpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfbWFza3pfc3ViX2VwaTggKF9fbW1hc2s2NCBfX1UsIF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikgewotICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BzdWJiNTEyX21hc2sgKChfX3Y2NHFpKSBfX0EsCi0gICAgICAgICAgICAgKF9fdjY0cWkpIF9fQiwKLSAgICAgICAgICAgICAoX192NjRxaSkgX21tNTEyX3NldHplcm9fcWkoKSwKLSAgICAgICAgICAgICAoX19tbWFzazY0KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX2FkZF9lcGkxNiAoX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKSB7Ci0gIHJldHVybiAoX19tNTEyaSkgKChfX3YzMmhpKSBfX0EgKyAoX192MzJoaSkgX19CKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9tYXNrX2FkZF9lcGkxNiAoX19tNTEyaSBfX1csIF9fbW1hc2szMiBfX1UsIF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikgewotICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BhZGR3NTEyX21hc2sgKChfX3YzMmhpKSBfX0EsCi0gICAgICAgICAgICAgKF9fdjMyaGkpIF9fQiwKLSAgICAgICAgICAgICAoX192MzJoaSkgX19XLAotICAgICAgICAgICAgIChfX21tYXNrMzIpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfbWFza3pfYWRkX2VwaTE2IChfX21tYXNrMzIgX19VLCBfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpIHsKLSAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wYWRkdzUxMl9tYXNrICgoX192MzJoaSkgX19BLAotICAgICAgICAgICAgIChfX3YzMmhpKSBfX0IsCi0gICAgICAgICAgICAgKF9fdjMyaGkpIF9tbTUxMl9zZXR6ZXJvX2hpKCksCi0gICAgICAgICAgICAgKF9fbW1hc2szMikgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9zdWJfZXBpMTYgKF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikgewotICByZXR1cm4gKF9fbTUxMmkpICgoX192MzJoaSkgX19BIC0gKF9fdjMyaGkpIF9fQik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfbWFza19zdWJfZXBpMTYgKF9fbTUxMmkgX19XLCBfX21tYXNrMzIgX19VLCBfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpIHsKLSAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wc3VidzUxMl9tYXNrICgoX192MzJoaSkgX19BLAotICAgICAgICAgICAgIChfX3YzMmhpKSBfX0IsCi0gICAgICAgICAgICAgKF9fdjMyaGkpIF9fVywKLSAgICAgICAgICAgICAoX19tbWFzazMyKSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX21hc2t6X3N1Yl9lcGkxNiAoX19tbWFzazMyIF9fVSwgX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKSB7Ci0gIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcHN1Ync1MTJfbWFzayAoKF9fdjMyaGkpIF9fQSwKLSAgICAgICAgICAgICAoX192MzJoaSkgX19CLAotICAgICAgICAgICAgIChfX3YzMmhpKSBfbW01MTJfc2V0emVyb19oaSgpLAotICAgICAgICAgICAgIChfX21tYXNrMzIpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfbXVsbG9fZXBpMTYgKF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikgewotICByZXR1cm4gKF9fbTUxMmkpICgoX192MzJoaSkgX19BICogKF9fdjMyaGkpIF9fQik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfbWFza19tdWxsb19lcGkxNiAoX19tNTEyaSBfX1csIF9fbW1hc2szMiBfX1UsIF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikgewotICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BtdWxsdzUxMl9tYXNrICgoX192MzJoaSkgX19BLAotICAgICAgICAgICAgICAoX192MzJoaSkgX19CLAotICAgICAgICAgICAgICAoX192MzJoaSkgX19XLAotICAgICAgICAgICAgICAoX19tbWFzazMyKSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX21hc2t6X211bGxvX2VwaTE2IChfX21tYXNrMzIgX19VLCBfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpIHsKLSAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wbXVsbHc1MTJfbWFzayAoKF9fdjMyaGkpIF9fQSwKLSAgICAgICAgICAgICAgKF9fdjMyaGkpIF9fQiwKLSAgICAgICAgICAgICAgKF9fdjMyaGkpIF9tbTUxMl9zZXR6ZXJvX2hpKCksCi0gICAgICAgICAgICAgIChfX21tYXNrMzIpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfbWFza19ibGVuZF9lcGk4IChfX21tYXNrNjQgX19VLCBfX201MTJpIF9fQSwgX19tNTEyaSBfX1cpCi17Ci0gIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfYmxlbmRtYl81MTJfbWFzayAoKF9fdjY0cWkpIF9fQSwKLSAgICAgICAgICAgICAgKF9fdjY0cWkpIF9fVywKLSAgICAgICAgICAgICAgKF9fbW1hc2s2NCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9tYXNrX2JsZW5kX2VwaTE2IChfX21tYXNrMzIgX19VLCBfX201MTJpIF9fQSwgX19tNTEyaSBfX1cpCi17Ci0gIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfYmxlbmRtd181MTJfbWFzayAoKF9fdjMyaGkpIF9fQSwKLSAgICAgICAgICAgICAgKF9fdjMyaGkpIF9fVywKLSAgICAgICAgICAgICAgKF9fbW1hc2szMikgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9hYnNfZXBpOCAoX19tNTEyaSBfX0EpCi17Ci0gIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcGFic2I1MTJfbWFzayAoKF9fdjY0cWkpIF9fQSwKLSAgICAgICAgICAgICAgKF9fdjY0cWkpIF9tbTUxMl9zZXR6ZXJvX3FpKCksCi0gICAgICAgICAgICAgIChfX21tYXNrNjQpIC0xKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9tYXNrX2Fic19lcGk4IChfX201MTJpIF9fVywgX19tbWFzazY0IF9fVSwgX19tNTEyaSBfX0EpCi17Ci0gIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcGFic2I1MTJfbWFzayAoKF9fdjY0cWkpIF9fQSwKLSAgICAgICAgICAgICAgKF9fdjY0cWkpIF9fVywKLSAgICAgICAgICAgICAgKF9fbW1hc2s2NCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9tYXNrel9hYnNfZXBpOCAoX19tbWFzazY0IF9fVSwgX19tNTEyaSBfX0EpCi17Ci0gIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcGFic2I1MTJfbWFzayAoKF9fdjY0cWkpIF9fQSwKLSAgICAgICAgICAgICAgKF9fdjY0cWkpIF9tbTUxMl9zZXR6ZXJvX3FpKCksCi0gICAgICAgICAgICAgIChfX21tYXNrNjQpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfYWJzX2VwaTE2IChfX201MTJpIF9fQSkKLXsKLSAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wYWJzdzUxMl9tYXNrICgoX192MzJoaSkgX19BLAotICAgICAgICAgICAgICAoX192MzJoaSkgX21tNTEyX3NldHplcm9faGkoKSwKLSAgICAgICAgICAgICAgKF9fbW1hc2szMikgLTEpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX21hc2tfYWJzX2VwaTE2IChfX201MTJpIF9fVywgX19tbWFzazMyIF9fVSwgX19tNTEyaSBfX0EpCi17Ci0gIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcGFic3c1MTJfbWFzayAoKF9fdjMyaGkpIF9fQSwKLSAgICAgICAgICAgICAgKF9fdjMyaGkpIF9fVywKLSAgICAgICAgICAgICAgKF9fbW1hc2szMikgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9tYXNrel9hYnNfZXBpMTYgKF9fbW1hc2szMiBfX1UsIF9fbTUxMmkgX19BKQotewotICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BhYnN3NTEyX21hc2sgKChfX3YzMmhpKSBfX0EsCi0gICAgICAgICAgICAgIChfX3YzMmhpKSBfbW01MTJfc2V0emVyb19oaSgpLAotICAgICAgICAgICAgICAoX19tbWFzazMyKSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX3BhY2tzX2VwaTMyIChfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCi17Ci0gIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcGFja3NzZHc1MTJfbWFzayAoKF9fdjE2c2kpIF9fQSwKLSAgICAgICAgICAgICAgKF9fdjE2c2kpIF9fQiwKLSAgICAgICAgICAgICAgKF9fdjMyaGkpIF9tbTUxMl9zZXR6ZXJvX2hpKCksCi0gICAgICAgICAgICAgIChfX21tYXNrMzIpIC0xKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9tYXNrel9wYWNrc19lcGkzMiAoX19tbWFzazMyIF9fTSwgX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQotewotICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BhY2tzc2R3NTEyX21hc2sgKChfX3YxNnNpKSBfX0EsCi0gICAgICAgICAgICAgIChfX3YxNnNpKSBfX0IsCi0gICAgICAgICAgICAgIChfX3YzMmhpKSBfbW01MTJfc2V0emVyb19oaSgpLAotICAgICAgICAgICAgICBfX00pOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX21hc2tfcGFja3NfZXBpMzIgKF9fbTUxMmkgX19XLCBfX21tYXNrMzIgX19NLCBfX201MTJpIF9fQSwKLSAgICAgICBfX201MTJpIF9fQikKLXsKLSAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wYWNrc3NkdzUxMl9tYXNrICgoX192MTZzaSkgX19BLAotICAgICAgICAgICAgICAoX192MTZzaSkgX19CLAotICAgICAgICAgICAgICAoX192MzJoaSkgX19XLAotICAgICAgICAgICAgICBfX00pOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX3BhY2tzX2VwaTE2IChfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCi17Ci0gIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcGFja3Nzd2I1MTJfbWFzayAoKF9fdjMyaGkpIF9fQSwKLSAgICAgICAgICAgICAgKF9fdjMyaGkpIF9fQiwKLSAgICAgICAgICAgICAgKF9fdjY0cWkpIF9tbTUxMl9zZXR6ZXJvX3FpKCksCi0gICAgICAgICAgICAgIChfX21tYXNrNjQpIC0xKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9tYXNrX3BhY2tzX2VwaTE2IChfX201MTJpIF9fVywgX19tbWFzazY0IF9fTSwgX19tNTEyaSBfX0EsCi0gICAgICAgX19tNTEyaSBfX0IpCi17Ci0gIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcGFja3Nzd2I1MTJfbWFzayAoKF9fdjMyaGkpIF9fQSwKLSAgICAgICAgICAgICAgKF9fdjMyaGkpIF9fQiwKLSAgICAgICAgICAgICAgKF9fdjY0cWkpIF9fVywKLSAgICAgICAgICAgICAgKF9fbW1hc2s2NCkgX19NKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9tYXNrel9wYWNrc19lcGkxNiAoX19tbWFzazY0IF9fTSwgX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQotewotICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BhY2tzc3diNTEyX21hc2sgKChfX3YzMmhpKSBfX0EsCi0gICAgICAgICAgICAgIChfX3YzMmhpKSBfX0IsCi0gICAgICAgICAgICAgIChfX3Y2NHFpKSBfbW01MTJfc2V0emVyb19xaSgpLAotICAgICAgICAgICAgICBfX00pOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX3BhY2t1c19lcGkzMiAoX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQotewotICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BhY2t1c2R3NTEyX21hc2sgKChfX3YxNnNpKSBfX0EsCi0gICAgICAgICAgICAgIChfX3YxNnNpKSBfX0IsCi0gICAgICAgICAgICAgIChfX3YzMmhpKSBfbW01MTJfc2V0emVyb19oaSgpLAotICAgICAgICAgICAgICAoX19tbWFzazMyKSAtMSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfbWFza3pfcGFja3VzX2VwaTMyIChfX21tYXNrMzIgX19NLCBfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCi17Ci0gIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcGFja3VzZHc1MTJfbWFzayAoKF9fdjE2c2kpIF9fQSwKLSAgICAgICAgICAgICAgKF9fdjE2c2kpIF9fQiwKLSAgICAgICAgICAgICAgKF9fdjMyaGkpIF9tbTUxMl9zZXR6ZXJvX2hpKCksCi0gICAgICAgICAgICAgIF9fTSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfbWFza19wYWNrdXNfZXBpMzIgKF9fbTUxMmkgX19XLCBfX21tYXNrMzIgX19NLCBfX201MTJpIF9fQSwKLSAgICAgICAgX19tNTEyaSBfX0IpCi17Ci0gIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcGFja3VzZHc1MTJfbWFzayAoKF9fdjE2c2kpIF9fQSwKLSAgICAgICAgICAgICAgKF9fdjE2c2kpIF9fQiwKLSAgICAgICAgICAgICAgKF9fdjMyaGkpIF9fVywKLSAgICAgICAgICAgICAgX19NKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9wYWNrdXNfZXBpMTYgKF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKLXsKLSAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wYWNrdXN3YjUxMl9tYXNrICgoX192MzJoaSkgX19BLAotICAgICAgICAgICAgICAoX192MzJoaSkgX19CLAotICAgICAgICAgICAgICAoX192NjRxaSkgX21tNTEyX3NldHplcm9fcWkoKSwKLSAgICAgICAgICAgICAgKF9fbW1hc2s2NCkgLTEpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX21hc2tfcGFja3VzX2VwaTE2IChfX201MTJpIF9fVywgX19tbWFzazY0IF9fTSwgX19tNTEyaSBfX0EsCi0gICAgICAgIF9fbTUxMmkgX19CKQotewotICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BhY2t1c3diNTEyX21hc2sgKChfX3YzMmhpKSBfX0EsCi0gICAgICAgICAgICAgIChfX3YzMmhpKSBfX0IsCi0gICAgICAgICAgICAgIChfX3Y2NHFpKSBfX1csCi0gICAgICAgICAgICAgIChfX21tYXNrNjQpIF9fTSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfbWFza3pfcGFja3VzX2VwaTE2IChfX21tYXNrNjQgX19NLCBfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCi17Ci0gIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcGFja3Vzd2I1MTJfbWFzayAoKF9fdjMyaGkpIF9fQSwKLSAgICAgICAgICAgICAgKF9fdjMyaGkpIF9fQiwKLSAgICAgICAgICAgICAgKF9fdjY0cWkpIF9tbTUxMl9zZXR6ZXJvX3FpKCksCi0gICAgICAgICAgICAgIChfX21tYXNrNjQpIF9fTSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfYWRkc19lcGk4IChfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCi17Ci0gIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcGFkZHNiNTEyX21hc2sgKChfX3Y2NHFpKSBfX0EsCi0gICAgICAgICAgICAgIChfX3Y2NHFpKSBfX0IsCi0gICAgICAgICAgICAgIChfX3Y2NHFpKSBfbW01MTJfc2V0emVyb19xaSgpLAotICAgICAgICAgICAgICAoX19tbWFzazY0KSAtMSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfbWFza19hZGRzX2VwaTggKF9fbTUxMmkgX19XLCBfX21tYXNrNjQgX19VLCBfX201MTJpIF9fQSwKLSAgICAgICAgICAgX19tNTEyaSBfX0IpCi17Ci0gIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcGFkZHNiNTEyX21hc2sgKChfX3Y2NHFpKSBfX0EsCi0gICAgICAgICAgICAgIChfX3Y2NHFpKSBfX0IsCi0gICAgICAgICAgICAgIChfX3Y2NHFpKSBfX1csCi0gICAgICAgICAgICAgIChfX21tYXNrNjQpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfbWFza3pfYWRkc19lcGk4IChfX21tYXNrNjQgX19VLCBfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCi17Ci0gIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcGFkZHNiNTEyX21hc2sgKChfX3Y2NHFpKSBfX0EsCi0gICAgICAgICAgICAgIChfX3Y2NHFpKSBfX0IsCi0gICAgICAgICAgICAgIChfX3Y2NHFpKSBfbW01MTJfc2V0emVyb19xaSgpLAotICAgICAgICAgICAgICAoX19tbWFzazY0KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX2FkZHNfZXBpMTYgKF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKLXsKLSAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wYWRkc3c1MTJfbWFzayAoKF9fdjMyaGkpIF9fQSwKLSAgICAgICAgICAgICAgKF9fdjMyaGkpIF9fQiwKLSAgICAgICAgICAgICAgKF9fdjMyaGkpIF9tbTUxMl9zZXR6ZXJvX2hpKCksCi0gICAgICAgICAgICAgIChfX21tYXNrMzIpIC0xKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9tYXNrX2FkZHNfZXBpMTYgKF9fbTUxMmkgX19XLCBfX21tYXNrMzIgX19VLCBfX201MTJpIF9fQSwKLSAgICAgIF9fbTUxMmkgX19CKQotewotICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BhZGRzdzUxMl9tYXNrICgoX192MzJoaSkgX19BLAotICAgICAgICAgICAgICAoX192MzJoaSkgX19CLAotICAgICAgICAgICAgICAoX192MzJoaSkgX19XLAotICAgICAgICAgICAgICAoX19tbWFzazMyKSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX21hc2t6X2FkZHNfZXBpMTYgKF9fbW1hc2szMiBfX1UsIF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKLXsKLSAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wYWRkc3c1MTJfbWFzayAoKF9fdjMyaGkpIF9fQSwKLSAgICAgICAgICAgICAgKF9fdjMyaGkpIF9fQiwKLSAgICAgICAgICAgICAgKF9fdjMyaGkpIF9tbTUxMl9zZXR6ZXJvX2hpKCksCi0gICAgICAgICAgICAgIChfX21tYXNrMzIpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfYWRkc19lcHU4IChfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCi17Ci0gIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcGFkZHVzYjUxMl9tYXNrICgoX192NjRxaSkgX19BLAotICAgICAgICAgICAgICAoX192NjRxaSkgX19CLAotICAgICAgICAgICAgICAoX192NjRxaSkgX21tNTEyX3NldHplcm9fcWkoKSwKLSAgICAgICAgICAgICAgKF9fbW1hc2s2NCkgLTEpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX21hc2tfYWRkc19lcHU4IChfX201MTJpIF9fVywgX19tbWFzazY0IF9fVSwgX19tNTEyaSBfX0EsCi0gICAgICAgICAgIF9fbTUxMmkgX19CKQotewotICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BhZGR1c2I1MTJfbWFzayAoKF9fdjY0cWkpIF9fQSwKLSAgICAgICAgICAgICAgKF9fdjY0cWkpIF9fQiwKLSAgICAgICAgICAgICAgKF9fdjY0cWkpIF9fVywKLSAgICAgICAgICAgICAgKF9fbW1hc2s2NCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9tYXNrel9hZGRzX2VwdTggKF9fbW1hc2s2NCBfX1UsIF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKLXsKLSAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wYWRkdXNiNTEyX21hc2sgKChfX3Y2NHFpKSBfX0EsCi0gICAgICAgICAgICAgIChfX3Y2NHFpKSBfX0IsCi0gICAgICAgICAgICAgIChfX3Y2NHFpKSBfbW01MTJfc2V0emVyb19xaSgpLAotICAgICAgICAgICAgICAoX19tbWFzazY0KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX2FkZHNfZXB1MTYgKF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKLXsKLSAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wYWRkdXN3NTEyX21hc2sgKChfX3YzMmhpKSBfX0EsCi0gICAgICAgICAgICAgIChfX3YzMmhpKSBfX0IsCi0gICAgICAgICAgICAgIChfX3YzMmhpKSBfbW01MTJfc2V0emVyb19oaSgpLAotICAgICAgICAgICAgICAoX19tbWFzazMyKSAtMSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfbWFza19hZGRzX2VwdTE2IChfX201MTJpIF9fVywgX19tbWFzazMyIF9fVSwgX19tNTEyaSBfX0EsCi0gICAgICBfX201MTJpIF9fQikKLXsKLSAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wYWRkdXN3NTEyX21hc2sgKChfX3YzMmhpKSBfX0EsCi0gICAgICAgICAgICAgIChfX3YzMmhpKSBfX0IsCi0gICAgICAgICAgICAgIChfX3YzMmhpKSBfX1csCi0gICAgICAgICAgICAgIChfX21tYXNrMzIpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfbWFza3pfYWRkc19lcHUxNiAoX19tbWFzazMyIF9fVSwgX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQotewotICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BhZGR1c3c1MTJfbWFzayAoKF9fdjMyaGkpIF9fQSwKLSAgICAgICAgICAgICAgKF9fdjMyaGkpIF9fQiwKLSAgICAgICAgICAgICAgKF9fdjMyaGkpIF9tbTUxMl9zZXR6ZXJvX2hpKCksCi0gICAgICAgICAgICAgIChfX21tYXNrMzIpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfYXZnX2VwdTggKF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKLXsKLSAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wYXZnYjUxMl9tYXNrICgoX192NjRxaSkgX19BLAotICAgICAgICAgICAgICAoX192NjRxaSkgX19CLAotICAgICAgICAgICAgICAoX192NjRxaSkgX21tNTEyX3NldHplcm9fcWkoKSwKLSAgICAgICAgICAgICAgKF9fbW1hc2s2NCkgLTEpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX21hc2tfYXZnX2VwdTggKF9fbTUxMmkgX19XLCBfX21tYXNrNjQgX19VLCBfX201MTJpIF9fQSwKLSAgICAgICAgICBfX201MTJpIF9fQikKLXsKLSAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wYXZnYjUxMl9tYXNrICgoX192NjRxaSkgX19BLAotICAgICAgICAgICAgICAoX192NjRxaSkgX19CLAotICAgICAgICAgICAgICAoX192NjRxaSkgX19XLAotICAgICAgICAgICAgICAoX19tbWFzazY0KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX21hc2t6X2F2Z19lcHU4IChfX21tYXNrNjQgX19VLCBfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCi17Ci0gIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcGF2Z2I1MTJfbWFzayAoKF9fdjY0cWkpIF9fQSwKLSAgICAgICAgICAgICAgKF9fdjY0cWkpIF9fQiwKLSAgICAgICAgICAgICAgKF9fdjY0cWkpIF9tbTUxMl9zZXR6ZXJvX3FpKCksCi0gICAgICAgICAgICAgIChfX21tYXNrNjQpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfYXZnX2VwdTE2IChfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCi17Ci0gIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcGF2Z3c1MTJfbWFzayAoKF9fdjMyaGkpIF9fQSwKLSAgICAgICAgICAgICAgKF9fdjMyaGkpIF9fQiwKLSAgICAgICAgICAgICAgKF9fdjMyaGkpIF9tbTUxMl9zZXR6ZXJvX2hpKCksCi0gICAgICAgICAgICAgIChfX21tYXNrMzIpIC0xKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9tYXNrX2F2Z19lcHUxNiAoX19tNTEyaSBfX1csIF9fbW1hc2szMiBfX1UsIF9fbTUxMmkgX19BLAotICAgICAgICAgICBfX201MTJpIF9fQikKLXsKLSAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wYXZndzUxMl9tYXNrICgoX192MzJoaSkgX19BLAotICAgICAgICAgICAgICAoX192MzJoaSkgX19CLAotICAgICAgICAgICAgICAoX192MzJoaSkgX19XLAotICAgICAgICAgICAgICAoX19tbWFzazMyKSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX21hc2t6X2F2Z19lcHUxNiAoX19tbWFzazMyIF9fVSwgX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQotewotICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3Bhdmd3NTEyX21hc2sgKChfX3YzMmhpKSBfX0EsCi0gICAgICAgICAgICAgIChfX3YzMmhpKSBfX0IsCi0gICAgICAgICAgICAgIChfX3YzMmhpKSBfbW01MTJfc2V0emVyb19oaSgpLAotICAgICAgICAgICAgICAoX19tbWFzazMyKSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX21heF9lcGk4IChfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCi17Ci0gIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcG1heHNiNTEyX21hc2sgKChfX3Y2NHFpKSBfX0EsCi0gICAgICAgICAgICAgIChfX3Y2NHFpKSBfX0IsCi0gICAgICAgICAgICAgIChfX3Y2NHFpKSBfbW01MTJfc2V0emVyb19xaSgpLAotICAgICAgICAgICAgICAoX19tbWFzazY0KSAtMSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfbWFza3pfbWF4X2VwaTggKF9fbW1hc2s2NCBfX00sIF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKLXsKLSAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wbWF4c2I1MTJfbWFzayAoKF9fdjY0cWkpIF9fQSwKLSAgICAgICAgICAgICAgKF9fdjY0cWkpIF9fQiwKLSAgICAgICAgICAgICAgKF9fdjY0cWkpIF9tbTUxMl9zZXR6ZXJvX3FpKCksCi0gICAgICAgICAgICAgIChfX21tYXNrNjQpIF9fTSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfbWFza19tYXhfZXBpOCAoX19tNTEyaSBfX1csIF9fbW1hc2s2NCBfX00sIF9fbTUxMmkgX19BLAotICAgICAgICAgIF9fbTUxMmkgX19CKQotewotICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BtYXhzYjUxMl9tYXNrICgoX192NjRxaSkgX19BLAotICAgICAgICAgICAgICAoX192NjRxaSkgX19CLAotICAgICAgICAgICAgICAoX192NjRxaSkgX19XLAotICAgICAgICAgICAgICAoX19tbWFzazY0KSBfX00pOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX21heF9lcGkxNiAoX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQotewotICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BtYXhzdzUxMl9tYXNrICgoX192MzJoaSkgX19BLAotICAgICAgICAgICAgICAoX192MzJoaSkgX19CLAotICAgICAgICAgICAgICAoX192MzJoaSkgX21tNTEyX3NldHplcm9faGkoKSwKLSAgICAgICAgICAgICAgKF9fbW1hc2szMikgLTEpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX21hc2t6X21heF9lcGkxNiAoX19tbWFzazMyIF9fTSwgX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQotewotICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BtYXhzdzUxMl9tYXNrICgoX192MzJoaSkgX19BLAotICAgICAgICAgICAgICAoX192MzJoaSkgX19CLAotICAgICAgICAgICAgICAoX192MzJoaSkgX21tNTEyX3NldHplcm9faGkoKSwKLSAgICAgICAgICAgICAgKF9fbW1hc2szMikgX19NKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9tYXNrX21heF9lcGkxNiAoX19tNTEyaSBfX1csIF9fbW1hc2szMiBfX00sIF9fbTUxMmkgX19BLAotICAgICAgICAgICBfX201MTJpIF9fQikKLXsKLSAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wbWF4c3c1MTJfbWFzayAoKF9fdjMyaGkpIF9fQSwKLSAgICAgICAgICAgICAgKF9fdjMyaGkpIF9fQiwKLSAgICAgICAgICAgICAgKF9fdjMyaGkpIF9fVywKLSAgICAgICAgICAgICAgKF9fbW1hc2szMikgX19NKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9tYXhfZXB1OCAoX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQotewotICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BtYXh1YjUxMl9tYXNrICgoX192NjRxaSkgX19BLAotICAgICAgICAgICAgICAoX192NjRxaSkgX19CLAotICAgICAgICAgICAgICAoX192NjRxaSkgX21tNTEyX3NldHplcm9fcWkoKSwKLSAgICAgICAgICAgICAgKF9fbW1hc2s2NCkgLTEpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX21hc2t6X21heF9lcHU4IChfX21tYXNrNjQgX19NLCBfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCi17Ci0gIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcG1heHViNTEyX21hc2sgKChfX3Y2NHFpKSBfX0EsCi0gICAgICAgICAgICAgIChfX3Y2NHFpKSBfX0IsCi0gICAgICAgICAgICAgIChfX3Y2NHFpKSBfbW01MTJfc2V0emVyb19xaSgpLAotICAgICAgICAgICAgICAoX19tbWFzazY0KSBfX00pOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX21hc2tfbWF4X2VwdTggKF9fbTUxMmkgX19XLCBfX21tYXNrNjQgX19NLCBfX201MTJpIF9fQSwKLSAgICAgICAgICBfX201MTJpIF9fQikKLXsKLSAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wbWF4dWI1MTJfbWFzayAoKF9fdjY0cWkpIF9fQSwKLSAgICAgICAgICAgICAgKF9fdjY0cWkpIF9fQiwKLSAgICAgICAgICAgICAgKF9fdjY0cWkpIF9fVywKLSAgICAgICAgICAgICAgKF9fbW1hc2s2NCkgX19NKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9tYXhfZXB1MTYgKF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKLXsKLSAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wbWF4dXc1MTJfbWFzayAoKF9fdjMyaGkpIF9fQSwKLSAgICAgICAgICAgICAgKF9fdjMyaGkpIF9fQiwKLSAgICAgICAgICAgICAgKF9fdjMyaGkpIF9tbTUxMl9zZXR6ZXJvX2hpKCksCi0gICAgICAgICAgICAgIChfX21tYXNrMzIpIC0xKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9tYXNrel9tYXhfZXB1MTYgKF9fbW1hc2szMiBfX00sIF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKLXsKLSAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wbWF4dXc1MTJfbWFzayAoKF9fdjMyaGkpIF9fQSwKLSAgICAgICAgICAgICAgKF9fdjMyaGkpIF9fQiwKLSAgICAgICAgICAgICAgKF9fdjMyaGkpIF9tbTUxMl9zZXR6ZXJvX2hpKCksCi0gICAgICAgICAgICAgIChfX21tYXNrMzIpIF9fTSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfbWFza19tYXhfZXB1MTYgKF9fbTUxMmkgX19XLCBfX21tYXNrMzIgX19NLCBfX201MTJpIF9fQSwKLSAgICAgICAgICAgX19tNTEyaSBfX0IpCi17Ci0gIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcG1heHV3NTEyX21hc2sgKChfX3YzMmhpKSBfX0EsCi0gICAgICAgICAgICAgIChfX3YzMmhpKSBfX0IsCi0gICAgICAgICAgICAgIChfX3YzMmhpKSBfX1csCi0gICAgICAgICAgICAgIChfX21tYXNrMzIpIF9fTSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfbWluX2VwaTggKF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKLXsKLSAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wbWluc2I1MTJfbWFzayAoKF9fdjY0cWkpIF9fQSwKLSAgICAgICAgICAgICAgKF9fdjY0cWkpIF9fQiwKLSAgICAgICAgICAgICAgKF9fdjY0cWkpIF9tbTUxMl9zZXR6ZXJvX3FpKCksCi0gICAgICAgICAgICAgIChfX21tYXNrNjQpIC0xKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9tYXNrel9taW5fZXBpOCAoX19tbWFzazY0IF9fTSwgX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQotewotICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BtaW5zYjUxMl9tYXNrICgoX192NjRxaSkgX19BLAotICAgICAgICAgICAgICAoX192NjRxaSkgX19CLAotICAgICAgICAgICAgICAoX192NjRxaSkgX21tNTEyX3NldHplcm9fcWkoKSwKLSAgICAgICAgICAgICAgKF9fbW1hc2s2NCkgX19NKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9tYXNrX21pbl9lcGk4IChfX201MTJpIF9fVywgX19tbWFzazY0IF9fTSwgX19tNTEyaSBfX0EsCi0gICAgICAgICAgX19tNTEyaSBfX0IpCi17Ci0gIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcG1pbnNiNTEyX21hc2sgKChfX3Y2NHFpKSBfX0EsCi0gICAgICAgICAgICAgIChfX3Y2NHFpKSBfX0IsCi0gICAgICAgICAgICAgIChfX3Y2NHFpKSBfX1csCi0gICAgICAgICAgICAgIChfX21tYXNrNjQpIF9fTSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfbWluX2VwaTE2IChfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCi17Ci0gIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcG1pbnN3NTEyX21hc2sgKChfX3YzMmhpKSBfX0EsCi0gICAgICAgICAgICAgIChfX3YzMmhpKSBfX0IsCi0gICAgICAgICAgICAgIChfX3YzMmhpKSBfbW01MTJfc2V0emVyb19oaSgpLAotICAgICAgICAgICAgICAoX19tbWFzazMyKSAtMSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfbWFza3pfbWluX2VwaTE2IChfX21tYXNrMzIgX19NLCBfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCi17Ci0gIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcG1pbnN3NTEyX21hc2sgKChfX3YzMmhpKSBfX0EsCi0gICAgICAgICAgICAgIChfX3YzMmhpKSBfX0IsCi0gICAgICAgICAgICAgIChfX3YzMmhpKSBfbW01MTJfc2V0emVyb19oaSgpLAotICAgICAgICAgICAgICAoX19tbWFzazMyKSBfX00pOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX21hc2tfbWluX2VwaTE2IChfX201MTJpIF9fVywgX19tbWFzazMyIF9fTSwgX19tNTEyaSBfX0EsCi0gICAgICAgICAgIF9fbTUxMmkgX19CKQotewotICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BtaW5zdzUxMl9tYXNrICgoX192MzJoaSkgX19BLAotICAgICAgICAgICAgICAoX192MzJoaSkgX19CLAotICAgICAgICAgICAgICAoX192MzJoaSkgX19XLAotICAgICAgICAgICAgICAoX19tbWFzazMyKSBfX00pOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX21pbl9lcHU4IChfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCi17Ci0gIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcG1pbnViNTEyX21hc2sgKChfX3Y2NHFpKSBfX0EsCi0gICAgICAgICAgICAgIChfX3Y2NHFpKSBfX0IsCi0gICAgICAgICAgICAgIChfX3Y2NHFpKSBfbW01MTJfc2V0emVyb19xaSgpLAotICAgICAgICAgICAgICAoX19tbWFzazY0KSAtMSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfbWFza3pfbWluX2VwdTggKF9fbW1hc2s2NCBfX00sIF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKLXsKLSAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wbWludWI1MTJfbWFzayAoKF9fdjY0cWkpIF9fQSwKLSAgICAgICAgICAgICAgKF9fdjY0cWkpIF9fQiwKLSAgICAgICAgICAgICAgKF9fdjY0cWkpIF9tbTUxMl9zZXR6ZXJvX3FpKCksCi0gICAgICAgICAgICAgIChfX21tYXNrNjQpIF9fTSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfbWFza19taW5fZXB1OCAoX19tNTEyaSBfX1csIF9fbW1hc2s2NCBfX00sIF9fbTUxMmkgX19BLAotICAgICAgICAgIF9fbTUxMmkgX19CKQotewotICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BtaW51YjUxMl9tYXNrICgoX192NjRxaSkgX19BLAotICAgICAgICAgICAgICAoX192NjRxaSkgX19CLAotICAgICAgICAgICAgICAoX192NjRxaSkgX19XLAotICAgICAgICAgICAgICAoX19tbWFzazY0KSBfX00pOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX21pbl9lcHUxNiAoX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQotewotICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BtaW51dzUxMl9tYXNrICgoX192MzJoaSkgX19BLAotICAgICAgICAgICAgICAoX192MzJoaSkgX19CLAotICAgICAgICAgICAgICAoX192MzJoaSkgX21tNTEyX3NldHplcm9faGkoKSwKLSAgICAgICAgICAgICAgKF9fbW1hc2szMikgLTEpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX21hc2t6X21pbl9lcHUxNiAoX19tbWFzazMyIF9fTSwgX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQotewotICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BtaW51dzUxMl9tYXNrICgoX192MzJoaSkgX19BLAotICAgICAgICAgICAgICAoX192MzJoaSkgX19CLAotICAgICAgICAgICAgICAoX192MzJoaSkgX21tNTEyX3NldHplcm9faGkoKSwKLSAgICAgICAgICAgICAgKF9fbW1hc2szMikgX19NKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9tYXNrX21pbl9lcHUxNiAoX19tNTEyaSBfX1csIF9fbW1hc2szMiBfX00sIF9fbTUxMmkgX19BLAotICAgICAgICAgICBfX201MTJpIF9fQikKLXsKLSAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wbWludXc1MTJfbWFzayAoKF9fdjMyaGkpIF9fQSwKLSAgICAgICAgICAgICAgKF9fdjMyaGkpIF9fQiwKLSAgICAgICAgICAgICAgKF9fdjMyaGkpIF9fVywKLSAgICAgICAgICAgICAgKF9fbW1hc2szMikgX19NKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9zaHVmZmxlX2VwaTggKF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKLXsKLSAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wc2h1ZmI1MTJfbWFzayAoKF9fdjY0cWkpIF9fQSwKLSAgICAgICAgICAgICAgKF9fdjY0cWkpIF9fQiwKLSAgICAgICAgICAgICAgKF9fdjY0cWkpIF9tbTUxMl9zZXR6ZXJvX3FpKCksCi0gICAgICAgICAgICAgIChfX21tYXNrNjQpIC0xKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9tYXNrX3NodWZmbGVfZXBpOCAoX19tNTEyaSBfX1csIF9fbW1hc2s2NCBfX1UsIF9fbTUxMmkgX19BLAotICAgICAgICBfX201MTJpIF9fQikKLXsKLSAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wc2h1ZmI1MTJfbWFzayAoKF9fdjY0cWkpIF9fQSwKLSAgICAgICAgICAgICAgKF9fdjY0cWkpIF9fQiwKLSAgICAgICAgICAgICAgKF9fdjY0cWkpIF9fVywKLSAgICAgICAgICAgICAgKF9fbW1hc2s2NCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9tYXNrel9zaHVmZmxlX2VwaTggKF9fbW1hc2s2NCBfX1UsIF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKLXsKLSAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wc2h1ZmI1MTJfbWFzayAoKF9fdjY0cWkpIF9fQSwKLSAgICAgICAgICAgICAgKF9fdjY0cWkpIF9fQiwKLSAgICAgICAgICAgICAgKF9fdjY0cWkpIF9tbTUxMl9zZXR6ZXJvX3FpKCksCi0gICAgICAgICAgICAgIChfX21tYXNrNjQpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfc3Vic19lcGk4IChfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCi17Ci0gIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcHN1YnNiNTEyX21hc2sgKChfX3Y2NHFpKSBfX0EsCi0gICAgICAgICAgICAgIChfX3Y2NHFpKSBfX0IsCi0gICAgICAgICAgICAgIChfX3Y2NHFpKSBfbW01MTJfc2V0emVyb19xaSgpLAotICAgICAgICAgICAgICAoX19tbWFzazY0KSAtMSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfbWFza19zdWJzX2VwaTggKF9fbTUxMmkgX19XLCBfX21tYXNrNjQgX19VLCBfX201MTJpIF9fQSwKLSAgICAgICAgICAgX19tNTEyaSBfX0IpCi17Ci0gIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcHN1YnNiNTEyX21hc2sgKChfX3Y2NHFpKSBfX0EsCi0gICAgICAgICAgICAgIChfX3Y2NHFpKSBfX0IsCi0gICAgICAgICAgICAgIChfX3Y2NHFpKSBfX1csCi0gICAgICAgICAgICAgIChfX21tYXNrNjQpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfbWFza3pfc3Vic19lcGk4IChfX21tYXNrNjQgX19VLCBfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCi17Ci0gIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcHN1YnNiNTEyX21hc2sgKChfX3Y2NHFpKSBfX0EsCi0gICAgICAgICAgICAgIChfX3Y2NHFpKSBfX0IsCi0gICAgICAgICAgICAgIChfX3Y2NHFpKSBfbW01MTJfc2V0emVyb19xaSgpLAotICAgICAgICAgICAgICAoX19tbWFzazY0KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX3N1YnNfZXBpMTYgKF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKLXsKLSAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wc3Vic3c1MTJfbWFzayAoKF9fdjMyaGkpIF9fQSwKLSAgICAgICAgICAgICAgKF9fdjMyaGkpIF9fQiwKLSAgICAgICAgICAgICAgKF9fdjMyaGkpIF9tbTUxMl9zZXR6ZXJvX2hpKCksCi0gICAgICAgICAgICAgIChfX21tYXNrMzIpIC0xKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9tYXNrX3N1YnNfZXBpMTYgKF9fbTUxMmkgX19XLCBfX21tYXNrMzIgX19VLCBfX201MTJpIF9fQSwKLSAgICAgIF9fbTUxMmkgX19CKQotewotICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BzdWJzdzUxMl9tYXNrICgoX192MzJoaSkgX19BLAotICAgICAgICAgICAgICAoX192MzJoaSkgX19CLAotICAgICAgICAgICAgICAoX192MzJoaSkgX19XLAotICAgICAgICAgICAgICAoX19tbWFzazMyKSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX21hc2t6X3N1YnNfZXBpMTYgKF9fbW1hc2szMiBfX1UsIF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKLXsKLSAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wc3Vic3c1MTJfbWFzayAoKF9fdjMyaGkpIF9fQSwKLSAgICAgICAgICAgICAgKF9fdjMyaGkpIF9fQiwKLSAgICAgICAgICAgICAgKF9fdjMyaGkpIF9tbTUxMl9zZXR6ZXJvX2hpKCksCi0gICAgICAgICAgICAgIChfX21tYXNrMzIpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfc3Vic19lcHU4IChfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCi17Ci0gIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcHN1YnVzYjUxMl9tYXNrICgoX192NjRxaSkgX19BLAotICAgICAgICAgICAgICAoX192NjRxaSkgX19CLAotICAgICAgICAgICAgICAoX192NjRxaSkgX21tNTEyX3NldHplcm9fcWkoKSwKLSAgICAgICAgICAgICAgKF9fbW1hc2s2NCkgLTEpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX21hc2tfc3Vic19lcHU4IChfX201MTJpIF9fVywgX19tbWFzazY0IF9fVSwgX19tNTEyaSBfX0EsCi0gICAgICAgICAgIF9fbTUxMmkgX19CKQotewotICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BzdWJ1c2I1MTJfbWFzayAoKF9fdjY0cWkpIF9fQSwKLSAgICAgICAgICAgICAgKF9fdjY0cWkpIF9fQiwKLSAgICAgICAgICAgICAgKF9fdjY0cWkpIF9fVywKLSAgICAgICAgICAgICAgKF9fbW1hc2s2NCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9tYXNrel9zdWJzX2VwdTggKF9fbW1hc2s2NCBfX1UsIF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKLXsKLSAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wc3VidXNiNTEyX21hc2sgKChfX3Y2NHFpKSBfX0EsCi0gICAgICAgICAgICAgIChfX3Y2NHFpKSBfX0IsCi0gICAgICAgICAgICAgIChfX3Y2NHFpKSBfbW01MTJfc2V0emVyb19xaSgpLAotICAgICAgICAgICAgICAoX19tbWFzazY0KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX3N1YnNfZXB1MTYgKF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKLXsKLSAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wc3VidXN3NTEyX21hc2sgKChfX3YzMmhpKSBfX0EsCi0gICAgICAgICAgICAgIChfX3YzMmhpKSBfX0IsCi0gICAgICAgICAgICAgIChfX3YzMmhpKSBfbW01MTJfc2V0emVyb19oaSgpLAotICAgICAgICAgICAgICAoX19tbWFzazMyKSAtMSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfbWFza19zdWJzX2VwdTE2IChfX201MTJpIF9fVywgX19tbWFzazMyIF9fVSwgX19tNTEyaSBfX0EsCi0gICAgICBfX201MTJpIF9fQikKLXsKLSAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wc3VidXN3NTEyX21hc2sgKChfX3YzMmhpKSBfX0EsCi0gICAgICAgICAgICAgIChfX3YzMmhpKSBfX0IsCi0gICAgICAgICAgICAgIChfX3YzMmhpKSBfX1csCi0gICAgICAgICAgICAgIChfX21tYXNrMzIpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfbWFza3pfc3Vic19lcHUxNiAoX19tbWFzazMyIF9fVSwgX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQotewotICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BzdWJ1c3c1MTJfbWFzayAoKF9fdjMyaGkpIF9fQSwKLSAgICAgICAgICAgICAgKF9fdjMyaGkpIF9fQiwKLSAgICAgICAgICAgICAgKF9fdjMyaGkpIF9tbTUxMl9zZXR6ZXJvX2hpKCksCi0gICAgICAgICAgICAgIChfX21tYXNrMzIpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfbWFzazJfcGVybXV0ZXgydmFyX2VwaTE2IChfX201MTJpIF9fQSwgX19tNTEyaSBfX0ksCi0gICAgICAgICBfX21tYXNrMzIgX19VLCBfX201MTJpIF9fQikKLXsKLSAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl92cGVybWkydmFyaGk1MTJfbWFzayAoKF9fdjMyaGkpIF9fQSwKLSAgICAgICAgICAgICAgKF9fdjMyaGkpIF9fSSAvKiBpZHggKi8gLAotICAgICAgICAgICAgICAoX192MzJoaSkgX19CLAotICAgICAgICAgICAgICAoX19tbWFzazMyKSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX3Blcm11dGV4MnZhcl9lcGkxNiAoX19tNTEyaSBfX0EsIF9fbTUxMmkgX19JLCBfX201MTJpIF9fQikKLXsKLSAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl92cGVybXQydmFyaGk1MTJfbWFzayAoKF9fdjMyaGkpIF9fSSAvKiBpZHggKi8sCi0gICAgICAgICAgICAgIChfX3YzMmhpKSBfX0EsCi0gICAgICAgICAgICAgIChfX3YzMmhpKSBfX0IsCi0gICAgICAgICAgICAgIChfX21tYXNrMzIpIC0xKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9tYXNrX3Blcm11dGV4MnZhcl9lcGkxNiAoX19tNTEyaSBfX0EsIF9fbW1hc2szMiBfX1UsCi0gICAgICAgIF9fbTUxMmkgX19JLCBfX201MTJpIF9fQikKLXsKLSAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl92cGVybXQydmFyaGk1MTJfbWFzayAoKF9fdjMyaGkpIF9fSSAvKiBpZHggKi8sCi0gICAgICAgICAgICAgIChfX3YzMmhpKSBfX0EsCi0gICAgICAgICAgICAgIChfX3YzMmhpKSBfX0IsCi0gICAgICAgICAgICAgIChfX21tYXNrMzIpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfbWFza3pfcGVybXV0ZXgydmFyX2VwaTE2IChfX21tYXNrMzIgX19VLCBfX201MTJpIF9fQSwKLSAgICAgICAgIF9fbTUxMmkgX19JLCBfX201MTJpIF9fQikKLXsKLSAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl92cGVybXQydmFyaGk1MTJfbWFza3ogKChfX3YzMmhpKSBfX0kKLSAgICAgICAgICAgICAgLyogaWR4ICovICwKLSAgICAgICAgICAgICAgKF9fdjMyaGkpIF9fQSwKLSAgICAgICAgICAgICAgKF9fdjMyaGkpIF9fQiwKLSAgICAgICAgICAgICAgKF9fbW1hc2szMikgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9tdWxocnNfZXBpMTYgKF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKLXsKLSAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wbXVsaHJzdzUxMl9tYXNrICgoX192MzJoaSkgX19BLAotICAgICAgICAgICAgICAgIChfX3YzMmhpKSBfX0IsCi0gICAgICAgICAgICAgICAgKF9fdjMyaGkpIF9tbTUxMl9zZXR6ZXJvX2hpKCksCi0gICAgICAgICAgICAgICAgKF9fbW1hc2szMikgLTEpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX21hc2tfbXVsaHJzX2VwaTE2IChfX201MTJpIF9fVywgX19tbWFzazMyIF9fVSwgX19tNTEyaSBfX0EsCi0gICAgICAgIF9fbTUxMmkgX19CKQotewotICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BtdWxocnN3NTEyX21hc2sgKChfX3YzMmhpKSBfX0EsCi0gICAgICAgICAgICAgICAgKF9fdjMyaGkpIF9fQiwKLSAgICAgICAgICAgICAgICAoX192MzJoaSkgX19XLAotICAgICAgICAgICAgICAgIChfX21tYXNrMzIpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfbWFza3pfbXVsaHJzX2VwaTE2IChfX21tYXNrMzIgX19VLCBfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCi17Ci0gIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcG11bGhyc3c1MTJfbWFzayAoKF9fdjMyaGkpIF9fQSwKLSAgICAgICAgICAgICAgICAoX192MzJoaSkgX19CLAotICAgICAgICAgICAgICAgIChfX3YzMmhpKSBfbW01MTJfc2V0emVyb19oaSgpLAotICAgICAgICAgICAgICAgIChfX21tYXNrMzIpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfbXVsaGlfZXBpMTYgKF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKLXsKLSAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wbXVsaHc1MTJfbWFzayAoKF9fdjMyaGkpIF9fQSwKLSAgICAgICAgICAgICAgKF9fdjMyaGkpIF9fQiwKLSAgICAgICAgICAgICAgKF9fdjMyaGkpIF9tbTUxMl9zZXR6ZXJvX2hpKCksCi0gICAgICAgICAgICAgIChfX21tYXNrMzIpIC0xKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9tYXNrX211bGhpX2VwaTE2IChfX201MTJpIF9fVywgX19tbWFzazMyIF9fVSwgX19tNTEyaSBfX0EsCi0gICAgICAgX19tNTEyaSBfX0IpCi17Ci0gIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcG11bGh3NTEyX21hc2sgKChfX3YzMmhpKSBfX0EsCi0gICAgICAgICAgICAgIChfX3YzMmhpKSBfX0IsCi0gICAgICAgICAgICAgIChfX3YzMmhpKSBfX1csCi0gICAgICAgICAgICAgIChfX21tYXNrMzIpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfbWFza3pfbXVsaGlfZXBpMTYgKF9fbW1hc2szMiBfX1UsIF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKLXsKLSAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wbXVsaHc1MTJfbWFzayAoKF9fdjMyaGkpIF9fQSwKLSAgICAgICAgICAgICAgKF9fdjMyaGkpIF9fQiwKLSAgICAgICAgICAgICAgKF9fdjMyaGkpIF9tbTUxMl9zZXR6ZXJvX2hpKCksCi0gICAgICAgICAgICAgIChfX21tYXNrMzIpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfbXVsaGlfZXB1MTYgKF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKLXsKLSAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wbXVsaHV3NTEyX21hc2sgKChfX3YzMmhpKSBfX0EsCi0gICAgICAgICAgICAgICAoX192MzJoaSkgX19CLAotICAgICAgICAgICAgICAgKF9fdjMyaGkpIF9tbTUxMl9zZXR6ZXJvX2hpKCksCi0gICAgICAgICAgICAgICAoX19tbWFzazMyKSAtMSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfbWFza19tdWxoaV9lcHUxNiAoX19tNTEyaSBfX1csIF9fbW1hc2szMiBfX1UsIF9fbTUxMmkgX19BLAotICAgICAgIF9fbTUxMmkgX19CKQotewotICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BtdWxodXc1MTJfbWFzayAoKF9fdjMyaGkpIF9fQSwKLSAgICAgICAgICAgICAgIChfX3YzMmhpKSBfX0IsCi0gICAgICAgICAgICAgICAoX192MzJoaSkgX19XLAotICAgICAgICAgICAgICAgKF9fbW1hc2szMikgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9tYXNrel9tdWxoaV9lcHUxNiAoX19tbWFzazMyIF9fVSwgX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQotewotICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BtdWxodXc1MTJfbWFzayAoKF9fdjMyaGkpIF9fQSwKLSAgICAgICAgICAgICAgIChfX3YzMmhpKSBfX0IsCi0gICAgICAgICAgICAgICAoX192MzJoaSkgX21tNTEyX3NldHplcm9faGkoKSwKLSAgICAgICAgICAgICAgIChfX21tYXNrMzIpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfbWFkZHVic19lcGkxNiAoX19tNTEyaSBfX1gsIF9fbTUxMmkgX19ZKSB7Ci0gIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcG1hZGR1YnN3NTEyX21hc2sgKChfX3Y2NHFpKSBfX1gsCi0gICAgICAgICAgICAgICAgIChfX3Y2NHFpKSBfX1ksCi0gICAgICAgICAgICAgICAgIChfX3YzMmhpKSBfbW01MTJfc2V0emVyb19oaSgpLAotICAgICAgICAgICAgICAgICAoX19tbWFzazMyKSAtMSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfbWFza19tYWRkdWJzX2VwaTE2IChfX201MTJpIF9fVywgX19tbWFzazMyIF9fVSwgX19tNTEyaSBfX1gsCi0gICAgICAgICBfX201MTJpIF9fWSkgewotICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BtYWRkdWJzdzUxMl9tYXNrICgoX192NjRxaSkgX19YLAotICAgICAgICAgICAgICAgICAoX192NjRxaSkgX19ZLAotICAgICAgICAgICAgICAgICAoX192MzJoaSkgX19XLAotICAgICAgICAgICAgICAgICAoX19tbWFzazMyKSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX21hc2t6X21hZGR1YnNfZXBpMTYgKF9fbW1hc2szMiBfX1UsIF9fbTUxMmkgX19YLCBfX201MTJpIF9fWSkgewotICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BtYWRkdWJzdzUxMl9tYXNrICgoX192NjRxaSkgX19YLAotICAgICAgICAgICAgICAgICAoX192NjRxaSkgX19ZLAotICAgICAgICAgICAgICAgICAoX192MzJoaSkgX21tNTEyX3NldHplcm9faGkoKSwKLSAgICAgICAgICAgICAgICAgKF9fbW1hc2szMikgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9tYWRkX2VwaTE2IChfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpIHsKLSAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wbWFkZHdkNTEyX21hc2sgKChfX3YzMmhpKSBfX0EsCi0gICAgICAgICAgICAgICAoX192MzJoaSkgX19CLAotICAgICAgICAgICAgICAgKF9fdjE2c2kpIF9tbTUxMl9zZXR6ZXJvX3NpNTEyKCksCi0gICAgICAgICAgICAgICAoX19tbWFzazE2KSAtMSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfbWFza19tYWRkX2VwaTE2IChfX201MTJpIF9fVywgX19tbWFzazE2IF9fVSwgX19tNTEyaSBfX0EsCi0gICAgICBfX201MTJpIF9fQikgewotICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BtYWRkd2Q1MTJfbWFzayAoKF9fdjMyaGkpIF9fQSwKLSAgICAgICAgICAgICAgIChfX3YzMmhpKSBfX0IsCi0gICAgICAgICAgICAgICAoX192MTZzaSkgX19XLAotICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9tYXNrel9tYWRkX2VwaTE2IChfX21tYXNrMTYgX19VLCBfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpIHsKLSAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wbWFkZHdkNTEyX21hc2sgKChfX3YzMmhpKSBfX0EsCi0gICAgICAgICAgICAgICAoX192MzJoaSkgX19CLAotICAgICAgICAgICAgICAgKF9fdjE2c2kpIF9tbTUxMl9zZXR6ZXJvX3NpNTEyKCksCi0gICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX2N2dHNlcGkxNl9lcGk4IChfX201MTJpIF9fQSkgewotICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3Btb3Zzd2I1MTJfbWFzayAoKF9fdjMyaGkpIF9fQSwKLSAgICAgICAgICAgICAgIChfX3YzMnFpKV9tbTI1Nl9zZXR6ZXJvX3NpMjU2KCksCi0gICAgICAgICAgICAgICAoX19tbWFzazMyKSAtMSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfbWFza19jdnRzZXBpMTZfZXBpOCAoX19tMjU2aSBfX08sIF9fbW1hc2szMiBfX00sIF9fbTUxMmkgX19BKSB7Ci0gIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcG1vdnN3YjUxMl9tYXNrICgoX192MzJoaSkgX19BLAotICAgICAgICAgICAgICAgKF9fdjMycWkpX19PLAotICAgICAgICAgICAgICAgX19NKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9tYXNrel9jdnRzZXBpMTZfZXBpOCAoX19tbWFzazMyIF9fTSwgX19tNTEyaSBfX0EpIHsKLSAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wbW92c3diNTEyX21hc2sgKChfX3YzMmhpKSBfX0EsCi0gICAgICAgICAgICAgICAoX192MzJxaSkgX21tMjU2X3NldHplcm9fc2kyNTYoKSwKLSAgICAgICAgICAgICAgIF9fTSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfY3Z0dXNlcGkxNl9lcGk4IChfX201MTJpIF9fQSkgewotICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3Btb3Z1c3diNTEyX21hc2sgKChfX3YzMmhpKSBfX0EsCi0gICAgICAgICAgICAgICAgKF9fdjMycWkpIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2KCksCi0gICAgICAgICAgICAgICAgKF9fbW1hc2szMikgLTEpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX21hc2tfY3Z0dXNlcGkxNl9lcGk4IChfX20yNTZpIF9fTywgX19tbWFzazMyIF9fTSwgX19tNTEyaSBfX0EpIHsKLSAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wbW92dXN3YjUxMl9tYXNrICgoX192MzJoaSkgX19BLAotICAgICAgICAgICAgICAgIChfX3YzMnFpKSBfX08sCi0gICAgICAgICAgICAgICAgX19NKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9tYXNrel9jdnR1c2VwaTE2X2VwaTggKF9fbW1hc2szMiBfX00sIF9fbTUxMmkgX19BKSB7Ci0gIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcG1vdnVzd2I1MTJfbWFzayAoKF9fdjMyaGkpIF9fQSwKLSAgICAgICAgICAgICAgICAoX192MzJxaSkgX21tMjU2X3NldHplcm9fc2kyNTYoKSwKLSAgICAgICAgICAgICAgICBfX00pOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX2N2dGVwaTE2X2VwaTggKF9fbTUxMmkgX19BKSB7Ci0gIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcG1vdndiNTEyX21hc2sgKChfX3YzMmhpKSBfX0EsCi0gICAgICAgICAgICAgIChfX3YzMnFpKSBfbW0yNTZfc2V0emVyb19zaTI1NigpLAotICAgICAgICAgICAgICAoX19tbWFzazMyKSAtMSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfbWFza19jdnRlcGkxNl9lcGk4IChfX20yNTZpIF9fTywgX19tbWFzazMyIF9fTSwgX19tNTEyaSBfX0EpIHsKLSAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wbW92d2I1MTJfbWFzayAoKF9fdjMyaGkpIF9fQSwKLSAgICAgICAgICAgICAgKF9fdjMycWkpIF9fTywKLSAgICAgICAgICAgICAgX19NKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9tYXNrel9jdnRlcGkxNl9lcGk4IChfX21tYXNrMzIgX19NLCBfX201MTJpIF9fQSkgewotICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3Btb3Z3YjUxMl9tYXNrICgoX192MzJoaSkgX19BLAotICAgICAgICAgICAgICAoX192MzJxaSkgX21tMjU2X3NldHplcm9fc2kyNTYoKSwKLSAgICAgICAgICAgICAgX19NKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl91bnBhY2toaV9lcGk4IChfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpIHsKLSAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wdW5wY2toYnc1MTJfbWFzayAoKF9fdjY0cWkpIF9fQSwKLSAgICAgICAgICAgICAgICAgKF9fdjY0cWkpIF9fQiwKLSAgICAgICAgICAgICAgICAgKF9fdjY0cWkpIF9tbTUxMl9zZXR6ZXJvX3FpKCksCi0gICAgICAgICAgICAgICAgIChfX21tYXNrNjQpIC0xKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9tYXNrX3VucGFja2hpX2VwaTggKF9fbTUxMmkgX19XLCBfX21tYXNrNjQgX19VLCBfX201MTJpIF9fQSwKLSAgICAgICAgIF9fbTUxMmkgX19CKSB7Ci0gIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcHVucGNraGJ3NTEyX21hc2sgKChfX3Y2NHFpKSBfX0EsCi0gICAgICAgICAgICAgICAgIChfX3Y2NHFpKSBfX0IsCi0gICAgICAgICAgICAgICAgIChfX3Y2NHFpKSBfX1csCi0gICAgICAgICAgICAgICAgIChfX21tYXNrNjQpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfbWFza3pfdW5wYWNraGlfZXBpOCAoX19tbWFzazY0IF9fVSwgX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKSB7Ci0gIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcHVucGNraGJ3NTEyX21hc2sgKChfX3Y2NHFpKSBfX0EsCi0gICAgICAgICAgICAgICAgIChfX3Y2NHFpKSBfX0IsCi0gICAgICAgICAgICAgICAgIChfX3Y2NHFpKSBfbW01MTJfc2V0emVyb19xaSgpLAotICAgICAgICAgICAgICAgICAoX19tbWFzazY0KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX3VucGFja2hpX2VwaTE2IChfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpIHsKLSAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wdW5wY2tod2Q1MTJfbWFzayAoKF9fdjMyaGkpIF9fQSwKLSAgICAgICAgICAgICAgICAgKF9fdjMyaGkpIF9fQiwKLSAgICAgICAgICAgICAgICAgKF9fdjMyaGkpIF9tbTUxMl9zZXR6ZXJvX2hpKCksCi0gICAgICAgICAgICAgICAgIChfX21tYXNrMzIpIC0xKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9tYXNrX3VucGFja2hpX2VwaTE2IChfX201MTJpIF9fVywgX19tbWFzazMyIF9fVSwgX19tNTEyaSBfX0EsCi0gICAgICAgICAgX19tNTEyaSBfX0IpIHsKLSAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wdW5wY2tod2Q1MTJfbWFzayAoKF9fdjMyaGkpIF9fQSwKLSAgICAgICAgICAgICAgICAgKF9fdjMyaGkpIF9fQiwKLSAgICAgICAgICAgICAgICAgKF9fdjMyaGkpIF9fVywKLSAgICAgICAgICAgICAgICAgKF9fbW1hc2szMikgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9tYXNrel91bnBhY2toaV9lcGkxNiAoX19tbWFzazMyIF9fVSwgX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKSB7Ci0gIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcHVucGNraHdkNTEyX21hc2sgKChfX3YzMmhpKSBfX0EsCi0gICAgICAgICAgICAgICAgIChfX3YzMmhpKSBfX0IsCi0gICAgICAgICAgICAgICAgIChfX3YzMmhpKSBfbW01MTJfc2V0emVyb19oaSgpLAotICAgICAgICAgICAgICAgICAoX19tbWFzazMyKSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX3VucGFja2xvX2VwaTggKF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikgewotICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3B1bnBja2xidzUxMl9tYXNrICgoX192NjRxaSkgX19BLAotICAgICAgICAgICAgICAgICAoX192NjRxaSkgX19CLAotICAgICAgICAgICAgICAgICAoX192NjRxaSkgX21tNTEyX3NldHplcm9fcWkoKSwKLSAgICAgICAgICAgICAgICAgKF9fbW1hc2s2NCkgLTEpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX21hc2tfdW5wYWNrbG9fZXBpOCAoX19tNTEyaSBfX1csIF9fbW1hc2s2NCBfX1UsIF9fbTUxMmkgX19BLAotICAgICAgICAgX19tNTEyaSBfX0IpIHsKLSAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wdW5wY2tsYnc1MTJfbWFzayAoKF9fdjY0cWkpIF9fQSwKLSAgICAgICAgICAgICAgICAgKF9fdjY0cWkpIF9fQiwKLSAgICAgICAgICAgICAgICAgKF9fdjY0cWkpIF9fVywKLSAgICAgICAgICAgICAgICAgKF9fbW1hc2s2NCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9tYXNrel91bnBhY2tsb19lcGk4IChfX21tYXNrNjQgX19VLCBfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpIHsKLSAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wdW5wY2tsYnc1MTJfbWFzayAoKF9fdjY0cWkpIF9fQSwKLSAgICAgICAgICAgICAgICAgKF9fdjY0cWkpIF9fQiwKLSAgICAgICAgICAgICAgICAgKF9fdjY0cWkpIF9tbTUxMl9zZXR6ZXJvX3FpKCksCi0gICAgICAgICAgICAgICAgIChfX21tYXNrNjQpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfdW5wYWNrbG9fZXBpMTYgKF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikgewotICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3B1bnBja2x3ZDUxMl9tYXNrICgoX192MzJoaSkgX19BLAotICAgICAgICAgICAgICAgICAoX192MzJoaSkgX19CLAotICAgICAgICAgICAgICAgICAoX192MzJoaSkgX21tNTEyX3NldHplcm9faGkoKSwKLSAgICAgICAgICAgICAgICAgKF9fbW1hc2szMikgLTEpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX21hc2tfdW5wYWNrbG9fZXBpMTYgKF9fbTUxMmkgX19XLCBfX21tYXNrMzIgX19VLCBfX201MTJpIF9fQSwKLSAgICAgICAgICBfX201MTJpIF9fQikgewotICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3B1bnBja2x3ZDUxMl9tYXNrICgoX192MzJoaSkgX19BLAotICAgICAgICAgICAgICAgICAoX192MzJoaSkgX19CLAotICAgICAgICAgICAgICAgICAoX192MzJoaSkgX19XLAotICAgICAgICAgICAgICAgICAoX19tbWFzazMyKSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX21hc2t6X3VucGFja2xvX2VwaTE2IChfX21tYXNrMzIgX19VLCBfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpIHsKLSAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wdW5wY2tsd2Q1MTJfbWFzayAoKF9fdjMyaGkpIF9fQSwKLSAgICAgICAgICAgICAgICAgKF9fdjMyaGkpIF9fQiwKLSAgICAgICAgICAgICAgICAgKF9fdjMyaGkpIF9tbTUxMl9zZXR6ZXJvX2hpKCksCi0gICAgICAgICAgICAgICAgIChfX21tYXNrMzIpIF9fVSk7Ci19Ci0KLSNkZWZpbmUgX21tNTEyX2NtcF9lcGk4X21hc2soYSwgYiwgcCkgX19leHRlbnNpb25fXyAoeyBcCi0gIChfX21tYXNrMTYpX19idWlsdGluX2lhMzJfY21wYjUxMl9tYXNrKChfX3Y2NHFpKShfX201MTJpKShhKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NjRxaSkoX19tNTEyaSkoYiksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHApLCAoX19tbWFzazY0KS0xKTsgfSkKLQotI2RlZmluZSBfbW01MTJfbWFza19jbXBfZXBpOF9tYXNrKG0sIGEsIGIsIHApIF9fZXh0ZW5zaW9uX18gKHsgXAotICAoX19tbWFzazE2KV9fYnVpbHRpbl9pYTMyX2NtcGI1MTJfbWFzaygoX192NjRxaSkoX19tNTEyaSkoYSksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjY0cWkpKF9fbTUxMmkpKGIpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwKSwgKF9fbW1hc2s2NCkobSkpOyB9KQotCi0jZGVmaW5lIF9tbTUxMl9jbXBfZXB1OF9tYXNrKGEsIGIsIHApIF9fZXh0ZW5zaW9uX18gKHsgXAotICAoX19tbWFzazE2KV9fYnVpbHRpbl9pYTMyX3VjbXBiNTEyX21hc2soKF9fdjY0cWkpKF9fbTUxMmkpKGEpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NjRxaSkoX19tNTEyaSkoYiksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwKSwgKF9fbW1hc2s2NCktMSk7IH0pCi0KLSNkZWZpbmUgX21tNTEyX21hc2tfY21wX2VwdThfbWFzayhtLCBhLCBiLCBwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgKF9fbW1hc2sxNilfX2J1aWx0aW5faWEzMl91Y21wYjUxMl9tYXNrKChfX3Y2NHFpKShfX201MTJpKShhKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjY0cWkpKF9fbTUxMmkpKGIpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocCksIChfX21tYXNrNjQpKG0pKTsgfSkKLQotI2RlZmluZSBfbW01MTJfY21wX2VwaTE2X21hc2soYSwgYiwgcCkgX19leHRlbnNpb25fXyAoeyBcCi0gIChfX21tYXNrMTYpX19idWlsdGluX2lhMzJfY21wdzUxMl9tYXNrKChfX3YzMmhpKShfX201MTJpKShhKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MzJoaSkoX19tNTEyaSkoYiksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHApLCAoX19tbWFzazMyKS0xKTsgfSkKLQotI2RlZmluZSBfbW01MTJfbWFza19jbXBfZXBpMTZfbWFzayhtLCBhLCBiLCBwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgKF9fbW1hc2sxNilfX2J1aWx0aW5faWEzMl9jbXB3NTEyX21hc2soKF9fdjMyaGkpKF9fbTUxMmkpKGEpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YzMmhpKShfX201MTJpKShiKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocCksIChfX21tYXNrMzIpKG0pKTsgfSkKLQotI2RlZmluZSBfbW01MTJfY21wX2VwdTE2X21hc2soYSwgYiwgcCkgX19leHRlbnNpb25fXyAoeyBcCi0gIChfX21tYXNrMTYpX19idWlsdGluX2lhMzJfdWNtcHc1MTJfbWFzaygoX192MzJoaSkoX19tNTEyaSkoYSksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YzMmhpKShfX201MTJpKShiKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHApLCAoX19tbWFzazMyKS0xKTsgfSkKLQotI2RlZmluZSBfbW01MTJfbWFza19jbXBfZXB1MTZfbWFzayhtLCBhLCBiLCBwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgKF9fbW1hc2sxNilfX2J1aWx0aW5faWEzMl91Y21wdzUxMl9tYXNrKChfX3YzMmhpKShfX201MTJpKShhKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjMyaGkpKF9fbTUxMmkpKGIpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocCksIChfX21tYXNrMzIpKG0pKTsgfSkKLQotCi0jdW5kZWYgX19ERUZBVUxUX0ZOX0FUVFJTCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvY2xhbmctMjU3NzExMy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9hdng1MTJjZGludHJpbi5oIGIvY2xhbmctMjU3NzExMy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9hdng1MTJjZGludHJpbi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzODk0YjI5Li4wMDAwMDAwCi0tLSBhL2NsYW5nLTI1NzcxMTMvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvYXZ4NTEyY2RpbnRyaW4uaAorKysgL2Rldi9udWxsCkBAIC0xLDEzMSArMCwwIEBACi0vKj09PS0tLS0tLS0tLS0tLS0gYXZ4NTEyY2RpbnRyaW4uaCAtIEFWWDUxMkNEIGludHJpbnNpY3MgLS0tLS0tLS0tLS0tLS0tLS0tPT09Ci0gKgotICoKLSAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKLSAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCi0gKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCi0gKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCi0gKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKLSAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Ci0gKgotICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KLSAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgotICoKLSAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCi0gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKLSAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgotICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKLSAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KLSAqIFRIRSBTT0ZUV0FSRS4KLSAqCi0gKj09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09Ci0gKi8KLSNpZm5kZWYgX19JTU1JTlRSSU5fSAotI2Vycm9yICJOZXZlciB1c2UgPGF2eDUxMmNkaW50cmluLmg+IGRpcmVjdGx5OyBpbmNsdWRlIDxpbW1pbnRyaW4uaD4gaW5zdGVhZC4iCi0jZW5kaWYKLQotI2lmbmRlZiBfX0FWWDUxMkNESU5UUklOX0gKLSNkZWZpbmUgX19BVlg1MTJDRElOVFJJTl9ICi0KLS8qIERlZmluZSB0aGUgZGVmYXVsdCBhdHRyaWJ1dGVzIGZvciB0aGUgZnVuY3Rpb25zIGluIHRoaXMgZmlsZS4gKi8KLSNkZWZpbmUgX19ERUZBVUxUX0ZOX0FUVFJTIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXywgX190YXJnZXRfXygiYXZ4NTEyY2QiKSkpCi0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfY29uZmxpY3RfZXBpNjQgKF9fbTUxMmkgX19BKQotewotICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3ZwY29uZmxpY3RkaV81MTJfbWFzayAoKF9fdjhkaSkgX19BLAotICAgICAgICAgICAgICAgICAoX192OGRpKSBfbW01MTJfc2V0emVyb19zaTUxMiAoKSwKLSAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfbWFza19jb25mbGljdF9lcGk2NCAoX19tNTEyaSBfX1csIF9fbW1hc2s4IF9fVSwgX19tNTEyaSBfX0EpCi17Ci0gIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfdnBjb25mbGljdGRpXzUxMl9tYXNrICgoX192OGRpKSBfX0EsCi0gICAgICAgICAgICAgICAoX192OGRpKSBfX1csCi0gICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfbWFza3pfY29uZmxpY3RfZXBpNjQgKF9fbW1hc2s4IF9fVSwgX19tNTEyaSBfX0EpCi17Ci0gIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfdnBjb25mbGljdGRpXzUxMl9tYXNrICgoX192OGRpKSBfX0EsCi0gICAgICAgICAgICAgICAgIChfX3Y4ZGkpIF9tbTUxMl9zZXR6ZXJvX3NpNTEyICgpLAotICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfY29uZmxpY3RfZXBpMzIgKF9fbTUxMmkgX19BKQotewotICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3ZwY29uZmxpY3RzaV81MTJfbWFzayAoKF9fdjE2c2kpIF9fQSwKLSAgICAgICAgICAgICAgICAgKF9fdjE2c2kpIF9tbTUxMl9zZXR6ZXJvX3NpNTEyICgpLAotICAgICAgICAgICAgICAgICAoX19tbWFzazE2KSAtMSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfbWFza19jb25mbGljdF9lcGkzMiAoX19tNTEyaSBfX1csIF9fbW1hc2sxNiBfX1UsIF9fbTUxMmkgX19BKQotewotICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3ZwY29uZmxpY3RzaV81MTJfbWFzayAoKF9fdjE2c2kpIF9fQSwKLSAgICAgICAgICAgICAgIChfX3YxNnNpKSBfX1csCi0gICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX21hc2t6X2NvbmZsaWN0X2VwaTMyIChfX21tYXNrMTYgX19VLCBfX201MTJpIF9fQSkKLXsKLSAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl92cGNvbmZsaWN0c2lfNTEyX21hc2sgKChfX3YxNnNpKSBfX0EsCi0gICAgICAgICAgICAgICAgIChfX3YxNnNpKSBfbW01MTJfc2V0emVyb19zaTUxMiAoKSwKLSAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9semNudF9lcGkzMiAoX19tNTEyaSBfX0EpCi17Ci0gIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfdnBsemNudGRfNTEyX21hc2sgKChfX3YxNnNpKSBfX0EsCi0gICAgICAgICAgICAgKF9fdjE2c2kpIF9tbTUxMl9zZXR6ZXJvX3NpNTEyICgpLAotICAgICAgICAgICAgIChfX21tYXNrMTYpIC0xKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9tYXNrX2x6Y250X2VwaTMyIChfX201MTJpIF9fVywgX19tbWFzazE2IF9fVSwgX19tNTEyaSBfX0EpCi17Ci0gIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfdnBsemNudGRfNTEyX21hc2sgKChfX3YxNnNpKSBfX0EsCi0gICAgICAgICAgICAgICAgIChfX3YxNnNpKSBfX1csCi0gICAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfbWFza3pfbHpjbnRfZXBpMzIgKF9fbW1hc2sxNiBfX1UsIF9fbTUxMmkgX19BKQotewotICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3ZwbHpjbnRkXzUxMl9tYXNrICgoX192MTZzaSkgX19BLAotICAgICAgICAgICAgIChfX3YxNnNpKSBfbW01MTJfc2V0emVyb19zaTUxMiAoKSwKLSAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX2x6Y250X2VwaTY0IChfX201MTJpIF9fQSkKLXsKLSAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl92cGx6Y250cV81MTJfbWFzayAoKF9fdjhkaSkgX19BLAotICAgICAgICAgICAgIChfX3Y4ZGkpIF9tbTUxMl9zZXR6ZXJvX3NpNTEyICgpLAotICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX21hc2tfbHpjbnRfZXBpNjQgKF9fbTUxMmkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTUxMmkgX19BKQotewotICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3ZwbHpjbnRxXzUxMl9tYXNrICgoX192OGRpKSBfX0EsCi0gICAgICAgICAgICAgICAgIChfX3Y4ZGkpIF9fVywKLSAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX21hc2t6X2x6Y250X2VwaTY0IChfX21tYXNrOCBfX1UsIF9fbTUxMmkgX19BKQotewotICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3ZwbHpjbnRxXzUxMl9tYXNrICgoX192OGRpKSBfX0EsCi0gICAgICAgICAgICAgKF9fdjhkaSkgX21tNTEyX3NldHplcm9fc2k1MTIgKCksCi0gICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotI3VuZGVmIF9fREVGQVVMVF9GTl9BVFRSUwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2NsYW5nLTI1NzcxMTMvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvYXZ4NTEyZHFpbnRyaW4uaCBiL2NsYW5nLTI1NzcxMTMvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvYXZ4NTEyZHFpbnRyaW4uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWZlZTQ5MC4uMDAwMDAwMAotLS0gYS9jbGFuZy0yNTc3MTEzL2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL2F2eDUxMmRxaW50cmluLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3NzggKzAsMCBAQAotLyo9PT0tLS0tIGF2eDUxMmRxaW50cmluLmggLSBBVlg1MTJEUSBpbnRyaW5zaWNzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQotICoKLSAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKLSAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCi0gKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCi0gKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCi0gKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKLSAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Ci0gKgotICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KLSAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgotICoKLSAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCi0gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKLSAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgotICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKLSAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KLSAqIFRIRSBTT0ZUV0FSRS4KLSAqCi0gKj09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09Ci0gKi8KLQotI2lmbmRlZiBfX0lNTUlOVFJJTl9ICi0jZXJyb3IgIk5ldmVyIHVzZSA8YXZ4NTEyZHFpbnRyaW4uaD4gZGlyZWN0bHk7IGluY2x1ZGUgPGltbWludHJpbi5oPiBpbnN0ZWFkLiIKLSNlbmRpZgotCi0jaWZuZGVmIF9fQVZYNTEyRFFJTlRSSU5fSAotI2RlZmluZSBfX0FWWDUxMkRRSU5UUklOX0gKLQotLyogRGVmaW5lIHRoZSBkZWZhdWx0IGF0dHJpYnV0ZXMgZm9yIHRoZSBmdW5jdGlvbnMgaW4gdGhpcyBmaWxlLiAqLwotI2RlZmluZSBfX0RFRkFVTFRfRk5fQVRUUlMgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fLCBfX3RhcmdldF9fKCJhdng1MTJkcSIpKSkKLQotc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9tdWxsb19lcGk2NCAoX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKSB7Ci0gIHJldHVybiAoX19tNTEyaSkgKChfX3Y4ZGkpIF9fQSAqIChfX3Y4ZGkpIF9fQik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfbWFza19tdWxsb19lcGk2NCAoX19tNTEyaSBfX1csIF9fbW1hc2s4IF9fVSwgX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKSB7Ci0gIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcG11bGxxNTEyX21hc2sgKChfX3Y4ZGkpIF9fQSwKLSAgICAgICAgICAgICAgKF9fdjhkaSkgX19CLAotICAgICAgICAgICAgICAoX192OGRpKSBfX1csCi0gICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9tYXNrel9tdWxsb19lcGk2NCAoX19tbWFzazggX19VLCBfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpIHsKLSAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wbXVsbHE1MTJfbWFzayAoKF9fdjhkaSkgX19BLAotICAgICAgICAgICAgICAoX192OGRpKSBfX0IsCi0gICAgICAgICAgICAgIChfX3Y4ZGkpCi0gICAgICAgICAgICAgIF9tbTUxMl9zZXR6ZXJvX3NpNTEyICgpLAotICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfeG9yX3BkIChfX201MTJkIF9fQSwgX19tNTEyZCBfX0IpIHsKLSAgcmV0dXJuIChfX201MTJkKSAoKF9fdjhkaSkgX19BIF4gKF9fdjhkaSkgX19CKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tNTEyZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9tYXNrX3hvcl9wZCAoX19tNTEyZCBfX1csIF9fbW1hc2s4IF9fVSwgX19tNTEyZCBfX0EsIF9fbTUxMmQgX19CKSB7Ci0gIHJldHVybiAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfeG9ycGQ1MTJfbWFzayAoKF9fdjhkZikgX19BLAotICAgICAgICAgICAgIChfX3Y4ZGYpIF9fQiwKLSAgICAgICAgICAgICAoX192OGRmKSBfX1csCi0gICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX21hc2t6X3hvcl9wZCAoX19tbWFzazggX19VLCBfX201MTJkIF9fQSwgX19tNTEyZCBfX0IpIHsKLSAgcmV0dXJuIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl94b3JwZDUxMl9tYXNrICgoX192OGRmKSBfX0EsCi0gICAgICAgICAgICAgKF9fdjhkZikgX19CLAotICAgICAgICAgICAgIChfX3Y4ZGYpCi0gICAgICAgICAgICAgX21tNTEyX3NldHplcm9fcGQgKCksCi0gICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfeG9yX3BzIChfX201MTIgX19BLCBfX201MTIgX19CKSB7Ci0gIHJldHVybiAoX19tNTEyKSAoKF9fdjE2c2kpIF9fQSBeIChfX3YxNnNpKSBfX0IpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfbWFza194b3JfcHMgKF9fbTUxMiBfX1csIF9fbW1hc2sxNiBfX1UsIF9fbTUxMiBfX0EsIF9fbTUxMiBfX0IpIHsKLSAgcmV0dXJuIChfX201MTIpIF9fYnVpbHRpbl9pYTMyX3hvcnBzNTEyX21hc2sgKChfX3YxNnNmKSBfX0EsCi0gICAgICAgICAgICAoX192MTZzZikgX19CLAotICAgICAgICAgICAgKF9fdjE2c2YpIF9fVywKLSAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTUxMiBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9tYXNrel94b3JfcHMgKF9fbW1hc2sxNiBfX1UsIF9fbTUxMiBfX0EsIF9fbTUxMiBfX0IpIHsKLSAgcmV0dXJuIChfX201MTIpIF9fYnVpbHRpbl9pYTMyX3hvcnBzNTEyX21hc2sgKChfX3YxNnNmKSBfX0EsCi0gICAgICAgICAgICAoX192MTZzZikgX19CLAotICAgICAgICAgICAgKF9fdjE2c2YpCi0gICAgICAgICAgICBfbW01MTJfc2V0emVyb19wcyAoKSwKLSAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfb3JfcGQgKF9fbTUxMmQgX19BLCBfX201MTJkIF9fQikgewotICByZXR1cm4gKF9fbTUxMmQpICgoX192OGRpKSBfX0EgfCAoX192OGRpKSBfX0IpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX21hc2tfb3JfcGQgKF9fbTUxMmQgX19XLCBfX21tYXNrOCBfX1UsIF9fbTUxMmQgX19BLCBfX201MTJkIF9fQikgewotICByZXR1cm4gKF9fbTUxMmQpIF9fYnVpbHRpbl9pYTMyX29ycGQ1MTJfbWFzayAoKF9fdjhkZikgX19BLAotICAgICAgICAgICAgKF9fdjhkZikgX19CLAotICAgICAgICAgICAgKF9fdjhkZikgX19XLAotICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX21hc2t6X29yX3BkIChfX21tYXNrOCBfX1UsIF9fbTUxMmQgX19BLCBfX201MTJkIF9fQikgewotICByZXR1cm4gKF9fbTUxMmQpIF9fYnVpbHRpbl9pYTMyX29ycGQ1MTJfbWFzayAoKF9fdjhkZikgX19BLAotICAgICAgICAgICAgKF9fdjhkZikgX19CLAotICAgICAgICAgICAgKF9fdjhkZikKLSAgICAgICAgICAgIF9tbTUxMl9zZXR6ZXJvX3BkICgpLAotICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfb3JfcHMgKF9fbTUxMiBfX0EsIF9fbTUxMiBfX0IpIHsKLSAgcmV0dXJuIChfX201MTIpICgoX192MTZzaSkgX19BIHwgKF9fdjE2c2kpIF9fQik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTUxMiBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9tYXNrX29yX3BzIChfX201MTIgX19XLCBfX21tYXNrMTYgX19VLCBfX201MTIgX19BLCBfX201MTIgX19CKSB7Ci0gIHJldHVybiAoX19tNTEyKSBfX2J1aWx0aW5faWEzMl9vcnBzNTEyX21hc2sgKChfX3YxNnNmKSBfX0EsCi0gICAgICAgICAgICAgICAgIChfX3YxNnNmKSBfX0IsCi0gICAgICAgICAgICAgICAgIChfX3YxNnNmKSBfX1csCi0gICAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTUxMiBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9tYXNrel9vcl9wcyAoX19tbWFzazE2IF9fVSwgX19tNTEyIF9fQSwgX19tNTEyIF9fQikgewotICByZXR1cm4gKF9fbTUxMikgX19idWlsdGluX2lhMzJfb3JwczUxMl9tYXNrICgoX192MTZzZikgX19BLAotICAgICAgICAgICAgICAgICAoX192MTZzZikgX19CLAotICAgICAgICAgICAgICAgICAoX192MTZzZikKLSAgICAgICAgICAgICAgICAgX21tNTEyX3NldHplcm9fcHMgKCksCi0gICAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfYW5kX3BkIChfX201MTJkIF9fQSwgX19tNTEyZCBfX0IpIHsKLSAgcmV0dXJuIChfX201MTJkKSAoKF9fdjhkaSkgX19BICYgKF9fdjhkaSkgX19CKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tNTEyZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9tYXNrX2FuZF9wZCAoX19tNTEyZCBfX1csIF9fbW1hc2s4IF9fVSwgX19tNTEyZCBfX0EsIF9fbTUxMmQgX19CKSB7Ci0gIHJldHVybiAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfYW5kcGQ1MTJfbWFzayAoKF9fdjhkZikgX19BLAotICAgICAgICAgICAgIChfX3Y4ZGYpIF9fQiwKLSAgICAgICAgICAgICAoX192OGRmKSBfX1csCi0gICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX21hc2t6X2FuZF9wZCAoX19tbWFzazggX19VLCBfX201MTJkIF9fQSwgX19tNTEyZCBfX0IpIHsKLSAgcmV0dXJuIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl9hbmRwZDUxMl9tYXNrICgoX192OGRmKSBfX0EsCi0gICAgICAgICAgICAgKF9fdjhkZikgX19CLAotICAgICAgICAgICAgIChfX3Y4ZGYpCi0gICAgICAgICAgICAgX21tNTEyX3NldHplcm9fcGQgKCksCi0gICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfYW5kX3BzIChfX201MTIgX19BLCBfX201MTIgX19CKSB7Ci0gIHJldHVybiAoX19tNTEyKSAoKF9fdjE2c2kpIF9fQSAmIChfX3YxNnNpKSBfX0IpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfbWFza19hbmRfcHMgKF9fbTUxMiBfX1csIF9fbW1hc2sxNiBfX1UsIF9fbTUxMiBfX0EsIF9fbTUxMiBfX0IpIHsKLSAgcmV0dXJuIChfX201MTIpIF9fYnVpbHRpbl9pYTMyX2FuZHBzNTEyX21hc2sgKChfX3YxNnNmKSBfX0EsCi0gICAgICAgICAgICAoX192MTZzZikgX19CLAotICAgICAgICAgICAgKF9fdjE2c2YpIF9fVywKLSAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTUxMiBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9tYXNrel9hbmRfcHMgKF9fbW1hc2sxNiBfX1UsIF9fbTUxMiBfX0EsIF9fbTUxMiBfX0IpIHsKLSAgcmV0dXJuIChfX201MTIpIF9fYnVpbHRpbl9pYTMyX2FuZHBzNTEyX21hc2sgKChfX3YxNnNmKSBfX0EsCi0gICAgICAgICAgICAoX192MTZzZikgX19CLAotICAgICAgICAgICAgKF9fdjE2c2YpCi0gICAgICAgICAgICBfbW01MTJfc2V0emVyb19wcyAoKSwKLSAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfYW5kbm90X3BkIChfX201MTJkIF9fQSwgX19tNTEyZCBfX0IpIHsKLSAgcmV0dXJuIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl9hbmRucGQ1MTJfbWFzayAoKF9fdjhkZikgX19BLAotICAgICAgICAgICAgICAoX192OGRmKSBfX0IsCi0gICAgICAgICAgICAgIChfX3Y4ZGYpCi0gICAgICAgICAgICAgIF9tbTUxMl9zZXR6ZXJvX3BkICgpLAotICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tNTEyZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9tYXNrX2FuZG5vdF9wZCAoX19tNTEyZCBfX1csIF9fbW1hc2s4IF9fVSwgX19tNTEyZCBfX0EsIF9fbTUxMmQgX19CKSB7Ci0gIHJldHVybiAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfYW5kbnBkNTEyX21hc2sgKChfX3Y4ZGYpIF9fQSwKLSAgICAgICAgICAgICAgKF9fdjhkZikgX19CLAotICAgICAgICAgICAgICAoX192OGRmKSBfX1csCi0gICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tNTEyZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9tYXNrel9hbmRub3RfcGQgKF9fbW1hc2s4IF9fVSwgX19tNTEyZCBfX0EsIF9fbTUxMmQgX19CKSB7Ci0gIHJldHVybiAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfYW5kbnBkNTEyX21hc2sgKChfX3Y4ZGYpIF9fQSwKLSAgICAgICAgICAgICAgKF9fdjhkZikgX19CLAotICAgICAgICAgICAgICAoX192OGRmKQotICAgICAgICAgICAgICBfbW01MTJfc2V0emVyb19wZCAoKSwKLSAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfYW5kbm90X3BzIChfX201MTIgX19BLCBfX201MTIgX19CKSB7Ci0gIHJldHVybiAoX19tNTEyKSBfX2J1aWx0aW5faWEzMl9hbmRucHM1MTJfbWFzayAoKF9fdjE2c2YpIF9fQSwKLSAgICAgICAgICAgICAoX192MTZzZikgX19CLAotICAgICAgICAgICAgIChfX3YxNnNmKQotICAgICAgICAgICAgIF9tbTUxMl9zZXR6ZXJvX3BzICgpLAotICAgICAgICAgICAgIChfX21tYXNrMTYpIC0xKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tNTEyIF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX21hc2tfYW5kbm90X3BzIChfX201MTIgX19XLCBfX21tYXNrMTYgX19VLCBfX201MTIgX19BLCBfX201MTIgX19CKSB7Ci0gIHJldHVybiAoX19tNTEyKSBfX2J1aWx0aW5faWEzMl9hbmRucHM1MTJfbWFzayAoKF9fdjE2c2YpIF9fQSwKLSAgICAgICAgICAgICAoX192MTZzZikgX19CLAotICAgICAgICAgICAgIChfX3YxNnNmKSBfX1csCi0gICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tNTEyIF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX21hc2t6X2FuZG5vdF9wcyAoX19tbWFzazE2IF9fVSwgX19tNTEyIF9fQSwgX19tNTEyIF9fQikgewotICByZXR1cm4gKF9fbTUxMikgX19idWlsdGluX2lhMzJfYW5kbnBzNTEyX21hc2sgKChfX3YxNnNmKSBfX0EsCi0gICAgICAgICAgICAgKF9fdjE2c2YpIF9fQiwKLSAgICAgICAgICAgICAoX192MTZzZikKLSAgICAgICAgICAgICBfbW01MTJfc2V0emVyb19wcyAoKSwKLSAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX2N2dHBkX2VwaTY0IChfX201MTJkIF9fQSkgewotICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX2N2dHBkMnFxNTEyX21hc2sgKChfX3Y4ZGYpIF9fQSwKLSAgICAgICAgICAgICAgICAoX192OGRpKSBfbW01MTJfc2V0emVyb19zaTUxMigpLAotICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEsCi0gICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9tYXNrX2N2dHBkX2VwaTY0IChfX201MTJpIF9fVywgX19tbWFzazggX19VLCBfX201MTJkIF9fQSkgewotICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX2N2dHBkMnFxNTEyX21hc2sgKChfX3Y4ZGYpIF9fQSwKLSAgICAgICAgICAgICAgICAoX192OGRpKSBfX1csCi0gICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCi0gICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9tYXNrel9jdnRwZF9lcGk2NCAoX19tbWFzazggX19VLCBfX201MTJkIF9fQSkgewotICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX2N2dHBkMnFxNTEyX21hc2sgKChfX3Y4ZGYpIF9fQSwKLSAgICAgICAgICAgICAgICAoX192OGRpKSBfbW01MTJfc2V0emVyb19zaTUxMigpLAotICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VLAotICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Ci19Ci0KLSNkZWZpbmUgX21tNTEyX2N2dF9yb3VuZHBkX2VwaTY0KF9fQSwgX19SKSBfX2V4dGVuc2lvbl9fICh7ICAgICAgICAgICAgICBcCi0gIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9jdnRwZDJxcTUxMl9tYXNrICgoX192OGRmKSBfX0EsICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIChfX3Y4ZGkpIF9tbTUxMl9zZXR6ZXJvX3NpNTEyKCksIChfX21tYXNrOCkgLTEsIF9fUik7fSkKLQotI2RlZmluZSBfbW01MTJfbWFza19jdnRfcm91bmRwZF9lcGk2NChfX1csIF9fVSwgX19BLCBfX1IpIF9fZXh0ZW5zaW9uX18gKHsgXAotICAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfY3Z0cGQycXE1MTJfbWFzayAoKF9fdjhkZikgX19BLCAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIChfX3Y4ZGkpIF9fVywgKF9fbW1hc2s4KSBfX1UsIF9fUik7fSkKLQotI2RlZmluZSBfbW01MTJfbWFza3pfY3Z0X3JvdW5kcGRfZXBpNjQoX19VLCBfX0EsIF9fUikgX19leHRlbnNpb25fXyAoeyAgIFwKLSAgKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX2N2dHBkMnFxNTEyX21hc2sgKChfX3Y4ZGYpIF9fQSwgICAgICAgIFwKLSAgICAgICAgICAgICAgICAoX192OGRpKSBfbW01MTJfc2V0emVyb19zaTUxMigpLCAoX19tbWFzazgpIF9fVSwgX19SKTsgfSkKLQotc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9jdnRwZF9lcHU2NCAoX19tNTEyZCBfX0EpIHsKLSAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9jdnRwZDJ1cXE1MTJfbWFzayAoKF9fdjhkZikgX19BLAotICAgICAgICAgICAgICAgICAoX192OGRpKSBfbW01MTJfc2V0emVyb19zaTUxMigpLAotICAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xLAotICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX21hc2tfY3Z0cGRfZXB1NjQgKF9fbTUxMmkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTUxMmQgX19BKSB7Ci0gIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfY3Z0cGQydXFxNTEyX21hc2sgKChfX3Y4ZGYpIF9fQSwKLSAgICAgICAgICAgICAgICAgKF9fdjhkaSkgX19XLAotICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSwKLSAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9tYXNrel9jdnRwZF9lcHU2NCAoX19tbWFzazggX19VLCBfX201MTJkIF9fQSkgewotICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX2N2dHBkMnVxcTUxMl9tYXNrICgoX192OGRmKSBfX0EsCi0gICAgICAgICAgICAgICAgIChfX3Y4ZGkpIF9tbTUxMl9zZXR6ZXJvX3NpNTEyKCksCi0gICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VLAotICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOwotfQotCi0jZGVmaW5lIF9tbTUxMl9jdnRfcm91bmRwZF9lcHU2NChfX0EsIF9fUikgX19leHRlbnNpb25fXyAoeyAgICAgICAgICAgICAgIFwKLSAgKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX2N2dHBkMnVxcTUxMl9tYXNrICgoX192OGRmKSBfX0EsICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAoX192OGRpKSBfbW01MTJfc2V0emVyb19zaTUxMigpLCAoX19tbWFzazgpIC0xLCBfX1IpO30pCi0KLSNkZWZpbmUgX21tNTEyX21hc2tfY3Z0X3JvdW5kcGRfZXB1NjQoX19XLCBfX1UsIF9fQSwgX19SKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX2N2dHBkMnVxcTUxMl9tYXNrICgoX192OGRmKSBfX0EsICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgKF9fdjhkaSkgX19XLCAoX19tbWFzazgpIF9fVSwgX19SKTt9KQotCi0jZGVmaW5lIF9tbTUxMl9tYXNrel9jdnRfcm91bmRwZF9lcHU2NChfX1UsIF9fQSwgX19SKSBfX2V4dGVuc2lvbl9fICh7ICAgICBcCi0gIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9jdnRwZDJ1cXE1MTJfbWFzayAoKF9fdjhkZikgX19BLCAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgIChfX3Y4ZGkpIF9tbTUxMl9zZXR6ZXJvX3NpNTEyKCksIChfX21tYXNrOCkgX19VLCBfX1IpO30pCi0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfY3Z0cHNfZXBpNjQgKF9fbTI1NiBfX0EpIHsKLSAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9jdnRwczJxcTUxMl9tYXNrICgoX192OHNmKSBfX0EsCi0gICAgICAgICAgICAgICAgKF9fdjhkaSkgX21tNTEyX3NldHplcm9fc2k1MTIoKSwKLSAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xLAotICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfbWFza19jdnRwc19lcGk2NCAoX19tNTEyaSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMjU2IF9fQSkgewotICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX2N2dHBzMnFxNTEyX21hc2sgKChfX3Y4c2YpIF9fQSwKLSAgICAgICAgICAgICAgICAoX192OGRpKSBfX1csCi0gICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCi0gICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9tYXNrel9jdnRwc19lcGk2NCAoX19tbWFzazggX19VLCBfX20yNTYgX19BKSB7Ci0gIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfY3Z0cHMycXE1MTJfbWFzayAoKF9fdjhzZikgX19BLAotICAgICAgICAgICAgICAgIChfX3Y4ZGkpIF9tbTUxMl9zZXR6ZXJvX3NpNTEyKCksCi0gICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCi0gICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKLX0KLQotI2RlZmluZSBfbW01MTJfY3Z0X3JvdW5kcHNfZXBpNjQoX19BLCBfX1IpIF9fZXh0ZW5zaW9uX18gKHsgICAgICAgICAgICAgXAotICAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfY3Z0cHMycXE1MTJfbWFzayAoKF9fdjhzZikgX19BLCAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIChfX3Y4ZGkpIF9tbTUxMl9zZXR6ZXJvX3NpNTEyKCksIChfX21tYXNrOCkgLTEsIF9fUik7fSkKLQotI2RlZmluZSBfbW01MTJfbWFza19jdnRfcm91bmRwc19lcGk2NChfX1csIF9fVSwgX19BLCBfX1IpIF9fZXh0ZW5zaW9uX18gKHsgXAotICAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfY3Z0cHMycXE1MTJfbWFzayAoKF9fdjhzZikgX19BLCAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIChfX3Y4ZGkpIF9fVywgKF9fbW1hc2s4KSBfX1UsIF9fUik7fSkKLQotI2RlZmluZSBfbW01MTJfbWFza3pfY3Z0X3JvdW5kcHNfZXBpNjQoX19VLCBfX0EsIF9fUikgX19leHRlbnNpb25fXyAoeyAgIFwKLSAgKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX2N2dHBzMnFxNTEyX21hc2sgKChfX3Y4c2YpIF9fQSwgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgKF9fdjhkaSkgX21tNTEyX3NldHplcm9fc2k1MTIoKSwgKF9fbW1hc2s4KSBfX1UsIF9fUik7fSkKLQotc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9jdnRwc19lcHU2NCAoX19tMjU2IF9fQSkgewotICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX2N2dHBzMnVxcTUxMl9tYXNrICgoX192OHNmKSBfX0EsCi0gICAgICAgICAgICAgICAgIChfX3Y4ZGkpIF9tbTUxMl9zZXR6ZXJvX3NpNTEyKCksCi0gICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEsCi0gICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfbWFza19jdnRwc19lcHU2NCAoX19tNTEyaSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMjU2IF9fQSkgewotICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX2N2dHBzMnVxcTUxMl9tYXNrICgoX192OHNmKSBfX0EsCi0gICAgICAgICAgICAgICAgIChfX3Y4ZGkpIF9fVywKLSAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCi0gICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfbWFza3pfY3Z0cHNfZXB1NjQgKF9fbW1hc2s4IF9fVSwgX19tMjU2IF9fQSkgewotICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX2N2dHBzMnVxcTUxMl9tYXNrICgoX192OHNmKSBfX0EsCi0gICAgICAgICAgICAgICAgIChfX3Y4ZGkpIF9tbTUxMl9zZXR6ZXJvX3NpNTEyKCksCi0gICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VLAotICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOwotfQotCi0jZGVmaW5lIF9tbTUxMl9jdnRfcm91bmRwc19lcHU2NChfX0EsIF9fUikgX19leHRlbnNpb25fXyAoeyAgICAgICAgICAgICAgXAotICAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfY3Z0cHMydXFxNTEyX21hc2sgKChfX3Y4c2YpIF9fQSwgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgKF9fdjhkaSkgX21tNTEyX3NldHplcm9fc2k1MTIoKSwgKF9fbW1hc2s4KSAtMSwgX19SKTt9KQotCi0jZGVmaW5lIF9tbTUxMl9tYXNrX2N2dF9yb3VuZHBzX2VwdTY0KF9fVywgX19VLCBfX0EsIF9fUikgX19leHRlbnNpb25fXyAoeyBcCi0gIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9jdnRwczJ1cXE1MTJfbWFzayAoKF9fdjhzZikgX19BLCAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgIChfX3Y4ZGkpIF9fVywgKF9fbW1hc2s4KSBfX1UsIF9fUik7fSkKLQotI2RlZmluZSBfbW01MTJfbWFza3pfY3Z0X3JvdW5kcHNfZXB1NjQoX19VLCBfX0EsIF9fUikgX19leHRlbnNpb25fXyAoeyAgIFwKLSAgKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX2N2dHBzMnVxcTUxMl9tYXNrICgoX192OHNmKSBfX0EsICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgIChfX3Y4ZGkpIF9tbTUxMl9zZXR6ZXJvX3NpNTEyKCksIChfX21tYXNrOCkgX19VLCBfX1IpO30pCi0KLQotc3RhdGljIF9faW5saW5lX18gX19tNTEyZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9jdnRlcGk2NF9wZCAoX19tNTEyaSBfX0EpIHsKLSAgcmV0dXJuIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl9jdnRxcTJwZDUxMl9tYXNrICgoX192OGRpKSBfX0EsCi0gICAgICAgICAgICAgICAgKF9fdjhkZikgX21tNTEyX3NldHplcm9fcGQoKSwKLSAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xLAotICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfbWFza19jdnRlcGk2NF9wZCAoX19tNTEyZCBfX1csIF9fbW1hc2s4IF9fVSwgX19tNTEyaSBfX0EpIHsKLSAgcmV0dXJuIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl9jdnRxcTJwZDUxMl9tYXNrICgoX192OGRpKSBfX0EsCi0gICAgICAgICAgICAgICAgKF9fdjhkZikgX19XLAotICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VLAotICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfbWFza3pfY3Z0ZXBpNjRfcGQgKF9fbW1hc2s4IF9fVSwgX19tNTEyaSBfX0EpIHsKLSAgcmV0dXJuIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl9jdnRxcTJwZDUxMl9tYXNrICgoX192OGRpKSBfX0EsCi0gICAgICAgICAgICAgICAgKF9fdjhkZikgX21tNTEyX3NldHplcm9fcGQoKSwKLSAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSwKLSAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOwotfQotCi0jZGVmaW5lIF9tbTUxMl9jdnRfcm91bmRlcGk2NF9wZChfX0EsIF9fUikgX19leHRlbnNpb25fXyAoeyAgICAgICAgICBcCi0gIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl9jdnRxcTJwZDUxMl9tYXNrICgoX192OGRpKSBfX0EsICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgKF9fdjhkZikgX21tNTEyX3NldHplcm9fcGQoKSwgKF9fbW1hc2s4KSAtMSwgX19SKTt9KQotCi0jZGVmaW5lIF9tbTUxMl9tYXNrX2N2dF9yb3VuZGVwaTY0X3BkKF9fVywgX19VLCBfX0EsIF9fUikgX19leHRlbnNpb25fXyAoeyBcCi0gIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl9jdnRxcTJwZDUxMl9tYXNrICgoX192OGRpKSBfX0EsICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgKF9fdjhkZikgX19XLCAoX19tbWFzazgpIF9fVSwgX19SKTt9KQotCi0jZGVmaW5lIF9tbTUxMl9tYXNrel9jdnRfcm91bmRlcGk2NF9wZChfX1UsIF9fQSwgX19SKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgKF9fbTUxMmQpIF9fYnVpbHRpbl9pYTMyX2N2dHFxMnBkNTEyX21hc2sgKChfX3Y4ZGkpIF9fQSwgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIChfX3Y4ZGYpIF9tbTUxMl9zZXR6ZXJvX3BkKCksIChfX21tYXNrOCkgX19VLCBfX1IpO30pCi0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9jdnRlcGk2NF9wcyAoX19tNTEyaSBfX0EpIHsKLSAgcmV0dXJuIChfX20yNTYpIF9fYnVpbHRpbl9pYTMyX2N2dHFxMnBzNTEyX21hc2sgKChfX3Y4ZGkpIF9fQSwKLSAgICAgICAgICAgICAgIChfX3Y4c2YpIF9tbTI1Nl9zZXR6ZXJvX3BzKCksCi0gICAgICAgICAgICAgICAoX19tbWFzazgpIC0xLAotICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX21hc2tfY3Z0ZXBpNjRfcHMgKF9fbTI1NiBfX1csIF9fbW1hc2s4IF9fVSwgX19tNTEyaSBfX0EpIHsKLSAgcmV0dXJuIChfX20yNTYpIF9fYnVpbHRpbl9pYTMyX2N2dHFxMnBzNTEyX21hc2sgKChfX3Y4ZGkpIF9fQSwKLSAgICAgICAgICAgICAgIChfX3Y4c2YpIF9fVywKLSAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VLAotICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX21hc2t6X2N2dGVwaTY0X3BzIChfX21tYXNrOCBfX1UsIF9fbTUxMmkgX19BKSB7Ci0gIHJldHVybiAoX19tMjU2KSBfX2J1aWx0aW5faWEzMl9jdnRxcTJwczUxMl9tYXNrICgoX192OGRpKSBfX0EsCi0gICAgICAgICAgICAgICAoX192OHNmKSBfbW0yNTZfc2V0emVyb19wcygpLAotICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCi0gICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOwotfQotCi0jZGVmaW5lIF9tbTUxMl9jdnRfcm91bmRlcGk2NF9wcyhfX0EsIF9fUikgX19leHRlbnNpb25fXyAoeyAgICAgICAgXAotICAoX19tMjU2KSBfX2J1aWx0aW5faWEzMl9jdnRxcTJwczUxMl9tYXNrICgoX192OGRpKSBfX0EsICAgICAgICAgIFwKLSAgICAgICAgICAgICAgIChfX3Y4c2YpIF9tbTI1Nl9zZXR6ZXJvX3BzKCksIChfX21tYXNrOCkgLTEsIF9fUik7fSkKLQotI2RlZmluZSBfbW01MTJfbWFza19jdnRfcm91bmRlcGk2NF9wcyhfX1csIF9fVSwgX19BLCBfX1IpIF9fZXh0ZW5zaW9uX18gKHsgXAotICAoX19tMjU2KSBfX2J1aWx0aW5faWEzMl9jdnRxcTJwczUxMl9tYXNrICgoX192OGRpKSBfX0EsICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgKF9fdjhzZikgX19XLCAoX19tbWFzazgpIF9fVSwgX19SKTt9KQotCi0jZGVmaW5lIF9tbTUxMl9tYXNrel9jdnRfcm91bmRlcGk2NF9wcyhfX1UsIF9fQSwgX19SKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgKF9fbTI1NikgX19idWlsdGluX2lhMzJfY3Z0cXEycHM1MTJfbWFzayAoKF9fdjhkaSkgX19BLCAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgKF9fdjhzZikgX21tMjU2X3NldHplcm9fcHMoKSwgKF9fbW1hc2s4KSBfX1UsIF9fUik7fSkKLQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX2N2dHRwZF9lcGk2NCAoX19tNTEyZCBfX0EpIHsKLSAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9jdnR0cGQycXE1MTJfbWFzayAoKF9fdjhkZikgX19BLAotICAgICAgICAgICAgICAgICAoX192OGRpKSBfbW01MTJfc2V0emVyb19zaTUxMigpLAotICAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xLAotICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX21hc2tfY3Z0dHBkX2VwaTY0IChfX201MTJpIF9fVywgX19tbWFzazggX19VLCBfX201MTJkIF9fQSkgewotICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX2N2dHRwZDJxcTUxMl9tYXNrICgoX192OGRmKSBfX0EsCi0gICAgICAgICAgICAgICAgIChfX3Y4ZGkpIF9fVywKLSAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCi0gICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfbWFza3pfY3Z0dHBkX2VwaTY0IChfX21tYXNrOCBfX1UsIF9fbTUxMmQgX19BKSB7Ci0gIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfY3Z0dHBkMnFxNTEyX21hc2sgKChfX3Y4ZGYpIF9fQSwKLSAgICAgICAgICAgICAgICAgKF9fdjhkaSkgX21tNTEyX3NldHplcm9fc2k1MTIoKSwKLSAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCi0gICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Ci19Ci0KLSNkZWZpbmUgX21tNTEyX2N2dHRfcm91bmRwZF9lcGk2NChfX0EsIF9fUikgX19leHRlbnNpb25fXyAoeyAgICAgICAgICAgICBcCi0gIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9jdnR0cGQycXE1MTJfbWFzayAoKF9fdjhkZikgX19BLCAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAoX192OGRpKSBfbW01MTJfc2V0emVyb19zaTUxMigpLCAoX19tbWFzazgpIC0xLCBfX1IpO30pCi0KLSNkZWZpbmUgX21tNTEyX21hc2tfY3Z0dF9yb3VuZHBkX2VwaTY0KF9fVywgX19VLCBfX0EsIF9fUikgX19leHRlbnNpb25fXyAoeyBcCi0gIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9jdnR0cGQycXE1MTJfbWFzayAoKF9fdjhkZikgX19BLCAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAoX192OGRpKSBfX1csIChfX21tYXNrOCkgX19VLCBfX1IpO30pCi0KLSNkZWZpbmUgX21tNTEyX21hc2t6X2N2dHRfcm91bmRwZF9lcGk2NChfX1UsIF9fQSwgX19SKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX2N2dHRwZDJxcTUxMl9tYXNrICgoX192OGRmKSBfX0EsICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgKF9fdjhkaSkgX21tNTEyX3NldHplcm9fc2k1MTIoKSwgKF9fbW1hc2s4KSBfX1UsIF9fUik7fSkKLQotc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9jdnR0cGRfZXB1NjQgKF9fbTUxMmQgX19BKSB7Ci0gIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfY3Z0dHBkMnVxcTUxMl9tYXNrICgoX192OGRmKSBfX0EsCi0gICAgICAgICAgICAgICAgICAoX192OGRpKSBfbW01MTJfc2V0emVyb19zaTUxMigpLAotICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSwKLSAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfbWFza19jdnR0cGRfZXB1NjQgKF9fbTUxMmkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTUxMmQgX19BKSB7Ci0gIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfY3Z0dHBkMnVxcTUxMl9tYXNrICgoX192OGRmKSBfX0EsCi0gICAgICAgICAgICAgICAgICAoX192OGRpKSBfX1csCi0gICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSwKLSAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfbWFza3pfY3Z0dHBkX2VwdTY0IChfX21tYXNrOCBfX1UsIF9fbTUxMmQgX19BKSB7Ci0gIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfY3Z0dHBkMnVxcTUxMl9tYXNrICgoX192OGRmKSBfX0EsCi0gICAgICAgICAgICAgICAgICAoX192OGRpKSBfbW01MTJfc2V0emVyb19zaTUxMigpLAotICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCi0gICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOwotfQotCi0jZGVmaW5lIF9tbTUxMl9jdnR0X3JvdW5kcGRfZXB1NjQoX19BLCBfX1IpIF9fZXh0ZW5zaW9uX18gKHsgICAgICAgICAgICAgIFwKLSAgKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX2N2dHRwZDJ1cXE1MTJfbWFzayAoKF9fdjhkZikgX19BLCAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgKF9fdjhkaSkgX21tNTEyX3NldHplcm9fc2k1MTIoKSwgKF9fbW1hc2s4KSAtMSwgX19SKTt9KQotCi0jZGVmaW5lIF9tbTUxMl9tYXNrX2N2dHRfcm91bmRwZF9lcHU2NChfX1csIF9fVSwgX19BLCBfX1IpIF9fZXh0ZW5zaW9uX18gKHsgXAotICAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfY3Z0dHBkMnVxcTUxMl9tYXNrICgoX192OGRmKSBfX0EsICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpIF9fVywgKF9fbW1hc2s4KSBfX1UsIF9fUik7fSkKLQotI2RlZmluZSBfbW01MTJfbWFza3pfY3Z0dF9yb3VuZHBkX2VwdTY0KF9fVSwgX19BLCBfX1IpIF9fZXh0ZW5zaW9uX18gKHsgICBcCi0gIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9jdnR0cGQydXFxNTEyX21hc2sgKChfX3Y4ZGYpIF9fQSwgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpIF9tbTUxMl9zZXR6ZXJvX3NpNTEyKCksIChfX21tYXNrOCkgX19VLCBfX1IpO30pCi0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfY3Z0dHBzX2VwaTY0IChfX20yNTYgX19BKSB7Ci0gIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfY3Z0dHBzMnFxNTEyX21hc2sgKChfX3Y4c2YpIF9fQSwKLSAgICAgICAgICAgICAgICAgKF9fdjhkaSkgX21tNTEyX3NldHplcm9fc2k1MTIoKSwKLSAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSwKLSAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9tYXNrX2N2dHRwc19lcGk2NCAoX19tNTEyaSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMjU2IF9fQSkgewotICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX2N2dHRwczJxcTUxMl9tYXNrICgoX192OHNmKSBfX0EsCi0gICAgICAgICAgICAgICAgIChfX3Y4ZGkpIF9fVywKLSAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCi0gICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfbWFza3pfY3Z0dHBzX2VwaTY0IChfX21tYXNrOCBfX1UsIF9fbTI1NiBfX0EpIHsKLSAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9jdnR0cHMycXE1MTJfbWFzayAoKF9fdjhzZikgX19BLAotICAgICAgICAgICAgICAgICAoX192OGRpKSBfbW01MTJfc2V0emVyb19zaTUxMigpLAotICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSwKLSAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKLX0KLQotI2RlZmluZSBfbW01MTJfY3Z0dF9yb3VuZHBzX2VwaTY0KF9fQSwgX19SKSBfX2V4dGVuc2lvbl9fICh7ICAgICAgICAgICAgXAotICAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfY3Z0dHBzMnFxNTEyX21hc2sgKChfX3Y4c2YpIF9fQSwgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAoX192OGRpKSBfbW01MTJfc2V0emVyb19zaTUxMigpLCAoX19tbWFzazgpIC0xLCBfX1IpO30pCi0KLSNkZWZpbmUgX21tNTEyX21hc2tfY3Z0dF9yb3VuZHBzX2VwaTY0KF9fVywgX19VLCBfX0EsIF9fUikgX19leHRlbnNpb25fXyAoeyBcCi0gIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9jdnR0cHMycXE1MTJfbWFzayAoKF9fdjhzZikgX19BLCAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAoX192OGRpKSBfX1csIChfX21tYXNrOCkgX19VLCBfX1IpO30pCi0KLSNkZWZpbmUgX21tNTEyX21hc2t6X2N2dHRfcm91bmRwc19lcGk2NChfX1UsIF9fQSwgX19SKSBfX2V4dGVuc2lvbl9fICh7ICBcCi0gIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9jdnR0cHMycXE1MTJfbWFzayAoKF9fdjhzZikgX19BLCAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAoX192OGRpKSBfbW01MTJfc2V0emVyb19zaTUxMigpLCAoX19tbWFzazgpIF9fVSwgX19SKTt9KQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX2N2dHRwc19lcHU2NCAoX19tMjU2IF9fQSkgewotICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX2N2dHRwczJ1cXE1MTJfbWFzayAoKF9fdjhzZikgX19BLAotICAgICAgICAgICAgICAgICAgKF9fdjhkaSkgX21tNTEyX3NldHplcm9fc2k1MTIoKSwKLSAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEsCi0gICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX21hc2tfY3Z0dHBzX2VwdTY0IChfX201MTJpIF9fVywgX19tbWFzazggX19VLCBfX20yNTYgX19BKSB7Ci0gIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfY3Z0dHBzMnVxcTUxMl9tYXNrICgoX192OHNmKSBfX0EsCi0gICAgICAgICAgICAgICAgICAoX192OGRpKSBfX1csCi0gICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSwKLSAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfbWFza3pfY3Z0dHBzX2VwdTY0IChfX21tYXNrOCBfX1UsIF9fbTI1NiBfX0EpIHsKLSAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9jdnR0cHMydXFxNTEyX21hc2sgKChfX3Y4c2YpIF9fQSwKLSAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpIF9tbTUxMl9zZXR6ZXJvX3NpNTEyKCksCi0gICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSwKLSAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Ci19Ci0KLSNkZWZpbmUgX21tNTEyX2N2dHRfcm91bmRwc19lcHU2NChfX0EsIF9fUikgX19leHRlbnNpb25fXyAoeyAgICAgICAgICAgIFwKLSAgKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX2N2dHRwczJ1cXE1MTJfbWFzayAoKF9fdjhzZikgX19BLCAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpIF9tbTUxMl9zZXR6ZXJvX3NpNTEyKCksKF9fbW1hc2s4KSAtMSwgX19SKTt9KQotCi0jZGVmaW5lIF9tbTUxMl9tYXNrX2N2dHRfcm91bmRwc19lcHU2NChfX1csIF9fVSwgX19BLCBfX1IpIF9fZXh0ZW5zaW9uX18gKHsgXAotICAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfY3Z0dHBzMnVxcTUxMl9tYXNrICgoX192OHNmKSBfX0EsICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpIF9fVywgKF9fbW1hc2s4KSBfX1UsIF9fUik7fSkKLQotI2RlZmluZSBfbW01MTJfbWFza3pfY3Z0dF9yb3VuZHBzX2VwdTY0KF9fVSwgX19BLCBfX1IpIF9fZXh0ZW5zaW9uX18gKHsgIFwKLSAgKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX2N2dHRwczJ1cXE1MTJfbWFzayAoKF9fdjhzZikgX19BLCAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAoX192OGRpKSBfbW01MTJfc2V0emVyb19zaTUxMigpLCAoX19tbWFzazgpIF9fVSwgX19SKTt9KQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX2N2dGVwdTY0X3BkIChfX201MTJpIF9fQSkgewotICByZXR1cm4gKF9fbTUxMmQpIF9fYnVpbHRpbl9pYTMyX2N2dHVxcTJwZDUxMl9tYXNrICgoX192OGRpKSBfX0EsCi0gICAgICAgICAgICAgICAgIChfX3Y4ZGYpIF9tbTUxMl9zZXR6ZXJvX3BkKCksCi0gICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEsCi0gICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfbWFza19jdnRlcHU2NF9wZCAoX19tNTEyZCBfX1csIF9fbW1hc2s4IF9fVSwgX19tNTEyaSBfX0EpIHsKLSAgcmV0dXJuIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl9jdnR1cXEycGQ1MTJfbWFzayAoKF9fdjhkaSkgX19BLAotICAgICAgICAgICAgICAgICAoX192OGRmKSBfX1csCi0gICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VLAotICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX21hc2t6X2N2dGVwdTY0X3BkIChfX21tYXNrOCBfX1UsIF9fbTUxMmkgX19BKSB7Ci0gIHJldHVybiAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfY3Z0dXFxMnBkNTEyX21hc2sgKChfX3Y4ZGkpIF9fQSwKLSAgICAgICAgICAgICAgICAgKF9fdjhkZikgX21tNTEyX3NldHplcm9fcGQoKSwKLSAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCi0gICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Ci19Ci0KLSNkZWZpbmUgX21tNTEyX2N2dF9yb3VuZGVwdTY0X3BkKF9fQSwgX19SKSBfX2V4dGVuc2lvbl9fICh7ICAgICAgICAgIFwKLSAgKF9fbTUxMmQpIF9fYnVpbHRpbl9pYTMyX2N2dHVxcTJwZDUxMl9tYXNrICgoX192OGRpKSBfX0EsICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgKF9fdjhkZikgX21tNTEyX3NldHplcm9fcGQoKSwgKF9fbW1hc2s4KSAtMSwgX19SKTt9KQotCi0jZGVmaW5lIF9tbTUxMl9tYXNrX2N2dF9yb3VuZGVwdTY0X3BkKF9fVywgX19VLCBfX0EsIF9fUikgX19leHRlbnNpb25fXyAoeyBcCi0gIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl9jdnR1cXEycGQ1MTJfbWFzayAoKF9fdjhkaSkgX19BLCAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgIChfX3Y4ZGYpIF9fVywgKF9fbW1hc2s4KSBfX1UsIF9fUik7fSkKLQotCi0jZGVmaW5lIF9tbTUxMl9tYXNrel9jdnRfcm91bmRlcHU2NF9wZChfX1UsIF9fQSwgX19SKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgKF9fbTUxMmQpIF9fYnVpbHRpbl9pYTMyX2N2dHVxcTJwZDUxMl9tYXNrICgoX192OGRpKSBfX0EsICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAoX192OGRmKSBfbW01MTJfc2V0emVyb19wZCgpLCAoX19tbWFzazgpIF9fVSwgX19SKTt9KQotCi0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9jdnRlcHU2NF9wcyAoX19tNTEyaSBfX0EpIHsKLSAgcmV0dXJuIChfX20yNTYpIF9fYnVpbHRpbl9pYTMyX2N2dHVxcTJwczUxMl9tYXNrICgoX192OGRpKSBfX0EsCi0gICAgICAgICAgICAgICAgKF9fdjhzZikgX21tMjU2X3NldHplcm9fcHMoKSwKLSAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xLAotICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9tYXNrX2N2dGVwdTY0X3BzIChfX20yNTYgX19XLCBfX21tYXNrOCBfX1UsIF9fbTUxMmkgX19BKSB7Ci0gIHJldHVybiAoX19tMjU2KSBfX2J1aWx0aW5faWEzMl9jdnR1cXEycHM1MTJfbWFzayAoKF9fdjhkaSkgX19BLAotICAgICAgICAgICAgICAgIChfX3Y4c2YpIF9fVywKLSAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSwKLSAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfbWFza3pfY3Z0ZXB1NjRfcHMgKF9fbW1hc2s4IF9fVSwgX19tNTEyaSBfX0EpIHsKLSAgcmV0dXJuIChfX20yNTYpIF9fYnVpbHRpbl9pYTMyX2N2dHVxcTJwczUxMl9tYXNrICgoX192OGRpKSBfX0EsCi0gICAgICAgICAgICAgICAgKF9fdjhzZikgX21tMjU2X3NldHplcm9fcHMoKSwKLSAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSwKLSAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOwotfQotCi0jZGVmaW5lIF9tbTUxMl9jdnRfcm91bmRlcHU2NF9wcyhfX0EsIF9fUikgX19leHRlbnNpb25fXyAoeyAgICAgICAgIFwKLSAgKF9fbTI1NikgX19idWlsdGluX2lhMzJfY3Z0dXFxMnBzNTEyX21hc2sgKChfX3Y4ZGkpIF9fQSwgICAgICAgICAgXAotICAgICAgICAgICAgICAgIChfX3Y4c2YpIF9tbTI1Nl9zZXR6ZXJvX3BzKCksIChfX21tYXNrOCkgLTEsIF9fUik7fSkKLQotI2RlZmluZSBfbW01MTJfbWFza19jdnRfcm91bmRlcHU2NF9wcyhfX1csIF9fVSwgX19BLCBfX1IpIF9fZXh0ZW5zaW9uX18gKHsgXAotICAoX19tMjU2KSBfX2J1aWx0aW5faWEzMl9jdnR1cXEycHM1MTJfbWFzayAoKF9fdjhkaSkgX19BLCAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIChfX3Y4c2YpIF9fVywgKF9fbW1hc2s4KSBfX1UsIF9fUik7fSkKLQotI2RlZmluZSBfbW01MTJfbWFza3pfY3Z0X3JvdW5kZXB1NjRfcHMoX19VLCBfX0EsIF9fUikgX19leHRlbnNpb25fXyAoeyBcCi0gIChfX20yNTYpIF9fYnVpbHRpbl9pYTMyX2N2dHVxcTJwczUxMl9tYXNrICgoX192OGRpKSBfX0EsICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAoX192OHNmKSBfbW0yNTZfc2V0emVyb19wcygpLCAoX19tbWFzazgpIF9fVSwgX19SKTt9KQotCi0jZGVmaW5lIF9tbTUxMl9yYW5nZV9wZChfX0EsIF9fQiwgX19DKSBfX2V4dGVuc2lvbl9fICh7ICAgICAgICAgICAgICAgICAgICAgXAotICAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfcmFuZ2VwZDUxMl9tYXNrICgoX192OGRmKSBfX0EsIChfX3Y4ZGYpIF9fQiwgX19DLFwKLSAgICAgICAgICAgICAgIChfX3Y4ZGYpIF9tbTUxMl9zZXR6ZXJvX3BkKCksIChfX21tYXNrOCkgLTEsICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pO30pCi0KLSNkZWZpbmUgX21tNTEyX21hc2tfcmFuZ2VfcGQoX19XLCBfX1UsIF9fQSwgX19CLCBfX0MpIF9fZXh0ZW5zaW9uX18gKHsgICAgICBcCi0gIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl9yYW5nZXBkNTEyX21hc2sgKChfX3Y4ZGYpIF9fQSwgKF9fdjhkZikgX19CLCBfX0MsXAotICAgICAgICAgICAgICAgKF9fdjhkZikgX19XLCAoX19tbWFzazgpIF9fVSwgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTt9KQotCi0jZGVmaW5lIF9tbTUxMl9tYXNrel9yYW5nZV9wZChfX1UsIF9fQSwgX19CLCBfX0MpIF9fZXh0ZW5zaW9uX18gKHsgICAgICAgICAgIFwKLSAgKF9fbTUxMmQpIF9fYnVpbHRpbl9pYTMyX3JhbmdlcGQ1MTJfbWFzayAoKF9fdjhkZikgX19BLCAoX192OGRmKSBfX0IsIF9fQywgXAotICAgICAgICAgICAgICAgKF9fdjhkZikgX21tNTEyX3NldHplcm9fcGQoKSwgKF9fbW1hc2s4KSBfX1UsICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pO30pCi0KLSNkZWZpbmUgX21tNTEyX3JhbmdlX3JvdW5kX3BkKF9fQSwgX19CLCBfX0MsIF9fUikgX19leHRlbnNpb25fXyAoeyAgICAgICAgICAgXAotICAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfcmFuZ2VwZDUxMl9tYXNrICgoX192OGRmKSBfX0EsIChfX3Y4ZGYpIF9fQiwgX19DLCBcCi0gICAgICAgICAgICAgICAoX192OGRmKSBfbW01MTJfc2V0emVyb19wZCgpLCAoX19tbWFzazgpIC0xLCBfX1IpO30pCi0KLSNkZWZpbmUgX21tNTEyX21hc2tfcmFuZ2Vfcm91bmRfcGQoX19XLCBfX1UsIF9fQSwgX19CLCBfX0MsIF9fUikgX19leHRlbnNpb25fXyAoeyBcCi0gIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl9yYW5nZXBkNTEyX21hc2sgKChfX3Y4ZGYpIF9fQSwgKF9fdjhkZikgX19CLCBfX0MsICAgICAgXAotICAgICAgICAgICAgICAgKF9fdjhkZikgX19XLCAoX19tbWFzazgpIF9fVSwgX19SKTt9KQotCi0jZGVmaW5lIF9tbTUxMl9tYXNrel9yYW5nZV9yb3VuZF9wZChfX1UsIF9fQSwgX19CLCBfX0MsIF9fUikgX19leHRlbnNpb25fXyAoeyBcCi0gIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl9yYW5nZXBkNTEyX21hc2sgKChfX3Y4ZGYpIF9fQSwgKF9fdjhkZikgX19CLCBfX0MsICAgXAotICAgICAgICAgICAgICAgKF9fdjhkZikgX21tNTEyX3NldHplcm9fcGQoKSwgKF9fbW1hc2s4KSBfX1UsIF9fUik7fSkKLQotI2RlZmluZSBfbW01MTJfcmFuZ2VfcHMoX19BLCBfX0IsIF9fQykgX19leHRlbnNpb25fXyAoeyAgICAgICAgICAgICAgICAgICAgICAgXAotICAoX19tNTEyKSBfX2J1aWx0aW5faWEzMl9yYW5nZXBzNTEyX21hc2sgKChfX3YxNnNmKSBfX0EsIChfX3YxNnNmKSBfX0IsIF9fQywgXAotICAgICAgICAgICAgICAgKF9fdjE2c2YpIF9tbTUxMl9zZXR6ZXJvX3BzKCksIChfX21tYXNrMTYpIC0xLCAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTt9KQotCi0jZGVmaW5lIF9tbTUxMl9tYXNrX3JhbmdlX3BzKF9fVywgX19VLCBfX0EsIF9fQiwgX19DKSBfX2V4dGVuc2lvbl9fICh7ICAgICAgICAgXAotICAoX19tNTEyKSBfX2J1aWx0aW5faWEzMl9yYW5nZXBzNTEyX21hc2sgKChfX3YxNnNmKSBfX0EsIChfX3YxNnNmKSBfX0IsICAgICAgIFwKLSAgICAgICAgICAgICAgIF9fQywgKF9fdjE2c2YpIF9fVywgKF9fbW1hc2sxNikgX19VLCBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pO30pCi0KLSNkZWZpbmUgX21tNTEyX21hc2t6X3JhbmdlX3BzKF9fVSwgX19BLCBfX0IsIF9fQykgX19leHRlbnNpb25fXyAoeyAgICAgIFwKLSAgKF9fbTUxMikgX19idWlsdGluX2lhMzJfcmFuZ2VwczUxMl9tYXNrICgoX192MTZzZikgX19BLChfX3YxNnNmKSBfX0IsIFwKLSAgICAgICAgICAgICAgX19DLCAoX192MTZzZikgX21tNTEyX3NldHplcm9fcHMoKSwgKF9fbW1hc2sxNikgX19VLCAgICAgIFwKLSAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTt9KQotCi0jZGVmaW5lIF9tbTUxMl9yYW5nZV9yb3VuZF9wcyhfX0EsIF9fQiwgX19DLCBfX1IpIF9fZXh0ZW5zaW9uX18gKHsgICAgICAgICBcCi0gIChfX201MTIpIF9fYnVpbHRpbl9pYTMyX3JhbmdlcHM1MTJfbWFzayAoKF9fdjE2c2YpIF9fQSwgKF9fdjE2c2YpIF9fQiwgICBcCi0gICAgICAgICAgICAgICAgX19DLCAoX192MTZzZikgX21tNTEyX3NldHplcm9fcHMoKSwgKF9fbW1hc2sxNikgLTEsIF9fUik7fSkKLQotI2RlZmluZSBfbW01MTJfbWFza19yYW5nZV9yb3VuZF9wcyhfX1csIF9fVSwgX19BLCBfX0IsIF9fQywgX19SKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgKF9fbTUxMikgX19idWlsdGluX2lhMzJfcmFuZ2VwczUxMl9tYXNrICgoX192MTZzZikgX19BLCAoX192MTZzZikgX19CLCAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgX19DLCAoX192MTZzZikgX19XLCAoX19tbWFzazE2KSBfX1UsIF9fUik7fSkKLQotI2RlZmluZSBfbW01MTJfbWFza3pfcmFuZ2Vfcm91bmRfcHMoX19VLCBfX0EsIF9fQiwgX19DLCBfX1IpIF9fZXh0ZW5zaW9uX18gKHsgXAotICAoX19tNTEyKSBfX2J1aWx0aW5faWEzMl9yYW5nZXBzNTEyX21hc2sgKChfX3YxNnNmKSBfX0EsIChfX3YxNnNmKSBfX0IsICAgICAgXAotICAgICAgICAgICAgICAgIF9fQywgKF9fdjE2c2YpIF9tbTUxMl9zZXR6ZXJvX3BzKCksIChfX21tYXNrMTYpIF9fVSwgX19SKTt9KQotCi0jZGVmaW5lIF9tbTUxMl9yZWR1Y2VfcGQoX19BLCBfX0IpIF9fZXh0ZW5zaW9uX18gKHsgICAgICAgICAgICAgXAotICAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfcmVkdWNlcGQ1MTJfbWFzayAoKF9fdjhkZikgX19BLCBfX0IsIFwKLSAgICAgICAgICAgICAgICAoX192OGRmKSBfbW01MTJfc2V0emVyb19wZCgpLCAoX19tbWFzazgpIC0xLCBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pO30pCi0KLSNkZWZpbmUgX21tNTEyX21hc2tfcmVkdWNlX3BkKF9fVywgX19VLCBfX0EsIF9fQikgX19leHRlbnNpb25fXyAoeyBcCi0gIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl9yZWR1Y2VwZDUxMl9tYXNrICgoX192OGRmKSBfX0EsIF9fQiwgICAgXAotICAgICAgICAgICAgICAgIChfX3Y4ZGYpIF9fVywoX19tbWFzazgpIF9fVSwgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTt9KQotCi0jZGVmaW5lIF9tbTUxMl9tYXNrel9yZWR1Y2VfcGQoX19VLCBfX0EsIF9fQikgX19leHRlbnNpb25fXyAoeyAgXAotICAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfcmVkdWNlcGQ1MTJfbWFzayAoKF9fdjhkZikgX19BLCBfX0IsIFwKLSAgICAgICAgICAgICAgICAoX192OGRmKSBfbW01MTJfc2V0emVyb19wZCgpLCAoX19tbWFzazgpIF9fVSwgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTt9KQotCi0jZGVmaW5lIF9tbTUxMl9yZWR1Y2VfcHMoX19BLCBfX0IpIF9fZXh0ZW5zaW9uX18gKHsgICAgICAgICAgICAgIFwKLSAgKF9fbTUxMikgX19idWlsdGluX2lhMzJfcmVkdWNlcHM1MTJfbWFzayAoKF9fdjE2c2YpIF9fQSwgX19CLCAgXAotICAgICAgICAgICAgICAgKF9fdjE2c2YpIF9tbTUxMl9zZXR6ZXJvX3BzKCksIChfX21tYXNrMTYpIC0xLCBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pO30pCi0KLSNkZWZpbmUgX21tNTEyX21hc2tfcmVkdWNlX3BzKF9fVywgX19VLCBfX0EsIF9fQikgX19leHRlbnNpb25fXyAoeyAgIFwKLSAgKF9fbTUxMikgX19idWlsdGluX2lhMzJfcmVkdWNlcHM1MTJfbWFzayAoKF9fdjE2c2YpIF9fQSwgX19CLCAgICAgIFwKLSAgICAgICAgICAgICAgIChfX3YxNnNmKSBfX1csIChfX21tYXNrMTYpIF9fVSwgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTt9KQotCi0jZGVmaW5lIF9tbTUxMl9tYXNrel9yZWR1Y2VfcHMoX19VLCBfX0EsIF9fQikgX19leHRlbnNpb25fXyAoeyAgICAgICBcCi0gIChfX201MTIpIF9fYnVpbHRpbl9pYTMyX3JlZHVjZXBzNTEyX21hc2sgKChfX3YxNnNmKSBfX0EsIF9fQiwgICAgICBcCi0gICAgICAgICAgICAgICAoX192MTZzZikgX21tNTEyX3NldHplcm9fcHMoKSwgKF9fbW1hc2sxNikgX19VLCBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pO30pCi0KLSNkZWZpbmUgX21tNTEyX3JlZHVjZV9yb3VuZF9wZChfX0EsIF9fQiwgX19SKSBfX2V4dGVuc2lvbl9fICh7XAotICAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfcmVkdWNlcGQ1MTJfbWFzayAoKF9fdjhkZikgX19BLCBfX0IsIFwKLSAgICAgICAgICAgICAgICAoX192OGRmKSBfbW01MTJfc2V0emVyb19wZCgpLCAoX19tbWFzazgpIC0xLCBfX1IpO30pCi0KLSNkZWZpbmUgX21tNTEyX21hc2tfcmVkdWNlX3JvdW5kX3BkKF9fVywgX19VLCBfX0EsIF9fQiwgX19SKSBfX2V4dGVuc2lvbl9fICh7XAotICAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfcmVkdWNlcGQ1MTJfbWFzayAoKF9fdjhkZikgX19BLCBfX0IsICAgIFwKLSAgICAgICAgICAgICAgICAoX192OGRmKSBfX1csKF9fbW1hc2s4KSBfX1UsIF9fUik7fSkKLQotI2RlZmluZSBfbW01MTJfbWFza3pfcmVkdWNlX3JvdW5kX3BkKF9fVSwgX19BLCBfX0IsIF9fUikgX19leHRlbnNpb25fXyAoe1wKLSAgKF9fbTUxMmQpIF9fYnVpbHRpbl9pYTMyX3JlZHVjZXBkNTEyX21hc2sgKChfX3Y4ZGYpIF9fQSwgX19CLCBcCi0gICAgICAgICAgICAgICAgKF9fdjhkZikgX21tNTEyX3NldHplcm9fcGQoKSwgKF9fbW1hc2s4KSBfX1UsIF9fUik7fSkKLQotI2RlZmluZSBfbW01MTJfcmVkdWNlX3JvdW5kX3BzKF9fQSwgX19CLCBfX1IpIF9fZXh0ZW5zaW9uX18gKHtcCi0gIChfX201MTIpIF9fYnVpbHRpbl9pYTMyX3JlZHVjZXBzNTEyX21hc2sgKChfX3YxNnNmKSBfX0EsIF9fQiwgIFwKLSAgICAgICAgICAgICAgIChfX3YxNnNmKSBfbW01MTJfc2V0emVyb19wcygpLCAoX19tbWFzazE2KSAtMSwgX19SKTt9KQotCi0jZGVmaW5lIF9tbTUxMl9tYXNrX3JlZHVjZV9yb3VuZF9wcyhfX1csIF9fVSwgX19BLCBfX0IsIF9fUikgX19leHRlbnNpb25fXyAoe1wKLSAgKF9fbTUxMikgX19idWlsdGluX2lhMzJfcmVkdWNlcHM1MTJfbWFzayAoKF9fdjE2c2YpIF9fQSwgX19CLCAgICAgIFwKLSAgICAgICAgICAgICAgIChfX3YxNnNmKSBfX1csIChfX21tYXNrMTYpIF9fVSwgX19SKTt9KQotCi0jZGVmaW5lIF9tbTUxMl9tYXNrel9yZWR1Y2Vfcm91bmRfcHMoX19VLCBfX0EsIF9fQiwgX19SKSBfX2V4dGVuc2lvbl9fICh7XAotICAoX19tNTEyKSBfX2J1aWx0aW5faWEzMl9yZWR1Y2VwczUxMl9tYXNrICgoX192MTZzZikgX19BLCBfX0IsICAgICAgXAotICAgICAgICAgICAgICAgKF9fdjE2c2YpIF9tbTUxMl9zZXR6ZXJvX3BzKCksIChfX21tYXNrMTYpIF9fVSwgX19SKTt9KQotCi0jdW5kZWYgX19ERUZBVUxUX0ZOX0FUVFJTCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvY2xhbmctMjU3NzExMy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9hdng1MTJlcmludHJpbi5oIGIvY2xhbmctMjU3NzExMy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9hdng1MTJlcmludHJpbi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MGE5MTIxLi4wMDAwMDAwCi0tLSBhL2NsYW5nLTI1NzcxMTMvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvYXZ4NTEyZXJpbnRyaW4uaAorKysgL2Rldi9udWxsCkBAIC0xLDI4NSArMCwwIEBACi0vKj09PS0tLS0gYXZ4NTEyZXJpbnRyaW4uaCAtIEFWWDUxMkVSIGludHJpbnNpY3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09Ci0gKgotICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQotICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKLSAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKLSAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKLSAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcwotICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKLSAqCi0gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgotICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCi0gKgotICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKLSAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAotICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCi0gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAotICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgotICogVEhFIFNPRlRXQVJFLgotICoKLSAqPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KLSAqLwotI2lmbmRlZiBfX0lNTUlOVFJJTl9ICi0jZXJyb3IgIk5ldmVyIHVzZSA8YXZ4NTEyZXJpbnRyaW4uaD4gZGlyZWN0bHk7IGluY2x1ZGUgPGltbWludHJpbi5oPiBpbnN0ZWFkLiIKLSNlbmRpZgotCi0jaWZuZGVmIF9fQVZYNTEyRVJJTlRSSU5fSAotI2RlZmluZSBfX0FWWDUxMkVSSU5UUklOX0gKLQotLy8gZXhwMmEyMwotI2RlZmluZSBfbW01MTJfZXhwMmEyM19yb3VuZF9wZChBLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgKF9fbTUxMmQpX19idWlsdGluX2lhMzJfZXhwMnBkX21hc2soKF9fdjhkZikoX19tNTEyZCkoQSksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZilfbW01MTJfc2V0emVyb19wZCgpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSwgKFIpKTsgfSkKLQotI2RlZmluZSBfbW01MTJfbWFza19leHAyYTIzX3JvdW5kX3BkKFMsIE0sIEEsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICAoX19tNTEyZClfX2J1aWx0aW5faWEzMl9leHAycGRfbWFzaygoX192OGRmKShfX201MTJkKShBKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKShfX201MTJkKShTKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKE0pLCAoUikpOyB9KQotCi0jZGVmaW5lIF9tbTUxMl9tYXNrel9leHAyYTIzX3JvdW5kX3BkKE0sIEEsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICAoX19tNTEyZClfX2J1aWx0aW5faWEzMl9leHAycGRfbWFzaygoX192OGRmKShfX201MTJkKShBKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKV9tbTUxMl9zZXR6ZXJvX3BkKCksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShNKSwgKFIpKTsgfSkKLQotI2RlZmluZSBfbW01MTJfZXhwMmEyM19wZChBKSBcCi0gICBfbW01MTJfZXhwMmEyM19yb3VuZF9wZCgoQSksIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTikKLQotI2RlZmluZSBfbW01MTJfbWFza19leHAyYTIzX3BkKFMsIE0sIEEpIFwKLSAgIF9tbTUxMl9tYXNrX2V4cDJhMjNfcm91bmRfcGQoKFMpLCAoTSksIChBKSwgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKQotCi0jZGVmaW5lIF9tbTUxMl9tYXNrel9leHAyYTIzX3BkKE0sIEEpIFwKLSAgIF9tbTUxMl9tYXNrel9leHAyYTIzX3JvdW5kX3BkKChNKSwgKEEpLCBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pCi0KLSNkZWZpbmUgX21tNTEyX2V4cDJhMjNfcm91bmRfcHMoQSwgUikgX19leHRlbnNpb25fXyAoeyBcCi0gIChfX201MTIpX19idWlsdGluX2lhMzJfZXhwMnBzX21hc2soKF9fdjE2c2YpKF9fbTUxMikoQSksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZilfbW01MTJfc2V0emVyb19wcygpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xLCAoUikpOyB9KQotCi0jZGVmaW5lIF9tbTUxMl9tYXNrX2V4cDJhMjNfcm91bmRfcHMoUywgTSwgQSwgUikgX19leHRlbnNpb25fXyAoeyBcCi0gIChfX201MTIpX19idWlsdGluX2lhMzJfZXhwMnBzX21hc2soKF9fdjE2c2YpKF9fbTUxMikoQSksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikoX19tNTEyKShTKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoTSksIChSKSk7IH0pCi0KLSNkZWZpbmUgX21tNTEyX21hc2t6X2V4cDJhMjNfcm91bmRfcHMoTSwgQSwgUikgX19leHRlbnNpb25fXyAoeyBcCi0gIChfX201MTIpX19idWlsdGluX2lhMzJfZXhwMnBzX21hc2soKF9fdjE2c2YpKF9fbTUxMikoQSksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZilfbW01MTJfc2V0emVyb19wcygpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShNKSwgKFIpKTsgfSkKLQotI2RlZmluZSBfbW01MTJfZXhwMmEyM19wcyhBKSBcCi0gICBfbW01MTJfZXhwMmEyM19yb3VuZF9wcygoQSksIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTikKLQotI2RlZmluZSBfbW01MTJfbWFza19leHAyYTIzX3BzKFMsIE0sIEEpIFwKLSAgIF9tbTUxMl9tYXNrX2V4cDJhMjNfcm91bmRfcHMoKFMpLCAoTSksIChBKSwgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKQotCi0jZGVmaW5lIF9tbTUxMl9tYXNrel9leHAyYTIzX3BzKE0sIEEpIFwKLSAgIF9tbTUxMl9tYXNrel9leHAyYTIzX3JvdW5kX3BzKChNKSwgKEEpLCBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pCi0KLS8vIHJzcXJ0MjgKLSNkZWZpbmUgX21tNTEyX3JzcXJ0Mjhfcm91bmRfcGQoQSwgUikgX19leHRlbnNpb25fXyAoeyBcCi0gIChfX201MTJkKV9fYnVpbHRpbl9pYTMyX3JzcXJ0MjhwZF9tYXNrKChfX3Y4ZGYpKF9fbTUxMmQpKEEpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpX21tNTEyX3NldHplcm9fcGQoKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEsIChSKSk7IH0pCi0KLSNkZWZpbmUgX21tNTEyX21hc2tfcnNxcnQyOF9yb3VuZF9wZChTLCBNLCBBLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgKF9fbTUxMmQpX19idWlsdGluX2lhMzJfcnNxcnQyOHBkX21hc2soKF9fdjhkZikoX19tNTEyZCkoQSksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikoX19tNTEyZCkoUyksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShNKSwgKFIpKTsgfSkKLQotI2RlZmluZSBfbW01MTJfbWFza3pfcnNxcnQyOF9yb3VuZF9wZChNLCBBLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgKF9fbTUxMmQpX19idWlsdGluX2lhMzJfcnNxcnQyOHBkX21hc2soKF9fdjhkZikoX19tNTEyZCkoQSksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZilfbW01MTJfc2V0emVyb19wZCgpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoTSksIChSKSk7IH0pCi0KLSNkZWZpbmUgX21tNTEyX3JzcXJ0MjhfcGQoQSkgXAotICBfbW01MTJfcnNxcnQyOF9yb3VuZF9wZCgoQSksIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTikKLQotI2RlZmluZSBfbW01MTJfbWFza19yc3FydDI4X3BkKFMsIE0sIEEpIFwKLSAgX21tNTEyX21hc2tfcnNxcnQyOF9yb3VuZF9wZCgoUyksIChNKSwgKEEpLCBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pCi0KLSNkZWZpbmUgX21tNTEyX21hc2t6X3JzcXJ0MjhfcGQoTSwgQSkgXAotICBfbW01MTJfbWFza3pfcnNxcnQyOF9yb3VuZF9wZCgoTSksIChBKSwgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKQotCi0jZGVmaW5lIF9tbTUxMl9yc3FydDI4X3JvdW5kX3BzKEEsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICAoX19tNTEyKV9fYnVpbHRpbl9pYTMyX3JzcXJ0Mjhwc19tYXNrKChfX3YxNnNmKShfX201MTIpKEEpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpX21tNTEyX3NldHplcm9fcHMoKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpLTEsIChSKSk7IH0pCi0KLSNkZWZpbmUgX21tNTEyX21hc2tfcnNxcnQyOF9yb3VuZF9wcyhTLCBNLCBBLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgKF9fbTUxMilfX2J1aWx0aW5faWEzMl9yc3FydDI4cHNfbWFzaygoX192MTZzZikoX19tNTEyKShBKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKShfX201MTIpKFMpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikoTSksIChSKSk7IH0pCi0KLSNkZWZpbmUgX21tNTEyX21hc2t6X3JzcXJ0Mjhfcm91bmRfcHMoTSwgQSwgUikgX19leHRlbnNpb25fXyAoeyBcCi0gIChfX201MTIpX19idWlsdGluX2lhMzJfcnNxcnQyOHBzX21hc2soKF9fdjE2c2YpKF9fbTUxMikoQSksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZilfbW01MTJfc2V0emVyb19wcygpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikoTSksIChSKSk7IH0pCi0KLSNkZWZpbmUgX21tNTEyX3JzcXJ0MjhfcHMoQSkgXAotICBfbW01MTJfcnNxcnQyOF9yb3VuZF9wcygoQSksIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTikKLQotI2RlZmluZSBfbW01MTJfbWFza19yc3FydDI4X3BzKFMsIE0sIEEpIFwKLSAgX21tNTEyX21hc2tfcnNxcnQyOF9yb3VuZF9wcygoUyksIChNKSwgQSwgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKQotCi0jZGVmaW5lIF9tbTUxMl9tYXNrel9yc3FydDI4X3BzKE0sIEEpIFwKLSAgX21tNTEyX21hc2t6X3JzcXJ0Mjhfcm91bmRfcHMoKE0pLCAoQSksIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTikKLQotI2RlZmluZSBfbW1fcnNxcnQyOF9yb3VuZF9zcyhBLCBCLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgKF9fbTEyOClfX2J1aWx0aW5faWEzMl9yc3FydDI4c3Nfcm91bmQoKF9fdjRzZikoX19tMTI4KShBKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpKF9fbTEyOCkoQiksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKV9tbV9zZXR6ZXJvX3BzKCksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEsIChSKSk7IH0pCi0KLSNkZWZpbmUgX21tX21hc2tfcnNxcnQyOF9yb3VuZF9zcyhTLCBNLCBBLCBCLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgKF9fbTEyOClfX2J1aWx0aW5faWEzMl9yc3FydDI4c3Nfcm91bmQoKF9fdjRzZikoX19tMTI4KShBKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpKF9fbTEyOCkoQiksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKShfX20xMjgpKFMpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShNKSwgKFIpKTsgfSkKLQotI2RlZmluZSBfbW1fbWFza3pfcnNxcnQyOF9yb3VuZF9zcyhNLCBBLCBCLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgKF9fbTEyOClfX2J1aWx0aW5faWEzMl9yc3FydDI4c3Nfcm91bmQoKF9fdjRzZikoX19tMTI4KShBKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpKF9fbTEyOCkoQiksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKV9tbV9zZXR6ZXJvX3BzKCksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKE0pLCAoUikpOyB9KQotCi0jZGVmaW5lIF9tbV9yc3FydDI4X3NzKEEsIEIpIFwKLSAgX21tX3JzcXJ0Mjhfcm91bmRfc3MoKEEpLCAoQiksIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTikKLQotI2RlZmluZSBfbW1fbWFza19yc3FydDI4X3NzKFMsIE0sIEEsIEIpIFwKLSAgX21tX21hc2tfcnNxcnQyOF9yb3VuZF9zcygoUyksIChNKSwgKEEpLCAoQiksIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTikKLQotI2RlZmluZSBfbW1fbWFza3pfcnNxcnQyOF9zcyhNLCBBLCBCKSBcCi0gIF9tbV9tYXNrel9yc3FydDI4X3JvdW5kX3NzKChNKSwgKEEpLCAoQiksIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTikKLQotI2RlZmluZSBfbW1fcnNxcnQyOF9yb3VuZF9zZChBLCBCLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgKF9fbTEyOGQpX19idWlsdGluX2lhMzJfcnNxcnQyOHNkX3JvdW5kKChfX3YyZGYpKF9fbTEyOGQpKEEpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpKF9fbTEyOGQpKEIpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpX21tX3NldHplcm9fcGQoKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEsIChSKSk7IH0pCi0KLSNkZWZpbmUgX21tX21hc2tfcnNxcnQyOF9yb3VuZF9zZChTLCBNLCBBLCBCLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgKF9fbTEyOGQpX19idWlsdGluX2lhMzJfcnNxcnQyOHNkX3JvdW5kKChfX3YyZGYpKF9fbTEyOGQpKEEpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpKF9fbTEyOGQpKEIpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpKF9fbTEyOGQpKFMpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoTSksIChSKSk7IH0pCi0KLSNkZWZpbmUgX21tX21hc2t6X3JzcXJ0Mjhfcm91bmRfc2QoTSwgQSwgQiwgUikgX19leHRlbnNpb25fXyAoeyBcCi0gIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX3JzcXJ0MjhzZF9yb3VuZCgoX192MmRmKShfX20xMjhkKShBKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKShfX20xMjhkKShCKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKV9tbV9zZXR6ZXJvX3BkKCksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShNKSwgKFIpKTsgfSkKLQotI2RlZmluZSBfbW1fcnNxcnQyOF9zZChBLCBCKSBcCi0gIF9tbV9yc3FydDI4X3JvdW5kX3NkKChBKSwgKEIpLCBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pCi0KLSNkZWZpbmUgX21tX21hc2tfcnNxcnQyOF9zZChTLCBNLCBBLCBCKSBcCi0gIF9tbV9tYXNrX3JzcXJ0Mjhfcm91bmRfc2QoKFMpLCAoTSksIChBKSwgKEIpLCBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pCi0KLSNkZWZpbmUgX21tX21hc2t6X3JzcXJ0Mjhfc2QoTSwgQSwgQikgXAotICBfbW1fbWFza19yc3FydDI4X3JvdW5kX3NkKChNKSwgKEEpLCAoQiksIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTikKLQotLy8gcmNwMjgKLSNkZWZpbmUgX21tNTEyX3JjcDI4X3JvdW5kX3BkKEEsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICAoX19tNTEyZClfX2J1aWx0aW5faWEzMl9yY3AyOHBkX21hc2soKF9fdjhkZikoX19tNTEyZCkoQSksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpX21tNTEyX3NldHplcm9fcGQoKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xLCAoUikpOyB9KQotCi0jZGVmaW5lIF9tbTUxMl9tYXNrX3JjcDI4X3JvdW5kX3BkKFMsIE0sIEEsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICAoX19tNTEyZClfX2J1aWx0aW5faWEzMl9yY3AyOHBkX21hc2soKF9fdjhkZikoX19tNTEyZCkoQSksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpKF9fbTUxMmQpKFMpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKE0pLCAoUikpOyB9KQotCi0jZGVmaW5lIF9tbTUxMl9tYXNrel9yY3AyOF9yb3VuZF9wZChNLCBBLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgKF9fbTUxMmQpX19idWlsdGluX2lhMzJfcmNwMjhwZF9tYXNrKChfX3Y4ZGYpKF9fbTUxMmQpKEEpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKV9tbTUxMl9zZXR6ZXJvX3BkKCksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoTSksIChSKSk7IH0pCi0KLSNkZWZpbmUgX21tNTEyX3JjcDI4X3BkKEEpIFwKLSAgX21tNTEyX3JjcDI4X3JvdW5kX3BkKChBKSwgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKQotCi0jZGVmaW5lIF9tbTUxMl9tYXNrX3JjcDI4X3BkKFMsIE0sIEEpIFwKLSAgX21tNTEyX21hc2tfcmNwMjhfcm91bmRfcGQoKFMpLCAoTSksIChBKSwgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKQotCi0jZGVmaW5lIF9tbTUxMl9tYXNrel9yY3AyOF9wZChNLCBBKSBcCi0gIF9tbTUxMl9tYXNrel9yY3AyOF9yb3VuZF9wZCgoTSksIChBKSwgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKQotCi0jZGVmaW5lIF9tbTUxMl9yY3AyOF9yb3VuZF9wcyhBLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgKF9fbTUxMilfX2J1aWx0aW5faWEzMl9yY3AyOHBzX21hc2soKF9fdjE2c2YpKF9fbTUxMikoQSksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpX21tNTEyX3NldHplcm9fcHMoKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KS0xLCAoUikpOyB9KQotCi0jZGVmaW5lIF9tbTUxMl9tYXNrX3JjcDI4X3JvdW5kX3BzKFMsIE0sIEEsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICAoX19tNTEyKV9fYnVpbHRpbl9pYTMyX3JjcDI4cHNfbWFzaygoX192MTZzZikoX19tNTEyKShBKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikoX19tNTEyKShTKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KShNKSwgKFIpKTsgfSkKLQotI2RlZmluZSBfbW01MTJfbWFza3pfcmNwMjhfcm91bmRfcHMoTSwgQSwgUikgX19leHRlbnNpb25fXyAoeyBcCi0gIChfX201MTIpX19idWlsdGluX2lhMzJfcmNwMjhwc19tYXNrKChfX3YxNnNmKShfX201MTIpKEEpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKV9tbTUxMl9zZXR6ZXJvX3BzKCksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikoTSksIChSKSk7IH0pCi0KLSNkZWZpbmUgX21tNTEyX3JjcDI4X3BzKEEpIFwKLSAgX21tNTEyX3JjcDI4X3JvdW5kX3BzKChBKSwgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKQotCi0jZGVmaW5lIF9tbTUxMl9tYXNrX3JjcDI4X3BzKFMsIE0sIEEpIFwKLSAgX21tNTEyX21hc2tfcmNwMjhfcm91bmRfcHMoKFMpLCAoTSksIChBKSwgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKQotCi0jZGVmaW5lIF9tbTUxMl9tYXNrel9yY3AyOF9wcyhNLCBBKSBcCi0gIF9tbTUxMl9tYXNrel9yY3AyOF9yb3VuZF9wcygoTSksIChBKSwgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKQotCi0jZGVmaW5lIF9tbV9yY3AyOF9yb3VuZF9zcyhBLCBCLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgKF9fbTEyOClfX2J1aWx0aW5faWEzMl9yY3AyOHNzX3JvdW5kKChfX3Y0c2YpKF9fbTEyOCkoQSksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikoX19tMTI4KShCKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKV9tbV9zZXR6ZXJvX3BzKCksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xLCAoUikpOyB9KQotCi0jZGVmaW5lIF9tbV9tYXNrX3JjcDI4X3JvdW5kX3NzKFMsIE0sIEEsIEIsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX3JjcDI4c3Nfcm91bmQoKF9fdjRzZikoX19tMTI4KShBKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKShfX20xMjgpKEIpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpKF9fbTEyOCkoUyksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShNKSwgKFIpKTsgfSkKLQotI2RlZmluZSBfbW1fbWFza3pfcmNwMjhfcm91bmRfc3MoTSwgQSwgQiwgUikgX19leHRlbnNpb25fXyAoeyBcCi0gIChfX20xMjgpX19idWlsdGluX2lhMzJfcmNwMjhzc19yb3VuZCgoX192NHNmKShfX20xMjgpKEEpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpKF9fbTEyOCkoQiksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZilfbW1fc2V0emVyb19wcygpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoTSksIChSKSk7IH0pCi0KLSNkZWZpbmUgX21tX3JjcDI4X3NzKEEsIEIpIFwKLSAgX21tX3JjcDI4X3JvdW5kX3NzKChBKSwgKEIpLCBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pCi0KLSNkZWZpbmUgX21tX21hc2tfcmNwMjhfc3MoUywgTSwgQSwgQikgXAotICBfbW1fbWFza19yY3AyOF9yb3VuZF9zcygoUyksIChNKSwgKEEpLCAoQiksIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTikKLQotI2RlZmluZSBfbW1fbWFza3pfcmNwMjhfc3MoTSwgQSwgQikgXAotICBfbW1fbWFza3pfcmNwMjhfcm91bmRfc3MoKE0pLCAoQSksIChCKSwgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKQotCi0jZGVmaW5lIF9tbV9yY3AyOF9yb3VuZF9zZChBLCBCLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgKF9fbTEyOGQpX19idWlsdGluX2lhMzJfcmNwMjhzZF9yb3VuZCgoX192MmRmKShfX20xMjhkKShBKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikoX19tMTI4ZCkoQiksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpX21tX3NldHplcm9fcGQoKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xLCAoUikpOyB9KQotCi0jZGVmaW5lIF9tbV9tYXNrX3JjcDI4X3JvdW5kX3NkKFMsIE0sIEEsIEIsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9yY3AyOHNkX3JvdW5kKChfX3YyZGYpKF9fbTEyOGQpKEEpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKShfX20xMjhkKShCKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikoX19tMTI4ZCkoUyksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoTSksIChSKSk7IH0pCi0KLSNkZWZpbmUgX21tX21hc2t6X3JjcDI4X3JvdW5kX3NkKE0sIEEsIEIsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9yY3AyOHNkX3JvdW5kKChfX3YyZGYpKF9fbTEyOGQpKEEpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKShfX20xMjhkKShCKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZilfbW1fc2V0emVyb19wZCgpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKE0pLCAoUikpOyB9KQotCi0jZGVmaW5lIF9tbV9yY3AyOF9zZChBLCBCKSBcCi0gIF9tbV9yY3AyOF9yb3VuZF9zZCgoQSksIChCKSwgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKQotCi0jZGVmaW5lIF9tbV9tYXNrX3JjcDI4X3NkKFMsIE0sIEEsIEIpIFwKLSAgX21tX21hc2tfcmNwMjhfcm91bmRfc2QoKFMpLCAoTSksIChBKSwgKEIpLCBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pCi0KLSNkZWZpbmUgX21tX21hc2t6X3JjcDI4X3NkKE0sIEEsIEIpIFwKLSAgX21tX21hc2t6X3JjcDI4X3JvdW5kX3NkKChNKSwgKEEpLCAoQiksIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTikKLQotI2VuZGlmIC8vIF9fQVZYNTEyRVJJTlRSSU5fSApkaWZmIC0tZ2l0IGEvY2xhbmctMjU3NzExMy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9hdng1MTJmaW50cmluLmggYi9jbGFuZy0yNTc3MTEzL2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL2F2eDUxMmZpbnRyaW4uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGRjZGM3MS4uMDAwMDAwMAotLS0gYS9jbGFuZy0yNTc3MTEzL2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL2F2eDUxMmZpbnRyaW4uaAorKysgL2Rldi9udWxsCkBAIC0xLDMwNzQgKzAsMCBAQAotLyo9PT0tLS0tIGF2eDUxMmZpbnRyaW4uaCAtIEFWWDUxMkYgaW50cmluc2ljcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQotICoKLSAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKLSAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCi0gKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCi0gKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCi0gKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKLSAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Ci0gKgotICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KLSAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgotICoKLSAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCi0gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKLSAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgotICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKLSAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KLSAqIFRIRSBTT0ZUV0FSRS4KLSAqCi0gKj09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09Ci0gKi8KLSNpZm5kZWYgX19JTU1JTlRSSU5fSAotI2Vycm9yICJOZXZlciB1c2UgPGF2eDUxMmZpbnRyaW4uaD4gZGlyZWN0bHk7IGluY2x1ZGUgPGltbWludHJpbi5oPiBpbnN0ZWFkLiIKLSNlbmRpZgotCi0jaWZuZGVmIF9fQVZYNTEyRklOVFJJTl9ICi0jZGVmaW5lIF9fQVZYNTEyRklOVFJJTl9ICi0KLXR5cGVkZWYgZG91YmxlIF9fdjhkZiBfX2F0dHJpYnV0ZV9fKChfX3ZlY3Rvcl9zaXplX18oNjQpKSk7Ci10eXBlZGVmIGZsb2F0IF9fdjE2c2YgX19hdHRyaWJ1dGVfXygoX192ZWN0b3Jfc2l6ZV9fKDY0KSkpOwotdHlwZWRlZiBsb25nIGxvbmcgX192OGRpIF9fYXR0cmlidXRlX18oKF9fdmVjdG9yX3NpemVfXyg2NCkpKTsKLXR5cGVkZWYgaW50IF9fdjE2c2kgX19hdHRyaWJ1dGVfXygoX192ZWN0b3Jfc2l6ZV9fKDY0KSkpOwotCi10eXBlZGVmIGZsb2F0IF9fbTUxMiBfX2F0dHJpYnV0ZV9fKChfX3ZlY3Rvcl9zaXplX18oNjQpKSk7Ci10eXBlZGVmIGRvdWJsZSBfX201MTJkIF9fYXR0cmlidXRlX18oKF9fdmVjdG9yX3NpemVfXyg2NCkpKTsKLXR5cGVkZWYgbG9uZyBsb25nIF9fbTUxMmkgX19hdHRyaWJ1dGVfXygoX192ZWN0b3Jfc2l6ZV9fKDY0KSkpOwotCi10eXBlZGVmIHVuc2lnbmVkIGNoYXIgX19tbWFzazg7Ci10eXBlZGVmIHVuc2lnbmVkIHNob3J0IF9fbW1hc2sxNjsKLQotLyogUm91bmRpbmcgbW9kZSBtYWNyb3MuICAqLwotI2RlZmluZSBfTU1fRlJPVU5EX1RPX05FQVJFU1RfSU5UICAgMHgwMAotI2RlZmluZSBfTU1fRlJPVU5EX1RPX05FR19JTkYgICAgICAgMHgwMQotI2RlZmluZSBfTU1fRlJPVU5EX1RPX1BPU19JTkYgICAgICAgMHgwMgotI2RlZmluZSBfTU1fRlJPVU5EX1RPX1pFUk8gICAgICAgICAgMHgwMwotI2RlZmluZSBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04gICAgMHgwNAotCi0vKiBEZWZpbmUgdGhlIGRlZmF1bHQgYXR0cmlidXRlcyBmb3IgdGhlIGZ1bmN0aW9ucyBpbiB0aGlzIGZpbGUuICovCi0jZGVmaW5lIF9fREVGQVVMVF9GTl9BVFRSUyBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18sIF9fdGFyZ2V0X18oImF2eDUxMmYiKSkpCi0KLS8qIENyZWF0ZSB2ZWN0b3JzIHdpdGggcmVwZWF0ZWQgZWxlbWVudHMgKi8KLQotc3RhdGljICBfX2lubGluZSBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX3NldHplcm9fc2k1MTIodm9pZCkKLXsKLSAgcmV0dXJuIChfX201MTJpKShfX3Y4ZGkpeyAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwIH07Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfdW5kZWZpbmVkX3BkKCkKLXsKLSAgcmV0dXJuIChfX201MTJkKV9fYnVpbHRpbl9pYTMyX3VuZGVmNTEyKCk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTUxMiBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl91bmRlZmluZWQoKQotewotICByZXR1cm4gKF9fbTUxMilfX2J1aWx0aW5faWEzMl91bmRlZjUxMigpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfdW5kZWZpbmVkX3BzKCkKLXsKLSAgcmV0dXJuIChfX201MTIpX19idWlsdGluX2lhMzJfdW5kZWY1MTIoKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl91bmRlZmluZWRfZXBpMzIoKQotewotICByZXR1cm4gKF9fbTUxMmkpX19idWlsdGluX2lhMzJfdW5kZWY1MTIoKTsKLX0KLQotc3RhdGljIF9faW5saW5lIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfbWFza3pfc2V0MV9lcGkzMihfX21tYXNrMTYgX19NLCBpbnQgX19BKQotewotICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3Bicm9hZGNhc3RkNTEyX2dwcl9tYXNrIChfX0EsCi0gICAgICAgICAgICAgICAgIChfX3YxNnNpKQotICAgICAgICAgICAgICAgICBfbW01MTJfc2V0emVyb19zaTUxMiAoKSwKLSAgICAgICAgICAgICAgICAgX19NKTsKLX0KLQotc3RhdGljIF9faW5saW5lIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfbWFza3pfc2V0MV9lcGk2NChfX21tYXNrOCBfX00sIGxvbmcgbG9uZyBfX0EpCi17Ci0jaWZkZWYgX194ODZfNjRfXwotICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3Bicm9hZGNhc3RxNTEyX2dwcl9tYXNrIChfX0EsCi0gICAgICAgICAgICAgICAgIChfX3Y4ZGkpCi0gICAgICAgICAgICAgICAgIF9tbTUxMl9zZXR6ZXJvX3NpNTEyICgpLAotICAgICAgICAgICAgICAgICBfX00pOwotI2Vsc2UKLSAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wYnJvYWRjYXN0cTUxMl9tZW1fbWFzayAoX19BLAotICAgICAgICAgICAgICAgICAoX192OGRpKQotICAgICAgICAgICAgICAgICBfbW01MTJfc2V0emVyb19zaTUxMiAoKSwKLSAgICAgICAgICAgICAgICAgX19NKTsKLSNlbmRpZgotfQotCi1zdGF0aWMgX19pbmxpbmUgX19tNTEyIF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX3NldHplcm9fcHModm9pZCkKLXsKLSAgcmV0dXJuIChfX201MTIpeyAwLjAsIDAuMCwgMC4wLCAwLjAsIDAuMCwgMC4wLCAwLjAsIDAuMCwKLSAgICAgICAgICAgICAgICAgICAwLjAsIDAuMCwgMC4wLCAwLjAsIDAuMCwgMC4wLCAwLjAsIDAuMCB9OwotfQotc3RhdGljICBfX2lubGluZSBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX3NldHplcm9fcGQodm9pZCkKLXsKLSAgcmV0dXJuIChfX201MTJkKXsgMC4wLCAwLjAsIDAuMCwgMC4wLCAwLjAsIDAuMCwgMC4wLCAwLjAgfTsKLX0KLQotc3RhdGljIF9faW5saW5lIF9fbTUxMiBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9zZXQxX3BzKGZsb2F0IF9fdykKLXsKLSAgcmV0dXJuIChfX201MTIpeyBfX3csIF9fdywgX193LCBfX3csIF9fdywgX193LCBfX3csIF9fdywKLSAgICAgICAgICAgICAgICAgICBfX3csIF9fdywgX193LCBfX3csIF9fdywgX193LCBfX3csIF9fdyAgfTsKLX0KLQotc3RhdGljIF9faW5saW5lIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfc2V0MV9wZChkb3VibGUgX193KQotewotICByZXR1cm4gKF9fbTUxMmQpeyBfX3csIF9fdywgX193LCBfX3csIF9fdywgX193LCBfX3csIF9fdyB9OwotfQotCi1zdGF0aWMgX19pbmxpbmUgX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9zZXQxX2VwaTMyKGludCBfX3MpCi17Ci0gIHJldHVybiAoX19tNTEyaSkoX192MTZzaSl7IF9fcywgX19zLCBfX3MsIF9fcywgX19zLCBfX3MsIF9fcywgX19zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3MsIF9fcywgX19zLCBfX3MsIF9fcywgX19zLCBfX3MsIF9fcyB9OwotfQotCi1zdGF0aWMgX19pbmxpbmUgX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9zZXQxX2VwaTY0KGxvbmcgbG9uZyBfX2QpCi17Ci0gIHJldHVybiAoX19tNTEyaSkoX192OGRpKXsgX19kLCBfX2QsIF9fZCwgX19kLCBfX2QsIF9fZCwgX19kLCBfX2QgfTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tNTEyIF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX2Jyb2FkY2FzdHNzX3BzKF9fbTEyOCBfX1gpCi17Ci0gIGZsb2F0IF9fZiA9IF9fWFswXTsKLSAgcmV0dXJuIChfX3YxNnNmKXsgX19mLCBfX2YsIF9fZiwgX19mLAotICAgICAgICAgICAgICAgICAgICBfX2YsIF9fZiwgX19mLCBfX2YsCi0gICAgICAgICAgICAgICAgICAgIF9fZiwgX19mLCBfX2YsIF9fZiwKLSAgICAgICAgICAgICAgICAgICAgX19mLCBfX2YsIF9fZiwgX19mIH07Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfYnJvYWRjYXN0c2RfcGQoX19tMTI4ZCBfX1gpCi17Ci0gIGRvdWJsZSBfX2QgPSBfX1hbMF07Ci0gIHJldHVybiAoX192OGRmKXsgX19kLCBfX2QsIF9fZCwgX19kLAotICAgICAgICAgICAgICAgICAgIF9fZCwgX19kLCBfX2QsIF9fZCB9OwotfQotCi0vKiBDYXN0IGJldHdlZW4gdmVjdG9yIHR5cGVzICovCi0KLXN0YXRpYyBfX2lubGluZSBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX2Nhc3RwZDI1Nl9wZDUxMihfX20yNTZkIF9fYSkKLXsKLSAgcmV0dXJuIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fYSwgX19hLCAwLCAxLCAyLCAzLCAtMSwgLTEsIC0xLCAtMSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZSBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfY2FzdHBzMjU2X3BzNTEyKF9fbTI1NiBfX2EpCi17Ci0gIHJldHVybiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX2EsIF9fYSwgMCwgIDEsICAyLCAgMywgIDQsICA1LCAgNiwgIDcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpOwotfQotCi1zdGF0aWMgX19pbmxpbmUgX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9jYXN0cGQ1MTJfcGQxMjgoX19tNTEyZCBfX2EpCi17Ci0gIHJldHVybiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX2EsIF9fYSwgMCwgMSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZSBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfY2FzdHBzNTEyX3BzMTI4KF9fbTUxMiBfX2EpCi17Ci0gIHJldHVybiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX2EsIF9fYSwgMCwgMSwgMiwgMyk7Ci19Ci0KLS8qIEJpdHdpc2Ugb3BlcmF0b3JzICovCi1zdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX2FuZF9lcGkzMihfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpCi17Ci0gIHJldHVybiBfX2EgJiBfX2I7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfbWFza19hbmRfZXBpMzIoX19tNTEyaSBfX3NyYywgX19tbWFzazE2IF9faywgX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKQotewotICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BhbmRkNTEyX21hc2soKF9fdjE2c2kpIF9fYSwKLSAgICAgICAgICAgICAgKF9fdjE2c2kpIF9fYiwKLSAgICAgICAgICAgICAgKF9fdjE2c2kpIF9fc3JjLAotICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX2spOwotfQotc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9tYXNrel9hbmRfZXBpMzIoX19tbWFzazE2IF9faywgX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKQotewotICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BhbmRkNTEyX21hc2soKF9fdjE2c2kpIF9fYSwKLSAgICAgICAgICAgICAgKF9fdjE2c2kpIF9fYiwKLSAgICAgICAgICAgICAgKF9fdjE2c2kpCi0gICAgICAgICAgICAgIF9tbTUxMl9zZXR6ZXJvX3NpNTEyICgpLAotICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX2spOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX2FuZF9lcGk2NChfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpCi17Ci0gIHJldHVybiBfX2EgJiBfX2I7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfbWFza19hbmRfZXBpNjQoX19tNTEyaSBfX3NyYywgX19tbWFzazggX19rLCBfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpCi17Ci0gIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcGFuZHE1MTJfbWFzayAoKF9fdjhkaSkgX19hLAotICAgICAgICAgICAgICAoX192OGRpKSBfX2IsCi0gICAgICAgICAgICAgIChfX3Y4ZGkpIF9fc3JjLAotICAgICAgICAgICAgICAoX19tbWFzazgpIF9fayk7Ci19Ci1zdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX21hc2t6X2FuZF9lcGk2NChfX21tYXNrOCBfX2ssIF9fbTUxMmkgX19hLCBfX201MTJpIF9fYikKLXsKLSAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wYW5kcTUxMl9tYXNrICgoX192OGRpKSBfX2EsCi0gICAgICAgICAgICAgIChfX3Y4ZGkpIF9fYiwKLSAgICAgICAgICAgICAgKF9fdjhkaSkKLSAgICAgICAgICAgICAgX21tNTEyX3NldHplcm9fc2k1MTIgKCksCi0gICAgICAgICAgICAgIChfX21tYXNrOCkgX19rKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9hbmRub3RfZXBpMzIgKF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKLXsKLSAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wYW5kbmQ1MTJfbWFzayAoKF9fdjE2c2kpIF9fQSwKLSAgICAgICAgICAgICAgKF9fdjE2c2kpIF9fQiwKLSAgICAgICAgICAgICAgKF9fdjE2c2kpCi0gICAgICAgICAgICAgIF9tbTUxMl9zZXR6ZXJvX3NpNTEyICgpLAotICAgICAgICAgICAgICAoX19tbWFzazE2KSAtMSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfbWFza19hbmRub3RfZXBpMzIgKF9fbTUxMmkgX19XLCBfX21tYXNrMTYgX19VLCBfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCi17Ci0gIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcGFuZG5kNTEyX21hc2sgKChfX3YxNnNpKSBfX0EsCi0gICAgICAgICAgICAgIChfX3YxNnNpKSBfX0IsCi0gICAgICAgICAgICAgIChfX3YxNnNpKSBfX1csCi0gICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfbWFza3pfYW5kbm90X2VwaTMyIChfX21tYXNrMTYgX19VLCBfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCi17Ci0gIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcGFuZG5kNTEyX21hc2sgKChfX3YxNnNpKSBfX0EsCi0gICAgICAgICAgICAgIChfX3YxNnNpKSBfX0IsCi0gICAgICAgICAgICAgIChfX3YxNnNpKQotICAgICAgICAgICAgICBfbW01MTJfc2V0emVyb19zaTUxMiAoKSwKLSAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9hbmRub3RfZXBpNjQgKF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKLXsKLSAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wYW5kbnE1MTJfbWFzayAoKF9fdjhkaSkgX19BLAotICAgICAgICAgICAgICAoX192OGRpKSBfX0IsCi0gICAgICAgICAgICAgIChfX3Y4ZGkpCi0gICAgICAgICAgICAgIF9tbTUxMl9zZXR6ZXJvX3NpNTEyICgpLAotICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9tYXNrX2FuZG5vdF9lcGk2NCAoX19tNTEyaSBfX1csIF9fbW1hc2s4IF9fVSwgX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQotewotICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BhbmRucTUxMl9tYXNrICgoX192OGRpKSBfX0EsCi0gICAgICAgICAgICAgIChfX3Y4ZGkpIF9fQiwKLSAgICAgICAgICAgICAgKF9fdjhkaSkgX19XLCBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX21hc2t6X2FuZG5vdF9lcGk2NCAoX19tbWFzazggX19VLCBfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCi17Ci0gIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcGFuZG5xNTEyX21hc2sgKChfX3Y4ZGkpIF9fQSwKLSAgICAgICAgICAgICAgKF9fdjhkaSkgX19CLAotICAgICAgICAgICAgICAoX192OGRpKQotICAgICAgICAgICAgICBfbW01MTJfc2V0emVyb19wZCAoKSwKLSAgICAgICAgICAgICAgX19VKTsKLX0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfb3JfZXBpMzIoX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKQotewotICByZXR1cm4gX19hIHwgX19iOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX21hc2tfb3JfZXBpMzIoX19tNTEyaSBfX3NyYywgX19tbWFzazE2IF9faywgX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKQotewotICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BvcmQ1MTJfbWFzaygoX192MTZzaSkgX19hLAotICAgICAgICAgICAgICAoX192MTZzaSkgX19iLAotICAgICAgICAgICAgICAoX192MTZzaSkgX19zcmMsCi0gICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fayk7Ci19Ci1zdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX21hc2t6X29yX2VwaTMyKF9fbW1hc2sxNiBfX2ssIF9fbTUxMmkgX19hLCBfX201MTJpIF9fYikKLXsKLSAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wb3JkNTEyX21hc2soKF9fdjE2c2kpIF9fYSwKLSAgICAgICAgICAgICAgKF9fdjE2c2kpIF9fYiwKLSAgICAgICAgICAgICAgKF9fdjE2c2kpCi0gICAgICAgICAgICAgIF9tbTUxMl9zZXR6ZXJvX3NpNTEyICgpLAotICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX2spOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX29yX2VwaTY0KF9fbTUxMmkgX19hLCBfX201MTJpIF9fYikKLXsKLSAgcmV0dXJuIF9fYSB8IF9fYjsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9tYXNrX29yX2VwaTY0KF9fbTUxMmkgX19zcmMsIF9fbW1hc2s4IF9faywgX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKQotewotICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BvcnE1MTJfbWFzayAoKF9fdjhkaSkgX19hLAotICAgICAgICAgICAgICAoX192OGRpKSBfX2IsCi0gICAgICAgICAgICAgIChfX3Y4ZGkpIF9fc3JjLAotICAgICAgICAgICAgICAoX19tbWFzazgpIF9fayk7Ci19Ci1zdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX21hc2t6X29yX2VwaTY0KF9fbW1hc2s4IF9faywgX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKQotewotICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BvcnE1MTJfbWFzayAoKF9fdjhkaSkgX19hLAotICAgICAgICAgICAgICAoX192OGRpKSBfX2IsCi0gICAgICAgICAgICAgIChfX3Y4ZGkpCi0gICAgICAgICAgICAgIF9tbTUxMl9zZXR6ZXJvX3NpNTEyICgpLAotICAgICAgICAgICAgICAoX19tbWFzazgpIF9fayk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfeG9yX2VwaTMyKF9fbTUxMmkgX19hLCBfX201MTJpIF9fYikKLXsKLSAgcmV0dXJuIF9fYSBeIF9fYjsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9tYXNrX3hvcl9lcGkzMihfX201MTJpIF9fc3JjLCBfX21tYXNrMTYgX19rLCBfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpCi17Ci0gIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcHhvcmQ1MTJfbWFzaygoX192MTZzaSkgX19hLAotICAgICAgICAgICAgICAoX192MTZzaSkgX19iLAotICAgICAgICAgICAgICAoX192MTZzaSkgX19zcmMsCi0gICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fayk7Ci19Ci1zdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX21hc2t6X3hvcl9lcGkzMihfX21tYXNrMTYgX19rLCBfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpCi17Ci0gIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcHhvcmQ1MTJfbWFzaygoX192MTZzaSkgX19hLAotICAgICAgICAgICAgICAoX192MTZzaSkgX19iLAotICAgICAgICAgICAgICAoX192MTZzaSkKLSAgICAgICAgICAgICAgX21tNTEyX3NldHplcm9fc2k1MTIgKCksCi0gICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fayk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfeG9yX2VwaTY0KF9fbTUxMmkgX19hLCBfX201MTJpIF9fYikKLXsKLSAgcmV0dXJuIF9fYSBeIF9fYjsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9tYXNrX3hvcl9lcGk2NChfX201MTJpIF9fc3JjLCBfX21tYXNrOCBfX2ssIF9fbTUxMmkgX19hLCBfX201MTJpIF9fYikKLXsKLSAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9weG9ycTUxMl9tYXNrICgoX192OGRpKSBfX2EsCi0gICAgICAgICAgICAgIChfX3Y4ZGkpIF9fYiwKLSAgICAgICAgICAgICAgKF9fdjhkaSkgX19zcmMsCi0gICAgICAgICAgICAgIChfX21tYXNrOCkgX19rKTsKLX0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfbWFza3pfeG9yX2VwaTY0KF9fbW1hc2s4IF9faywgX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKQotewotICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3B4b3JxNTEyX21hc2sgKChfX3Y4ZGkpIF9fYSwKLSAgICAgICAgICAgICAgKF9fdjhkaSkgX19iLAotICAgICAgICAgICAgICAoX192OGRpKQotICAgICAgICAgICAgICBfbW01MTJfc2V0emVyb19zaTUxMiAoKSwKLSAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX2spOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX2FuZF9zaTUxMihfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpCi17Ci0gIHJldHVybiBfX2EgJiBfX2I7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfb3Jfc2k1MTIoX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKQotewotICByZXR1cm4gX19hIHwgX19iOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX3hvcl9zaTUxMihfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpCi17Ci0gIHJldHVybiBfX2EgXiBfX2I7Ci19Ci0vKiBBcml0aG1ldGljICovCi0KLXN0YXRpYyBfX2lubGluZSBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX2FkZF9wZChfX201MTJkIF9fYSwgX19tNTEyZCBfX2IpCi17Ci0gIHJldHVybiBfX2EgKyBfX2I7Ci19Ci0KLXN0YXRpYyBfX2lubGluZSBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfYWRkX3BzKF9fbTUxMiBfX2EsIF9fbTUxMiBfX2IpCi17Ci0gIHJldHVybiBfX2EgKyBfX2I7Ci19Ci0KLXN0YXRpYyBfX2lubGluZSBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX211bF9wZChfX201MTJkIF9fYSwgX19tNTEyZCBfX2IpCi17Ci0gIHJldHVybiBfX2EgKiBfX2I7Ci19Ci0KLXN0YXRpYyBfX2lubGluZSBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfbXVsX3BzKF9fbTUxMiBfX2EsIF9fbTUxMiBfX2IpCi17Ci0gIHJldHVybiBfX2EgKiBfX2I7Ci19Ci0KLXN0YXRpYyBfX2lubGluZSBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX3N1Yl9wZChfX201MTJkIF9fYSwgX19tNTEyZCBfX2IpCi17Ci0gIHJldHVybiBfX2EgLSBfX2I7Ci19Ci0KLXN0YXRpYyBfX2lubGluZSBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfc3ViX3BzKF9fbTUxMiBfX2EsIF9fbTUxMiBfX2IpCi17Ci0gIHJldHVybiBfX2EgLSBfX2I7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfYWRkX2VwaTY0IChfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCi17Ci0gIHJldHVybiAoX19tNTEyaSkgKChfX3Y4ZGkpIF9fQSArIChfX3Y4ZGkpIF9fQik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfbWFza19hZGRfZXBpNjQgKF9fbTUxMmkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKLXsKLSAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wYWRkcTUxMl9tYXNrICgoX192OGRpKSBfX0EsCi0gICAgICAgICAgICAgKF9fdjhkaSkgX19CLAotICAgICAgICAgICAgIChfX3Y4ZGkpIF9fVywKLSAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfbWFza3pfYWRkX2VwaTY0IChfX21tYXNrOCBfX1UsIF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKLXsKLSAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wYWRkcTUxMl9tYXNrICgoX192OGRpKSBfX0EsCi0gICAgICAgICAgICAgKF9fdjhkaSkgX19CLAotICAgICAgICAgICAgIChfX3Y4ZGkpCi0gICAgICAgICAgICAgX21tNTEyX3NldHplcm9fc2k1MTIgKCksCi0gICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX3N1Yl9lcGk2NCAoX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQotewotICByZXR1cm4gKF9fbTUxMmkpICgoX192OGRpKSBfX0EgLSAoX192OGRpKSBfX0IpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX21hc2tfc3ViX2VwaTY0IChfX201MTJpIF9fVywgX19tbWFzazggX19VLCBfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCi17Ci0gIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcHN1YnE1MTJfbWFzayAoKF9fdjhkaSkgX19BLAotICAgICAgICAgICAgIChfX3Y4ZGkpIF9fQiwKLSAgICAgICAgICAgICAoX192OGRpKSBfX1csCi0gICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX21hc2t6X3N1Yl9lcGk2NCAoX19tbWFzazggX19VLCBfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCi17Ci0gIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcHN1YnE1MTJfbWFzayAoKF9fdjhkaSkgX19BLAotICAgICAgICAgICAgIChfX3Y4ZGkpIF9fQiwKLSAgICAgICAgICAgICAoX192OGRpKQotICAgICAgICAgICAgIF9tbTUxMl9zZXR6ZXJvX3NpNTEyICgpLAotICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9hZGRfZXBpMzIgKF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKLXsKLSAgcmV0dXJuIChfX201MTJpKSAoKF9fdjE2c2kpIF9fQSArIChfX3YxNnNpKSBfX0IpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX21hc2tfYWRkX2VwaTMyIChfX201MTJpIF9fVywgX19tbWFzazE2IF9fVSwgX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQotewotICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BhZGRkNTEyX21hc2sgKChfX3YxNnNpKSBfX0EsCi0gICAgICAgICAgICAgKF9fdjE2c2kpIF9fQiwKLSAgICAgICAgICAgICAoX192MTZzaSkgX19XLAotICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfbWFza3pfYWRkX2VwaTMyIChfX21tYXNrMTYgX19VLCBfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCi17Ci0gIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcGFkZGQ1MTJfbWFzayAoKF9fdjE2c2kpIF9fQSwKLSAgICAgICAgICAgICAoX192MTZzaSkgX19CLAotICAgICAgICAgICAgIChfX3YxNnNpKQotICAgICAgICAgICAgIF9tbTUxMl9zZXR6ZXJvX3NpNTEyICgpLAotICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfc3ViX2VwaTMyIChfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCi17Ci0gIHJldHVybiAoX19tNTEyaSkgKChfX3YxNnNpKSBfX0EgLSAoX192MTZzaSkgX19CKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9tYXNrX3N1Yl9lcGkzMiAoX19tNTEyaSBfX1csIF9fbW1hc2sxNiBfX1UsIF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKLXsKLSAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wc3ViZDUxMl9tYXNrICgoX192MTZzaSkgX19BLAotICAgICAgICAgICAgIChfX3YxNnNpKSBfX0IsCi0gICAgICAgICAgICAgKF9fdjE2c2kpIF9fVywKLSAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX21hc2t6X3N1Yl9lcGkzMiAoX19tbWFzazE2IF9fVSwgX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQotewotICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BzdWJkNTEyX21hc2sgKChfX3YxNnNpKSBfX0EsCi0gICAgICAgICAgICAgKF9fdjE2c2kpIF9fQiwKLSAgICAgICAgICAgICAoX192MTZzaSkKLSAgICAgICAgICAgICBfbW01MTJfc2V0emVyb19zaTUxMiAoKSwKLSAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UpOwotfQotCi1zdGF0aWMgIF9faW5saW5lX18gX19tNTEyZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9tYXhfcGQoX19tNTEyZCBfX0EsIF9fbTUxMmQgX19CKQotewotICByZXR1cm4gKF9fbTUxMmQpIF9fYnVpbHRpbl9pYTMyX21heHBkNTEyX21hc2sgKChfX3Y4ZGYpIF9fQSwKLSAgICAgICAgICAgICAoX192OGRmKSBfX0IsCi0gICAgICAgICAgICAgKF9fdjhkZikKLSAgICAgICAgICAgICBfbW01MTJfc2V0emVyb19wZCAoKSwKLSAgICAgICAgICAgICAoX19tbWFzazgpIC0xLAotICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Ci19Ci0KLXN0YXRpYyAgX19pbmxpbmVfXyBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfbWF4X3BzKF9fbTUxMiBfX0EsIF9fbTUxMiBfX0IpCi17Ci0gIHJldHVybiAoX19tNTEyKSBfX2J1aWx0aW5faWEzMl9tYXhwczUxMl9tYXNrICgoX192MTZzZikgX19BLAotICAgICAgICAgICAgKF9fdjE2c2YpIF9fQiwKLSAgICAgICAgICAgIChfX3YxNnNmKQotICAgICAgICAgICAgX21tNTEyX3NldHplcm9fcHMgKCksCi0gICAgICAgICAgICAoX19tbWFzazE2KSAtMSwKLSAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tYXNrX21heF9zcyhfX20xMjggX19XLCBfX21tYXNrOCBfX1UsX19tMTI4IF9fQSwgX19tMTI4IF9fQikgewotICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfbWF4c3Nfcm91bmQgKChfX3Y0c2YpIF9fQSwKLSAgICAgICAgICAgICAgICAoX192NHNmKSBfX0IsCi0gICAgICAgICAgICAgICAgKF9fdjRzZikgX19XLAotICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VLAotICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tYXNrel9tYXhfc3MoX19tbWFzazggX19VLF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IpIHsKLSAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX21heHNzX3JvdW5kICgoX192NHNmKSBfX0EsCi0gICAgICAgICAgICAgICAgKF9fdjRzZikgX19CLAotICAgICAgICAgICAgICAgIChfX3Y0c2YpICBfbW1fc2V0emVyb19wcyAoKSwKLSAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSwKLSAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOwotfQotCi0jZGVmaW5lIF9tbV9tYXhfcm91bmRfc3MoX19BLCBfX0IsIF9fUikgX19leHRlbnNpb25fXyAoeyBcCi0gIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX21heHNzX3JvdW5kICgoX192NHNmKSBfX0EsIChfX3Y0c2YpIF9fQiwgXAotICAgICAgICAgICAgICAgIChfX3Y0c2YpIF9tbV9zZXR6ZXJvX3BzKCksIChfX21tYXNrOCkgLTEsIF9fUik7IH0pCi0KLSNkZWZpbmUgX21tX21hc2tfbWF4X3JvdW5kX3NzKF9fVywgX19VLCBfX0EsIF9fQiwgX19SKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgKF9fbTEyOCkgX19idWlsdGluX2lhMzJfbWF4c3Nfcm91bmQgKChfX3Y0c2YpIF9fQSwgKF9fdjRzZikgX19CLCBcCi0gICAgICAgICAgICAgICAgKF9fdjRzZikgIF9fVywgKF9fbW1hc2s4KSBfX1UsX19SKTsgfSkKLQotI2RlZmluZSBfbW1fbWFza3pfbWF4X3JvdW5kX3NzKF9fVSwgX19BLCBfX0IsIF9fUikgX19leHRlbnNpb25fXyAoeyBcCi0gIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX21heHNzX3JvdW5kICgoX192NHNmKSBfX0EsIChfX3Y0c2YpIF9fQiwgXAotICAgICAgICAgICAgICAgIChfX3Y0c2YpICBfbW1fc2V0emVyb19wcygpLCAoX19tbWFzazgpIF9fVSxfX1IpOyB9KQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2tfbWF4X3NkKF9fbTEyOGQgX19XLCBfX21tYXNrOCBfX1UsX19tMTI4ZCBfX0EsIF9fbTEyOGQgX19CKSB7Ci0gIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfbWF4c2Rfcm91bmQgKChfX3YyZGYpIF9fQSwKLSAgICAgICAgICAgICAgICAoX192MmRmKSBfX0IsCi0gICAgICAgICAgICAgICAgKF9fdjJkZikgX19XLAotICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VLAotICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWFza3pfbWF4X3NkKF9fbW1hc2s4IF9fVSxfX20xMjhkIF9fQSwgX19tMTI4ZCBfX0IpIHsKLSAgcmV0dXJuIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl9tYXhzZF9yb3VuZCAoKF9fdjJkZikgX19BLAotICAgICAgICAgICAgICAgIChfX3YyZGYpIF9fQiwKLSAgICAgICAgICAgICAgICAoX192MmRmKSAgX21tX3NldHplcm9fcGQgKCksCi0gICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCi0gICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKLX0KLQotI2RlZmluZSBfbW1fbWF4X3JvdW5kX3NkKF9fQSwgX19CLCBfX1IpIF9fZXh0ZW5zaW9uX18gKHsgXAotICAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfbWF4c2Rfcm91bmQgKChfX3YyZGYpIF9fQSwgKF9fdjJkZikgX19CLCBcCi0gICAgICAgICAgICAgICAgKF9fdjJkZikgX21tX3NldHplcm9fcGQoKSwgKF9fbW1hc2s4KSAtMSwgX19SKTsgfSkKLQotI2RlZmluZSBfbW1fbWFza19tYXhfcm91bmRfc2QoX19XLCBfX1UsIF9fQSwgX19CLCBfX1IpIF9fZXh0ZW5zaW9uX18gKHsgXAotICAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfbWF4c2Rfcm91bmQgKChfX3YyZGYpIF9fQSwgKF9fdjJkZikgX19CLCBcCi0gICAgICAgICAgICAgICAgKF9fdjJkZikgIF9fVywgKF9fbW1hc2s4KSBfX1UsX19SKTsgfSkKLQotI2RlZmluZSBfbW1fbWFza3pfbWF4X3JvdW5kX3NkKF9fVSwgX19BLCBfX0IsIF9fUikgX19leHRlbnNpb25fXyAoeyBcCi0gIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl9tYXhzZF9yb3VuZCAoKF9fdjJkZikgX19BLCAoX192MmRmKSBfX0IsIFwKLSAgICAgICAgICAgICAgICAoX192MmRmKSAgX21tX3NldHplcm9fcGQoKSwgKF9fbW1hc2s4KSBfX1UsX19SKTsgfSkKLQotc3RhdGljIF9faW5saW5lIF9fbTUxMmkKLV9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX21heF9lcGkzMihfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCi17Ci0gIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcG1heHNkNTEyX21hc2sgKChfX3YxNnNpKSBfX0EsCi0gICAgICAgICAgICAgIChfX3YxNnNpKSBfX0IsCi0gICAgICAgICAgICAgIChfX3YxNnNpKQotICAgICAgICAgICAgICBfbW01MTJfc2V0emVyb19zaTUxMiAoKSwKLSAgICAgICAgICAgICAgKF9fbW1hc2sxNikgLTEpOwotfQotCi1zdGF0aWMgX19pbmxpbmUgX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9tYXhfZXB1MzIoX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQotewotICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BtYXh1ZDUxMl9tYXNrICgoX192MTZzaSkgX19BLAotICAgICAgICAgICAgICAoX192MTZzaSkgX19CLAotICAgICAgICAgICAgICAoX192MTZzaSkKLSAgICAgICAgICAgICAgX21tNTEyX3NldHplcm9fc2k1MTIgKCksCi0gICAgICAgICAgICAgIChfX21tYXNrMTYpIC0xKTsKLX0KLQotc3RhdGljIF9faW5saW5lIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfbWF4X2VwaTY0KF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKLXsKLSAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wbWF4c3E1MTJfbWFzayAoKF9fdjhkaSkgX19BLAotICAgICAgICAgICAgICAoX192OGRpKSBfX0IsCi0gICAgICAgICAgICAgIChfX3Y4ZGkpCi0gICAgICAgICAgICAgIF9tbTUxMl9zZXR6ZXJvX3NpNTEyICgpLAotICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKLX0KLQotc3RhdGljIF9faW5saW5lIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfbWF4X2VwdTY0KF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKLXsKLSAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wbWF4dXE1MTJfbWFzayAoKF9fdjhkaSkgX19BLAotICAgICAgICAgICAgICAoX192OGRpKSBfX0IsCi0gICAgICAgICAgICAgIChfX3Y4ZGkpCi0gICAgICAgICAgICAgIF9tbTUxMl9zZXR6ZXJvX3NpNTEyICgpLAotICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKLX0KLQotc3RhdGljICBfX2lubGluZV9fIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfbWluX3BkKF9fbTUxMmQgX19BLCBfX201MTJkIF9fQikKLXsKLSAgcmV0dXJuIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl9taW5wZDUxMl9tYXNrICgoX192OGRmKSBfX0EsCi0gICAgICAgICAgICAgKF9fdjhkZikgX19CLAotICAgICAgICAgICAgIChfX3Y4ZGYpCi0gICAgICAgICAgICAgX21tNTEyX3NldHplcm9fcGQgKCksCi0gICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSwKLSAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOwotfQotCi1zdGF0aWMgIF9faW5saW5lX18gX19tNTEyIF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX21pbl9wcyhfX201MTIgX19BLCBfX201MTIgX19CKQotewotICByZXR1cm4gKF9fbTUxMikgX19idWlsdGluX2lhMzJfbWlucHM1MTJfbWFzayAoKF9fdjE2c2YpIF9fQSwKLSAgICAgICAgICAgIChfX3YxNnNmKSBfX0IsCi0gICAgICAgICAgICAoX192MTZzZikKLSAgICAgICAgICAgIF9tbTUxMl9zZXR6ZXJvX3BzICgpLAotICAgICAgICAgICAgKF9fbW1hc2sxNikgLTEsCi0gICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWFza19taW5fc3MoX19tMTI4IF9fVywgX19tbWFzazggX19VLF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IpIHsKLSAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX21pbnNzX3JvdW5kICgoX192NHNmKSBfX0EsCi0gICAgICAgICAgICAgICAgKF9fdjRzZikgX19CLAotICAgICAgICAgICAgICAgIChfX3Y0c2YpIF9fVywKLSAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSwKLSAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWFza3pfbWluX3NzKF9fbW1hc2s4IF9fVSxfX20xMjggX19BLCBfX20xMjggX19CKSB7Ci0gIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl9taW5zc19yb3VuZCAoKF9fdjRzZikgX19BLAotICAgICAgICAgICAgICAgIChfX3Y0c2YpIF9fQiwKLSAgICAgICAgICAgICAgICAoX192NHNmKSAgX21tX3NldHplcm9fcHMgKCksCi0gICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCi0gICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKLX0KLQotI2RlZmluZSBfbW1fbWluX3JvdW5kX3NzKF9fQSwgX19CLCBfX1IpIF9fZXh0ZW5zaW9uX18gKHsgXAotICAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl9taW5zc19yb3VuZCAoKF9fdjRzZikgX19BLCAoX192NHNmKSBfX0IsIFwKLSAgICAgICAgICAgICAgICAoX192NHNmKSBfbW1fc2V0emVyb19wcygpLCAoX19tbWFzazgpIC0xLCBfX1IpOyB9KQotCi0jZGVmaW5lIF9tbV9tYXNrX21pbl9yb3VuZF9zcyhfX1csIF9fVSwgX19BLCBfX0IsIF9fUikgX19leHRlbnNpb25fXyAoeyBcCi0gIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX21pbnNzX3JvdW5kICgoX192NHNmKSBfX0EsIChfX3Y0c2YpIF9fQiwgXAotICAgICAgICAgICAgICAgIChfX3Y0c2YpICBfX1csIChfX21tYXNrOCkgX19VLF9fUik7IH0pCi0KLSNkZWZpbmUgX21tX21hc2t6X21pbl9yb3VuZF9zcyhfX1UsIF9fQSwgX19CLCBfX1IpIF9fZXh0ZW5zaW9uX18gKHsgXAotICAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl9taW5zc19yb3VuZCAoKF9fdjRzZikgX19BLCAoX192NHNmKSBfX0IsIFwKLSAgICAgICAgICAgICAgICAoX192NHNmKSAgX21tX3NldHplcm9fcHMoKSwgKF9fbW1hc2s4KSBfX1UsX19SKTsgfSkKLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tYXNrX21pbl9zZChfX20xMjhkIF9fVywgX19tbWFzazggX19VLF9fbTEyOGQgX19BLCBfX20xMjhkIF9fQikgewotICByZXR1cm4gKF9fbTEyOGQpIF9fYnVpbHRpbl9pYTMyX21pbnNkX3JvdW5kICgoX192MmRmKSBfX0EsCi0gICAgICAgICAgICAgICAgKF9fdjJkZikgX19CLAotICAgICAgICAgICAgICAgIChfX3YyZGYpIF9fVywKLSAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSwKLSAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2t6X21pbl9zZChfX21tYXNrOCBfX1UsX19tMTI4ZCBfX0EsIF9fbTEyOGQgX19CKSB7Ci0gIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfbWluc2Rfcm91bmQgKChfX3YyZGYpIF9fQSwKLSAgICAgICAgICAgICAgICAoX192MmRmKSBfX0IsCi0gICAgICAgICAgICAgICAgKF9fdjJkZikgIF9tbV9zZXR6ZXJvX3BkICgpLAotICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VLAotICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Ci19Ci0KLSNkZWZpbmUgX21tX21pbl9yb3VuZF9zZChfX0EsIF9fQiwgX19SKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgKF9fbTEyOGQpIF9fYnVpbHRpbl9pYTMyX21pbnNkX3JvdW5kICgoX192MmRmKSBfX0EsIChfX3YyZGYpIF9fQiwgXAotICAgICAgICAgICAgICAgIChfX3YyZGYpIF9tbV9zZXR6ZXJvX3BkKCksIChfX21tYXNrOCkgLTEsIF9fUik7IH0pCi0KLSNkZWZpbmUgX21tX21hc2tfbWluX3JvdW5kX3NkKF9fVywgX19VLCBfX0EsIF9fQiwgX19SKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgKF9fbTEyOGQpIF9fYnVpbHRpbl9pYTMyX21pbnNkX3JvdW5kICgoX192MmRmKSBfX0EsIChfX3YyZGYpIF9fQiwgXAotICAgICAgICAgICAgICAgIChfX3YyZGYpICBfX1csIChfX21tYXNrOCkgX19VLF9fUik7IH0pCi0KLSNkZWZpbmUgX21tX21hc2t6X21pbl9yb3VuZF9zZChfX1UsIF9fQSwgX19CLCBfX1IpIF9fZXh0ZW5zaW9uX18gKHsgXAotICAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfbWluc2Rfcm91bmQgKChfX3YyZGYpIF9fQSwgKF9fdjJkZikgX19CLCBcCi0gICAgICAgICAgICAgICAgKF9fdjJkZikgIF9tbV9zZXR6ZXJvX3BkKCksIChfX21tYXNrOCkgX19VLF9fUik7IH0pCi0KLXN0YXRpYyBfX2lubGluZSBfX201MTJpCi1fX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9taW5fZXBpMzIoX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQotewotICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BtaW5zZDUxMl9tYXNrICgoX192MTZzaSkgX19BLAotICAgICAgICAgICAgICAoX192MTZzaSkgX19CLAotICAgICAgICAgICAgICAoX192MTZzaSkKLSAgICAgICAgICAgICAgX21tNTEyX3NldHplcm9fc2k1MTIgKCksCi0gICAgICAgICAgICAgIChfX21tYXNrMTYpIC0xKTsKLX0KLQotc3RhdGljIF9faW5saW5lIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfbWluX2VwdTMyKF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKLXsKLSAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wbWludWQ1MTJfbWFzayAoKF9fdjE2c2kpIF9fQSwKLSAgICAgICAgICAgICAgKF9fdjE2c2kpIF9fQiwKLSAgICAgICAgICAgICAgKF9fdjE2c2kpCi0gICAgICAgICAgICAgIF9tbTUxMl9zZXR6ZXJvX3NpNTEyICgpLAotICAgICAgICAgICAgICAoX19tbWFzazE2KSAtMSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZSBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX21pbl9lcGk2NChfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCi17Ci0gIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcG1pbnNxNTEyX21hc2sgKChfX3Y4ZGkpIF9fQSwKLSAgICAgICAgICAgICAgKF9fdjhkaSkgX19CLAotICAgICAgICAgICAgICAoX192OGRpKQotICAgICAgICAgICAgICBfbW01MTJfc2V0emVyb19zaTUxMiAoKSwKLSAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZSBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX21pbl9lcHU2NChfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCi17Ci0gIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcG1pbnVxNTEyX21hc2sgKChfX3Y4ZGkpIF9fQSwKLSAgICAgICAgICAgICAgKF9fdjhkaSkgX19CLAotICAgICAgICAgICAgICAoX192OGRpKQotICAgICAgICAgICAgICBfbW01MTJfc2V0emVyb19zaTUxMiAoKSwKLSAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZSBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX211bF9lcGkzMihfX201MTJpIF9fWCwgX19tNTEyaSBfX1kpCi17Ci0gIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcG11bGRxNTEyX21hc2sgKChfX3YxNnNpKSBfX1gsCi0gICAgICAgICAgICAgIChfX3YxNnNpKSBfX1ksCi0gICAgICAgICAgICAgIChfX3Y4ZGkpCi0gICAgICAgICAgICAgIF9tbTUxMl9zZXR6ZXJvX3NpNTEyICgpLAotICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKLX0KLQotc3RhdGljIF9faW5saW5lIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfbWFza19tdWxfZXBpMzIgKF9fbTUxMmkgX19XLCBfX21tYXNrOCBfX00sIF9fbTUxMmkgX19YLCBfX201MTJpIF9fWSkKLXsKLSAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wbXVsZHE1MTJfbWFzayAoKF9fdjE2c2kpIF9fWCwKLSAgICAgICAgICAgICAgKF9fdjE2c2kpIF9fWSwKLSAgICAgICAgICAgICAgKF9fdjhkaSkgX19XLCBfX00pOwotfQotCi1zdGF0aWMgX19pbmxpbmUgX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9tYXNrel9tdWxfZXBpMzIgKF9fbW1hc2s4IF9fTSwgX19tNTEyaSBfX1gsIF9fbTUxMmkgX19ZKQotewotICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BtdWxkcTUxMl9tYXNrICgoX192MTZzaSkgX19YLAotICAgICAgICAgICAgICAoX192MTZzaSkgX19ZLAotICAgICAgICAgICAgICAoX192OGRpKQotICAgICAgICAgICAgICBfbW01MTJfc2V0emVyb19zaTUxMiAoKSwKLSAgICAgICAgICAgICAgX19NKTsKLX0KLQotc3RhdGljIF9faW5saW5lIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfbXVsX2VwdTMyKF9fbTUxMmkgX19YLCBfX201MTJpIF9fWSkKLXsKLSAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wbXVsdWRxNTEyX21hc2sgKChfX3YxNnNpKSBfX1gsCi0gICAgICAgICAgICAgICAoX192MTZzaSkgX19ZLAotICAgICAgICAgICAgICAgKF9fdjhkaSkKLSAgICAgICAgICAgICAgIF9tbTUxMl9zZXR6ZXJvX3NpNTEyICgpLAotICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZSBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX21hc2tfbXVsX2VwdTMyIChfX201MTJpIF9fVywgX19tbWFzazggX19NLCBfX201MTJpIF9fWCwgX19tNTEyaSBfX1kpCi17Ci0gIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcG11bHVkcTUxMl9tYXNrICgoX192MTZzaSkgX19YLAotICAgICAgICAgICAgICAgKF9fdjE2c2kpIF9fWSwKLSAgICAgICAgICAgICAgIChfX3Y4ZGkpIF9fVywgX19NKTsKLX0KLQotc3RhdGljIF9faW5saW5lIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfbWFza3pfbXVsX2VwdTMyIChfX21tYXNrOCBfX00sIF9fbTUxMmkgX19YLCBfX201MTJpIF9fWSkKLXsKLSAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wbXVsdWRxNTEyX21hc2sgKChfX3YxNnNpKSBfX1gsCi0gICAgICAgICAgICAgICAoX192MTZzaSkgX19ZLAotICAgICAgICAgICAgICAgKF9fdjhkaSkKLSAgICAgICAgICAgICAgIF9tbTUxMl9zZXR6ZXJvX3NpNTEyICgpLAotICAgICAgICAgICAgICAgX19NKTsKLX0KLQotc3RhdGljIF9faW5saW5lIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfbXVsbG9fZXBpMzIgKF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKLXsKLSAgcmV0dXJuIChfX201MTJpKSAoKF9fdjE2c2kpIF9fQSAqIChfX3YxNnNpKSBfX0IpOwotfQotCi1zdGF0aWMgX19pbmxpbmUgX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9tYXNrel9tdWxsb19lcGkzMiAoX19tbWFzazE2IF9fTSwgX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQotewotICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BtdWxsZDUxMl9tYXNrICgoX192MTZzaSkgX19BLAotICAgICAgICAgICAgICAoX192MTZzaSkgX19CLAotICAgICAgICAgICAgICAoX192MTZzaSkKLSAgICAgICAgICAgICAgX21tNTEyX3NldHplcm9fc2k1MTIgKCksCi0gICAgICAgICAgICAgIF9fTSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZSBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX21hc2tfbXVsbG9fZXBpMzIgKF9fbTUxMmkgX19XLCBfX21tYXNrMTYgX19NLCBfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCi17Ci0gIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcG11bGxkNTEyX21hc2sgKChfX3YxNnNpKSBfX0EsCi0gICAgICAgICAgICAgIChfX3YxNnNpKSBfX0IsCi0gICAgICAgICAgICAgIChfX3YxNnNpKSBfX1csIF9fTSk7Ci19Ci0KLXN0YXRpYyAgX19pbmxpbmVfXyBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX3NxcnRfcGQoX19tNTEyZCBfX2EpCi17Ci0gIHJldHVybiAoX19tNTEyZClfX2J1aWx0aW5faWEzMl9zcXJ0cGQ1MTJfbWFzaygoX192OGRmKV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpIF9tbTUxMl9zZXR6ZXJvX3BkICgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Ci19Ci0KLXN0YXRpYyAgX19pbmxpbmVfXyBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfc3FydF9wcyhfX201MTIgX19hKQotewotICByZXR1cm4gKF9fbTUxMilfX2J1aWx0aW5faWEzMl9zcXJ0cHM1MTJfbWFzaygoX192MTZzZilfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKSBfbW01MTJfc2V0emVyb19wcyAoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgLTEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Ci19Ci0KLXN0YXRpYyAgX19pbmxpbmVfXyBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX3JzcXJ0MTRfcGQoX19tNTEyZCBfX0EpCi17Ci0gIHJldHVybiAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfcnNxcnQxNHBkNTEyX21hc2sgKChfX3Y4ZGYpIF9fQSwKLSAgICAgICAgICAgICAgICAgKF9fdjhkZikKLSAgICAgICAgICAgICAgICAgX21tNTEyX3NldHplcm9fcGQgKCksCi0gICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpO30KLQotc3RhdGljICBfX2lubGluZV9fIF9fbTUxMiBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9yc3FydDE0X3BzKF9fbTUxMiBfX0EpCi17Ci0gIHJldHVybiAoX19tNTEyKSBfX2J1aWx0aW5faWEzMl9yc3FydDE0cHM1MTJfbWFzayAoKF9fdjE2c2YpIF9fQSwKLSAgICAgICAgICAgICAgICAoX192MTZzZikKLSAgICAgICAgICAgICAgICBfbW01MTJfc2V0emVyb19wcyAoKSwKLSAgICAgICAgICAgICAgICAoX19tbWFzazE2KSAtMSk7Ci19Ci0KLXN0YXRpYyAgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fcnNxcnQxNF9zcyhfX20xMjggX19BLCBfX20xMjggX19CKQotewotICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfcnNxcnQxNHNzICgoX192NHNmKSBfX0EsCi0gICAgICAgICAgICAgKF9fdjRzZikgX19CLAotICAgICAgICAgICAgIChfX3Y0c2YpCi0gICAgICAgICAgICAgX21tX3NldHplcm9fcHMgKCksCi0gICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Ci19Ci0KLXN0YXRpYyAgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX3JzcXJ0MTRfc2QoX19tMTI4ZCBfX0EsIF9fbTEyOGQgX19CKQotewotICByZXR1cm4gKF9fbTEyOGQpIF9fYnVpbHRpbl9pYTMyX3JzcXJ0MTRzZCAoKF9fdjJkZikgX19BLAotICAgICAgICAgICAgICAoX192MmRmKSBfX0IsCi0gICAgICAgICAgICAgIChfX3YyZGYpCi0gICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3BkICgpLAotICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKLX0KLQotc3RhdGljICBfX2lubGluZV9fIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfcmNwMTRfcGQoX19tNTEyZCBfX0EpCi17Ci0gIHJldHVybiAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfcmNwMTRwZDUxMl9tYXNrICgoX192OGRmKSBfX0EsCi0gICAgICAgICAgICAgICAoX192OGRmKQotICAgICAgICAgICAgICAgX21tNTEyX3NldHplcm9fcGQgKCksCi0gICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKLX0KLQotc3RhdGljICBfX2lubGluZV9fIF9fbTUxMiBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9yY3AxNF9wcyhfX201MTIgX19BKQotewotICByZXR1cm4gKF9fbTUxMikgX19idWlsdGluX2lhMzJfcmNwMTRwczUxMl9tYXNrICgoX192MTZzZikgX19BLAotICAgICAgICAgICAgICAoX192MTZzZikKLSAgICAgICAgICAgICAgX21tNTEyX3NldHplcm9fcHMgKCksCi0gICAgICAgICAgICAgIChfX21tYXNrMTYpIC0xKTsKLX0KLXN0YXRpYyAgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fcmNwMTRfc3MoX19tMTI4IF9fQSwgX19tMTI4IF9fQikKLXsKLSAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX3JjcDE0c3MgKChfX3Y0c2YpIF9fQSwKLSAgICAgICAgICAgICAgICAgKF9fdjRzZikgX19CLAotICAgICAgICAgICAgICAgICAoX192NHNmKQotICAgICAgICAgICAgICAgICBfbW1fc2V0emVyb19wcyAoKSwKLSAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Ci19Ci0KLXN0YXRpYyAgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX3JjcDE0X3NkKF9fbTEyOGQgX19BLCBfX20xMjhkIF9fQikKLXsKLSAgcmV0dXJuIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl9yY3AxNHNkICgoX192MmRmKSBfX0EsCi0gICAgICAgICAgICAoX192MmRmKSBfX0IsCi0gICAgICAgICAgICAoX192MmRmKQotICAgICAgICAgICAgX21tX3NldHplcm9fcGQgKCksCi0gICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKLX0KLQotc3RhdGljIF9faW5saW5lIF9fbTUxMiBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9mbG9vcl9wcyhfX201MTIgX19BKQotewotICByZXR1cm4gKF9fbTUxMikgX19idWlsdGluX2lhMzJfcm5kc2NhbGVwc19tYXNrICgoX192MTZzZikgX19BLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0ZMT09SLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikgX19BLCAtMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKLX0KLQotc3RhdGljIF9faW5saW5lIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfZmxvb3JfcGQoX19tNTEyZCBfX0EpCi17Ci0gIHJldHVybiAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfcm5kc2NhbGVwZF9tYXNrICgoX192OGRmKSBfX0EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0ZMT09SLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikgX19BLCAtMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZSBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfY2VpbF9wcyhfX201MTIgX19BKQotewotICByZXR1cm4gKF9fbTUxMikgX19idWlsdGluX2lhMzJfcm5kc2NhbGVwc19tYXNrICgoX192MTZzZikgX19BLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NFSUwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKSBfX0EsIC0xLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOwotfQotCi1zdGF0aWMgX19pbmxpbmUgX19tNTEyZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9jZWlsX3BkKF9fbTUxMmQgX19BKQotewotICByZXR1cm4gKF9fbTUxMmQpIF9fYnVpbHRpbl9pYTMyX3JuZHNjYWxlcGRfbWFzayAoKF9fdjhkZikgX19BLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DRUlMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikgX19BLCAtMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZSBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX2Fic19lcGk2NChfX201MTJpIF9fQSkKLXsKLSAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wYWJzcTUxMl9tYXNrICgoX192OGRpKSBfX0EsCi0gICAgICAgICAgICAgKF9fdjhkaSkKLSAgICAgICAgICAgICBfbW01MTJfc2V0emVyb19zaTUxMiAoKSwKLSAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKLX0KLQotc3RhdGljIF9faW5saW5lIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfYWJzX2VwaTMyKF9fbTUxMmkgX19BKQotewotICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BhYnNkNTEyX21hc2sgKChfX3YxNnNpKSBfX0EsCi0gICAgICAgICAgICAgKF9fdjE2c2kpCi0gICAgICAgICAgICAgX21tNTEyX3NldHplcm9fc2k1MTIgKCksCi0gICAgICAgICAgICAgKF9fbW1hc2sxNikgLTEpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWFza19hZGRfc3MoX19tMTI4IF9fVywgX19tbWFzazggX19VLF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IpIHsKLSAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX2FkZHNzX3JvdW5kICgoX192NHNmKSBfX0EsCi0gICAgICAgICAgICAgICAgKF9fdjRzZikgX19CLAotICAgICAgICAgICAgICAgIChfX3Y0c2YpIF9fVywKLSAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSwKLSAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWFza3pfYWRkX3NzKF9fbW1hc2s4IF9fVSxfX20xMjggX19BLCBfX20xMjggX19CKSB7Ci0gIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl9hZGRzc19yb3VuZCAoKF9fdjRzZikgX19BLAotICAgICAgICAgICAgICAgIChfX3Y0c2YpIF9fQiwKLSAgICAgICAgICAgICAgICAoX192NHNmKSAgX21tX3NldHplcm9fcHMgKCksCi0gICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCi0gICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKLX0KLQotI2RlZmluZSBfbW1fYWRkX3JvdW5kX3NzKF9fQSwgX19CLCBfX1IpIF9fZXh0ZW5zaW9uX18gKHsgXAotICAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl9hZGRzc19yb3VuZCAoKF9fdjRzZikgX19BLCAoX192NHNmKSBfX0IsIFwKLSAgICAgICAgICAgICAgICAoX192NHNmKSBfbW1fc2V0emVyb19wcygpLCAoX19tbWFzazgpIC0xLCBfX1IpOyB9KQotCi0jZGVmaW5lIF9tbV9tYXNrX2FkZF9yb3VuZF9zcyhfX1csIF9fVSwgX19BLCBfX0IsIF9fUikgX19leHRlbnNpb25fXyAoeyBcCi0gIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX2FkZHNzX3JvdW5kICgoX192NHNmKSBfX0EsIChfX3Y0c2YpIF9fQiwgXAotICAgICAgICAgICAgICAgIChfX3Y0c2YpICBfX1csIChfX21tYXNrOCkgX19VLF9fUik7IH0pCi0KLSNkZWZpbmUgX21tX21hc2t6X2FkZF9yb3VuZF9zcyhfX1UsIF9fQSwgX19CLCBfX1IpIF9fZXh0ZW5zaW9uX18gKHsgXAotICAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl9hZGRzc19yb3VuZCAoKF9fdjRzZikgX19BLCAoX192NHNmKSBfX0IsIFwKLSAgICAgICAgICAgICAgICAoX192NHNmKSAgX21tX3NldHplcm9fcHMoKSwgKF9fbW1hc2s4KSBfX1UsX19SKTsgfSkKLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tYXNrX2FkZF9zZChfX20xMjhkIF9fVywgX19tbWFzazggX19VLF9fbTEyOGQgX19BLCBfX20xMjhkIF9fQikgewotICByZXR1cm4gKF9fbTEyOGQpIF9fYnVpbHRpbl9pYTMyX2FkZHNkX3JvdW5kICgoX192MmRmKSBfX0EsCi0gICAgICAgICAgICAgICAgKF9fdjJkZikgX19CLAotICAgICAgICAgICAgICAgIChfX3YyZGYpIF9fVywKLSAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSwKLSAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2t6X2FkZF9zZChfX21tYXNrOCBfX1UsX19tMTI4ZCBfX0EsIF9fbTEyOGQgX19CKSB7Ci0gIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfYWRkc2Rfcm91bmQgKChfX3YyZGYpIF9fQSwKLSAgICAgICAgICAgICAgICAoX192MmRmKSBfX0IsCi0gICAgICAgICAgICAgICAgKF9fdjJkZikgIF9tbV9zZXR6ZXJvX3BkICgpLAotICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VLAotICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Ci19Ci0jZGVmaW5lIF9tbV9hZGRfcm91bmRfc2QoX19BLCBfX0IsIF9fUikgX19leHRlbnNpb25fXyAoeyBcCi0gIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl9hZGRzZF9yb3VuZCAoKF9fdjJkZikgX19BLCAoX192MmRmKSBfX0IsIFwKLSAgICAgICAgICAgICAgICAoX192MmRmKSBfbW1fc2V0emVyb19wZCgpLCAoX19tbWFzazgpIC0xLCBfX1IpOyB9KQotCi0jZGVmaW5lIF9tbV9tYXNrX2FkZF9yb3VuZF9zZChfX1csIF9fVSwgX19BLCBfX0IsIF9fUikgX19leHRlbnNpb25fXyAoeyBcCi0gIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl9hZGRzZF9yb3VuZCAoKF9fdjJkZikgX19BLCAoX192MmRmKSBfX0IsIFwKLSAgICAgICAgICAgICAgICAoX192MmRmKSAgX19XLCAoX19tbWFzazgpIF9fVSxfX1IpOyB9KQotCi0jZGVmaW5lIF9tbV9tYXNrel9hZGRfcm91bmRfc2QoX19VLCBfX0EsIF9fQiwgX19SKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgKF9fbTEyOGQpIF9fYnVpbHRpbl9pYTMyX2FkZHNkX3JvdW5kICgoX192MmRmKSBfX0EsIChfX3YyZGYpIF9fQiwgXAotICAgICAgICAgICAgICAgIChfX3YyZGYpICBfbW1fc2V0emVyb19wZCgpLCAoX19tbWFzazgpIF9fVSxfX1IpOyB9KQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX21hc2tfYWRkX3BkKF9fbTUxMmQgX19XLCBfX21tYXNrOCBfX1UsIF9fbTUxMmQgX19BLCBfX201MTJkIF9fQikgewotICByZXR1cm4gKF9fbTUxMmQpIF9fYnVpbHRpbl9pYTMyX2FkZHBkNTEyX21hc2sgKChfX3Y4ZGYpIF9fQSwKLSAgICAgICAgICAgICAoX192OGRmKSBfX0IsCi0gICAgICAgICAgICAgKF9fdjhkZikgX19XLAotICAgICAgICAgICAgIChfX21tYXNrOCkgX19VLAotICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfbWFza3pfYWRkX3BkKF9fbW1hc2s4IF9fVSwgX19tNTEyZCBfX0EsIF9fbTUxMmQgX19CKSB7Ci0gIHJldHVybiAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfYWRkcGQ1MTJfbWFzayAoKF9fdjhkZikgX19BLAotICAgICAgICAgICAgIChfX3Y4ZGYpIF9fQiwKLSAgICAgICAgICAgICAoX192OGRmKSBfbW01MTJfc2V0emVyb19wZCAoKSwKLSAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSwKLSAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfbWFza19hZGRfcHMoX19tNTEyIF9fVywgX19tbWFzazE2IF9fVSwgX19tNTEyIF9fQSwgX19tNTEyIF9fQikgewotICByZXR1cm4gKF9fbTUxMikgX19idWlsdGluX2lhMzJfYWRkcHM1MTJfbWFzayAoKF9fdjE2c2YpIF9fQSwKLSAgICAgICAgICAgIChfX3YxNnNmKSBfX0IsCi0gICAgICAgICAgICAoX192MTZzZikgX19XLAotICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VLAotICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tNTEyIF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX21hc2t6X2FkZF9wcyhfX21tYXNrMTYgX19VLCBfX201MTIgX19BLCBfX201MTIgX19CKSB7Ci0gIHJldHVybiAoX19tNTEyKSBfX2J1aWx0aW5faWEzMl9hZGRwczUxMl9tYXNrICgoX192MTZzZikgX19BLAotICAgICAgICAgICAgKF9fdjE2c2YpIF9fQiwKLSAgICAgICAgICAgIChfX3YxNnNmKSBfbW01MTJfc2V0emVyb19wcyAoKSwKLSAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSwKLSAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Ci19Ci0KLSNkZWZpbmUgX21tNTEyX2FkZF9yb3VuZF9wZChfX0EsIF9fQiwgX19SKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgKF9fbTUxMmQpIF9fYnVpbHRpbl9pYTMyX2FkZHBkNTEyX21hc2sgKChfX3Y4ZGYpIF9fQSwgKF9fdjhkZikgX19CLCBcCi0gICAgICAgICAgICAgICAoX192OGRmKSBfbW01MTJfc2V0emVyb19wZCgpLCAoX19tbWFzazgpIC0xLCBfX1IpOyB9KQotCi0jZGVmaW5lIF9tbTUxMl9tYXNrX2FkZF9yb3VuZF9wZChfX1csIF9fVSwgX19BLCBfX0IsIF9fUikgX19leHRlbnNpb25fXyAoeyBcCi0gIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl9hZGRwZDUxMl9tYXNrKChfX3Y4ZGYpIF9fQSwgKF9fdjhkZikgX19CLCBcCi0gICAgICAgICAgICAgICAgKF9fdjhkZikgX19XLCAoX19tbWFzazgpIF9fVSwgX19SKTsgfSkKLQotI2RlZmluZSBfbW01MTJfbWFza3pfYWRkX3JvdW5kX3BkKF9fVSwgX19BLCBfX0IsIF9fUikgX19leHRlbnNpb25fXyAoeyBcCi0gIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl9hZGRwZDUxMl9tYXNrICgoX192OGRmKSBfX0EsIChfX3Y4ZGYpIF9fQiwgXAotICAgICAgICAgICAgICAgIChfX3Y4ZGYpIF9tbTUxMl9zZXR6ZXJvX3BkKCksIChfX21tYXNrOCkgX19VLCBfX1IpOyB9KQotCi0jZGVmaW5lIF9tbTUxMl9hZGRfcm91bmRfcHMoX19BLCBfX0IsIF9fUikgX19leHRlbnNpb25fXyAoeyBcCi0gIChfX201MTIpIF9fYnVpbHRpbl9pYTMyX2FkZHBzNTEyX21hc2sgKChfX3YxNnNmKSBfX0EsIChfX3YxNnNmKSBfX0IsIFwKLSAgICAgICAgICAgICAgICAoX192MTZzZikgX21tNTEyX3NldHplcm9fcHMoKSwgKF9fbW1hc2sxNikgLTEsIF9fUik7IH0pCi0KLSNkZWZpbmUgX21tNTEyX21hc2tfYWRkX3JvdW5kX3BzKF9fVywgX19VLCBfX0EsIF9fQiwgX19SKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgKF9fbTUxMikgX19idWlsdGluX2lhMzJfYWRkcHM1MTJfbWFzayAoKF9fdjE2c2YpIF9fQSwgKF9fdjE2c2YpIF9fQiwgXAotICAgICAgICAgICAgICAgIChfX3YxNnNmKSBfX1csIChfX21tYXNrMTYpX19VLCBfX1IpOyB9KQotCi0jZGVmaW5lIF9tbTUxMl9tYXNrel9hZGRfcm91bmRfcHMoX19VLCBfX0EsIF9fQiwgX19SKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgKF9fbTUxMikgX19idWlsdGluX2lhMzJfYWRkcHM1MTJfbWFzayAoKF9fdjE2c2YpIF9fQSwgKF9fdjE2c2YpIF9fQiwgXAotICAgICAgICAgICAgICAgIChfX3YxNnNmKSBfbW01MTJfc2V0emVyb19wcygpLCAoX19tbWFzazE2KV9fVSwgX19SKTsgfSkKLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2tfc3ViX3NzKF9fbTEyOCBfX1csIF9fbW1hc2s4IF9fVSxfX20xMjggX19BLCBfX20xMjggX19CKSB7Ci0gIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl9zdWJzc19yb3VuZCAoKF9fdjRzZikgX19BLAotICAgICAgICAgICAgICAgIChfX3Y0c2YpIF9fQiwKLSAgICAgICAgICAgICAgICAoX192NHNmKSBfX1csCi0gICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCi0gICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2t6X3N1Yl9zcyhfX21tYXNrOCBfX1UsX19tMTI4IF9fQSwgX19tMTI4IF9fQikgewotICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfc3Vic3Nfcm91bmQgKChfX3Y0c2YpIF9fQSwKLSAgICAgICAgICAgICAgICAoX192NHNmKSBfX0IsCi0gICAgICAgICAgICAgICAgKF9fdjRzZikgIF9tbV9zZXR6ZXJvX3BzICgpLAotICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VLAotICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Ci19Ci0jZGVmaW5lIF9tbV9zdWJfcm91bmRfc3MoX19BLCBfX0IsIF9fUikgX19leHRlbnNpb25fXyAoeyBcCi0gIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX3N1YnNzX3JvdW5kICgoX192NHNmKSBfX0EsIChfX3Y0c2YpIF9fQiwgXAotICAgICAgICAgICAgICAgIChfX3Y0c2YpIF9tbV9zZXR6ZXJvX3BzKCksIChfX21tYXNrOCkgLTEsIF9fUik7IH0pCi0KLSNkZWZpbmUgX21tX21hc2tfc3ViX3JvdW5kX3NzKF9fVywgX19VLCBfX0EsIF9fQiwgX19SKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgKF9fbTEyOCkgX19idWlsdGluX2lhMzJfc3Vic3Nfcm91bmQgKChfX3Y0c2YpIF9fQSwgKF9fdjRzZikgX19CLCBcCi0gICAgICAgICAgICAgICAgKF9fdjRzZikgIF9fVywgKF9fbW1hc2s4KSBfX1UsX19SKTsgfSkKLQotI2RlZmluZSBfbW1fbWFza3pfc3ViX3JvdW5kX3NzKF9fVSwgX19BLCBfX0IsIF9fUikgX19leHRlbnNpb25fXyAoeyBcCi0gIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX3N1YnNzX3JvdW5kICgoX192NHNmKSBfX0EsIChfX3Y0c2YpIF9fQiwgXAotICAgICAgICAgICAgICAgIChfX3Y0c2YpICBfbW1fc2V0emVyb19wcygpLCAoX19tbWFzazgpIF9fVSxfX1IpOyB9KQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2tfc3ViX3NkKF9fbTEyOGQgX19XLCBfX21tYXNrOCBfX1UsX19tMTI4ZCBfX0EsIF9fbTEyOGQgX19CKSB7Ci0gIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfc3Vic2Rfcm91bmQgKChfX3YyZGYpIF9fQSwKLSAgICAgICAgICAgICAgICAoX192MmRmKSBfX0IsCi0gICAgICAgICAgICAgICAgKF9fdjJkZikgX19XLAotICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VLAotICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWFza3pfc3ViX3NkKF9fbW1hc2s4IF9fVSxfX20xMjhkIF9fQSwgX19tMTI4ZCBfX0IpIHsKLSAgcmV0dXJuIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl9zdWJzZF9yb3VuZCAoKF9fdjJkZikgX19BLAotICAgICAgICAgICAgICAgIChfX3YyZGYpIF9fQiwKLSAgICAgICAgICAgICAgICAoX192MmRmKSAgX21tX3NldHplcm9fcGQgKCksCi0gICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCi0gICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKLX0KLQotI2RlZmluZSBfbW1fc3ViX3JvdW5kX3NkKF9fQSwgX19CLCBfX1IpIF9fZXh0ZW5zaW9uX18gKHsgXAotICAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfc3Vic2Rfcm91bmQgKChfX3YyZGYpIF9fQSwgKF9fdjJkZikgX19CLCBcCi0gICAgICAgICAgICAgICAgKF9fdjJkZikgX21tX3NldHplcm9fcGQoKSwgKF9fbW1hc2s4KSAtMSwgX19SKTsgfSkKLQotI2RlZmluZSBfbW1fbWFza19zdWJfcm91bmRfc2QoX19XLCBfX1UsIF9fQSwgX19CLCBfX1IpIF9fZXh0ZW5zaW9uX18gKHsgXAotICAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfc3Vic2Rfcm91bmQgKChfX3YyZGYpIF9fQSwgKF9fdjJkZikgX19CLCBcCi0gICAgICAgICAgICAgICAgKF9fdjJkZikgIF9fVywgKF9fbW1hc2s4KSBfX1UsX19SKTsgfSkKLQotI2RlZmluZSBfbW1fbWFza3pfc3ViX3JvdW5kX3NkKF9fVSwgX19BLCBfX0IsIF9fUikgX19leHRlbnNpb25fXyAoeyBcCi0gIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl9zdWJzZF9yb3VuZCAoKF9fdjJkZikgX19BLCAoX192MmRmKSBfX0IsIFwKLSAgICAgICAgICAgICAgICAoX192MmRmKSAgX21tX3NldHplcm9fcGQoKSwgKF9fbW1hc2s4KSBfX1UsX19SKTsgfSkKLQotc3RhdGljIF9faW5saW5lX18gX19tNTEyZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9tYXNrX3N1Yl9wZChfX201MTJkIF9fVywgX19tbWFzazggX19VLCBfX201MTJkIF9fQSwgX19tNTEyZCBfX0IpIHsKLSAgcmV0dXJuIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl9zdWJwZDUxMl9tYXNrICgoX192OGRmKSBfX0EsCi0gICAgICAgICAgICAgKF9fdjhkZikgX19CLAotICAgICAgICAgICAgIChfX3Y4ZGYpIF9fVywKLSAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSwKLSAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX21hc2t6X3N1Yl9wZChfX21tYXNrOCBfX1UsIF9fbTUxMmQgX19BLCBfX201MTJkIF9fQikgewotICByZXR1cm4gKF9fbTUxMmQpIF9fYnVpbHRpbl9pYTMyX3N1YnBkNTEyX21hc2sgKChfX3Y4ZGYpIF9fQSwKLSAgICAgICAgICAgICAoX192OGRmKSBfX0IsCi0gICAgICAgICAgICAgKF9fdjhkZikKLSAgICAgICAgICAgICBfbW01MTJfc2V0emVyb19wZCAoKSwKLSAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSwKLSAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfbWFza19zdWJfcHMoX19tNTEyIF9fVywgX19tbWFzazE2IF9fVSwgX19tNTEyIF9fQSwgX19tNTEyIF9fQikgewotICByZXR1cm4gKF9fbTUxMikgX19idWlsdGluX2lhMzJfc3VicHM1MTJfbWFzayAoKF9fdjE2c2YpIF9fQSwKLSAgICAgICAgICAgIChfX3YxNnNmKSBfX0IsCi0gICAgICAgICAgICAoX192MTZzZikgX19XLAotICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VLAotICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tNTEyIF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX21hc2t6X3N1Yl9wcyhfX21tYXNrMTYgX19VLCBfX201MTIgX19BLCBfX201MTIgX19CKSB7Ci0gIHJldHVybiAoX19tNTEyKSBfX2J1aWx0aW5faWEzMl9zdWJwczUxMl9tYXNrICgoX192MTZzZikgX19BLAotICAgICAgICAgICAgKF9fdjE2c2YpIF9fQiwKLSAgICAgICAgICAgIChfX3YxNnNmKQotICAgICAgICAgICAgX21tNTEyX3NldHplcm9fcHMgKCksCi0gICAgICAgICAgICAoX19tbWFzazE2KSBfX1UsCi0gICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOwotfQotCi0jZGVmaW5lIF9tbTUxMl9zdWJfcm91bmRfcGQoX19BLCBfX0IsIF9fUikgX19leHRlbnNpb25fXyAoeyBcCi0gIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl9zdWJwZDUxMl9tYXNrICgoX192OGRmKSBfX0EsIChfX3Y4ZGYpIF9fQixcCi0gICAgICAgICAgICAgKF9fdjhkZikgX21tNTEyX3NldHplcm9fcGQoKSwgKF9fbW1hc2s4KSAtMSwgX19SKTsgfSkKLQotI2RlZmluZSBfbW01MTJfbWFza19zdWJfcm91bmRfcGQoX19XLCBfX1UsIF9fQSwgX19CLCBfX1IpIF9fZXh0ZW5zaW9uX18gKHsgXAotICAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfc3VicGQ1MTJfbWFzayAoKF9fdjhkZikgX19BLCAoX192OGRmKSBfX0IsIFwKLSAgICAgICAgICAgICAoX192OGRmKSBfX1csIChfX21tYXNrOCkgX19VLCBfX1IpOyB9KQotCi0jZGVmaW5lIF9tbTUxMl9tYXNrel9zdWJfcm91bmRfcGQoX19VLCBfX0EsIF9fQiwgX19SKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl9zdWJwZDUxMl9tYXNrICgoX192OGRmKSBfX0EsIChfX3Y4ZGYpIF9fQiwgXAotICAgICAgICAgICAgIChfX3Y4ZGYpIF9tbTUxMl9zZXR6ZXJvX3BkKCksIChfX21tYXNrOCkgX19VLCBfX1IpO30pCi0KLSNkZWZpbmUgX21tNTEyX3N1Yl9yb3VuZF9wcyhfX0EsIF9fQiwgX19SKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgKF9fbTUxMikgX19idWlsdGluX2lhMzJfc3VicHM1MTJfbWFzayAoKF9fdjE2c2YpIF9fQSwgKF9fdjE2c2YpIF9fQiwgXAotICAgICAgICAgICAgKF9fdjE2c2YpIF9tbTUxMl9zZXR6ZXJvX3BzICgpLCAoX19tbWFzazE2KSAtMSwgX19SKTt9KQotCi0jZGVmaW5lIF9tbTUxMl9tYXNrX3N1Yl9yb3VuZF9wcyhfX1csIF9fVSwgX19BLCBfX0IsIF9fUikgIF9fZXh0ZW5zaW9uX18gKHsgXAotICAoX19tNTEyKSBfX2J1aWx0aW5faWEzMl9zdWJwczUxMl9tYXNrICgoX192MTZzZikgX19BLCAoX192MTZzZikgX19CLCBcCi0gICAgICAgICAgICAoX192MTZzZikgX19XLCAoX19tbWFzazE2KSBfX1UsIF9fUik7IH0pOwotCi0jZGVmaW5lIF9tbTUxMl9tYXNrel9zdWJfcm91bmRfcHMoX19VLCBfX0EsIF9fQiwgX19SKSAgX19leHRlbnNpb25fXyAoeyBcCi0gIChfX201MTIpIF9fYnVpbHRpbl9pYTMyX3N1YnBzNTEyX21hc2sgKChfX3YxNnNmKSBfX0EsIChfX3YxNnNmKSBfX0IsIFwKLSAgICAgICAgICAgIChfX3YxNnNmKSBfbW01MTJfc2V0emVyb19wcyAoKSwgKF9fbW1hc2sxNikgX19VLCBfX1IpO30pOwotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWFza19tdWxfc3MoX19tMTI4IF9fVywgX19tbWFzazggX19VLF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IpIHsKLSAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX211bHNzX3JvdW5kICgoX192NHNmKSBfX0EsCi0gICAgICAgICAgICAgICAgKF9fdjRzZikgX19CLAotICAgICAgICAgICAgICAgIChfX3Y0c2YpIF9fVywKLSAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSwKLSAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWFza3pfbXVsX3NzKF9fbW1hc2s4IF9fVSxfX20xMjggX19BLCBfX20xMjggX19CKSB7Ci0gIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl9tdWxzc19yb3VuZCAoKF9fdjRzZikgX19BLAotICAgICAgICAgICAgICAgIChfX3Y0c2YpIF9fQiwKLSAgICAgICAgICAgICAgICAoX192NHNmKSAgX21tX3NldHplcm9fcHMgKCksCi0gICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCi0gICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKLX0KLSNkZWZpbmUgX21tX211bF9yb3VuZF9zcyhfX0EsIF9fQiwgX19SKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgKF9fbTEyOCkgX19idWlsdGluX2lhMzJfbXVsc3Nfcm91bmQgKChfX3Y0c2YpIF9fQSwgKF9fdjRzZikgX19CLCBcCi0gICAgICAgICAgICAgICAgKF9fdjRzZikgX21tX3NldHplcm9fcHMoKSwgKF9fbW1hc2s4KSAtMSwgX19SKTsgfSkKLQotI2RlZmluZSBfbW1fbWFza19tdWxfcm91bmRfc3MoX19XLCBfX1UsIF9fQSwgX19CLCBfX1IpIF9fZXh0ZW5zaW9uX18gKHsgXAotICAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl9tdWxzc19yb3VuZCAoKF9fdjRzZikgX19BLCAoX192NHNmKSBfX0IsIFwKLSAgICAgICAgICAgICAgICAoX192NHNmKSAgX19XLCAoX19tbWFzazgpIF9fVSxfX1IpOyB9KQotCi0jZGVmaW5lIF9tbV9tYXNrel9tdWxfcm91bmRfc3MoX19VLCBfX0EsIF9fQiwgX19SKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgKF9fbTEyOCkgX19idWlsdGluX2lhMzJfbXVsc3Nfcm91bmQgKChfX3Y0c2YpIF9fQSwgKF9fdjRzZikgX19CLCBcCi0gICAgICAgICAgICAgICAgKF9fdjRzZikgIF9tbV9zZXR6ZXJvX3BzKCksIChfX21tYXNrOCkgX19VLF9fUik7IH0pCi0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWFza19tdWxfc2QoX19tMTI4ZCBfX1csIF9fbW1hc2s4IF9fVSxfX20xMjhkIF9fQSwgX19tMTI4ZCBfX0IpIHsKLSAgcmV0dXJuIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl9tdWxzZF9yb3VuZCAoKF9fdjJkZikgX19BLAotICAgICAgICAgICAgICAgIChfX3YyZGYpIF9fQiwKLSAgICAgICAgICAgICAgICAoX192MmRmKSBfX1csCi0gICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCi0gICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tYXNrel9tdWxfc2QoX19tbWFzazggX19VLF9fbTEyOGQgX19BLCBfX20xMjhkIF9fQikgewotICByZXR1cm4gKF9fbTEyOGQpIF9fYnVpbHRpbl9pYTMyX211bHNkX3JvdW5kICgoX192MmRmKSBfX0EsCi0gICAgICAgICAgICAgICAgKF9fdjJkZikgX19CLAotICAgICAgICAgICAgICAgIChfX3YyZGYpICBfbW1fc2V0emVyb19wZCAoKSwKLSAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSwKLSAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOwotfQotCi0jZGVmaW5lIF9tbV9tdWxfcm91bmRfc2QoX19BLCBfX0IsIF9fUikgX19leHRlbnNpb25fXyAoeyBcCi0gIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl9tdWxzZF9yb3VuZCAoKF9fdjJkZikgX19BLCAoX192MmRmKSBfX0IsIFwKLSAgICAgICAgICAgICAgICAoX192MmRmKSBfbW1fc2V0emVyb19wZCgpLCAoX19tbWFzazgpIC0xLCBfX1IpOyB9KQotCi0jZGVmaW5lIF9tbV9tYXNrX211bF9yb3VuZF9zZChfX1csIF9fVSwgX19BLCBfX0IsIF9fUikgX19leHRlbnNpb25fXyAoeyBcCi0gIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl9tdWxzZF9yb3VuZCAoKF9fdjJkZikgX19BLCAoX192MmRmKSBfX0IsIFwKLSAgICAgICAgICAgICAgICAoX192MmRmKSAgX19XLCAoX19tbWFzazgpIF9fVSxfX1IpOyB9KQotCi0jZGVmaW5lIF9tbV9tYXNrel9tdWxfcm91bmRfc2QoX19VLCBfX0EsIF9fQiwgX19SKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgKF9fbTEyOGQpIF9fYnVpbHRpbl9pYTMyX211bHNkX3JvdW5kICgoX192MmRmKSBfX0EsIChfX3YyZGYpIF9fQiwgXAotICAgICAgICAgICAgICAgIChfX3YyZGYpICBfbW1fc2V0emVyb19wZCgpLCAoX19tbWFzazgpIF9fVSxfX1IpOyB9KQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX21hc2tfbXVsX3BkKF9fbTUxMmQgX19XLCBfX21tYXNrOCBfX1UsIF9fbTUxMmQgX19BLCBfX201MTJkIF9fQikgewotICByZXR1cm4gKF9fbTUxMmQpIF9fYnVpbHRpbl9pYTMyX211bHBkNTEyX21hc2sgKChfX3Y4ZGYpIF9fQSwKLSAgICAgICAgICAgICAoX192OGRmKSBfX0IsCi0gICAgICAgICAgICAgKF9fdjhkZikgX19XLAotICAgICAgICAgICAgIChfX21tYXNrOCkgX19VLAotICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfbWFza3pfbXVsX3BkKF9fbW1hc2s4IF9fVSwgX19tNTEyZCBfX0EsIF9fbTUxMmQgX19CKSB7Ci0gIHJldHVybiAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfbXVscGQ1MTJfbWFzayAoKF9fdjhkZikgX19BLAotICAgICAgICAgICAgIChfX3Y4ZGYpIF9fQiwKLSAgICAgICAgICAgICAoX192OGRmKQotICAgICAgICAgICAgIF9tbTUxMl9zZXR6ZXJvX3BkICgpLAotICAgICAgICAgICAgIChfX21tYXNrOCkgX19VLAotICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTUxMiBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9tYXNrX211bF9wcyhfX201MTIgX19XLCBfX21tYXNrMTYgX19VLCBfX201MTIgX19BLCBfX201MTIgX19CKSB7Ci0gIHJldHVybiAoX19tNTEyKSBfX2J1aWx0aW5faWEzMl9tdWxwczUxMl9tYXNrICgoX192MTZzZikgX19BLAotICAgICAgICAgICAgKF9fdjE2c2YpIF9fQiwKLSAgICAgICAgICAgIChfX3YxNnNmKSBfX1csCi0gICAgICAgICAgICAoX19tbWFzazE2KSBfX1UsCi0gICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfbWFza3pfbXVsX3BzKF9fbW1hc2sxNiBfX1UsIF9fbTUxMiBfX0EsIF9fbTUxMiBfX0IpIHsKLSAgcmV0dXJuIChfX201MTIpIF9fYnVpbHRpbl9pYTMyX211bHBzNTEyX21hc2sgKChfX3YxNnNmKSBfX0EsCi0gICAgICAgICAgICAoX192MTZzZikgX19CLAotICAgICAgICAgICAgKF9fdjE2c2YpCi0gICAgICAgICAgICBfbW01MTJfc2V0emVyb19wcyAoKSwKLSAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSwKLSAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Ci19Ci0KLSNkZWZpbmUgX21tNTEyX211bF9yb3VuZF9wZChfX0EsIF9fQiwgX19SKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgKF9fbTUxMmQpIF9fYnVpbHRpbl9pYTMyX211bHBkNTEyX21hc2sgKChfX3Y4ZGYpIF9fQSwgKF9fdjhkZikgX19CLFwKLSAgICAgICAgICAgICAoX192OGRmKSBfbW01MTJfc2V0emVyb19wZCgpLCAoX19tbWFzazgpIC0xLCBfX1IpOyB9KQotCi0jZGVmaW5lIF9tbTUxMl9tYXNrX211bF9yb3VuZF9wZChfX1csIF9fVSwgX19BLCBfX0IsIF9fUikgX19leHRlbnNpb25fXyAoeyBcCi0gIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl9tdWxwZDUxMl9tYXNrICgoX192OGRmKSBfX0EsIChfX3Y4ZGYpIF9fQiwgXAotICAgICAgICAgICAgIChfX3Y4ZGYpIF9fVywgKF9fbW1hc2s4KSBfX1UsIF9fUik7IH0pCi0KLSNkZWZpbmUgX21tNTEyX21hc2t6X211bF9yb3VuZF9wZChfX1UsIF9fQSwgX19CLCBfX1IpIF9fZXh0ZW5zaW9uX18gKHsgXAotICAgKF9fbTUxMmQpIF9fYnVpbHRpbl9pYTMyX211bHBkNTEyX21hc2sgKChfX3Y4ZGYpIF9fQSwgKF9fdjhkZikgX19CLCBcCi0gICAgICAgICAgICAgKF9fdjhkZikgX21tNTEyX3NldHplcm9fcGQoKSwgKF9fbW1hc2s4KSBfX1UsIF9fUik7fSkKLQotI2RlZmluZSBfbW01MTJfbXVsX3JvdW5kX3BzKF9fQSwgX19CLCBfX1IpIF9fZXh0ZW5zaW9uX18gKHsgXAotICAoX19tNTEyKSBfX2J1aWx0aW5faWEzMl9tdWxwczUxMl9tYXNrICgoX192MTZzZikgX19BLCAoX192MTZzZikgX19CLCBcCi0gICAgICAgICAgICAoX192MTZzZikgX21tNTEyX3NldHplcm9fcHMgKCksIChfX21tYXNrMTYpIC0xLCBfX1IpO30pCi0KLSNkZWZpbmUgX21tNTEyX21hc2tfbXVsX3JvdW5kX3BzKF9fVywgX19VLCBfX0EsIF9fQiwgX19SKSAgX19leHRlbnNpb25fXyAoeyBcCi0gIChfX201MTIpIF9fYnVpbHRpbl9pYTMyX211bHBzNTEyX21hc2sgKChfX3YxNnNmKSBfX0EsIChfX3YxNnNmKSBfX0IsIFwKLSAgICAgICAgICAgIChfX3YxNnNmKSBfX1csIChfX21tYXNrMTYpIF9fVSwgX19SKTsgfSk7Ci0KLSNkZWZpbmUgX21tNTEyX21hc2t6X211bF9yb3VuZF9wcyhfX1UsIF9fQSwgX19CLCBfX1IpICBfX2V4dGVuc2lvbl9fICh7IFwKLSAgKF9fbTUxMikgX19idWlsdGluX2lhMzJfbXVscHM1MTJfbWFzayAoKF9fdjE2c2YpIF9fQSwgKF9fdjE2c2YpIF9fQiwgXAotICAgICAgICAgICAgKF9fdjE2c2YpIF9tbTUxMl9zZXR6ZXJvX3BzICgpLCAoX19tbWFzazE2KSBfX1UsIF9fUik7fSk7Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tYXNrX2Rpdl9zcyhfX20xMjggX19XLCBfX21tYXNrOCBfX1UsX19tMTI4IF9fQSwgX19tMTI4IF9fQikgewotICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfZGl2c3Nfcm91bmQgKChfX3Y0c2YpIF9fQSwKLSAgICAgICAgICAgICAgICAoX192NHNmKSBfX0IsCi0gICAgICAgICAgICAgICAgKF9fdjRzZikgX19XLAotICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VLAotICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tYXNrel9kaXZfc3MoX19tbWFzazggX19VLF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IpIHsKLSAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX2RpdnNzX3JvdW5kICgoX192NHNmKSBfX0EsCi0gICAgICAgICAgICAgICAgKF9fdjRzZikgX19CLAotICAgICAgICAgICAgICAgIChfX3Y0c2YpICBfbW1fc2V0emVyb19wcyAoKSwKLSAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSwKLSAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOwotfQotCi0jZGVmaW5lIF9tbV9kaXZfcm91bmRfc3MoX19BLCBfX0IsIF9fUikgX19leHRlbnNpb25fXyAoeyBcCi0gIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX2RpdnNzX3JvdW5kICgoX192NHNmKSBfX0EsIChfX3Y0c2YpIF9fQiwgXAotICAgICAgICAgICAgICAgIChfX3Y0c2YpIF9tbV9zZXR6ZXJvX3BzKCksIChfX21tYXNrOCkgLTEsIF9fUik7IH0pCi0KLSNkZWZpbmUgX21tX21hc2tfZGl2X3JvdW5kX3NzKF9fVywgX19VLCBfX0EsIF9fQiwgX19SKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgKF9fbTEyOCkgX19idWlsdGluX2lhMzJfZGl2c3Nfcm91bmQgKChfX3Y0c2YpIF9fQSwgKF9fdjRzZikgX19CLCBcCi0gICAgICAgICAgICAgICAgKF9fdjRzZikgIF9fVywgKF9fbW1hc2s4KSBfX1UsX19SKTsgfSkKLQotI2RlZmluZSBfbW1fbWFza3pfZGl2X3JvdW5kX3NzKF9fVSwgX19BLCBfX0IsIF9fUikgX19leHRlbnNpb25fXyAoeyBcCi0gIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX2RpdnNzX3JvdW5kICgoX192NHNmKSBfX0EsIChfX3Y0c2YpIF9fQiwgXAotICAgICAgICAgICAgICAgIChfX3Y0c2YpICBfbW1fc2V0emVyb19wcygpLCAoX19tbWFzazgpIF9fVSxfX1IpOyB9KQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2tfZGl2X3NkKF9fbTEyOGQgX19XLCBfX21tYXNrOCBfX1UsX19tMTI4ZCBfX0EsIF9fbTEyOGQgX19CKSB7Ci0gIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfZGl2c2Rfcm91bmQgKChfX3YyZGYpIF9fQSwKLSAgICAgICAgICAgICAgICAoX192MmRmKSBfX0IsCi0gICAgICAgICAgICAgICAgKF9fdjJkZikgX19XLAotICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VLAotICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWFza3pfZGl2X3NkKF9fbW1hc2s4IF9fVSxfX20xMjhkIF9fQSwgX19tMTI4ZCBfX0IpIHsKLSAgcmV0dXJuIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl9kaXZzZF9yb3VuZCAoKF9fdjJkZikgX19BLAotICAgICAgICAgICAgICAgIChfX3YyZGYpIF9fQiwKLSAgICAgICAgICAgICAgICAoX192MmRmKSAgX21tX3NldHplcm9fcGQgKCksCi0gICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCi0gICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKLX0KLQotI2RlZmluZSBfbW1fZGl2X3JvdW5kX3NkKF9fQSwgX19CLCBfX1IpIF9fZXh0ZW5zaW9uX18gKHsgXAotICAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfZGl2c2Rfcm91bmQgKChfX3YyZGYpIF9fQSwgKF9fdjJkZikgX19CLCBcCi0gICAgICAgICAgICAgICAgKF9fdjJkZikgX21tX3NldHplcm9fcGQoKSwgKF9fbW1hc2s4KSAtMSwgX19SKTsgfSkKLQotI2RlZmluZSBfbW1fbWFza19kaXZfcm91bmRfc2QoX19XLCBfX1UsIF9fQSwgX19CLCBfX1IpIF9fZXh0ZW5zaW9uX18gKHsgXAotICAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfZGl2c2Rfcm91bmQgKChfX3YyZGYpIF9fQSwgKF9fdjJkZikgX19CLCBcCi0gICAgICAgICAgICAgICAgKF9fdjJkZikgIF9fVywgKF9fbW1hc2s4KSBfX1UsX19SKTsgfSkKLQotI2RlZmluZSBfbW1fbWFza3pfZGl2X3JvdW5kX3NkKF9fVSwgX19BLCBfX0IsIF9fUikgX19leHRlbnNpb25fXyAoeyBcCi0gIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl9kaXZzZF9yb3VuZCAoKF9fdjJkZikgX19BLCAoX192MmRmKSBfX0IsIFwKLSAgICAgICAgICAgICAgICAoX192MmRmKSAgX21tX3NldHplcm9fcGQoKSwgKF9fbW1hc2s4KSBfX1UsX19SKTsgfSkKLQotc3RhdGljIF9faW5saW5lX18gX19tNTEyZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9tYXNrX2Rpdl9wZChfX201MTJkIF9fVywgX19tbWFzazggX19VLCBfX201MTJkIF9fQSwgX19tNTEyZCBfX0IpIHsKLSAgcmV0dXJuIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl9kaXZwZDUxMl9tYXNrICgoX192OGRmKSBfX0EsCi0gICAgICAgICAgICAgKF9fdjhkZikgX19CLAotICAgICAgICAgICAgIChfX3Y4ZGYpIF9fVywKLSAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSwKLSAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX21hc2t6X2Rpdl9wZChfX21tYXNrOCBfX1UsIF9fbTUxMmQgX19BLCBfX201MTJkIF9fQikgewotICByZXR1cm4gKF9fbTUxMmQpIF9fYnVpbHRpbl9pYTMyX2RpdnBkNTEyX21hc2sgKChfX3Y4ZGYpIF9fQSwKLSAgICAgICAgICAgICAoX192OGRmKSBfX0IsCi0gICAgICAgICAgICAgKF9fdjhkZikKLSAgICAgICAgICAgICBfbW01MTJfc2V0emVyb19wZCAoKSwKLSAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSwKLSAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfbWFza19kaXZfcHMoX19tNTEyIF9fVywgX19tbWFzazE2IF9fVSwgX19tNTEyIF9fQSwgX19tNTEyIF9fQikgewotICByZXR1cm4gKF9fbTUxMikgX19idWlsdGluX2lhMzJfZGl2cHM1MTJfbWFzayAoKF9fdjE2c2YpIF9fQSwKLSAgICAgICAgICAgIChfX3YxNnNmKSBfX0IsCi0gICAgICAgICAgICAoX192MTZzZikgX19XLAotICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VLAotICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tNTEyIF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX21hc2t6X2Rpdl9wcyhfX21tYXNrMTYgX19VLCBfX201MTIgX19BLCBfX201MTIgX19CKSB7Ci0gIHJldHVybiAoX19tNTEyKSBfX2J1aWx0aW5faWEzMl9kaXZwczUxMl9tYXNrICgoX192MTZzZikgX19BLAotICAgICAgICAgICAgKF9fdjE2c2YpIF9fQiwKLSAgICAgICAgICAgIChfX3YxNnNmKQotICAgICAgICAgICAgX21tNTEyX3NldHplcm9fcHMgKCksCi0gICAgICAgICAgICAoX19tbWFzazE2KSBfX1UsCi0gICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOwotfQotCi0jZGVmaW5lIF9tbTUxMl9kaXZfcm91bmRfcGQoX19BLCBfX0IsIF9fUikgX19leHRlbnNpb25fXyAoeyBcCi0gIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl9kaXZwZDUxMl9tYXNrICgoX192OGRmKSBfX0EsIChfX3Y4ZGYpIF9fQixcCi0gICAgICAgICAgICAgKF9fdjhkZikgX21tNTEyX3NldHplcm9fcGQoKSwgKF9fbW1hc2s4KSAtMSwgX19SKTsgfSkKLQotI2RlZmluZSBfbW01MTJfbWFza19kaXZfcm91bmRfcGQoX19XLCBfX1UsIF9fQSwgX19CLCBfX1IpIF9fZXh0ZW5zaW9uX18gKHsgXAotICAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfZGl2cGQ1MTJfbWFzayAoKF9fdjhkZikgX19BLCAoX192OGRmKSBfX0IsIFwKLSAgICAgICAgICAgICAoX192OGRmKSBfX1csIChfX21tYXNrOCkgX19VLCBfX1IpOyB9KQotCi0jZGVmaW5lIF9tbTUxMl9tYXNrel9kaXZfcm91bmRfcGQoX19VLCBfX0EsIF9fQiwgX19SKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl9kaXZwZDUxMl9tYXNrICgoX192OGRmKSBfX0EsIChfX3Y4ZGYpIF9fQiwgXAotICAgICAgICAgICAgIChfX3Y4ZGYpIF9tbTUxMl9zZXR6ZXJvX3BkKCksIChfX21tYXNrOCkgX19VLCBfX1IpO30pCi0KLSNkZWZpbmUgX21tNTEyX2Rpdl9yb3VuZF9wcyhfX0EsIF9fQiwgX19SKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgKF9fbTUxMikgX19idWlsdGluX2lhMzJfZGl2cHM1MTJfbWFzayAoKF9fdjE2c2YpIF9fQSwgKF9fdjE2c2YpIF9fQiwgXAotICAgICAgICAgICAgKF9fdjE2c2YpIF9tbTUxMl9zZXR6ZXJvX3BzICgpLCAoX19tbWFzazE2KSAtMSwgX19SKTt9KQotCi0jZGVmaW5lIF9tbTUxMl9tYXNrX2Rpdl9yb3VuZF9wcyhfX1csIF9fVSwgX19BLCBfX0IsIF9fUikgIF9fZXh0ZW5zaW9uX18gKHsgXAotICAoX19tNTEyKSBfX2J1aWx0aW5faWEzMl9kaXZwczUxMl9tYXNrICgoX192MTZzZikgX19BLCAoX192MTZzZikgX19CLCBcCi0gICAgICAgICAgICAoX192MTZzZikgX19XLCAoX19tbWFzazE2KSBfX1UsIF9fUik7IH0pOwotCi0jZGVmaW5lIF9tbTUxMl9tYXNrel9kaXZfcm91bmRfcHMoX19VLCBfX0EsIF9fQiwgX19SKSAgX19leHRlbnNpb25fXyAoeyBcCi0gIChfX201MTIpIF9fYnVpbHRpbl9pYTMyX2RpdnBzNTEyX21hc2sgKChfX3YxNnNmKSBfX0EsIChfX3YxNnNmKSBfX0IsIFwKLSAgICAgICAgICAgIChfX3YxNnNmKSBfbW01MTJfc2V0emVyb19wcyAoKSwgKF9fbW1hc2sxNikgX19VLCBfX1IpO30pOwotCi0jZGVmaW5lIF9tbTUxMl9yb3VuZHNjYWxlX3BzKEEsIEIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICAoX19tNTEyKV9fYnVpbHRpbl9pYTMyX3JuZHNjYWxlcHNfbWFzaygoX192MTZzZikoQSksIChCKSwgKF9fdjE2c2YpKEEpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xLCBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOyB9KQotCi0jZGVmaW5lIF9tbTUxMl9yb3VuZHNjYWxlX3BkKEEsIEIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICAoX19tNTEyZClfX2J1aWx0aW5faWEzMl9ybmRzY2FsZXBkX21hc2soKF9fdjhkZikoQSksIChCKSwgKF9fdjhkZikoQSksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xLCBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOyB9KQotCi0jZGVmaW5lIF9tbTUxMl9mbWFkZF9yb3VuZF9wZChBLCBCLCBDLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgKF9fbTUxMmQpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHBkNTEyX21hc2sgKChfX3Y4ZGYpIChBKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikgKEIpLCAoX192OGRmKSAoQyksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEsIChSKSk7IH0pCi0KLQotI2RlZmluZSBfbW01MTJfbWFza19mbWFkZF9yb3VuZF9wZChBLCBVLCBCLCBDLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgKF9fbTUxMmQpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHBkNTEyX21hc2sgKChfX3Y4ZGYpIChBKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikgKEIpLCAoX192OGRmKSAoQyksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgKFUpLCAoUikpOyB9KQotCi0KLSNkZWZpbmUgX21tNTEyX21hc2szX2ZtYWRkX3JvdW5kX3BkKEEsIEIsIEMsIFUsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfdmZtYWRkcGQ1MTJfbWFzazMgKChfX3Y4ZGYpIChBKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpIChCKSwgKF9fdjhkZikgKEMpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAoVSksIChSKSk7IH0pCi0KLQotI2RlZmluZSBfbW01MTJfbWFza3pfZm1hZGRfcm91bmRfcGQoVSwgQSwgQiwgQywgUikgX19leHRlbnNpb25fXyAoeyBcCi0gIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl92Zm1hZGRwZDUxMl9tYXNreiAoKF9fdjhkZikgKEEpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikgKEIpLCAoX192OGRmKSAoQyksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIChVKSwgKFIpKTsgfSkKLQotCi0jZGVmaW5lIF9tbTUxMl9mbXN1Yl9yb3VuZF9wZChBLCBCLCBDLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgKF9fbTUxMmQpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHBkNTEyX21hc2sgKChfX3Y4ZGYpIChBKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikgKEIpLCAtKF9fdjhkZikgKEMpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xLCAoUikpOyB9KQotCi0KLSNkZWZpbmUgX21tNTEyX21hc2tfZm1zdWJfcm91bmRfcGQoQSwgVSwgQiwgQywgUikgX19leHRlbnNpb25fXyAoeyBcCi0gIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl92Zm1hZGRwZDUxMl9tYXNrICgoX192OGRmKSAoQSksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpIChCKSwgLShfX3Y4ZGYpIChDKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAoVSksIChSKSk7IH0pCi0KLQotI2RlZmluZSBfbW01MTJfbWFza3pfZm1zdWJfcm91bmRfcGQoVSwgQSwgQiwgQywgUikgX19leHRlbnNpb25fXyAoeyBcCi0gIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl92Zm1hZGRwZDUxMl9tYXNreiAoKF9fdjhkZikgKEEpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikgKEIpLCAtKF9fdjhkZikgKEMpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAoVSksIChSKSk7IH0pCi0KLQotI2RlZmluZSBfbW01MTJfZm5tYWRkX3JvdW5kX3BkKEEsIEIsIEMsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfdmZtYWRkcGQ1MTJfbWFzayAoLShfX3Y4ZGYpIChBKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikgKEIpLCAoX192OGRmKSAoQyksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEsIChSKSk7IH0pCi0KLQotI2RlZmluZSBfbW01MTJfbWFzazNfZm5tYWRkX3JvdW5kX3BkKEEsIEIsIEMsIFUsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfdmZtYWRkcGQ1MTJfbWFzazMgKC0oX192OGRmKSAoQSksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKSAoQiksIChfX3Y4ZGYpIChDKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgKFUpLCAoUikpOyB9KQotCi0KLSNkZWZpbmUgX21tNTEyX21hc2t6X2ZubWFkZF9yb3VuZF9wZChVLCBBLCBCLCBDLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgKF9fbTUxMmQpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHBkNTEyX21hc2t6ICgtKF9fdjhkZikgKEEpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikgKEIpLCAoX192OGRmKSAoQyksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIChVKSwgKFIpKTsgfSkKLQotCi0jZGVmaW5lIF9tbTUxMl9mbm1zdWJfcm91bmRfcGQoQSwgQiwgQywgUikgX19leHRlbnNpb25fXyAoeyBcCi0gIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl92Zm1hZGRwZDUxMl9tYXNrICgtKF9fdjhkZikgKEEpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKSAoQiksIC0oX192OGRmKSAoQyksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEsIChSKSk7IH0pCi0KLQotI2RlZmluZSBfbW01MTJfbWFza3pfZm5tc3ViX3JvdW5kX3BkKFUsIEEsIEIsIEMsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfdmZtYWRkcGQ1MTJfbWFza3ogKC0oX192OGRmKSAoQSksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKSAoQiksIC0oX192OGRmKSAoQyksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIChVKSwgKFIpKTsgfSkKLQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX2ZtYWRkX3BkKF9fbTUxMmQgX19BLCBfX201MTJkIF9fQiwgX19tNTEyZCBfX0MpCi17Ci0gIHJldHVybiAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfdmZtYWRkcGQ1MTJfbWFzayAoKF9fdjhkZikgX19BLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpIF9fQiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKSBfX0MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX21hc2tfZm1hZGRfcGQoX19tNTEyZCBfX0EsIF9fbW1hc2s4IF9fVSwgX19tNTEyZCBfX0IsIF9fbTUxMmQgX19DKQotewotICByZXR1cm4gKF9fbTUxMmQpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHBkNTEyX21hc2sgKChfX3Y4ZGYpIF9fQSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKSBfX0IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikgX19DLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfbWFzazNfZm1hZGRfcGQoX19tNTEyZCBfX0EsIF9fbTUxMmQgX19CLCBfX201MTJkIF9fQywgX19tbWFzazggX19VKQotewotICByZXR1cm4gKF9fbTUxMmQpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHBkNTEyX21hc2szICgoX192OGRmKSBfX0EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpIF9fQiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikgX19DLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tNTEyZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9tYXNrel9mbWFkZF9wZChfX21tYXNrOCBfX1UsIF9fbTUxMmQgX19BLCBfX201MTJkIF9fQiwgX19tNTEyZCBfX0MpCi17Ci0gIHJldHVybiAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfdmZtYWRkcGQ1MTJfbWFza3ogKChfX3Y4ZGYpIF9fQSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikgX19CLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKSBfX0MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX2Ztc3ViX3BkKF9fbTUxMmQgX19BLCBfX201MTJkIF9fQiwgX19tNTEyZCBfX0MpCi17Ci0gIHJldHVybiAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfdmZtYWRkcGQ1MTJfbWFzayAoKF9fdjhkZikgX19BLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpIF9fQiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKF9fdjhkZikgX19DLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tNTEyZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9tYXNrX2Ztc3ViX3BkKF9fbTUxMmQgX19BLCBfX21tYXNrOCBfX1UsIF9fbTUxMmQgX19CLCBfX201MTJkIF9fQykKLXsKLSAgcmV0dXJuIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl92Zm1hZGRwZDUxMl9tYXNrICgoX192OGRmKSBfX0EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikgX19CLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oX192OGRmKSBfX0MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tNTEyZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9tYXNrel9mbXN1Yl9wZChfX21tYXNrOCBfX1UsIF9fbTUxMmQgX19BLCBfX201MTJkIF9fQiwgX19tNTEyZCBfX0MpCi17Ci0gIHJldHVybiAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfdmZtYWRkcGQ1MTJfbWFza3ogKChfX3Y4ZGYpIF9fQSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikgX19CLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKF9fdjhkZikgX19DLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tNTEyZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9mbm1hZGRfcGQoX19tNTEyZCBfX0EsIF9fbTUxMmQgX19CLCBfX201MTJkIF9fQykKLXsKLSAgcmV0dXJuIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl92Zm1hZGRwZDUxMl9tYXNrICgtKF9fdjhkZikgX19BLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpIF9fQiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKSBfX0MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX21hc2szX2ZubWFkZF9wZChfX201MTJkIF9fQSwgX19tNTEyZCBfX0IsIF9fbTUxMmQgX19DLCBfX21tYXNrOCBfX1UpCi17Ci0gIHJldHVybiAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfdmZtYWRkcGQ1MTJfbWFzazMgKC0oX192OGRmKSBfX0EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpIF9fQiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikgX19DLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tNTEyZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9tYXNrel9mbm1hZGRfcGQoX19tbWFzazggX19VLCBfX201MTJkIF9fQSwgX19tNTEyZCBfX0IsIF9fbTUxMmQgX19DKQotewotICByZXR1cm4gKF9fbTUxMmQpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHBkNTEyX21hc2t6ICgtKF9fdjhkZikgX19BLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKSBfX0IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpIF9fQywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfZm5tc3ViX3BkKF9fbTUxMmQgX19BLCBfX201MTJkIF9fQiwgX19tNTEyZCBfX0MpCi17Ci0gIHJldHVybiAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfdmZtYWRkcGQ1MTJfbWFzayAoLShfX3Y4ZGYpIF9fQSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKSBfX0IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLShfX3Y4ZGYpIF9fQywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfbWFza3pfZm5tc3ViX3BkKF9fbW1hc2s4IF9fVSwgX19tNTEyZCBfX0EsIF9fbTUxMmQgX19CLCBfX201MTJkIF9fQykKLXsKLSAgcmV0dXJuIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl92Zm1hZGRwZDUxMl9tYXNreiAoLShfX3Y4ZGYpIF9fQSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikgX19CLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKF9fdjhkZikgX19DLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKLX0KLQotI2RlZmluZSBfbW01MTJfZm1hZGRfcm91bmRfcHMoQSwgQiwgQywgUikgX19leHRlbnNpb25fXyAoeyBcCi0gIChfX201MTIpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHBzNTEyX21hc2sgKChfX3YxNnNmKSAoQSksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpIChCKSwgKF9fdjE2c2YpIChDKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KSAtMSwgKFIpKTsgfSkKLQotCi0jZGVmaW5lIF9tbTUxMl9tYXNrX2ZtYWRkX3JvdW5kX3BzKEEsIFUsIEIsIEMsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICAoX19tNTEyKSBfX2J1aWx0aW5faWEzMl92Zm1hZGRwczUxMl9tYXNrICgoX192MTZzZikgKEEpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKSAoQiksIChfX3YxNnNmKSAoQyksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgKFUpLCAoUikpOyB9KQotCi0KLSNkZWZpbmUgX21tNTEyX21hc2szX2ZtYWRkX3JvdW5kX3BzKEEsIEIsIEMsIFUsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICAoX19tNTEyKSBfX2J1aWx0aW5faWEzMl92Zm1hZGRwczUxMl9tYXNrMyAoKF9fdjE2c2YpIChBKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpIChCKSwgKF9fdjE2c2YpIChDKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgKFUpLCAoUikpOyB9KQotCi0KLSNkZWZpbmUgX21tNTEyX21hc2t6X2ZtYWRkX3JvdW5kX3BzKFUsIEEsIEIsIEMsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICAoX19tNTEyKSBfX2J1aWx0aW5faWEzMl92Zm1hZGRwczUxMl9tYXNreiAoKF9fdjE2c2YpIChBKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpIChCKSwgKF9fdjE2c2YpIChDKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgKFUpLCAoUikpOyB9KQotCi0KLSNkZWZpbmUgX21tNTEyX2Ztc3ViX3JvdW5kX3BzKEEsIEIsIEMsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICAoX19tNTEyKSBfX2J1aWx0aW5faWEzMl92Zm1hZGRwczUxMl9tYXNrICgoX192MTZzZikgKEEpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKSAoQiksIC0oX192MTZzZikgKEMpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpIC0xLCAoUikpOyB9KQotCi0KLSNkZWZpbmUgX21tNTEyX21hc2tfZm1zdWJfcm91bmRfcHMoQSwgVSwgQiwgQywgUikgX19leHRlbnNpb25fXyAoeyBcCi0gIChfX201MTIpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHBzNTEyX21hc2sgKChfX3YxNnNmKSAoQSksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpIChCKSwgLShfX3YxNnNmKSAoQyksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgKFUpLCAoUikpOyB9KQotCi0KLSNkZWZpbmUgX21tNTEyX21hc2t6X2Ztc3ViX3JvdW5kX3BzKFUsIEEsIEIsIEMsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICAoX19tNTEyKSBfX2J1aWx0aW5faWEzMl92Zm1hZGRwczUxMl9tYXNreiAoKF9fdjE2c2YpIChBKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpIChCKSwgLShfX3YxNnNmKSAoQyksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpIChVKSwgKFIpKTsgfSkKLQotCi0jZGVmaW5lIF9tbTUxMl9mbm1hZGRfcm91bmRfcHMoQSwgQiwgQywgUikgX19leHRlbnNpb25fXyAoeyBcCi0gIChfX201MTIpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHBzNTEyX21hc2sgKC0oX192MTZzZikgKEEpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKSAoQiksIChfX3YxNnNmKSAoQyksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgLTEsIChSKSk7IH0pCi0KLQotI2RlZmluZSBfbW01MTJfbWFzazNfZm5tYWRkX3JvdW5kX3BzKEEsIEIsIEMsIFUsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICAoX19tNTEyKSBfX2J1aWx0aW5faWEzMl92Zm1hZGRwczUxMl9tYXNrMyAoLShfX3YxNnNmKSAoQSksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKSAoQiksIChfX3YxNnNmKSAoQyksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpIChVKSwgKFIpKTsgfSkKLQotCi0jZGVmaW5lIF9tbTUxMl9tYXNrel9mbm1hZGRfcm91bmRfcHMoVSwgQSwgQiwgQywgUikgX19leHRlbnNpb25fXyAoeyBcCi0gIChfX201MTIpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHBzNTEyX21hc2t6ICgtKF9fdjE2c2YpIChBKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpIChCKSwgKF9fdjE2c2YpIChDKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgKFUpLCAoUikpOyB9KQotCi0KLSNkZWZpbmUgX21tNTEyX2ZubXN1Yl9yb3VuZF9wcyhBLCBCLCBDLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgKF9fbTUxMikgX19idWlsdGluX2lhMzJfdmZtYWRkcHM1MTJfbWFzayAoLShfX3YxNnNmKSAoQSksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpIChCKSwgLShfX3YxNnNmKSAoQyksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgLTEsIChSKSk7IH0pCi0KLQotI2RlZmluZSBfbW01MTJfbWFza3pfZm5tc3ViX3JvdW5kX3BzKFUsIEEsIEIsIEMsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICAoX19tNTEyKSBfX2J1aWx0aW5faWEzMl92Zm1hZGRwczUxMl9tYXNreiAoLShfX3YxNnNmKSAoQSksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKSAoQiksIC0oX192MTZzZikgKEMpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KSAoVSksIChSKSk7IH0pCi0KLQotc3RhdGljIF9faW5saW5lX18gX19tNTEyIF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX2ZtYWRkX3BzKF9fbTUxMiBfX0EsIF9fbTUxMiBfX0IsIF9fbTUxMiBfX0MpCi17Ci0gIHJldHVybiAoX19tNTEyKSBfX2J1aWx0aW5faWEzMl92Zm1hZGRwczUxMl9tYXNrICgoX192MTZzZikgX19BLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpIF9fQiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKSBfX0MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KSAtMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTUxMiBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9tYXNrX2ZtYWRkX3BzKF9fbTUxMiBfX0EsIF9fbW1hc2sxNiBfX1UsIF9fbTUxMiBfX0IsIF9fbTUxMiBfX0MpCi17Ci0gIHJldHVybiAoX19tNTEyKSBfX2J1aWx0aW5faWEzMl92Zm1hZGRwczUxMl9tYXNrICgoX192MTZzZikgX19BLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpIF9fQiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKSBfX0MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfbWFzazNfZm1hZGRfcHMoX19tNTEyIF9fQSwgX19tNTEyIF9fQiwgX19tNTEyIF9fQywgX19tbWFzazE2IF9fVSkKLXsKLSAgcmV0dXJuIChfX201MTIpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHBzNTEyX21hc2szICgoX192MTZzZikgX19BLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKSBfX0IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpIF9fQywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tNTEyIF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX21hc2t6X2ZtYWRkX3BzKF9fbW1hc2sxNiBfX1UsIF9fbTUxMiBfX0EsIF9fbTUxMiBfX0IsIF9fbTUxMiBfX0MpCi17Ci0gIHJldHVybiAoX19tNTEyKSBfX2J1aWx0aW5faWEzMl92Zm1hZGRwczUxMl9tYXNreiAoKF9fdjE2c2YpIF9fQSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikgX19CLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKSBfX0MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTUxMiBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9mbXN1Yl9wcyhfX201MTIgX19BLCBfX201MTIgX19CLCBfX201MTIgX19DKQotewotICByZXR1cm4gKF9fbTUxMikgX19idWlsdGluX2lhMzJfdmZtYWRkcHM1MTJfbWFzayAoKF9fdjE2c2YpIF9fQSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKSBfX0IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKF9fdjE2c2YpIF9fQywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpIC0xLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tNTEyIF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX21hc2tfZm1zdWJfcHMoX19tNTEyIF9fQSwgX19tbWFzazE2IF9fVSwgX19tNTEyIF9fQiwgX19tNTEyIF9fQykKLXsKLSAgcmV0dXJuIChfX201MTIpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHBzNTEyX21hc2sgKChfX3YxNnNmKSBfX0EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikgX19CLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLShfX3YxNnNmKSBfX0MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfbWFza3pfZm1zdWJfcHMoX19tbWFzazE2IF9fVSwgX19tNTEyIF9fQSwgX19tNTEyIF9fQiwgX19tNTEyIF9fQykKLXsKLSAgcmV0dXJuIChfX201MTIpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHBzNTEyX21hc2t6ICgoX192MTZzZikgX19BLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKSBfX0IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLShfX3YxNnNmKSBfX0MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTUxMiBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9mbm1hZGRfcHMoX19tNTEyIF9fQSwgX19tNTEyIF9fQiwgX19tNTEyIF9fQykKLXsKLSAgcmV0dXJuIChfX201MTIpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHBzNTEyX21hc2sgKC0oX192MTZzZikgX19BLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpIF9fQiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKSBfX0MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KSAtMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTUxMiBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9tYXNrM19mbm1hZGRfcHMoX19tNTEyIF9fQSwgX19tNTEyIF9fQiwgX19tNTEyIF9fQywgX19tbWFzazE2IF9fVSkKLXsKLSAgcmV0dXJuIChfX201MTIpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHBzNTEyX21hc2szICgtKF9fdjE2c2YpIF9fQSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikgX19CLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKSBfX0MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTUxMiBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9tYXNrel9mbm1hZGRfcHMoX19tbWFzazE2IF9fVSwgX19tNTEyIF9fQSwgX19tNTEyIF9fQiwgX19tNTEyIF9fQykKLXsKLSAgcmV0dXJuIChfX201MTIpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHBzNTEyX21hc2t6ICgtKF9fdjE2c2YpIF9fQSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikgX19CLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKSBfX0MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTUxMiBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9mbm1zdWJfcHMoX19tNTEyIF9fQSwgX19tNTEyIF9fQiwgX19tNTEyIF9fQykKLXsKLSAgcmV0dXJuIChfX201MTIpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHBzNTEyX21hc2sgKC0oX192MTZzZikgX19BLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpIF9fQiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oX192MTZzZikgX19DLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgLTEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfbWFza3pfZm5tc3ViX3BzKF9fbW1hc2sxNiBfX1UsIF9fbTUxMiBfX0EsIF9fbTUxMiBfX0IsIF9fbTUxMiBfX0MpCi17Ci0gIHJldHVybiAoX19tNTEyKSBfX2J1aWx0aW5faWEzMl92Zm1hZGRwczUxMl9tYXNreiAoLShfX3YxNnNmKSBfX0EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpIF9fQiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKF9fdjE2c2YpIF9fQywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKLX0KLQotI2RlZmluZSBfbW01MTJfZm1hZGRzdWJfcm91bmRfcGQoQSwgQiwgQywgUikgX19leHRlbnNpb25fXyAoeyBcCi0gIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl92Zm1hZGRzdWJwZDUxMl9tYXNrICgoX192OGRmKSAoQSksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpIChCKSwgKF9fdjhkZikgKEMpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xLCAoUikpOyB9KQotCi0KLSNkZWZpbmUgX21tNTEyX21hc2tfZm1hZGRzdWJfcm91bmRfcGQoQSwgVSwgQiwgQywgUikgX19leHRlbnNpb25fXyAoeyBcCi0gIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl92Zm1hZGRzdWJwZDUxMl9tYXNrICgoX192OGRmKSAoQSksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpIChCKSwgKF9fdjhkZikgKEMpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIChVKSwgKFIpKTsgfSkKLQotCi0jZGVmaW5lIF9tbTUxMl9tYXNrM19mbWFkZHN1Yl9yb3VuZF9wZChBLCBCLCBDLCBVLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgKF9fbTUxMmQpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHN1YnBkNTEyX21hc2szICgoX192OGRmKSAoQSksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKSAoQiksIChfX3Y4ZGYpIChDKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgKFUpLCAoUikpOyB9KQotCi0KLSNkZWZpbmUgX21tNTEyX21hc2t6X2ZtYWRkc3ViX3JvdW5kX3BkKFUsIEEsIEIsIEMsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfdmZtYWRkc3VicGQ1MTJfbWFza3ogKChfX3Y4ZGYpIChBKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpIChCKSwgKF9fdjhkZikgKEMpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAoVSksIChSKSk7IH0pCi0KLQotI2RlZmluZSBfbW01MTJfZm1zdWJhZGRfcm91bmRfcGQoQSwgQiwgQywgUikgX19leHRlbnNpb25fXyAoeyBcCi0gIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl92Zm1hZGRzdWJwZDUxMl9tYXNrICgoX192OGRmKSAoQSksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpIChCKSwgLShfX3Y4ZGYpIChDKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSwgKFIpKTsgfSkKLQotCi0jZGVmaW5lIF9tbTUxMl9tYXNrX2Ztc3ViYWRkX3JvdW5kX3BkKEEsIFUsIEIsIEMsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfdmZtYWRkc3VicGQ1MTJfbWFzayAoKF9fdjhkZikgKEEpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKSAoQiksIC0oX192OGRmKSAoQyksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgKFUpLCAoUikpOyB9KQotCi0KLSNkZWZpbmUgX21tNTEyX21hc2t6X2Ztc3ViYWRkX3JvdW5kX3BkKFUsIEEsIEIsIEMsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfdmZtYWRkc3VicGQ1MTJfbWFza3ogKChfX3Y4ZGYpIChBKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpIChCKSwgLShfX3Y4ZGYpIChDKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgKFUpLCAoUikpOyB9KQotCi0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfZm1hZGRzdWJfcGQoX19tNTEyZCBfX0EsIF9fbTUxMmQgX19CLCBfX201MTJkIF9fQykKLXsKLSAgcmV0dXJuIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl92Zm1hZGRzdWJwZDUxMl9tYXNrICgoX192OGRmKSBfX0EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikgX19CLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpIF9fQywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfbWFza19mbWFkZHN1Yl9wZChfX201MTJkIF9fQSwgX19tbWFzazggX19VLCBfX201MTJkIF9fQiwgX19tNTEyZCBfX0MpCi17Ci0gIHJldHVybiAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfdmZtYWRkc3VicGQ1MTJfbWFzayAoKF9fdjhkZikgX19BLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpIF9fQiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKSBfX0MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tNTEyZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9tYXNrM19mbWFkZHN1Yl9wZChfX201MTJkIF9fQSwgX19tNTEyZCBfX0IsIF9fbTUxMmQgX19DLCBfX21tYXNrOCBfX1UpCi17Ci0gIHJldHVybiAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfdmZtYWRkc3VicGQ1MTJfbWFzazMgKChfX3Y4ZGYpIF9fQSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikgX19CLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKSBfX0MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX21hc2t6X2ZtYWRkc3ViX3BkKF9fbW1hc2s4IF9fVSwgX19tNTEyZCBfX0EsIF9fbTUxMmQgX19CLCBfX201MTJkIF9fQykKLXsKLSAgcmV0dXJuIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl92Zm1hZGRzdWJwZDUxMl9tYXNreiAoKF9fdjhkZikgX19BLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKSBfX0IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpIF9fQywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfZm1zdWJhZGRfcGQoX19tNTEyZCBfX0EsIF9fbTUxMmQgX19CLCBfX201MTJkIF9fQykKLXsKLSAgcmV0dXJuIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl92Zm1hZGRzdWJwZDUxMl9tYXNrICgoX192OGRmKSBfX0EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikgX19CLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oX192OGRmKSBfX0MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX21hc2tfZm1zdWJhZGRfcGQoX19tNTEyZCBfX0EsIF9fbW1hc2s4IF9fVSwgX19tNTEyZCBfX0IsIF9fbTUxMmQgX19DKQotewotICByZXR1cm4gKF9fbTUxMmQpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHN1YnBkNTEyX21hc2sgKChfX3Y4ZGYpIF9fQSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKSBfX0IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLShfX3Y4ZGYpIF9fQywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX21hc2t6X2Ztc3ViYWRkX3BkKF9fbW1hc2s4IF9fVSwgX19tNTEyZCBfX0EsIF9fbTUxMmQgX19CLCBfX201MTJkIF9fQykKLXsKLSAgcmV0dXJuIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl92Zm1hZGRzdWJwZDUxMl9tYXNreiAoKF9fdjhkZikgX19BLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKSBfX0IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oX192OGRmKSBfX0MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOwotfQotCi0jZGVmaW5lIF9tbTUxMl9mbWFkZHN1Yl9yb3VuZF9wcyhBLCBCLCBDLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgKF9fbTUxMikgX19idWlsdGluX2lhMzJfdmZtYWRkc3VicHM1MTJfbWFzayAoKF9fdjE2c2YpIChBKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikgKEIpLCAoX192MTZzZikgKEMpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpIC0xLCAoUikpOyB9KQotCi0KLSNkZWZpbmUgX21tNTEyX21hc2tfZm1hZGRzdWJfcm91bmRfcHMoQSwgVSwgQiwgQywgUikgX19leHRlbnNpb25fXyAoeyBcCi0gIChfX201MTIpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHN1YnBzNTEyX21hc2sgKChfX3YxNnNmKSAoQSksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpIChCKSwgKF9fdjE2c2YpIChDKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KSAoVSksIChSKSk7IH0pCi0KLQotI2RlZmluZSBfbW01MTJfbWFzazNfZm1hZGRzdWJfcm91bmRfcHMoQSwgQiwgQywgVSwgUikgX19leHRlbnNpb25fXyAoeyBcCi0gIChfX201MTIpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHN1YnBzNTEyX21hc2szICgoX192MTZzZikgKEEpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikgKEIpLCAoX192MTZzZikgKEMpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KSAoVSksIChSKSk7IH0pCi0KLQotI2RlZmluZSBfbW01MTJfbWFza3pfZm1hZGRzdWJfcm91bmRfcHMoVSwgQSwgQiwgQywgUikgX19leHRlbnNpb25fXyAoeyBcCi0gIChfX201MTIpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHN1YnBzNTEyX21hc2t6ICgoX192MTZzZikgKEEpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikgKEIpLCAoX192MTZzZikgKEMpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KSAoVSksIChSKSk7IH0pCi0KLQotI2RlZmluZSBfbW01MTJfZm1zdWJhZGRfcm91bmRfcHMoQSwgQiwgQywgUikgX19leHRlbnNpb25fXyAoeyBcCi0gIChfX201MTIpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHN1YnBzNTEyX21hc2sgKChfX3YxNnNmKSAoQSksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpIChCKSwgLShfX3YxNnNmKSAoQyksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgLTEsIChSKSk7IH0pCi0KLQotI2RlZmluZSBfbW01MTJfbWFza19mbXN1YmFkZF9yb3VuZF9wcyhBLCBVLCBCLCBDLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgKF9fbTUxMikgX19idWlsdGluX2lhMzJfdmZtYWRkc3VicHM1MTJfbWFzayAoKF9fdjE2c2YpIChBKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikgKEIpLCAtKF9fdjE2c2YpIChDKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KSAoVSksIChSKSk7IH0pCi0KLQotI2RlZmluZSBfbW01MTJfbWFza3pfZm1zdWJhZGRfcm91bmRfcHMoVSwgQSwgQiwgQywgUikgX19leHRlbnNpb25fXyAoeyBcCi0gIChfX201MTIpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHN1YnBzNTEyX21hc2t6ICgoX192MTZzZikgKEEpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikgKEIpLCAtKF9fdjE2c2YpIChDKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgKFUpLCAoUikpOyB9KQotCi0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTUxMiBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9mbWFkZHN1Yl9wcyhfX201MTIgX19BLCBfX201MTIgX19CLCBfX201MTIgX19DKQotewotICByZXR1cm4gKF9fbTUxMikgX19idWlsdGluX2lhMzJfdmZtYWRkc3VicHM1MTJfbWFzayAoKF9fdjE2c2YpIF9fQSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKSBfX0IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikgX19DLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgLTEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfbWFza19mbWFkZHN1Yl9wcyhfX201MTIgX19BLCBfX21tYXNrMTYgX19VLCBfX201MTIgX19CLCBfX201MTIgX19DKQotewotICByZXR1cm4gKF9fbTUxMikgX19idWlsdGluX2lhMzJfdmZtYWRkc3VicHM1MTJfbWFzayAoKF9fdjE2c2YpIF9fQSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKSBfX0IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikgX19DLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tNTEyIF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX21hc2szX2ZtYWRkc3ViX3BzKF9fbTUxMiBfX0EsIF9fbTUxMiBfX0IsIF9fbTUxMiBfX0MsIF9fbW1hc2sxNiBfX1UpCi17Ci0gIHJldHVybiAoX19tNTEyKSBfX2J1aWx0aW5faWEzMl92Zm1hZGRzdWJwczUxMl9tYXNrMyAoKF9fdjE2c2YpIF9fQSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikgX19CLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKSBfX0MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTUxMiBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9tYXNrel9mbWFkZHN1Yl9wcyhfX21tYXNrMTYgX19VLCBfX201MTIgX19BLCBfX201MTIgX19CLCBfX201MTIgX19DKQotewotICByZXR1cm4gKF9fbTUxMikgX19idWlsdGluX2lhMzJfdmZtYWRkc3VicHM1MTJfbWFza3ogKChfX3YxNnNmKSBfX0EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpIF9fQiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikgX19DLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfZm1zdWJhZGRfcHMoX19tNTEyIF9fQSwgX19tNTEyIF9fQiwgX19tNTEyIF9fQykKLXsKLSAgcmV0dXJuIChfX201MTIpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHN1YnBzNTEyX21hc2sgKChfX3YxNnNmKSBfX0EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikgX19CLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLShfX3YxNnNmKSBfX0MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KSAtMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTUxMiBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9tYXNrX2Ztc3ViYWRkX3BzKF9fbTUxMiBfX0EsIF9fbW1hc2sxNiBfX1UsIF9fbTUxMiBfX0IsIF9fbTUxMiBfX0MpCi17Ci0gIHJldHVybiAoX19tNTEyKSBfX2J1aWx0aW5faWEzMl92Zm1hZGRzdWJwczUxMl9tYXNrICgoX192MTZzZikgX19BLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpIF9fQiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oX192MTZzZikgX19DLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tNTEyIF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX21hc2t6X2Ztc3ViYWRkX3BzKF9fbW1hc2sxNiBfX1UsIF9fbTUxMiBfX0EsIF9fbTUxMiBfX0IsIF9fbTUxMiBfX0MpCi17Ci0gIHJldHVybiAoX19tNTEyKSBfX2J1aWx0aW5faWEzMl92Zm1hZGRzdWJwczUxMl9tYXNreiAoKF9fdjE2c2YpIF9fQSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikgX19CLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oX192MTZzZikgX19DLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOwotfQotCi0jZGVmaW5lIF9tbTUxMl9tYXNrM19mbXN1Yl9yb3VuZF9wZChBLCBCLCBDLCBVLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgKF9fbTUxMmQpIF9fYnVpbHRpbl9pYTMyX3ZmbXN1YnBkNTEyX21hc2szICgoX192OGRmKSAoQSksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKSAoQiksIChfX3Y4ZGYpIChDKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgKFUpLCAoUikpOyB9KQotCi0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfbWFzazNfZm1zdWJfcGQoX19tNTEyZCBfX0EsIF9fbTUxMmQgX19CLCBfX201MTJkIF9fQywgX19tbWFzazggX19VKQotewotICByZXR1cm4gKF9fbTUxMmQpIF9fYnVpbHRpbl9pYTMyX3ZmbXN1YnBkNTEyX21hc2szICgoX192OGRmKSBfX0EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpIF9fQiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikgX19DLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKLX0KLQotI2RlZmluZSBfbW01MTJfbWFzazNfZm1zdWJfcm91bmRfcHMoQSwgQiwgQywgVSwgUikgX19leHRlbnNpb25fXyAoeyBcCi0gIChfX201MTIpIF9fYnVpbHRpbl9pYTMyX3ZmbXN1YnBzNTEyX21hc2szICgoX192MTZzZikgKEEpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikgKEIpLCAoX192MTZzZikgKEMpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KSAoVSksIChSKSk7IH0pCi0KLQotc3RhdGljIF9faW5saW5lX18gX19tNTEyIF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX21hc2szX2Ztc3ViX3BzKF9fbTUxMiBfX0EsIF9fbTUxMiBfX0IsIF9fbTUxMiBfX0MsIF9fbW1hc2sxNiBfX1UpCi17Ci0gIHJldHVybiAoX19tNTEyKSBfX2J1aWx0aW5faWEzMl92Zm1zdWJwczUxMl9tYXNrMyAoKF9fdjE2c2YpIF9fQSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikgX19CLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKSBfX0MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Ci19Ci0KLSNkZWZpbmUgX21tNTEyX21hc2szX2Ztc3ViYWRkX3JvdW5kX3BkKEEsIEIsIEMsIFUsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfdmZtc3ViYWRkcGQ1MTJfbWFzazMgKChfX3Y4ZGYpIChBKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpIChCKSwgKF9fdjhkZikgKEMpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAoVSksIChSKSk7IH0pCi0KLQotc3RhdGljIF9faW5saW5lX18gX19tNTEyZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9tYXNrM19mbXN1YmFkZF9wZChfX201MTJkIF9fQSwgX19tNTEyZCBfX0IsIF9fbTUxMmQgX19DLCBfX21tYXNrOCBfX1UpCi17Ci0gIHJldHVybiAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfdmZtc3ViYWRkcGQ1MTJfbWFzazMgKChfX3Y4ZGYpIF9fQSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikgX19CLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKSBfX0MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOwotfQotCi0jZGVmaW5lIF9tbTUxMl9tYXNrM19mbXN1YmFkZF9yb3VuZF9wcyhBLCBCLCBDLCBVLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgKF9fbTUxMikgX19idWlsdGluX2lhMzJfdmZtc3ViYWRkcHM1MTJfbWFzazMgKChfX3YxNnNmKSAoQSksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKSAoQiksIChfX3YxNnNmKSAoQyksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpIChVKSwgKFIpKTsgfSkKLQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfbWFzazNfZm1zdWJhZGRfcHMoX19tNTEyIF9fQSwgX19tNTEyIF9fQiwgX19tNTEyIF9fQywgX19tbWFzazE2IF9fVSkKLXsKLSAgcmV0dXJuIChfX201MTIpIF9fYnVpbHRpbl9pYTMyX3ZmbXN1YmFkZHBzNTEyX21hc2szICgoX192MTZzZikgX19BLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKSBfX0IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpIF9fQywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKLX0KLQotI2RlZmluZSBfbW01MTJfbWFza19mbm1hZGRfcm91bmRfcGQoQSwgVSwgQiwgQywgUikgX19leHRlbnNpb25fXyAoeyBcCi0gIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl92Zm5tYWRkcGQ1MTJfbWFzayAoKF9fdjhkZikgKEEpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikgKEIpLCAoX192OGRmKSAoQyksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIChVKSwgKFIpKTsgfSkKLQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX21hc2tfZm5tYWRkX3BkKF9fbTUxMmQgX19BLCBfX21tYXNrOCBfX1UsIF9fbTUxMmQgX19CLCBfX201MTJkIF9fQykKLXsKLSAgcmV0dXJuIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl92Zm5tYWRkcGQ1MTJfbWFzayAoKF9fdjhkZikgX19BLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKSBfX0IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpIF9fQywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Ci19Ci0KLSNkZWZpbmUgX21tNTEyX21hc2tfZm5tYWRkX3JvdW5kX3BzKEEsIFUsIEIsIEMsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICAoX19tNTEyKSBfX2J1aWx0aW5faWEzMl92Zm5tYWRkcHM1MTJfbWFzayAoKF9fdjE2c2YpIChBKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpIChCKSwgKF9fdjE2c2YpIChDKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgKFUpLCAoUikpOyB9KQotCi0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTUxMiBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9tYXNrX2ZubWFkZF9wcyhfX201MTIgX19BLCBfX21tYXNrMTYgX19VLCBfX201MTIgX19CLCBfX201MTIgX19DKQotewotICByZXR1cm4gKF9fbTUxMikgX19idWlsdGluX2lhMzJfdmZubWFkZHBzNTEyX21hc2sgKChfX3YxNnNmKSBfX0EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpIF9fQiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikgX19DLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOwotfQotCi0jZGVmaW5lIF9tbTUxMl9tYXNrX2ZubXN1Yl9yb3VuZF9wZChBLCBVLCBCLCBDLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgKF9fbTUxMmQpIF9fYnVpbHRpbl9pYTMyX3Zmbm1zdWJwZDUxMl9tYXNrICgoX192OGRmKSAoQSksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKSAoQiksIChfX3Y4ZGYpIChDKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgKFUpLCAoUikpOyB9KQotCi0KLSNkZWZpbmUgX21tNTEyX21hc2szX2ZubXN1Yl9yb3VuZF9wZChBLCBCLCBDLCBVLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgKF9fbTUxMmQpIF9fYnVpbHRpbl9pYTMyX3Zmbm1zdWJwZDUxMl9tYXNrMyAoKF9fdjhkZikgKEEpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpIChCKSwgKF9fdjhkZikgKEMpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgKFUpLCAoUikpOyB9KQotCi0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfbWFza19mbm1zdWJfcGQoX19tNTEyZCBfX0EsIF9fbW1hc2s4IF9fVSwgX19tNTEyZCBfX0IsIF9fbTUxMmQgX19DKQotewotICByZXR1cm4gKF9fbTUxMmQpIF9fYnVpbHRpbl9pYTMyX3Zmbm1zdWJwZDUxMl9tYXNrICgoX192OGRmKSBfX0EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpIF9fQiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikgX19DLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tNTEyZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9tYXNrM19mbm1zdWJfcGQoX19tNTEyZCBfX0EsIF9fbTUxMmQgX19CLCBfX201MTJkIF9fQywgX19tbWFzazggX19VKQotewotICByZXR1cm4gKF9fbTUxMmQpIF9fYnVpbHRpbl9pYTMyX3Zmbm1zdWJwZDUxMl9tYXNrMyAoKF9fdjhkZikgX19BLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikgX19CLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikgX19DLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOwotfQotCi0jZGVmaW5lIF9tbTUxMl9tYXNrX2ZubXN1Yl9yb3VuZF9wcyhBLCBVLCBCLCBDLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgKF9fbTUxMikgX19idWlsdGluX2lhMzJfdmZubXN1YnBzNTEyX21hc2sgKChfX3YxNnNmKSAoQSksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKSAoQiksIChfX3YxNnNmKSAoQyksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpIChVKSwgKFIpKTsgfSkKLQotCi0jZGVmaW5lIF9tbTUxMl9tYXNrM19mbm1zdWJfcm91bmRfcHMoQSwgQiwgQywgVSwgUikgX19leHRlbnNpb25fXyAoeyBcCi0gIChfX201MTIpIF9fYnVpbHRpbl9pYTMyX3Zmbm1zdWJwczUxMl9tYXNrMyAoKF9fdjE2c2YpIChBKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKSAoQiksIChfX3YxNnNmKSAoQyksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KSAoVSksIChSKSk7IH0pCi0KLQotc3RhdGljIF9faW5saW5lX18gX19tNTEyIF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX21hc2tfZm5tc3ViX3BzKF9fbTUxMiBfX0EsIF9fbW1hc2sxNiBfX1UsIF9fbTUxMiBfX0IsIF9fbTUxMiBfX0MpCi17Ci0gIHJldHVybiAoX19tNTEyKSBfX2J1aWx0aW5faWEzMl92Zm5tc3VicHM1MTJfbWFzayAoKF9fdjE2c2YpIF9fQSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikgX19CLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKSBfX0MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTUxMiBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9tYXNrM19mbm1zdWJfcHMoX19tNTEyIF9fQSwgX19tNTEyIF9fQiwgX19tNTEyIF9fQywgX19tbWFzazE2IF9fVSkKLXsKLSAgcmV0dXJuIChfX201MTIpIF9fYnVpbHRpbl9pYTMyX3Zmbm1zdWJwczUxMl9tYXNrMyAoKF9fdjE2c2YpIF9fQSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpIF9fQiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpIF9fQywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOwotfQotCi0KLQotLyogVmVjdG9yIHBlcm11dGF0aW9ucyAqLwotCi1zdGF0aWMgX19pbmxpbmUgX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9wZXJtdXRleDJ2YXJfZXBpMzIoX19tNTEyaSBfX0EsIF9fbTUxMmkgX19JLCBfX201MTJpIF9fQikKLXsKLSAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl92cGVybXQydmFyZDUxMl9tYXNrICgoX192MTZzaSkgX19JCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaWR4ICovICwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzaSkgX19BLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNpKSBfX0IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgLTEpOwotfQotc3RhdGljIF9faW5saW5lIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfcGVybXV0ZXgydmFyX2VwaTY0KF9fbTUxMmkgX19BLCBfX201MTJpIF9fSSwgX19tNTEyaSBfX0IpCi17Ci0gIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfdnBlcm10MnZhcnE1MTJfbWFzayAoKF9fdjhkaSkgX19JCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaWR4ICovICwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRpKSBfX0EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkaSkgX19CLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOwotfQotCi1zdGF0aWMgX19pbmxpbmUgX19tNTEyZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9wZXJtdXRleDJ2YXJfcGQoX19tNTEyZCBfX0EsIF9fbTUxMmkgX19JLCBfX201MTJkIF9fQikKLXsKLSAgcmV0dXJuIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl92cGVybXQydmFycGQ1MTJfbWFzayAoKF9fdjhkaSkgX19JCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlkeCAqLyAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpIF9fQSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikgX19CLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKLX0KLXN0YXRpYyBfX2lubGluZSBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfcGVybXV0ZXgydmFyX3BzKF9fbTUxMiBfX0EsIF9fbTUxMmkgX19JLCBfX201MTIgX19CKQotewotICByZXR1cm4gKF9fbTUxMikgX19idWlsdGluX2lhMzJfdnBlcm10MnZhcnBzNTEyX21hc2sgKChfX3YxNnNpKSBfX0kKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpZHggKi8gLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKSBfX0EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpIF9fQiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KSAtMSk7Ci19Ci0KLSNkZWZpbmUgX21tNTEyX2FsaWducl9lcGk2NChBLCBCLCBJKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgKF9fbTUxMmkpX19idWlsdGluX2lhMzJfYWxpZ25xNTEyX21hc2soKF9fdjhkaSkoX19tNTEyaSkoQSksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkaSkoX19tNTEyaSkoQiksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEkpLCAoX192OGRpKV9tbTUxMl9zZXR6ZXJvX3NpNTEyKCksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsgfSkKLQotI2RlZmluZSBfbW01MTJfYWxpZ25yX2VwaTMyKEEsIEIsIEkpIF9fZXh0ZW5zaW9uX18gKHsgXAotICAoX19tNTEyaSlfX2J1aWx0aW5faWEzMl9hbGlnbmQ1MTJfbWFzaygoX192MTZzaSkoX19tNTEyaSkoQSksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2kpKF9fbTUxMmkpKEIpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChJKSwgKF9fdjE2c2kpX21tNTEyX3NldHplcm9fc2k1MTIoKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KS0xKTsgfSkKLQotLyogVmVjdG9yIEV4dHJhY3QgKi8KLQotI2RlZmluZSBfbW01MTJfZXh0cmFjdGY2NHg0X3BkKEEsIEkpIF9fZXh0ZW5zaW9uX18gKHsgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIChfX20yNTZkKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIF9fYnVpbHRpbl9pYTMyX2V4dHJhY3RmNjR4NF9tYXNrKChfX3Y4ZGYpKF9fbTUxMmQpKEEpLCAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoSSksICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkZilfbW0yNTZfc2V0emVyb19zaTI1NigpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOyB9KQotCi0jZGVmaW5lIF9tbTUxMl9leHRyYWN0ZjMyeDRfcHMoQSwgSSkgX19leHRlbnNpb25fXyAoeyAgICAgICAgICAgICAgICAgICAgXAotICAgICAgKF9fbTEyOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgX19idWlsdGluX2lhMzJfZXh0cmFjdGYzMng0X21hc2soKF9fdjE2c2YpKF9fbTUxMikoQSksICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChJKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKV9tbV9zZXR6ZXJvX3BzKCksICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7IH0pCi0KLS8qIFZlY3RvciBCbGVuZCAqLwotCi1zdGF0aWMgX19pbmxpbmUgX19tNTEyZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9tYXNrX2JsZW5kX3BkKF9fbW1hc2s4IF9fVSwgX19tNTEyZCBfX0EsIF9fbTUxMmQgX19XKQotewotICByZXR1cm4gKF9fbTUxMmQpIF9fYnVpbHRpbl9pYTMyX2JsZW5kbXBkXzUxMl9tYXNrICgoX192OGRmKSBfX0EsCi0gICAgICAgICAgICAgICAgIChfX3Y4ZGYpIF9fVywKLSAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmUgX19tNTEyIF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX21hc2tfYmxlbmRfcHMoX19tbWFzazE2IF9fVSwgX19tNTEyIF9fQSwgX19tNTEyIF9fVykKLXsKLSAgcmV0dXJuIChfX201MTIpIF9fYnVpbHRpbl9pYTMyX2JsZW5kbXBzXzUxMl9tYXNrICgoX192MTZzZikgX19BLAotICAgICAgICAgICAgICAgIChfX3YxNnNmKSBfX1csCi0gICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfbWFza19ibGVuZF9lcGk2NChfX21tYXNrOCBfX1UsIF9fbTUxMmkgX19BLCBfX201MTJpIF9fVykKLXsKLSAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9ibGVuZG1xXzUxMl9tYXNrICgoX192OGRpKSBfX0EsCi0gICAgICAgICAgICAgICAgKF9fdjhkaSkgX19XLAotICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfbWFza19ibGVuZF9lcGkzMihfX21tYXNrMTYgX19VLCBfX201MTJpIF9fQSwgX19tNTEyaSBfX1cpCi17Ci0gIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfYmxlbmRtZF81MTJfbWFzayAoKF9fdjE2c2kpIF9fQSwKLSAgICAgICAgICAgICAgICAoX192MTZzaSkgX19XLAotICAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSk7Ci19Ci0KLS8qIENvbXBhcmUgKi8KLQotI2RlZmluZSBfbW01MTJfY21wX3JvdW5kX3BzX21hc2soQSwgQiwgUCwgUikgX19leHRlbnNpb25fXyAoeyBcCi0gIChfX21tYXNrMTYpX19idWlsdGluX2lhMzJfY21wcHM1MTJfbWFzaygoX192MTZzZikoX19tNTEyKShBKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpKF9fbTUxMikoQiksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChQKSwgKF9fbW1hc2sxNiktMSwgKFIpKTsgfSkKLQotI2RlZmluZSBfbW01MTJfbWFza19jbXBfcm91bmRfcHNfbWFzayhVLCBBLCBCLCBQLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgKF9fbW1hc2sxNilfX2J1aWx0aW5faWEzMl9jbXBwczUxMl9tYXNrKChfX3YxNnNmKShfX201MTIpKEEpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikoX19tNTEyKShCKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFApLCAoX19tbWFzazE2KShVKSwgKFIpKTsgfSkKLQotI2RlZmluZSBfbW01MTJfY21wX3BzX21hc2soQSwgQiwgUCkgXAotICBfbW01MTJfY21wX3JvdW5kX3BzX21hc2soKEEpLCAoQiksIChQKSwgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKQotCi0jZGVmaW5lIF9tbTUxMl9tYXNrX2NtcF9wc19tYXNrKFUsIEEsIEIsIFApIFwKLSAgX21tNTEyX21hc2tfY21wX3JvdW5kX3BzX21hc2soKFUpLCAoQSksIChCKSwgKFApLCBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pCi0KLSNkZWZpbmUgX21tNTEyX2NtcF9yb3VuZF9wZF9tYXNrKEEsIEIsIFAsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICAoX19tbWFzazgpX19idWlsdGluX2lhMzJfY21wcGQ1MTJfbWFzaygoX192OGRmKShfX201MTJkKShBKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKShfX201MTJkKShCKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUCksIChfX21tYXNrOCktMSwgKFIpKTsgfSkKLQotI2RlZmluZSBfbW01MTJfbWFza19jbXBfcm91bmRfcGRfbWFzayhVLCBBLCBCLCBQLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX2NtcHBkNTEyX21hc2soKF9fdjhkZikoX19tNTEyZCkoQSksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikoX19tNTEyZCkoQiksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFApLCAoX19tbWFzazgpKFUpLCAoUikpOyB9KQotCi0jZGVmaW5lIF9tbTUxMl9jbXBfcGRfbWFzayhBLCBCLCBQKSBcCi0gIF9tbTUxMl9jbXBfcm91bmRfcGRfbWFzaygoQSksIChCKSwgKFApLCBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pCi0KLSNkZWZpbmUgX21tNTEyX21hc2tfY21wX3BkX21hc2soVSwgQSwgQiwgUCkgXAotICBfbW01MTJfbWFza19jbXBfcm91bmRfcGRfbWFzaygoVSksIChBKSwgKEIpLCAoUCksIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTikKLQotLyogQ29udmVyc2lvbiAqLwotCi1zdGF0aWMgX19pbmxpbmUgX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9jdnR0cHNfZXB1MzIoX19tNTEyIF9fQSkKLXsKLSAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9jdnR0cHMydWRxNTEyX21hc2sgKChfX3YxNnNmKSBfX0EsCi0gICAgICAgICAgICAgICAgICAoX192MTZzaSkKLSAgICAgICAgICAgICAgICAgIF9tbTUxMl9zZXR6ZXJvX3NpNTEyICgpLAotICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgLTEsCi0gICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOwotfQotCi0jZGVmaW5lIF9tbTUxMl9jdnRfcm91bmRlcGkzMl9wcyhBLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgKF9fbTUxMilfX2J1aWx0aW5faWEzMl9jdnRkcTJwczUxMl9tYXNrKChfX3YxNnNpKShBKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpX21tNTEyX3NldHplcm9fcHMoKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNiktMSwgKFIpKTsgfSkKLQotI2RlZmluZSBfbW01MTJfY3Z0X3JvdW5kZXB1MzJfcHMoQSwgUikgX19leHRlbnNpb25fXyAoeyBcCi0gIChfX201MTIpX19idWlsdGluX2lhMzJfY3Z0dWRxMnBzNTEyX21hc2soKF9fdjE2c2kpKEEpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpX21tNTEyX3NldHplcm9fcHMoKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpLTEsIChSKSk7IH0pCi0KLXN0YXRpYyBfX2lubGluZSBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX2N2dGVwaTMyX3BkKF9fbTI1NmkgX19BKQotewotICByZXR1cm4gKF9fbTUxMmQpIF9fYnVpbHRpbl9pYTMyX2N2dGRxMnBkNTEyX21hc2sgKChfX3Y4c2kpIF9fQSwKLSAgICAgICAgICAgICAgICAoX192OGRmKQotICAgICAgICAgICAgICAgIF9tbTUxMl9zZXR6ZXJvX3BkICgpLAotICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOwotfQotCi1zdGF0aWMgX19pbmxpbmUgX19tNTEyZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9jdnRlcHUzMl9wZChfX20yNTZpIF9fQSkKLXsKLSAgcmV0dXJuIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl9jdnR1ZHEycGQ1MTJfbWFzayAoKF9fdjhzaSkgX19BLAotICAgICAgICAgICAgICAgIChfX3Y4ZGYpCi0gICAgICAgICAgICAgICAgX21tNTEyX3NldHplcm9fcGQgKCksCi0gICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Ci19Ci0KLSNkZWZpbmUgX21tNTEyX2N2dF9yb3VuZHBkX3BzKEEsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICAoX19tMjU2KV9fYnVpbHRpbl9pYTMyX2N2dHBkMnBzNTEyX21hc2soKF9fdjhkZikoQSksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2YpX21tMjU2X3NldHplcm9fcHMoKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xLCAoUikpOyB9KQotCi0jZGVmaW5lIF9tbTUxMl9jdnRwc19waChBLCBJKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgKF9fbTI1NmkpX19idWlsdGluX2lhMzJfdmN2dHBzMnBoNTEyX21hc2soKF9fdjE2c2YpKEEpLCAoSSksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2aGkpX21tMjU2X3NldHplcm9fc2kyNTYoKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMSk7IH0pCi0KLXN0YXRpYyAgX19pbmxpbmUgX19tNTEyIF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX2N2dHBoX3BzKF9fbTI1NmkgX19BKQotewotICByZXR1cm4gKF9fbTUxMikgX19idWlsdGluX2lhMzJfdmN2dHBoMnBzNTEyX21hc2sgKChfX3YxNmhpKSBfX0EsCi0gICAgICAgICAgICAgICAgKF9fdjE2c2YpCi0gICAgICAgICAgICAgICAgX21tNTEyX3NldHplcm9fcHMgKCksCi0gICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgLTEsCi0gICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKLX0KLQotc3RhdGljIF9faW5saW5lIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfY3Z0dHBzX2VwaTMyKF9fbTUxMiBfX2EpCi17Ci0gIHJldHVybiAoX19tNTEyaSkKLSAgICBfX2J1aWx0aW5faWEzMl9jdnR0cHMyZHE1MTJfbWFzaygoX192MTZzZikgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNpKSBfbW01MTJfc2V0emVyb19zaTUxMiAoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KSAtMSwgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKLX0KLQotc3RhdGljIF9faW5saW5lIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfY3Z0dHBkX2VwaTMyKF9fbTUxMmQgX19hKQotewotICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfY3Z0dHBkMmRxNTEyX21hc2soKF9fdjhkZikgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzaSlfbW0yNTZfc2V0emVyb19zaTI1NigpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOwotfQotCi0jZGVmaW5lIF9tbTUxMl9jdnR0X3JvdW5kcGRfZXBpMzIoQSwgUikgX19leHRlbnNpb25fXyAoeyBcCi0gIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX2N2dHRwZDJkcTUxMl9tYXNrKChfX3Y4ZGYpKEEpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2kpX21tMjU2X3NldHplcm9fc2kyNTYoKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEsIChSKSk7IH0pCi0KLSNkZWZpbmUgX21tNTEyX2N2dHRfcm91bmRwc19lcGkzMihBLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgKF9fbTUxMmkpX19idWlsdGluX2lhMzJfY3Z0dHBzMmRxNTEyX21hc2soKF9fdjE2c2YpKEEpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNpKV9tbTUxMl9zZXR6ZXJvX3NpNTEyKCksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNiktMSwgKFIpKTsgfSkKLQotI2RlZmluZSBfbW01MTJfY3Z0X3JvdW5kcHNfZXBpMzIoQSwgUikgX19leHRlbnNpb25fXyAoeyBcCi0gIChfX201MTJpKV9fYnVpbHRpbl9pYTMyX2N2dHBzMmRxNTEyX21hc2soKF9fdjE2c2YpKEEpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2kpX21tNTEyX3NldHplcm9fc2k1MTIoKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpLTEsIChSKSk7IH0pCi0KLSNkZWZpbmUgX21tNTEyX2N2dF9yb3VuZHBkX2VwaTMyKEEsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAotICAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9jdnRwZDJkcTUxMl9tYXNrKChfX3Y4ZGYpKEEpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzaSlfbW0yNTZfc2V0emVyb19zaTI1NigpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xLCAoUikpOyB9KQotCi0jZGVmaW5lIF9tbTUxMl9jdnRfcm91bmRwc19lcHUzMihBLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgKF9fbTUxMmkpX19idWlsdGluX2lhMzJfY3Z0cHMydWRxNTEyX21hc2soKF9fdjE2c2YpKEEpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNpKV9tbTUxMl9zZXR6ZXJvX3NpNTEyKCksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNiktMSwgKFIpKTsgfSkKLQotI2RlZmluZSBfbW01MTJfY3Z0X3JvdW5kcGRfZXB1MzIoQSwgUikgX19leHRlbnNpb25fXyAoeyBcCi0gIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX2N2dHBkMnVkcTUxMl9tYXNrKChfX3Y4ZGYpKEEpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2kpX21tMjU2X3NldHplcm9fc2kyNTYoKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xLCAoUikpOyB9KQotCi0vKiBVbnBhY2sgYW5kIEludGVybGVhdmUgKi8KLXN0YXRpYyBfX2lubGluZSBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX3VucGFja2hpX3BkKF9fbTUxMmQgX19hLCBfX201MTJkIF9fYikKLXsKLSAgcmV0dXJuIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fYSwgX19iLCAxLCA5LCAxKzIsIDkrMiwgMSs0LCA5KzQsIDErNiwgOSs2KTsKLX0KLQotc3RhdGljIF9faW5saW5lIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfdW5wYWNrbG9fcGQoX19tNTEyZCBfX2EsIF9fbTUxMmQgX19iKQotewotICByZXR1cm4gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19hLCBfX2IsIDAsIDgsIDArMiwgOCsyLCAwKzQsIDgrNCwgMCs2LCA4KzYpOwotfQotCi1zdGF0aWMgX19pbmxpbmUgX19tNTEyIF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX3VucGFja2hpX3BzKF9fbTUxMiBfX2EsIF9fbTUxMiBfX2IpCi17Ci0gIHJldHVybiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX2EsIF9fYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIsICAgIDE4LCAgICAzLCAgICAxOSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIrNCwgIDE4KzQsICAzKzQsICAxOSs0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMis4LCAgMTgrOCwgIDMrOCwgIDE5KzgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyKzEyLCAxOCsxMiwgMysxMiwgMTkrMTIpOwotfQotCi1zdGF0aWMgX19pbmxpbmUgX19tNTEyIF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX3VucGFja2xvX3BzKF9fbTUxMiBfX2EsIF9fbTUxMiBfX2IpCi17Ci0gIHJldHVybiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX2EsIF9fYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsICAgIDE2LCAgICAxLCAgICAxNywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDArNCwgIDE2KzQsICAxKzQsICAxNys0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCs4LCAgMTYrOCwgIDErOCwgIDE3KzgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKzEyLCAxNisxMiwgMSsxMiwgMTcrMTIpOwotfQotCi0vKiBCaXQgVGVzdCAqLwotCi1zdGF0aWMgX19pbmxpbmUgX19tbWFzazE2IF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX3Rlc3RfZXBpMzJfbWFzayhfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCi17Ci0gIHJldHVybiAoX19tbWFzazE2KSBfX2J1aWx0aW5faWEzMl9wdGVzdG1kNTEyICgoX192MTZzaSkgX19BLAotICAgICAgICAgICAgKF9fdjE2c2kpIF9fQiwKLSAgICAgICAgICAgIChfX21tYXNrMTYpIC0xKTsKLX0KLQotc3RhdGljIF9faW5saW5lIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX3Rlc3RfZXBpNjRfbWFzayhfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCi17Ci0gIHJldHVybiAoX19tbWFzazgpIF9fYnVpbHRpbl9pYTMyX3B0ZXN0bXE1MTIgKChfX3Y4ZGkpIF9fQSwKLSAgICAgICAgICAgICAgICAgKF9fdjhkaSkgX19CLAotICAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKLX0KLQotLyogU0lNRCBsb2FkIG9wcyAqLwotCi1zdGF0aWMgX19pbmxpbmUgX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9tYXNrel9sb2FkdV9lcGkzMihfX21tYXNrMTYgX19VLCB2b2lkIGNvbnN0ICpfX1ApCi17Ci0gIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfbG9hZGRxdXNpNTEyX21hc2sgKChjb25zdCBfX3YxNnNpICopX19QLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzaSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX21tNTEyX3NldHplcm9fc2k1MTIgKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZSBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX21hc2t6X2xvYWR1X2VwaTY0KF9fbW1hc2s4IF9fVSwgdm9pZCBjb25zdCAqX19QKQotewotICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX2xvYWRkcXVkaTUxMl9tYXNrICgoY29uc3QgX192OGRpICopX19QLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfbW01MTJfc2V0emVyb19zaTUxMiAoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmUgX19tNTEyIF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX21hc2t6X2xvYWR1X3BzKF9fbW1hc2sxNiBfX1UsIHZvaWQgY29uc3QgKl9fUCkKLXsKLSAgcmV0dXJuIChfX201MTIpIF9fYnVpbHRpbl9pYTMyX2xvYWR1cHM1MTJfbWFzayAoKGNvbnN0IF9fdjE2c2YgKilfX1AsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfbW01MTJfc2V0emVyb19wcyAoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfbWFza3pfbG9hZHVfcGQoX19tbWFzazggX19VLCB2b2lkIGNvbnN0ICpfX1ApCi17Ci0gIHJldHVybiAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfbG9hZHVwZDUxMl9tYXNrICgoY29uc3QgX192OGRmICopX19QLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9tbTUxMl9zZXR6ZXJvX3BkICgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmUgX19tNTEyIF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX21hc2t6X2xvYWRfcHMoX19tbWFzazE2IF9fVSwgdm9pZCBjb25zdCAqX19QKQotewotICByZXR1cm4gKF9fbTUxMikgX19idWlsdGluX2lhMzJfbG9hZGFwczUxMl9tYXNrICgoY29uc3QgX192MTZzZiAqKV9fUCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9tbTUxMl9zZXR6ZXJvX3BzICgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmUgX19tNTEyZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9tYXNrel9sb2FkX3BkKF9fbW1hc2s4IF9fVSwgdm9pZCBjb25zdCAqX19QKQotewotICByZXR1cm4gKF9fbTUxMmQpIF9fYnVpbHRpbl9pYTMyX2xvYWRhcGQ1MTJfbWFzayAoKGNvbnN0IF9fdjhkZiAqKV9fUCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfbW01MTJfc2V0emVyb19wZCAoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfbG9hZHVfcGQoZG91YmxlIGNvbnN0ICpfX3ApCi17Ci0gIHN0cnVjdCBfX2xvYWR1X3BkIHsKLSAgICBfX201MTJkIF9fdjsKLSAgfSBfX2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9fLCBfX21heV9hbGlhc19fKSk7Ci0gIHJldHVybiAoKHN0cnVjdCBfX2xvYWR1X3BkKilfX3ApLT5fX3Y7Ci19Ci0KLXN0YXRpYyBfX2lubGluZSBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfbG9hZHVfcHMoZmxvYXQgY29uc3QgKl9fcCkKLXsKLSAgc3RydWN0IF9fbG9hZHVfcHMgewotICAgIF9fbTUxMiBfX3Y7Ci0gIH0gX19hdHRyaWJ1dGVfXygoX19wYWNrZWRfXywgX19tYXlfYWxpYXNfXykpOwotICByZXR1cm4gKChzdHJ1Y3QgX19sb2FkdV9wcyopX19wKS0+X192OwotfQotCi1zdGF0aWMgX19pbmxpbmUgX19tNTEyIF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX2xvYWRfcHMoZG91YmxlIGNvbnN0ICpfX3ApCi17Ci0gIHJldHVybiAoX19tNTEyKSBfX2J1aWx0aW5faWEzMl9sb2FkYXBzNTEyX21hc2sgKChjb25zdCBfX3YxNnNmICopX19wLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX21tNTEyX3NldHplcm9fcHMgKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpIC0xKTsKLX0KLQotc3RhdGljIF9faW5saW5lIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfbG9hZF9wZChmbG9hdCBjb25zdCAqX19wKQotewotICByZXR1cm4gKF9fbTUxMmQpIF9fYnVpbHRpbl9pYTMyX2xvYWRhcGQ1MTJfbWFzayAoKGNvbnN0IF9fdjhkZiAqKV9fcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfbW01MTJfc2V0emVyb19wZCAoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOwotfQotCi0vKiBTSU1EIHN0b3JlIG9wcyAqLwotCi1zdGF0aWMgX19pbmxpbmUgdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9tYXNrX3N0b3JldV9lcGk2NCh2b2lkICpfX1AsIF9fbW1hc2s4IF9fVSwgX19tNTEyaSBfX0EpCi17Ci0gIF9fYnVpbHRpbl9pYTMyX3N0b3JlZHF1ZGk1MTJfbWFzayAoKF9fdjhkaSAqKV9fUCwgKF9fdjhkaSkgX19BLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfbWFza19zdG9yZXVfZXBpMzIodm9pZCAqX19QLCBfX21tYXNrMTYgX19VLCBfX201MTJpIF9fQSkKLXsKLSAgX19idWlsdGluX2lhMzJfc3RvcmVkcXVzaTUxMl9tYXNrICgoX192MTZzaSAqKV9fUCwgKF9fdjE2c2kpIF9fQSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmUgdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9tYXNrX3N0b3JldV9wZCh2b2lkICpfX1AsIF9fbW1hc2s4IF9fVSwgX19tNTEyZCBfX0EpCi17Ci0gIF9fYnVpbHRpbl9pYTMyX3N0b3JldXBkNTEyX21hc2sgKChfX3Y4ZGYgKilfX1AsIChfX3Y4ZGYpIF9fQSwgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmUgdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9zdG9yZXVfcGQodm9pZCAqX19QLCBfX201MTJkIF9fQSkKLXsKLSAgX19idWlsdGluX2lhMzJfc3RvcmV1cGQ1MTJfbWFzaygoX192OGRmICopX19QLCAoX192OGRmKV9fQSwgKF9fbW1hc2s4KS0xKTsKLX0KLQotc3RhdGljIF9faW5saW5lIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfbWFza19zdG9yZXVfcHModm9pZCAqX19QLCBfX21tYXNrMTYgX19VLCBfX201MTIgX19BKQotewotICBfX2J1aWx0aW5faWEzMl9zdG9yZXVwczUxMl9tYXNrICgoX192MTZzZiAqKV9fUCwgKF9fdjE2c2YpIF9fQSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfc3RvcmV1X3BzKHZvaWQgKl9fUCwgX19tNTEyIF9fQSkKLXsKLSAgX19idWlsdGluX2lhMzJfc3RvcmV1cHM1MTJfbWFzaygoX192MTZzZiAqKV9fUCwgKF9fdjE2c2YpX19BLCAoX19tbWFzazE2KS0xKTsKLX0KLQotc3RhdGljIF9faW5saW5lIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfbWFza19zdG9yZV9wZCh2b2lkICpfX1AsIF9fbW1hc2s4IF9fVSwgX19tNTEyZCBfX0EpCi17Ci0gIF9fYnVpbHRpbl9pYTMyX3N0b3JlYXBkNTEyX21hc2sgKChfX3Y4ZGYgKilfX1AsIChfX3Y4ZGYpIF9fQSwgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmUgdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9zdG9yZV9wZCh2b2lkICpfX1AsIF9fbTUxMmQgX19BKQotewotICAqKF9fbTUxMmQqKV9fUCA9IF9fQTsKLX0KLQotc3RhdGljIF9faW5saW5lIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfbWFza19zdG9yZV9wcyh2b2lkICpfX1AsIF9fbW1hc2sxNiBfX1UsIF9fbTUxMiBfX0EpCi17Ci0gIF9fYnVpbHRpbl9pYTMyX3N0b3JlYXBzNTEyX21hc2sgKChfX3YxNnNmICopX19QLCAoX192MTZzZikgX19BLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmUgdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9zdG9yZV9wcyh2b2lkICpfX1AsIF9fbTUxMiBfX0EpCi17Ci0gICooX19tNTEyKilfX1AgPSBfX0E7Ci19Ci0KLS8qIE1hc2sgb3BzICovCi0KLXN0YXRpYyBfX2lubGluZSBfX21tYXNrMTYgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfa25vdChfX21tYXNrMTYgX19NKQotewotICByZXR1cm4gX19idWlsdGluX2lhMzJfa25vdGhpKF9fTSk7Ci19Ci0KLS8qIEludGVnZXIgY29tcGFyZSAqLwotCi1zdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMTYgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfY21wZXFfZXBpMzJfbWFzayhfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpIHsKLSAgcmV0dXJuIChfX21tYXNrMTYpX19idWlsdGluX2lhMzJfcGNtcGVxZDUxMl9tYXNrKChfX3YxNnNpKV9fYSwgKF9fdjE2c2kpX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNiktMSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbW1hc2sxNiBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9tYXNrX2NtcGVxX2VwaTMyX21hc2soX19tbWFzazE2IF9fdSwgX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7Ci0gIHJldHVybiAoX19tbWFzazE2KV9fYnVpbHRpbl9pYTMyX3BjbXBlcWQ1MTJfbWFzaygoX192MTZzaSlfX2EsIChfX3YxNnNpKV9fYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbW1hc2sxNiBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9jbXBlcV9lcHUzMl9tYXNrKF9fbTUxMmkgX19hLCBfX201MTJpIF9fYikgewotICByZXR1cm4gKF9fbW1hc2sxNilfX2J1aWx0aW5faWEzMl91Y21wZDUxMl9tYXNrKChfX3YxNnNpKV9fYSwgKF9fdjE2c2kpX19iLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpLTEpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMTYgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfbWFza19jbXBlcV9lcHUzMl9tYXNrKF9fbW1hc2sxNiBfX3UsIF9fbTUxMmkgX19hLCBfX201MTJpIF9fYikgewotICByZXR1cm4gKF9fbW1hc2sxNilfX2J1aWx0aW5faWEzMl91Y21wZDUxMl9tYXNrKChfX3YxNnNpKV9fYSwgKF9fdjE2c2kpX19iLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX21hc2tfY21wZXFfZXBpNjRfbWFzayhfX21tYXNrOCBfX3UsIF9fbTUxMmkgX19hLCBfX201MTJpIF9fYikgewotICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3BjbXBlcXE1MTJfbWFzaygoX192OGRpKV9fYSwgKF9fdjhkaSlfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX2NtcGVxX2VwaTY0X21hc2soX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7Ci0gIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfcGNtcGVxcTUxMl9tYXNrKChfX3Y4ZGkpX19hLCAoX192OGRpKV9fYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfY21wZXFfZXB1NjRfbWFzayhfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpIHsKLSAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl91Y21wcTUxMl9tYXNrKChfX3Y4ZGkpX19hLCAoX192OGRpKV9fYiwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX21hc2tfY21wZXFfZXB1NjRfbWFzayhfX21tYXNrOCBfX3UsIF9fbTUxMmkgX19hLCBfX201MTJpIF9fYikgewotICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3VjbXBxNTEyX21hc2soKF9fdjhkaSlfX2EsIChfX3Y4ZGkpX19iLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tbWFzazE2IF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX2NtcGdlX2VwaTMyX21hc2soX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7Ci0gIHJldHVybiAoX19tbWFzazE2KV9fYnVpbHRpbl9pYTMyX2NtcGQ1MTJfbWFzaygoX192MTZzaSlfX2EsIChfX3YxNnNpKV9fYiwgNSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpLTEpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMTYgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfbWFza19jbXBnZV9lcGkzMl9tYXNrKF9fbW1hc2sxNiBfX3UsIF9fbTUxMmkgX19hLCBfX201MTJpIF9fYikgewotICByZXR1cm4gKF9fbW1hc2sxNilfX2J1aWx0aW5faWEzMl9jbXBkNTEyX21hc2soKF9fdjE2c2kpX19hLCAoX192MTZzaSlfX2IsIDUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMTYgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfY21wZ2VfZXB1MzJfbWFzayhfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpIHsKLSAgcmV0dXJuIChfX21tYXNrMTYpX19idWlsdGluX2lhMzJfdWNtcGQ1MTJfbWFzaygoX192MTZzaSlfX2EsIChfX3YxNnNpKV9fYiwgNSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KS0xKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tbWFzazE2IF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX21hc2tfY21wZ2VfZXB1MzJfbWFzayhfX21tYXNrMTYgX191LCBfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpIHsKLSAgcmV0dXJuIChfX21tYXNrMTYpX19idWlsdGluX2lhMzJfdWNtcGQ1MTJfbWFzaygoX192MTZzaSlfX2EsIChfX3YxNnNpKV9fYiwgNSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9jbXBnZV9lcGk2NF9tYXNrKF9fbTUxMmkgX19hLCBfX201MTJpIF9fYikgewotICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX2NtcHE1MTJfbWFzaygoX192OGRpKV9fYSwgKF9fdjhkaSlfX2IsIDUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX21hc2tfY21wZ2VfZXBpNjRfbWFzayhfX21tYXNrOCBfX3UsIF9fbTUxMmkgX19hLCBfX201MTJpIF9fYikgewotICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX2NtcHE1MTJfbWFzaygoX192OGRpKV9fYSwgKF9fdjhkaSlfX2IsIDUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX2NtcGdlX2VwdTY0X21hc2soX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7Ci0gIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfdWNtcHE1MTJfbWFzaygoX192OGRpKV9fYSwgKF9fdjhkaSlfX2IsIDUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9tYXNrX2NtcGdlX2VwdTY0X21hc2soX19tbWFzazggX191LCBfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpIHsKLSAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl91Y21wcTUxMl9tYXNrKChfX3Y4ZGkpX19hLCAoX192OGRpKV9fYiwgNSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbW1hc2sxNiBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9jbXBndF9lcGkzMl9tYXNrKF9fbTUxMmkgX19hLCBfX201MTJpIF9fYikgewotICByZXR1cm4gKF9fbW1hc2sxNilfX2J1aWx0aW5faWEzMl9wY21wZ3RkNTEyX21hc2soKF9fdjE2c2kpX19hLCAoX192MTZzaSlfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KS0xKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tbWFzazE2IF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX21hc2tfY21wZ3RfZXBpMzJfbWFzayhfX21tYXNrMTYgX191LCBfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpIHsKLSAgcmV0dXJuIChfX21tYXNrMTYpX19idWlsdGluX2lhMzJfcGNtcGd0ZDUxMl9tYXNrKChfX3YxNnNpKV9fYSwgKF9fdjE2c2kpX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tbWFzazE2IF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX2NtcGd0X2VwdTMyX21hc2soX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7Ci0gIHJldHVybiAoX19tbWFzazE2KV9fYnVpbHRpbl9pYTMyX3VjbXBkNTEyX21hc2soKF9fdjE2c2kpX19hLCAoX192MTZzaSlfX2IsIDYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNiktMSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbW1hc2sxNiBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9tYXNrX2NtcGd0X2VwdTMyX21hc2soX19tbWFzazE2IF9fdSwgX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7Ci0gIHJldHVybiAoX19tbWFzazE2KV9fYnVpbHRpbl9pYTMyX3VjbXBkNTEyX21hc2soKF9fdjE2c2kpX19hLCAoX192MTZzaSlfX2IsIDYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfbWFza19jbXBndF9lcGk2NF9tYXNrKF9fbW1hc2s4IF9fdSwgX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7Ci0gIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfcGNtcGd0cTUxMl9tYXNrKChfX3Y4ZGkpX19hLCAoX192OGRpKV9fYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfY21wZ3RfZXBpNjRfbWFzayhfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpIHsKLSAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9wY21wZ3RxNTEyX21hc2soKF9fdjhkaSlfX2EsIChfX3Y4ZGkpX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9jbXBndF9lcHU2NF9tYXNrKF9fbTUxMmkgX19hLCBfX201MTJpIF9fYikgewotICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3VjbXBxNTEyX21hc2soKF9fdjhkaSlfX2EsIChfX3Y4ZGkpX19iLCA2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfbWFza19jbXBndF9lcHU2NF9tYXNrKF9fbW1hc2s4IF9fdSwgX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7Ci0gIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfdWNtcHE1MTJfbWFzaygoX192OGRpKV9fYSwgKF9fdjhkaSlfX2IsIDYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMTYgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfY21wbGVfZXBpMzJfbWFzayhfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpIHsKLSAgcmV0dXJuIChfX21tYXNrMTYpX19idWlsdGluX2lhMzJfY21wZDUxMl9tYXNrKChfX3YxNnNpKV9fYSwgKF9fdjE2c2kpX19iLCAyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNiktMSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbW1hc2sxNiBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9tYXNrX2NtcGxlX2VwaTMyX21hc2soX19tbWFzazE2IF9fdSwgX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7Ci0gIHJldHVybiAoX19tbWFzazE2KV9fYnVpbHRpbl9pYTMyX2NtcGQ1MTJfbWFzaygoX192MTZzaSlfX2EsIChfX3YxNnNpKV9fYiwgMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbW1hc2sxNiBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9jbXBsZV9lcHUzMl9tYXNrKF9fbTUxMmkgX19hLCBfX201MTJpIF9fYikgewotICByZXR1cm4gKF9fbW1hc2sxNilfX2J1aWx0aW5faWEzMl91Y21wZDUxMl9tYXNrKChfX3YxNnNpKV9fYSwgKF9fdjE2c2kpX19iLCAyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpLTEpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMTYgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfbWFza19jbXBsZV9lcHUzMl9tYXNrKF9fbW1hc2sxNiBfX3UsIF9fbTUxMmkgX19hLCBfX201MTJpIF9fYikgewotICByZXR1cm4gKF9fbW1hc2sxNilfX2J1aWx0aW5faWEzMl91Y21wZDUxMl9tYXNrKChfX3YxNnNpKV9fYSwgKF9fdjE2c2kpX19iLCAyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX2NtcGxlX2VwaTY0X21hc2soX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7Ci0gIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfY21wcTUxMl9tYXNrKChfX3Y4ZGkpX19hLCAoX192OGRpKV9fYiwgMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfbWFza19jbXBsZV9lcGk2NF9tYXNrKF9fbW1hc2s4IF9fdSwgX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7Ci0gIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfY21wcTUxMl9tYXNrKChfX3Y4ZGkpX19hLCAoX192OGRpKV9fYiwgMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfY21wbGVfZXB1NjRfbWFzayhfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpIHsKLSAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl91Y21wcTUxMl9tYXNrKChfX3Y4ZGkpX19hLCAoX192OGRpKV9fYiwgMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX21hc2tfY21wbGVfZXB1NjRfbWFzayhfX21tYXNrOCBfX3UsIF9fbTUxMmkgX19hLCBfX201MTJpIF9fYikgewotICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3VjbXBxNTEyX21hc2soKF9fdjhkaSlfX2EsIChfX3Y4ZGkpX19iLCAyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tbWFzazE2IF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX2NtcGx0X2VwaTMyX21hc2soX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7Ci0gIHJldHVybiAoX19tbWFzazE2KV9fYnVpbHRpbl9pYTMyX2NtcGQ1MTJfbWFzaygoX192MTZzaSlfX2EsIChfX3YxNnNpKV9fYiwgMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpLTEpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMTYgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfbWFza19jbXBsdF9lcGkzMl9tYXNrKF9fbW1hc2sxNiBfX3UsIF9fbTUxMmkgX19hLCBfX201MTJpIF9fYikgewotICByZXR1cm4gKF9fbW1hc2sxNilfX2J1aWx0aW5faWEzMl9jbXBkNTEyX21hc2soKF9fdjE2c2kpX19hLCAoX192MTZzaSlfX2IsIDEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMTYgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfY21wbHRfZXB1MzJfbWFzayhfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpIHsKLSAgcmV0dXJuIChfX21tYXNrMTYpX19idWlsdGluX2lhMzJfdWNtcGQ1MTJfbWFzaygoX192MTZzaSlfX2EsIChfX3YxNnNpKV9fYiwgMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KS0xKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tbWFzazE2IF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX21hc2tfY21wbHRfZXB1MzJfbWFzayhfX21tYXNrMTYgX191LCBfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpIHsKLSAgcmV0dXJuIChfX21tYXNrMTYpX19idWlsdGluX2lhMzJfdWNtcGQ1MTJfbWFzaygoX192MTZzaSlfX2EsIChfX3YxNnNpKV9fYiwgMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9jbXBsdF9lcGk2NF9tYXNrKF9fbTUxMmkgX19hLCBfX201MTJpIF9fYikgewotICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX2NtcHE1MTJfbWFzaygoX192OGRpKV9fYSwgKF9fdjhkaSlfX2IsIDEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX21hc2tfY21wbHRfZXBpNjRfbWFzayhfX21tYXNrOCBfX3UsIF9fbTUxMmkgX19hLCBfX201MTJpIF9fYikgewotICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX2NtcHE1MTJfbWFzaygoX192OGRpKV9fYSwgKF9fdjhkaSlfX2IsIDEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX2NtcGx0X2VwdTY0X21hc2soX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7Ci0gIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfdWNtcHE1MTJfbWFzaygoX192OGRpKV9fYSwgKF9fdjhkaSlfX2IsIDEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9tYXNrX2NtcGx0X2VwdTY0X21hc2soX19tbWFzazggX191LCBfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpIHsKLSAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl91Y21wcTUxMl9tYXNrKChfX3Y4ZGkpX19hLCAoX192OGRpKV9fYiwgMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbW1hc2sxNiBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9jbXBuZXFfZXBpMzJfbWFzayhfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpIHsKLSAgcmV0dXJuIChfX21tYXNrMTYpX19idWlsdGluX2lhMzJfY21wZDUxMl9tYXNrKChfX3YxNnNpKV9fYSwgKF9fdjE2c2kpX19iLCA0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNiktMSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbW1hc2sxNiBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9tYXNrX2NtcG5lcV9lcGkzMl9tYXNrKF9fbW1hc2sxNiBfX3UsIF9fbTUxMmkgX19hLCBfX201MTJpIF9fYikgewotICByZXR1cm4gKF9fbW1hc2sxNilfX2J1aWx0aW5faWEzMl9jbXBkNTEyX21hc2soKF9fdjE2c2kpX19hLCAoX192MTZzaSlfX2IsIDQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMTYgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW01MTJfY21wbmVxX2VwdTMyX21hc2soX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7Ci0gIHJldHVybiAoX19tbWFzazE2KV9fYnVpbHRpbl9pYTMyX3VjbXBkNTEyX21hc2soKF9fdjE2c2kpX19hLCAoX192MTZzaSlfX2IsIDQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNiktMSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbW1hc2sxNiBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9tYXNrX2NtcG5lcV9lcHUzMl9tYXNrKF9fbW1hc2sxNiBfX3UsIF9fbTUxMmkgX19hLCBfX201MTJpIF9fYikgewotICByZXR1cm4gKF9fbW1hc2sxNilfX2J1aWx0aW5faWEzMl91Y21wZDUxMl9tYXNrKChfX3YxNnNpKV9fYSwgKF9fdjE2c2kpX19iLCA0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX2NtcG5lcV9lcGk2NF9tYXNrKF9fbTUxMmkgX19hLCBfX201MTJpIF9fYikgewotICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX2NtcHE1MTJfbWFzaygoX192OGRpKV9fYSwgKF9fdjhkaSlfX2IsIDQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX21hc2tfY21wbmVxX2VwaTY0X21hc2soX19tbWFzazggX191LCBfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpIHsKLSAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9jbXBxNTEyX21hc2soKF9fdjhkaSlfX2EsIChfX3Y4ZGkpX19iLCA0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTUxMl9jbXBuZXFfZXB1NjRfbWFzayhfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpIHsKLSAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl91Y21wcTUxMl9tYXNrKChfX3Y4ZGkpX19hLCAoX192OGRpKV9fYiwgNCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUwotX21tNTEyX21hc2tfY21wbmVxX2VwdTY0X21hc2soX19tbWFzazggX191LCBfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpIHsKLSAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl91Y21wcTUxMl9tYXNrKChfX3Y4ZGkpX19hLCAoX192OGRpKV9fYiwgNCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Ci19Ci0KLSNkZWZpbmUgX21tNTEyX2NtcF9lcGkzMl9tYXNrKGEsIGIsIHApIF9fZXh0ZW5zaW9uX18gKHsgXAotICAoX19tbWFzazE2KV9fYnVpbHRpbl9pYTMyX2NtcGQ1MTJfbWFzaygoX192MTZzaSkoX19tNTEyaSkoYSksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2kpKF9fbTUxMmkpKGIpLCAocCksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNiktMSk7IH0pCi0KLSNkZWZpbmUgX21tNTEyX2NtcF9lcHUzMl9tYXNrKGEsIGIsIHApIF9fZXh0ZW5zaW9uX18gKHsgXAotICAoX19tbWFzazE2KV9fYnVpbHRpbl9pYTMyX3VjbXBkNTEyX21hc2soKF9fdjE2c2kpKF9fbTUxMmkpKGEpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzaSkoX19tNTEyaSkoYiksIChwKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNiktMSk7IH0pCi0KLSNkZWZpbmUgX21tNTEyX2NtcF9lcGk2NF9tYXNrKGEsIGIsIHApIF9fZXh0ZW5zaW9uX18gKHsgXAotICAoX19tbWFzazgpX19idWlsdGluX2lhMzJfY21wcTUxMl9tYXNrKChfX3Y4ZGkpKF9fbTUxMmkpKGEpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkaSkoX19tNTEyaSkoYiksIChwKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7IH0pCi0KLSNkZWZpbmUgX21tNTEyX2NtcF9lcHU2NF9tYXNrKGEsIGIsIHApIF9fZXh0ZW5zaW9uX18gKHsgXAotICAoX19tbWFzazgpX19idWlsdGluX2lhMzJfdWNtcHE1MTJfbWFzaygoX192OGRpKShfX201MTJpKShhKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRpKShfX201MTJpKShiKSwgKHApLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7IH0pCi0KLSNkZWZpbmUgX21tNTEyX21hc2tfY21wX2VwaTMyX21hc2sobSwgYSwgYiwgcCkgX19leHRlbnNpb25fXyAoeyBcCi0gIChfX21tYXNrMTYpX19idWlsdGluX2lhMzJfY21wZDUxMl9tYXNrKChfX3YxNnNpKShfX201MTJpKShhKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzaSkoX19tNTEyaSkoYiksIChwKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KShtKSk7IH0pCi0KLSNkZWZpbmUgX21tNTEyX21hc2tfY21wX2VwdTMyX21hc2sobSwgYSwgYiwgcCkgX19leHRlbnNpb25fXyAoeyBcCi0gIChfX21tYXNrMTYpX19idWlsdGluX2lhMzJfdWNtcGQ1MTJfbWFzaygoX192MTZzaSkoX19tNTEyaSkoYSksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNpKShfX201MTJpKShiKSwgKHApLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KShtKSk7IH0pCi0KLSNkZWZpbmUgX21tNTEyX21hc2tfY21wX2VwaTY0X21hc2sobSwgYSwgYiwgcCkgX19leHRlbnNpb25fXyAoeyBcCi0gIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9jbXBxNTEyX21hc2soKF9fdjhkaSkoX19tNTEyaSkoYSksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRpKShfX201MTJpKShiKSwgKHApLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShtKSk7IH0pCi0KLSNkZWZpbmUgX21tNTEyX21hc2tfY21wX2VwdTY0X21hc2sobSwgYSwgYiwgcCkgX19leHRlbnNpb25fXyAoeyBcCi0gIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl91Y21wcTUxMl9tYXNrKChfX3Y4ZGkpKF9fbTUxMmkpKGEpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpKF9fbTUxMmkpKGIpLCAocCksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShtKSk7IH0pCi0KLSN1bmRlZiBfX0RFRkFVTFRfRk5fQVRUUlMKLQotI2VuZGlmIC8vIF9fQVZYNTEyRklOVFJJTl9ICmRpZmYgLS1naXQgYS9jbGFuZy0yNTc3MTEzL2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL2F2eDUxMnZsYndpbnRyaW4uaCBiL2NsYW5nLTI1NzcxMTMvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvYXZ4NTEydmxid2ludHJpbi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNDU0MmQ2Li4wMDAwMDAwCi0tLSBhL2NsYW5nLTI1NzcxMTMvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvYXZ4NTEydmxid2ludHJpbi5oCisrKyAvZGV2L251bGwKQEAgLTEsMjMzNiArMCwwIEBACi0vKj09PS0tLS0gYXZ4NTEydmxid2ludHJpbi5oIC0gQVZYNTEyVkwgYW5kIEFWWDUxMkJXIGludHJpbnNpY3MgLS0tLS0tLS0tLS0tPT09Ci0gKgotICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQotICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKLSAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKLSAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKLSAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcwotICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKLSAqCi0gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgotICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCi0gKgotICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKLSAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAotICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCi0gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAotICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgotICogVEhFIFNPRlRXQVJFLgotICoKLSAqPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KLSAqLwotCi0jaWZuZGVmIF9fSU1NSU5UUklOX0gKLSNlcnJvciAiTmV2ZXIgdXNlIDxhdng1MTJ2bGJ3aW50cmluLmg+IGRpcmVjdGx5OyBpbmNsdWRlIDxpbW1pbnRyaW4uaD4gaW5zdGVhZC4iCi0jZW5kaWYKLQotI2lmbmRlZiBfX0FWWDUxMlZMQldJTlRSSU5fSAotI2RlZmluZSBfX0FWWDUxMlZMQldJTlRSSU5fSAotCi0vKiBEZWZpbmUgdGhlIGRlZmF1bHQgYXR0cmlidXRlcyBmb3IgdGhlIGZ1bmN0aW9ucyBpbiB0aGlzIGZpbGUuICovCi0jZGVmaW5lIF9fREVGQVVMVF9GTl9BVFRSUyBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18sIF9fdGFyZ2V0X18oImF2eDUxMnZsLGF2eDUxMmJ3IikpKQotCi0vKiBJbnRlZ2VyIGNvbXBhcmUgKi8KLQotc3RhdGljIF9faW5saW5lX18gX19tbWFzazE2IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2NtcGVxX2VwaThfbWFzayhfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpIHsKLSAgcmV0dXJuIChfX21tYXNrMTYpX19idWlsdGluX2lhMzJfcGNtcGVxYjEyOF9tYXNrKChfX3YxNnFpKV9fYSwgKF9fdjE2cWkpX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNiktMSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbW1hc2sxNiBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tYXNrX2NtcGVxX2VwaThfbWFzayhfX21tYXNrMTYgX191LCBfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpIHsKLSAgcmV0dXJuIChfX21tYXNrMTYpX19idWlsdGluX2lhMzJfcGNtcGVxYjEyOF9tYXNrKChfX3YxNnFpKV9fYSwgKF9fdjE2cWkpX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tbWFzazE2IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2NtcGVxX2VwdThfbWFzayhfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpIHsKLSAgcmV0dXJuIChfX21tYXNrMTYpX19idWlsdGluX2lhMzJfdWNtcGIxMjhfbWFzaygoX192MTZxaSlfX2EsIChfX3YxNnFpKV9fYiwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KS0xKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tbWFzazE2IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2tfY21wZXFfZXB1OF9tYXNrKF9fbW1hc2sxNiBfX3UsIF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikgewotICByZXR1cm4gKF9fbW1hc2sxNilfX2J1aWx0aW5faWEzMl91Y21wYjEyOF9tYXNrKChfX3YxNnFpKV9fYSwgKF9fdjE2cWkpX19iLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbW1hc2szMiBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9jbXBlcV9lcGk4X21hc2soX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7Ci0gIHJldHVybiAoX19tbWFzazMyKV9fYnVpbHRpbl9pYTMyX3BjbXBlcWIyNTZfbWFzaygoX192MzJxaSlfX2EsIChfX3YzMnFpKV9fYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMzIpLTEpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMzIgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfbWFza19jbXBlcV9lcGk4X21hc2soX19tbWFzazMyIF9fdSwgX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7Ci0gIHJldHVybiAoX19tbWFzazMyKV9fYnVpbHRpbl9pYTMyX3BjbXBlcWIyNTZfbWFzaygoX192MzJxaSlfX2EsIChfX3YzMnFpKV9fYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbW1hc2szMiBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9jbXBlcV9lcHU4X21hc2soX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7Ci0gIHJldHVybiAoX19tbWFzazMyKV9fYnVpbHRpbl9pYTMyX3VjbXBiMjU2X21hc2soKF9fdjMycWkpX19hLCAoX192MzJxaSlfX2IsIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2szMiktMSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbW1hc2szMiBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXNrX2NtcGVxX2VwdThfbWFzayhfX21tYXNrMzIgX191LCBfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpIHsKLSAgcmV0dXJuIChfX21tYXNrMzIpX19idWlsdGluX2lhMzJfdWNtcGIyNTZfbWFzaygoX192MzJxaSlfX2EsIChfX3YzMnFpKV9fYiwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9jbXBlcV9lcGkxNl9tYXNrKF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikgewotICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3BjbXBlcXcxMjhfbWFzaygoX192OGhpKV9fYSwgKF9fdjhoaSlfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2tfY21wZXFfZXBpMTZfbWFzayhfX21tYXNrOCBfX3UsIF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikgewotICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3BjbXBlcXcxMjhfbWFzaygoX192OGhpKV9fYSwgKF9fdjhoaSlfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2NtcGVxX2VwdTE2X21hc2soX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKSB7Ci0gIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfdWNtcHcxMjhfbWFzaygoX192OGhpKV9fYSwgKF9fdjhoaSlfX2IsIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tYXNrX2NtcGVxX2VwdTE2X21hc2soX19tbWFzazggX191LCBfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpIHsKLSAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl91Y21wdzEyOF9tYXNrKChfX3Y4aGkpX19hLCAoX192OGhpKV9fYiwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbW1hc2sxNiBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9jbXBlcV9lcGkxNl9tYXNrKF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikgewotICByZXR1cm4gKF9fbW1hc2sxNilfX2J1aWx0aW5faWEzMl9wY21wZXF3MjU2X21hc2soKF9fdjE2aGkpX19hLCAoX192MTZoaSlfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KS0xKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tbWFzazE2IF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X21hc2tfY21wZXFfZXBpMTZfbWFzayhfX21tYXNrMTYgX191LCBfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpIHsKLSAgcmV0dXJuIChfX21tYXNrMTYpX19idWlsdGluX2lhMzJfcGNtcGVxdzI1Nl9tYXNrKChfX3YxNmhpKV9fYSwgKF9fdjE2aGkpX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tbWFzazE2IF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X2NtcGVxX2VwdTE2X21hc2soX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7Ci0gIHJldHVybiAoX19tbWFzazE2KV9fYnVpbHRpbl9pYTMyX3VjbXB3MjU2X21hc2soKF9fdjE2aGkpX19hLCAoX192MTZoaSlfX2IsIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNiktMSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbW1hc2sxNiBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXNrX2NtcGVxX2VwdTE2X21hc2soX19tbWFzazE2IF9fdSwgX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7Ci0gIHJldHVybiAoX19tbWFzazE2KV9fYnVpbHRpbl9pYTMyX3VjbXB3MjU2X21hc2soKF9fdjE2aGkpX19hLCAoX192MTZoaSlfX2IsIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tbWFzazE2IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2NtcGdlX2VwaThfbWFzayhfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpIHsKLSAgcmV0dXJuIChfX21tYXNrMTYpX19idWlsdGluX2lhMzJfY21wYjEyOF9tYXNrKChfX3YxNnFpKV9fYSwgKF9fdjE2cWkpX19iLCA1LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNiktMSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbW1hc2sxNiBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tYXNrX2NtcGdlX2VwaThfbWFzayhfX21tYXNrMTYgX191LCBfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpIHsKLSAgcmV0dXJuIChfX21tYXNrMTYpX19idWlsdGluX2lhMzJfY21wYjEyOF9tYXNrKChfX3YxNnFpKV9fYSwgKF9fdjE2cWkpX19iLCA1LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tbWFzazE2IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2NtcGdlX2VwdThfbWFzayhfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpIHsKLSAgcmV0dXJuIChfX21tYXNrMTYpX19idWlsdGluX2lhMzJfdWNtcGIxMjhfbWFzaygoX192MTZxaSlfX2EsIChfX3YxNnFpKV9fYiwgNSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KS0xKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tbWFzazE2IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2tfY21wZ2VfZXB1OF9tYXNrKF9fbW1hc2sxNiBfX3UsIF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikgewotICByZXR1cm4gKF9fbW1hc2sxNilfX2J1aWx0aW5faWEzMl91Y21wYjEyOF9tYXNrKChfX3YxNnFpKV9fYSwgKF9fdjE2cWkpX19iLCA1LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbW1hc2szMiBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9jbXBnZV9lcGk4X21hc2soX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7Ci0gIHJldHVybiAoX19tbWFzazMyKV9fYnVpbHRpbl9pYTMyX2NtcGIyNTZfbWFzaygoX192MzJxaSlfX2EsIChfX3YzMnFpKV9fYiwgNSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMzIpLTEpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMzIgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfbWFza19jbXBnZV9lcGk4X21hc2soX19tbWFzazMyIF9fdSwgX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7Ci0gIHJldHVybiAoX19tbWFzazMyKV9fYnVpbHRpbl9pYTMyX2NtcGIyNTZfbWFzaygoX192MzJxaSlfX2EsIChfX3YzMnFpKV9fYiwgNSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbW1hc2szMiBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9jbXBnZV9lcHU4X21hc2soX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7Ci0gIHJldHVybiAoX19tbWFzazMyKV9fYnVpbHRpbl9pYTMyX3VjbXBiMjU2X21hc2soKF9fdjMycWkpX19hLCAoX192MzJxaSlfX2IsIDUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2szMiktMSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbW1hc2szMiBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXNrX2NtcGdlX2VwdThfbWFzayhfX21tYXNrMzIgX191LCBfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpIHsKLSAgcmV0dXJuIChfX21tYXNrMzIpX19idWlsdGluX2lhMzJfdWNtcGIyNTZfbWFzaygoX192MzJxaSlfX2EsIChfX3YzMnFpKV9fYiwgNSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9jbXBnZV9lcGkxNl9tYXNrKF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikgewotICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX2NtcHcxMjhfbWFzaygoX192OGhpKV9fYSwgKF9fdjhoaSlfX2IsIDUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2tfY21wZ2VfZXBpMTZfbWFzayhfX21tYXNrOCBfX3UsIF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikgewotICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX2NtcHcxMjhfbWFzaygoX192OGhpKV9fYSwgKF9fdjhoaSlfX2IsIDUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2NtcGdlX2VwdTE2X21hc2soX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKSB7Ci0gIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfdWNtcHcxMjhfbWFzaygoX192OGhpKV9fYSwgKF9fdjhoaSlfX2IsIDUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tYXNrX2NtcGdlX2VwdTE2X21hc2soX19tbWFzazggX191LCBfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpIHsKLSAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl91Y21wdzEyOF9tYXNrKChfX3Y4aGkpX19hLCAoX192OGhpKV9fYiwgNSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbW1hc2sxNiBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9jbXBnZV9lcGkxNl9tYXNrKF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikgewotICByZXR1cm4gKF9fbW1hc2sxNilfX2J1aWx0aW5faWEzMl9jbXB3MjU2X21hc2soKF9fdjE2aGkpX19hLCAoX192MTZoaSlfX2IsIDUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KS0xKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tbWFzazE2IF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X21hc2tfY21wZ2VfZXBpMTZfbWFzayhfX21tYXNrMTYgX191LCBfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpIHsKLSAgcmV0dXJuIChfX21tYXNrMTYpX19idWlsdGluX2lhMzJfY21wdzI1Nl9tYXNrKChfX3YxNmhpKV9fYSwgKF9fdjE2aGkpX19iLCA1LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tbWFzazE2IF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X2NtcGdlX2VwdTE2X21hc2soX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7Ci0gIHJldHVybiAoX19tbWFzazE2KV9fYnVpbHRpbl9pYTMyX3VjbXB3MjU2X21hc2soKF9fdjE2aGkpX19hLCAoX192MTZoaSlfX2IsIDUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNiktMSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbW1hc2sxNiBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXNrX2NtcGdlX2VwdTE2X21hc2soX19tbWFzazE2IF9fdSwgX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7Ci0gIHJldHVybiAoX19tbWFzazE2KV9fYnVpbHRpbl9pYTMyX3VjbXB3MjU2X21hc2soKF9fdjE2aGkpX19hLCAoX192MTZoaSlfX2IsIDUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tbWFzazE2IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2NtcGd0X2VwaThfbWFzayhfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpIHsKLSAgcmV0dXJuIChfX21tYXNrMTYpX19idWlsdGluX2lhMzJfcGNtcGd0YjEyOF9tYXNrKChfX3YxNnFpKV9fYSwgKF9fdjE2cWkpX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNiktMSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbW1hc2sxNiBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tYXNrX2NtcGd0X2VwaThfbWFzayhfX21tYXNrMTYgX191LCBfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpIHsKLSAgcmV0dXJuIChfX21tYXNrMTYpX19idWlsdGluX2lhMzJfcGNtcGd0YjEyOF9tYXNrKChfX3YxNnFpKV9fYSwgKF9fdjE2cWkpX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tbWFzazE2IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2NtcGd0X2VwdThfbWFzayhfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpIHsKLSAgcmV0dXJuIChfX21tYXNrMTYpX19idWlsdGluX2lhMzJfdWNtcGIxMjhfbWFzaygoX192MTZxaSlfX2EsIChfX3YxNnFpKV9fYiwgNiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KS0xKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tbWFzazE2IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2tfY21wZ3RfZXB1OF9tYXNrKF9fbW1hc2sxNiBfX3UsIF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikgewotICByZXR1cm4gKF9fbW1hc2sxNilfX2J1aWx0aW5faWEzMl91Y21wYjEyOF9tYXNrKChfX3YxNnFpKV9fYSwgKF9fdjE2cWkpX19iLCA2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbW1hc2szMiBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9jbXBndF9lcGk4X21hc2soX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7Ci0gIHJldHVybiAoX19tbWFzazMyKV9fYnVpbHRpbl9pYTMyX3BjbXBndGIyNTZfbWFzaygoX192MzJxaSlfX2EsIChfX3YzMnFpKV9fYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMzIpLTEpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMzIgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfbWFza19jbXBndF9lcGk4X21hc2soX19tbWFzazMyIF9fdSwgX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7Ci0gIHJldHVybiAoX19tbWFzazMyKV9fYnVpbHRpbl9pYTMyX3BjbXBndGIyNTZfbWFzaygoX192MzJxaSlfX2EsIChfX3YzMnFpKV9fYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbW1hc2szMiBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9jbXBndF9lcHU4X21hc2soX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7Ci0gIHJldHVybiAoX19tbWFzazMyKV9fYnVpbHRpbl9pYTMyX3VjbXBiMjU2X21hc2soKF9fdjMycWkpX19hLCAoX192MzJxaSlfX2IsIDYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2szMiktMSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbW1hc2szMiBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXNrX2NtcGd0X2VwdThfbWFzayhfX21tYXNrMzIgX191LCBfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpIHsKLSAgcmV0dXJuIChfX21tYXNrMzIpX19idWlsdGluX2lhMzJfdWNtcGIyNTZfbWFzaygoX192MzJxaSlfX2EsIChfX3YzMnFpKV9fYiwgNiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9jbXBndF9lcGkxNl9tYXNrKF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikgewotICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3BjbXBndHcxMjhfbWFzaygoX192OGhpKV9fYSwgKF9fdjhoaSlfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2tfY21wZ3RfZXBpMTZfbWFzayhfX21tYXNrOCBfX3UsIF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikgewotICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3BjbXBndHcxMjhfbWFzaygoX192OGhpKV9fYSwgKF9fdjhoaSlfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2NtcGd0X2VwdTE2X21hc2soX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKSB7Ci0gIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfdWNtcHcxMjhfbWFzaygoX192OGhpKV9fYSwgKF9fdjhoaSlfX2IsIDYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tYXNrX2NtcGd0X2VwdTE2X21hc2soX19tbWFzazggX191LCBfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpIHsKLSAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl91Y21wdzEyOF9tYXNrKChfX3Y4aGkpX19hLCAoX192OGhpKV9fYiwgNiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbW1hc2sxNiBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9jbXBndF9lcGkxNl9tYXNrKF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikgewotICByZXR1cm4gKF9fbW1hc2sxNilfX2J1aWx0aW5faWEzMl9wY21wZ3R3MjU2X21hc2soKF9fdjE2aGkpX19hLCAoX192MTZoaSlfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KS0xKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tbWFzazE2IF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X21hc2tfY21wZ3RfZXBpMTZfbWFzayhfX21tYXNrMTYgX191LCBfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpIHsKLSAgcmV0dXJuIChfX21tYXNrMTYpX19idWlsdGluX2lhMzJfcGNtcGd0dzI1Nl9tYXNrKChfX3YxNmhpKV9fYSwgKF9fdjE2aGkpX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tbWFzazE2IF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X2NtcGd0X2VwdTE2X21hc2soX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7Ci0gIHJldHVybiAoX19tbWFzazE2KV9fYnVpbHRpbl9pYTMyX3VjbXB3MjU2X21hc2soKF9fdjE2aGkpX19hLCAoX192MTZoaSlfX2IsIDYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNiktMSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbW1hc2sxNiBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXNrX2NtcGd0X2VwdTE2X21hc2soX19tbWFzazE2IF9fdSwgX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7Ci0gIHJldHVybiAoX19tbWFzazE2KV9fYnVpbHRpbl9pYTMyX3VjbXB3MjU2X21hc2soKF9fdjE2aGkpX19hLCAoX192MTZoaSlfX2IsIDYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tbWFzazE2IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2NtcGxlX2VwaThfbWFzayhfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpIHsKLSAgcmV0dXJuIChfX21tYXNrMTYpX19idWlsdGluX2lhMzJfY21wYjEyOF9tYXNrKChfX3YxNnFpKV9fYSwgKF9fdjE2cWkpX19iLCAyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNiktMSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbW1hc2sxNiBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tYXNrX2NtcGxlX2VwaThfbWFzayhfX21tYXNrMTYgX191LCBfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpIHsKLSAgcmV0dXJuIChfX21tYXNrMTYpX19idWlsdGluX2lhMzJfY21wYjEyOF9tYXNrKChfX3YxNnFpKV9fYSwgKF9fdjE2cWkpX19iLCAyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tbWFzazE2IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2NtcGxlX2VwdThfbWFzayhfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpIHsKLSAgcmV0dXJuIChfX21tYXNrMTYpX19idWlsdGluX2lhMzJfdWNtcGIxMjhfbWFzaygoX192MTZxaSlfX2EsIChfX3YxNnFpKV9fYiwgMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KS0xKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tbWFzazE2IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2tfY21wbGVfZXB1OF9tYXNrKF9fbW1hc2sxNiBfX3UsIF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikgewotICByZXR1cm4gKF9fbW1hc2sxNilfX2J1aWx0aW5faWEzMl91Y21wYjEyOF9tYXNrKChfX3YxNnFpKV9fYSwgKF9fdjE2cWkpX19iLCAyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbW1hc2szMiBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9jbXBsZV9lcGk4X21hc2soX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7Ci0gIHJldHVybiAoX19tbWFzazMyKV9fYnVpbHRpbl9pYTMyX2NtcGIyNTZfbWFzaygoX192MzJxaSlfX2EsIChfX3YzMnFpKV9fYiwgMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMzIpLTEpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMzIgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfbWFza19jbXBsZV9lcGk4X21hc2soX19tbWFzazMyIF9fdSwgX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7Ci0gIHJldHVybiAoX19tbWFzazMyKV9fYnVpbHRpbl9pYTMyX2NtcGIyNTZfbWFzaygoX192MzJxaSlfX2EsIChfX3YzMnFpKV9fYiwgMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbW1hc2szMiBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9jbXBsZV9lcHU4X21hc2soX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7Ci0gIHJldHVybiAoX19tbWFzazMyKV9fYnVpbHRpbl9pYTMyX3VjbXBiMjU2X21hc2soKF9fdjMycWkpX19hLCAoX192MzJxaSlfX2IsIDIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2szMiktMSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbW1hc2szMiBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXNrX2NtcGxlX2VwdThfbWFzayhfX21tYXNrMzIgX191LCBfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpIHsKLSAgcmV0dXJuIChfX21tYXNrMzIpX19idWlsdGluX2lhMzJfdWNtcGIyNTZfbWFzaygoX192MzJxaSlfX2EsIChfX3YzMnFpKV9fYiwgMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9jbXBsZV9lcGkxNl9tYXNrKF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikgewotICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX2NtcHcxMjhfbWFzaygoX192OGhpKV9fYSwgKF9fdjhoaSlfX2IsIDIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2tfY21wbGVfZXBpMTZfbWFzayhfX21tYXNrOCBfX3UsIF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikgewotICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX2NtcHcxMjhfbWFzaygoX192OGhpKV9fYSwgKF9fdjhoaSlfX2IsIDIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2NtcGxlX2VwdTE2X21hc2soX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKSB7Ci0gIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfdWNtcHcxMjhfbWFzaygoX192OGhpKV9fYSwgKF9fdjhoaSlfX2IsIDIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tYXNrX2NtcGxlX2VwdTE2X21hc2soX19tbWFzazggX191LCBfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpIHsKLSAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl91Y21wdzEyOF9tYXNrKChfX3Y4aGkpX19hLCAoX192OGhpKV9fYiwgMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbW1hc2sxNiBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9jbXBsZV9lcGkxNl9tYXNrKF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikgewotICByZXR1cm4gKF9fbW1hc2sxNilfX2J1aWx0aW5faWEzMl9jbXB3MjU2X21hc2soKF9fdjE2aGkpX19hLCAoX192MTZoaSlfX2IsIDIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KS0xKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tbWFzazE2IF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X21hc2tfY21wbGVfZXBpMTZfbWFzayhfX21tYXNrMTYgX191LCBfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpIHsKLSAgcmV0dXJuIChfX21tYXNrMTYpX19idWlsdGluX2lhMzJfY21wdzI1Nl9tYXNrKChfX3YxNmhpKV9fYSwgKF9fdjE2aGkpX19iLCAyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tbWFzazE2IF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X2NtcGxlX2VwdTE2X21hc2soX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7Ci0gIHJldHVybiAoX19tbWFzazE2KV9fYnVpbHRpbl9pYTMyX3VjbXB3MjU2X21hc2soKF9fdjE2aGkpX19hLCAoX192MTZoaSlfX2IsIDIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNiktMSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbW1hc2sxNiBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXNrX2NtcGxlX2VwdTE2X21hc2soX19tbWFzazE2IF9fdSwgX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7Ci0gIHJldHVybiAoX19tbWFzazE2KV9fYnVpbHRpbl9pYTMyX3VjbXB3MjU2X21hc2soKF9fdjE2aGkpX19hLCAoX192MTZoaSlfX2IsIDIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tbWFzazE2IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2NtcGx0X2VwaThfbWFzayhfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpIHsKLSAgcmV0dXJuIChfX21tYXNrMTYpX19idWlsdGluX2lhMzJfY21wYjEyOF9tYXNrKChfX3YxNnFpKV9fYSwgKF9fdjE2cWkpX19iLCAxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNiktMSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbW1hc2sxNiBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tYXNrX2NtcGx0X2VwaThfbWFzayhfX21tYXNrMTYgX191LCBfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpIHsKLSAgcmV0dXJuIChfX21tYXNrMTYpX19idWlsdGluX2lhMzJfY21wYjEyOF9tYXNrKChfX3YxNnFpKV9fYSwgKF9fdjE2cWkpX19iLCAxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tbWFzazE2IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2NtcGx0X2VwdThfbWFzayhfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpIHsKLSAgcmV0dXJuIChfX21tYXNrMTYpX19idWlsdGluX2lhMzJfdWNtcGIxMjhfbWFzaygoX192MTZxaSlfX2EsIChfX3YxNnFpKV9fYiwgMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KS0xKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tbWFzazE2IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2tfY21wbHRfZXB1OF9tYXNrKF9fbW1hc2sxNiBfX3UsIF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikgewotICByZXR1cm4gKF9fbW1hc2sxNilfX2J1aWx0aW5faWEzMl91Y21wYjEyOF9tYXNrKChfX3YxNnFpKV9fYSwgKF9fdjE2cWkpX19iLCAxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbW1hc2szMiBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9jbXBsdF9lcGk4X21hc2soX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7Ci0gIHJldHVybiAoX19tbWFzazMyKV9fYnVpbHRpbl9pYTMyX2NtcGIyNTZfbWFzaygoX192MzJxaSlfX2EsIChfX3YzMnFpKV9fYiwgMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMzIpLTEpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMzIgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfbWFza19jbXBsdF9lcGk4X21hc2soX19tbWFzazMyIF9fdSwgX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7Ci0gIHJldHVybiAoX19tbWFzazMyKV9fYnVpbHRpbl9pYTMyX2NtcGIyNTZfbWFzaygoX192MzJxaSlfX2EsIChfX3YzMnFpKV9fYiwgMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbW1hc2szMiBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9jbXBsdF9lcHU4X21hc2soX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7Ci0gIHJldHVybiAoX19tbWFzazMyKV9fYnVpbHRpbl9pYTMyX3VjbXBiMjU2X21hc2soKF9fdjMycWkpX19hLCAoX192MzJxaSlfX2IsIDEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2szMiktMSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbW1hc2szMiBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXNrX2NtcGx0X2VwdThfbWFzayhfX21tYXNrMzIgX191LCBfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpIHsKLSAgcmV0dXJuIChfX21tYXNrMzIpX19idWlsdGluX2lhMzJfdWNtcGIyNTZfbWFzaygoX192MzJxaSlfX2EsIChfX3YzMnFpKV9fYiwgMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9jbXBsdF9lcGkxNl9tYXNrKF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikgewotICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX2NtcHcxMjhfbWFzaygoX192OGhpKV9fYSwgKF9fdjhoaSlfX2IsIDEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2tfY21wbHRfZXBpMTZfbWFzayhfX21tYXNrOCBfX3UsIF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikgewotICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX2NtcHcxMjhfbWFzaygoX192OGhpKV9fYSwgKF9fdjhoaSlfX2IsIDEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2NtcGx0X2VwdTE2X21hc2soX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKSB7Ci0gIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfdWNtcHcxMjhfbWFzaygoX192OGhpKV9fYSwgKF9fdjhoaSlfX2IsIDEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tYXNrX2NtcGx0X2VwdTE2X21hc2soX19tbWFzazggX191LCBfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpIHsKLSAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl91Y21wdzEyOF9tYXNrKChfX3Y4aGkpX19hLCAoX192OGhpKV9fYiwgMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbW1hc2sxNiBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9jbXBsdF9lcGkxNl9tYXNrKF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikgewotICByZXR1cm4gKF9fbW1hc2sxNilfX2J1aWx0aW5faWEzMl9jbXB3MjU2X21hc2soKF9fdjE2aGkpX19hLCAoX192MTZoaSlfX2IsIDEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KS0xKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tbWFzazE2IF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X21hc2tfY21wbHRfZXBpMTZfbWFzayhfX21tYXNrMTYgX191LCBfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpIHsKLSAgcmV0dXJuIChfX21tYXNrMTYpX19idWlsdGluX2lhMzJfY21wdzI1Nl9tYXNrKChfX3YxNmhpKV9fYSwgKF9fdjE2aGkpX19iLCAxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tbWFzazE2IF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X2NtcGx0X2VwdTE2X21hc2soX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7Ci0gIHJldHVybiAoX19tbWFzazE2KV9fYnVpbHRpbl9pYTMyX3VjbXB3MjU2X21hc2soKF9fdjE2aGkpX19hLCAoX192MTZoaSlfX2IsIDEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNiktMSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbW1hc2sxNiBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXNrX2NtcGx0X2VwdTE2X21hc2soX19tbWFzazE2IF9fdSwgX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7Ci0gIHJldHVybiAoX19tbWFzazE2KV9fYnVpbHRpbl9pYTMyX3VjbXB3MjU2X21hc2soKF9fdjE2aGkpX19hLCAoX192MTZoaSlfX2IsIDEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tbWFzazE2IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2NtcG5lcV9lcGk4X21hc2soX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKSB7Ci0gIHJldHVybiAoX19tbWFzazE2KV9fYnVpbHRpbl9pYTMyX2NtcGIxMjhfbWFzaygoX192MTZxaSlfX2EsIChfX3YxNnFpKV9fYiwgNCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpLTEpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMTYgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWFza19jbXBuZXFfZXBpOF9tYXNrKF9fbW1hc2sxNiBfX3UsIF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikgewotICByZXR1cm4gKF9fbW1hc2sxNilfX2J1aWx0aW5faWEzMl9jbXBiMTI4X21hc2soKF9fdjE2cWkpX19hLCAoX192MTZxaSlfX2IsIDQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMTYgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fY21wbmVxX2VwdThfbWFzayhfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpIHsKLSAgcmV0dXJuIChfX21tYXNrMTYpX19idWlsdGluX2lhMzJfdWNtcGIxMjhfbWFzaygoX192MTZxaSlfX2EsIChfX3YxNnFpKV9fYiwgNCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KS0xKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tbWFzazE2IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2tfY21wbmVxX2VwdThfbWFzayhfX21tYXNrMTYgX191LCBfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpIHsKLSAgcmV0dXJuIChfX21tYXNrMTYpX19idWlsdGluX2lhMzJfdWNtcGIxMjhfbWFzaygoX192MTZxaSlfX2EsIChfX3YxNnFpKV9fYiwgNCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMzIgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfY21wbmVxX2VwaThfbWFzayhfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpIHsKLSAgcmV0dXJuIChfX21tYXNrMzIpX19idWlsdGluX2lhMzJfY21wYjI1Nl9tYXNrKChfX3YzMnFpKV9fYSwgKF9fdjMycWkpX19iLCA0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2szMiktMSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbW1hc2szMiBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXNrX2NtcG5lcV9lcGk4X21hc2soX19tbWFzazMyIF9fdSwgX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7Ci0gIHJldHVybiAoX19tbWFzazMyKV9fYnVpbHRpbl9pYTMyX2NtcGIyNTZfbWFzaygoX192MzJxaSlfX2EsIChfX3YzMnFpKV9fYiwgNCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbW1hc2szMiBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9jbXBuZXFfZXB1OF9tYXNrKF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikgewotICByZXR1cm4gKF9fbW1hc2szMilfX2J1aWx0aW5faWEzMl91Y21wYjI1Nl9tYXNrKChfX3YzMnFpKV9fYSwgKF9fdjMycWkpX19iLCA0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMzIpLTEpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMzIgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfbWFza19jbXBuZXFfZXB1OF9tYXNrKF9fbW1hc2szMiBfX3UsIF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikgewotICByZXR1cm4gKF9fbW1hc2szMilfX2J1aWx0aW5faWEzMl91Y21wYjI1Nl9tYXNrKChfX3YzMnFpKV9fYSwgKF9fdjMycWkpX19iLCA0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2NtcG5lcV9lcGkxNl9tYXNrKF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikgewotICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX2NtcHcxMjhfbWFzaygoX192OGhpKV9fYSwgKF9fdjhoaSlfX2IsIDQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2tfY21wbmVxX2VwaTE2X21hc2soX19tbWFzazggX191LCBfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpIHsKLSAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9jbXB3MTI4X21hc2soKF9fdjhoaSlfX2EsIChfX3Y4aGkpX19iLCA0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9jbXBuZXFfZXB1MTZfbWFzayhfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpIHsKLSAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl91Y21wdzEyOF9tYXNrKChfX3Y4aGkpX19hLCAoX192OGhpKV9fYiwgNCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2tfY21wbmVxX2VwdTE2X21hc2soX19tbWFzazggX191LCBfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpIHsKLSAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl91Y21wdzEyOF9tYXNrKChfX3Y4aGkpX19hLCAoX192OGhpKV9fYiwgNCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbW1hc2sxNiBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9jbXBuZXFfZXBpMTZfbWFzayhfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpIHsKLSAgcmV0dXJuIChfX21tYXNrMTYpX19idWlsdGluX2lhMzJfY21wdzI1Nl9tYXNrKChfX3YxNmhpKV9fYSwgKF9fdjE2aGkpX19iLCA0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNiktMSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbW1hc2sxNiBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXNrX2NtcG5lcV9lcGkxNl9tYXNrKF9fbW1hc2sxNiBfX3UsIF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikgewotICByZXR1cm4gKF9fbW1hc2sxNilfX2J1aWx0aW5faWEzMl9jbXB3MjU2X21hc2soKF9fdjE2aGkpX19hLCAoX192MTZoaSlfX2IsIDQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMTYgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfY21wbmVxX2VwdTE2X21hc2soX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7Ci0gIHJldHVybiAoX19tbWFzazE2KV9fYnVpbHRpbl9pYTMyX3VjbXB3MjU2X21hc2soKF9fdjE2aGkpX19hLCAoX192MTZoaSlfX2IsIDQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNiktMSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbW1hc2sxNiBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXNrX2NtcG5lcV9lcHUxNl9tYXNrKF9fbW1hc2sxNiBfX3UsIF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikgewotICByZXR1cm4gKF9fbW1hc2sxNilfX2J1aWx0aW5faWEzMl91Y21wdzI1Nl9tYXNrKChfX3YxNmhpKV9fYSwgKF9fdjE2aGkpX19iLCA0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfbWFza19hZGRfZXBpOCAoX19tMjU2aSBfX1csIF9fbW1hc2szMiBfX1UsIF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQil7Ci0gIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcGFkZGIyNTZfbWFzayAoKF9fdjMycWkpIF9fQSwKLSAgICAgICAgICAgICAoX192MzJxaSkgX19CLAotICAgICAgICAgICAgIChfX3YzMnFpKSBfX1csCi0gICAgICAgICAgICAgKF9fbW1hc2szMikgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXNrel9hZGRfZXBpOCAoX19tbWFzazMyIF9fVSwgX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKSB7Ci0gIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcGFkZGIyNTZfbWFzayAoKF9fdjMycWkpIF9fQSwKLSAgICAgICAgICAgICAoX192MzJxaSkgX19CLAotICAgICAgICAgICAgIChfX3YzMnFpKQotICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2ICgpLAotICAgICAgICAgICAgIChfX21tYXNrMzIpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfbWFza19hZGRfZXBpMTYgKF9fbTI1NmkgX19XLCBfX21tYXNrMTYgX19VLCBfX20yNTZpIF9fQSwgX19tMjU2aSBfX0IpIHsKLSAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wYWRkdzI1Nl9tYXNrICgoX192MTZoaSkgX19BLAotICAgICAgICAgICAgIChfX3YxNmhpKSBfX0IsCi0gICAgICAgICAgICAgKF9fdjE2aGkpIF9fVywKLSAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X21hc2t6X2FkZF9lcGkxNiAoX19tbWFzazE2IF9fVSwgX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKSB7Ci0gIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcGFkZHcyNTZfbWFzayAoKF9fdjE2aGkpIF9fQSwKLSAgICAgICAgICAgICAoX192MTZoaSkgX19CLAotICAgICAgICAgICAgIChfX3YxNmhpKQotICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2ICgpLAotICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfbWFza19zdWJfZXBpOCAoX19tMjU2aSBfX1csIF9fbW1hc2szMiBfX1UsIF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQikgewotICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BzdWJiMjU2X21hc2sgKChfX3YzMnFpKSBfX0EsCi0gICAgICAgICAgICAgKF9fdjMycWkpIF9fQiwKLSAgICAgICAgICAgICAoX192MzJxaSkgX19XLAotICAgICAgICAgICAgIChfX21tYXNrMzIpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfbWFza3pfc3ViX2VwaTggKF9fbW1hc2szMiBfX1UsIF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQikgewotICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BzdWJiMjU2X21hc2sgKChfX3YzMnFpKSBfX0EsCi0gICAgICAgICAgICAgKF9fdjMycWkpIF9fQiwKLSAgICAgICAgICAgICAoX192MzJxaSkKLSAgICAgICAgICAgICBfbW0yNTZfc2V0emVyb19zaTI1NiAoKSwKLSAgICAgICAgICAgICAoX19tbWFzazMyKSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X21hc2tfc3ViX2VwaTE2IChfX20yNTZpIF9fVywgX19tbWFzazE2IF9fVSwgX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKSB7Ci0gIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcHN1YncyNTZfbWFzayAoKF9fdjE2aGkpIF9fQSwKLSAgICAgICAgICAgICAoX192MTZoaSkgX19CLAotICAgICAgICAgICAgIChfX3YxNmhpKSBfX1csCi0gICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXNrel9zdWJfZXBpMTYgKF9fbW1hc2sxNiBfX1UsIF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQikgewotICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BzdWJ3MjU2X21hc2sgKChfX3YxNmhpKSBfX0EsCi0gICAgICAgICAgICAgKF9fdjE2aGkpIF9fQiwKLSAgICAgICAgICAgICAoX192MTZoaSkKLSAgICAgICAgICAgICBfbW0yNTZfc2V0emVyb19zaTI1NiAoKSwKLSAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UpOwotfQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tYXNrX2FkZF9lcGk4IChfX20xMjhpIF9fVywgX19tbWFzazE2IF9fVSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKSB7Ci0gIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcGFkZGIxMjhfbWFzayAoKF9fdjE2cWkpIF9fQSwKLSAgICAgICAgICAgICAoX192MTZxaSkgX19CLAotICAgICAgICAgICAgIChfX3YxNnFpKSBfX1csCi0gICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tYXNrel9hZGRfZXBpOCAoX19tbWFzazE2IF9fVSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKSB7Ci0gIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcGFkZGIxMjhfbWFzayAoKF9fdjE2cWkpIF9fQSwKLSAgICAgICAgICAgICAoX192MTZxaSkgX19CLAotICAgICAgICAgICAgIChfX3YxNnFpKQotICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAotICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWFza19hZGRfZXBpMTYgKF9fbTEyOGkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikgewotICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BhZGR3MTI4X21hc2sgKChfX3Y4aGkpIF9fQSwKLSAgICAgICAgICAgICAoX192OGhpKSBfX0IsCi0gICAgICAgICAgICAgKF9fdjhoaSkgX19XLAotICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tYXNrel9hZGRfZXBpMTYgKF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKSB7Ci0gIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcGFkZHcxMjhfbWFzayAoKF9fdjhoaSkgX19BLAotICAgICAgICAgICAgIChfX3Y4aGkpIF9fQiwKLSAgICAgICAgICAgICAoX192OGhpKQotICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAotICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tYXNrX3N1Yl9lcGk4IChfX20xMjhpIF9fVywgX19tbWFzazE2IF9fVSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKSB7Ci0gIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcHN1YmIxMjhfbWFzayAoKF9fdjE2cWkpIF9fQSwKLSAgICAgICAgICAgICAoX192MTZxaSkgX19CLAotICAgICAgICAgICAgIChfX3YxNnFpKSBfX1csCi0gICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tYXNrel9zdWJfZXBpOCAoX19tbWFzazE2IF9fVSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKSB7Ci0gIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcHN1YmIxMjhfbWFzayAoKF9fdjE2cWkpIF9fQSwKLSAgICAgICAgICAgICAoX192MTZxaSkgX19CLAotICAgICAgICAgICAgIChfX3YxNnFpKQotICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAotICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWFza19zdWJfZXBpMTYgKF9fbTEyOGkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikgewotICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BzdWJ3MTI4X21hc2sgKChfX3Y4aGkpIF9fQSwKLSAgICAgICAgICAgICAoX192OGhpKSBfX0IsCi0gICAgICAgICAgICAgKF9fdjhoaSkgX19XLAotICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tYXNrel9zdWJfZXBpMTYgKF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKSB7Ci0gIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcHN1YncxMjhfbWFzayAoKF9fdjhoaSkgX19BLAotICAgICAgICAgICAgIChfX3Y4aGkpIF9fQiwKLSAgICAgICAgICAgICAoX192OGhpKQotICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAotICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXNrX211bGxvX2VwaTE2IChfX20yNTZpIF9fVywgX19tbWFzazE2IF9fVSwgX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKSB7Ci0gIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcG11bGx3MjU2X21hc2sgKChfX3YxNmhpKSBfX0EsCi0gICAgICAgICAgICAgIChfX3YxNmhpKSBfX0IsCi0gICAgICAgICAgICAgIChfX3YxNmhpKSBfX1csCi0gICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfbWFza3pfbXVsbG9fZXBpMTYgKF9fbW1hc2sxNiBfX1UsIF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQikgewotICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BtdWxsdzI1Nl9tYXNrICgoX192MTZoaSkgX19BLAotICAgICAgICAgICAgICAoX192MTZoaSkgX19CLAotICAgICAgICAgICAgICAoX192MTZoaSkKLSAgICAgICAgICAgICAgX21tMjU2X3NldHplcm9fc2kyNTYgKCksCi0gICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWFza19tdWxsb19lcGkxNiAoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKSB7Ci0gIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG11bGx3MTI4X21hc2sgKChfX3Y4aGkpIF9fQSwKLSAgICAgICAgICAgICAgKF9fdjhoaSkgX19CLAotICAgICAgICAgICAgICAoX192OGhpKSBfX1csCi0gICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tYXNrel9tdWxsb19lcGkxNiAoX19tbWFzazggX19VLCBfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpIHsKLSAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbXVsbHcxMjhfbWFzayAoKF9fdjhoaSkgX19BLAotICAgICAgICAgICAgICAoX192OGhpKSBfX0IsCi0gICAgICAgICAgICAgIChfX3Y4aGkpCi0gICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAotICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWFza19ibGVuZF9lcGk4IChfX21tYXNrMTYgX19VLCBfX20xMjhpIF9fQSwgX19tMTI4aSBfX1cpCi17Ci0gIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfYmxlbmRtYl8xMjhfbWFzayAoKF9fdjE2cWkpIF9fQSwKLSAgICAgICAgICAgICAgIChfX3YxNnFpKSBfX1csCi0gICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X21hc2tfYmxlbmRfZXBpOCAoX19tbWFzazMyIF9fVSwgX19tMjU2aSBfX0EsIF9fbTI1NmkgX19XKQotewotICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX2JsZW5kbWJfMjU2X21hc2sgKChfX3YzMnFpKSBfX0EsCi0gICAgICAgICAgICAgICAoX192MzJxaSkgX19XLAotICAgICAgICAgICAgICAgKF9fbW1hc2szMikgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tYXNrX2JsZW5kX2VwaTE2IChfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fVykKLXsKLSAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9ibGVuZG13XzEyOF9tYXNrICgoX192OGhpKSBfX0EsCi0gICAgICAgICAgICAgICAoX192OGhpKSBfX1csCi0gICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfbWFza19ibGVuZF9lcGkxNiAoX19tbWFzazE2IF9fVSwgX19tMjU2aSBfX0EsIF9fbTI1NmkgX19XKQotewotICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX2JsZW5kbXdfMjU2X21hc2sgKChfX3YxNmhpKSBfX0EsCi0gICAgICAgICAgICAgICAoX192MTZoaSkgX19XLAotICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tYXNrX2Fic19lcGk4IChfX20xMjhpIF9fVywgX19tbWFzazE2IF9fVSwgX19tMTI4aSBfX0EpCi17Ci0gIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcGFic2IxMjhfbWFzayAoKF9fdjE2cWkpIF9fQSwKLSAgICAgICAgICAgICAgIChfX3YxNnFpKSBfX1csCi0gICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2t6X2Fic19lcGk4IChfX21tYXNrMTYgX19VLCBfX20xMjhpIF9fQSkKLXsKLSAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wYWJzYjEyOF9tYXNrICgoX192MTZxaSkgX19BLAotICAgICAgICAgICAgICAgKF9fdjE2cWkpIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAotICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXNrX2Fic19lcGk4IChfX20yNTZpIF9fVywgX19tbWFzazMyIF9fVSwgX19tMjU2aSBfX0EpCi17Ci0gIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcGFic2IyNTZfbWFzayAoKF9fdjMycWkpIF9fQSwKLSAgICAgICAgICAgICAgIChfX3YzMnFpKSBfX1csCi0gICAgICAgICAgICAgICAoX19tbWFzazMyKSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X21hc2t6X2Fic19lcGk4IChfX21tYXNrMzIgX19VLCBfX20yNTZpIF9fQSkKLXsKLSAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wYWJzYjI1Nl9tYXNrICgoX192MzJxaSkgX19BLAotICAgICAgICAgICAgICAgKF9fdjMycWkpIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2ICgpLAotICAgICAgICAgICAgICAgKF9fbW1hc2szMikgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tYXNrX2Fic19lcGkxNiAoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EpCi17Ci0gIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcGFic3cxMjhfbWFzayAoKF9fdjhoaSkgX19BLAotICAgICAgICAgICAgICAgKF9fdjhoaSkgX19XLAotICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2t6X2Fic19lcGkxNiAoX19tbWFzazggX19VLCBfX20xMjhpIF9fQSkKLXsKLSAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wYWJzdzEyOF9tYXNrICgoX192OGhpKSBfX0EsCi0gICAgICAgICAgICAgICAoX192OGhpKSBfbW1fc2V0emVyb19zaTEyOCAoKSwKLSAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXNrX2Fic19lcGkxNiAoX19tMjU2aSBfX1csIF9fbW1hc2sxNiBfX1UsIF9fbTI1NmkgX19BKQotewotICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BhYnN3MjU2X21hc2sgKChfX3YxNmhpKSBfX0EsCi0gICAgICAgICAgICAgICAoX192MTZoaSkgX19XLAotICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXNrel9hYnNfZXBpMTYgKF9fbW1hc2sxNiBfX1UsIF9fbTI1NmkgX19BKQotewotICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BhYnN3MjU2X21hc2sgKChfX3YxNmhpKSBfX0EsCi0gICAgICAgICAgICAgICAoX192MTZoaSkgX21tMjU2X3NldHplcm9fc2kyNTYgKCksCi0gICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2t6X3BhY2tzX2VwaTMyIChfX21tYXNrOCBfX00sIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKLXsKLSAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wYWNrc3NkdzEyOF9tYXNrICgoX192NHNpKSBfX0EsCi0gICAgICAgICAgICAgICAoX192NHNpKSBfX0IsCi0gICAgICAgICAgICAgICAoX192OGhpKSBfbW1fc2V0emVyb19zaTEyOCAoKSwgX19NKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tYXNrX3BhY2tzX2VwaTMyIChfX20xMjhpIF9fVywgX19tbWFzazE2IF9fTSwgX19tMTI4aSBfX0EsCi0gICAgICAgICAgX19tMTI4aSBfX0IpCi17Ci0gIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcGFja3NzZHcxMjhfbWFzayAoKF9fdjRzaSkgX19BLAotICAgICAgICAgICAgICAgKF9fdjRzaSkgX19CLAotICAgICAgICAgICAgICAgKF9fdjhoaSkgX19XLCBfX00pOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X21hc2t6X3BhY2tzX2VwaTMyIChfX21tYXNrMTYgX19NLCBfX20yNTZpIF9fQSwgX19tMjU2aSBfX0IpCi17Ci0gIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcGFja3NzZHcyNTZfbWFzayAoKF9fdjhzaSkgX19BLAotICAgICAgICAgICAgICAgKF9fdjhzaSkgX19CLAotICAgICAgICAgICAgICAgKF9fdjE2aGkpIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2ICgpLAotICAgICAgICAgICAgICAgX19NKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXNrX3BhY2tzX2VwaTMyIChfX20yNTZpIF9fVywgX19tbWFzazE2IF9fTSwgX19tMjU2aSBfX0EsCi0gICAgICAgX19tMjU2aSBfX0IpCi17Ci0gIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcGFja3NzZHcyNTZfbWFzayAoKF9fdjhzaSkgX19BLAotICAgICAgICAgICAgICAgKF9fdjhzaSkgX19CLAotICAgICAgICAgICAgICAgKF9fdjE2aGkpIF9fVywgX19NKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tYXNrel9wYWNrc19lcGkxNiAoX19tbWFzazE2IF9fTSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQotewotICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BhY2tzc3diMTI4X21hc2sgKChfX3Y4aGkpIF9fQSwKLSAgICAgICAgICAgICAgIChfX3Y4aGkpIF9fQiwKLSAgICAgICAgICAgICAgIChfX3YxNnFpKSBfbW1fc2V0emVyb19zaTEyOCAoKSwKLSAgICAgICAgICAgICAgIF9fTSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWFza19wYWNrc19lcGkxNiAoX19tMTI4aSBfX1csIF9fbW1hc2sxNiBfX00sIF9fbTEyOGkgX19BLAotICAgICAgICAgIF9fbTEyOGkgX19CKQotewotICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BhY2tzc3diMTI4X21hc2sgKChfX3Y4aGkpIF9fQSwKLSAgICAgICAgICAgICAgIChfX3Y4aGkpIF9fQiwKLSAgICAgICAgICAgICAgIChfX3YxNnFpKSBfX1csCi0gICAgICAgICAgICAgICBfX00pOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X21hc2t6X3BhY2tzX2VwaTE2IChfX21tYXNrMzIgX19NLCBfX20yNTZpIF9fQSwgX19tMjU2aSBfX0IpCi17Ci0gIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcGFja3Nzd2IyNTZfbWFzayAoKF9fdjE2aGkpIF9fQSwKLSAgICAgICAgICAgICAgIChfX3YxNmhpKSBfX0IsCi0gICAgICAgICAgICAgICAoX192MzJxaSkgX21tMjU2X3NldHplcm9fc2kyNTYgKCksCi0gICAgICAgICAgICAgICBfX00pOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X21hc2tfcGFja3NfZXBpMTYgKF9fbTI1NmkgX19XLCBfX21tYXNrMzIgX19NLCBfX20yNTZpIF9fQSwKLSAgICAgICBfX20yNTZpIF9fQikKLXsKLSAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wYWNrc3N3YjI1Nl9tYXNrICgoX192MTZoaSkgX19BLAotICAgICAgICAgICAgICAgKF9fdjE2aGkpIF9fQiwKLSAgICAgICAgICAgICAgIChfX3YzMnFpKSBfX1csCi0gICAgICAgICAgICAgICBfX00pOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2t6X3BhY2t1c19lcGkzMiAoX19tbWFzazggX19NLCBfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCi17Ci0gIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcGFja3VzZHcxMjhfbWFzayAoKF9fdjRzaSkgX19BLAotICAgICAgICAgICAgICAgKF9fdjRzaSkgX19CLAotICAgICAgICAgICAgICAgKF9fdjhoaSkgX21tX3NldHplcm9fc2kxMjggKCksCi0gICAgICAgICAgICAgICBfX00pOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2tfcGFja3VzX2VwaTMyIChfX20xMjhpIF9fVywgX19tbWFzazE2IF9fTSwgX19tMTI4aSBfX0EsCi0gICAgICAgICAgIF9fbTEyOGkgX19CKQotewotICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BhY2t1c2R3MTI4X21hc2sgKChfX3Y0c2kpIF9fQSwKLSAgICAgICAgICAgICAgIChfX3Y0c2kpIF9fQiwKLSAgICAgICAgICAgICAgIChfX3Y4aGkpIF9fVywgX19NKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXNrel9wYWNrdXNfZXBpMzIgKF9fbW1hc2sxNiBfX00sIF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQikKLXsKLSAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wYWNrdXNkdzI1Nl9tYXNrICgoX192OHNpKSBfX0EsCi0gICAgICAgICAgICAgICAoX192OHNpKSBfX0IsCi0gICAgICAgICAgICAgICAoX192MTZoaSkgX21tMjU2X3NldHplcm9fc2kyNTYgKCksCi0gICAgICAgICAgICAgICBfX00pOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X21hc2tfcGFja3VzX2VwaTMyIChfX20yNTZpIF9fVywgX19tbWFzazE2IF9fTSwgX19tMjU2aSBfX0EsCi0gICAgICAgIF9fbTI1NmkgX19CKQotewotICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BhY2t1c2R3MjU2X21hc2sgKChfX3Y4c2kpIF9fQSwKLSAgICAgICAgICAgICAgIChfX3Y4c2kpIF9fQiwKLSAgICAgICAgICAgICAgIChfX3YxNmhpKSBfX1csCi0gICAgICAgICAgICAgICBfX00pOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2t6X3BhY2t1c19lcGkxNiAoX19tbWFzazE2IF9fTSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQotewotICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BhY2t1c3diMTI4X21hc2sgKChfX3Y4aGkpIF9fQSwKLSAgICAgICAgICAgICAgIChfX3Y4aGkpIF9fQiwKLSAgICAgICAgICAgICAgIChfX3YxNnFpKSBfbW1fc2V0emVyb19zaTEyOCAoKSwKLSAgICAgICAgICAgICAgIF9fTSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWFza19wYWNrdXNfZXBpMTYgKF9fbTEyOGkgX19XLCBfX21tYXNrMTYgX19NLCBfX20xMjhpIF9fQSwKLSAgICAgICAgICAgX19tMTI4aSBfX0IpCi17Ci0gIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcGFja3Vzd2IxMjhfbWFzayAoKF9fdjhoaSkgX19BLAotICAgICAgICAgICAgICAgKF9fdjhoaSkgX19CLAotICAgICAgICAgICAgICAgKF9fdjE2cWkpIF9fVywKLSAgICAgICAgICAgICAgIF9fTSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfbWFza3pfcGFja3VzX2VwaTE2IChfX21tYXNrMzIgX19NLCBfX20yNTZpIF9fQSwgX19tMjU2aSBfX0IpCi17Ci0gIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcGFja3Vzd2IyNTZfbWFzayAoKF9fdjE2aGkpIF9fQSwKLSAgICAgICAgICAgICAgIChfX3YxNmhpKSBfX0IsCi0gICAgICAgICAgICAgICAoX192MzJxaSkgX21tMjU2X3NldHplcm9fc2kyNTYgKCksCi0gICAgICAgICAgICAgICBfX00pOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X21hc2tfcGFja3VzX2VwaTE2IChfX20yNTZpIF9fVywgX19tbWFzazMyIF9fTSwgX19tMjU2aSBfX0EsCi0gICAgICAgIF9fbTI1NmkgX19CKQotewotICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BhY2t1c3diMjU2X21hc2sgKChfX3YxNmhpKSBfX0EsCi0gICAgICAgICAgICAgICAoX192MTZoaSkgX19CLAotICAgICAgICAgICAgICAgKF9fdjMycWkpIF9fVywKLSAgICAgICAgICAgICAgIF9fTSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWFza19hZGRzX2VwaTggKF9fbTEyOGkgX19XLCBfX21tYXNrMTYgX19VLCBfX20xMjhpIF9fQSwKLSAgICAgICAgX19tMTI4aSBfX0IpCi17Ci0gIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcGFkZHNiMTI4X21hc2sgKChfX3YxNnFpKSBfX0EsCi0gICAgICAgICAgICAgICAoX192MTZxaSkgX19CLAotICAgICAgICAgICAgICAgKF9fdjE2cWkpIF9fVywKLSAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWFza3pfYWRkc19lcGk4IChfX21tYXNrMTYgX19VLCBfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCi17Ci0gIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcGFkZHNiMTI4X21hc2sgKChfX3YxNnFpKSBfX0EsCi0gICAgICAgICAgICAgICAoX192MTZxaSkgX19CLAotICAgICAgICAgICAgICAgKF9fdjE2cWkpIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAotICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXNrX2FkZHNfZXBpOCAoX19tMjU2aSBfX1csIF9fbW1hc2szMiBfX1UsIF9fbTI1NmkgX19BLAotICAgICAgICAgICBfX20yNTZpIF9fQikKLXsKLSAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wYWRkc2IyNTZfbWFzayAoKF9fdjMycWkpIF9fQSwKLSAgICAgICAgICAgICAgIChfX3YzMnFpKSBfX0IsCi0gICAgICAgICAgICAgICAoX192MzJxaSkgX19XLAotICAgICAgICAgICAgICAgKF9fbW1hc2szMikgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXNrel9hZGRzX2VwaTggKF9fbW1hc2szMiBfX1UsIF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQikKLXsKLSAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wYWRkc2IyNTZfbWFzayAoKF9fdjMycWkpIF9fQSwKLSAgICAgICAgICAgICAgIChfX3YzMnFpKSBfX0IsCi0gICAgICAgICAgICAgICAoX192MzJxaSkgX21tMjU2X3NldHplcm9fc2kyNTYgKCksCi0gICAgICAgICAgICAgICAoX19tbWFzazMyKSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2tfYWRkc19lcGkxNiAoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EsCi0gICAgICAgICBfX20xMjhpIF9fQikKLXsKLSAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wYWRkc3cxMjhfbWFzayAoKF9fdjhoaSkgX19BLAotICAgICAgICAgICAgICAgKF9fdjhoaSkgX19CLAotICAgICAgICAgICAgICAgKF9fdjhoaSkgX19XLAotICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2t6X2FkZHNfZXBpMTYgKF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQotewotICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BhZGRzdzEyOF9tYXNrICgoX192OGhpKSBfX0EsCi0gICAgICAgICAgICAgICAoX192OGhpKSBfX0IsCi0gICAgICAgICAgICAgICAoX192OGhpKSBfbW1fc2V0emVyb19zaTEyOCAoKSwKLSAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXNrX2FkZHNfZXBpMTYgKF9fbTI1NmkgX19XLCBfX21tYXNrMTYgX19VLCBfX20yNTZpIF9fQSwKLSAgICAgIF9fbTI1NmkgX19CKQotewotICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BhZGRzdzI1Nl9tYXNrICgoX192MTZoaSkgX19BLAotICAgICAgICAgICAgICAgKF9fdjE2aGkpIF9fQiwKLSAgICAgICAgICAgICAgIChfX3YxNmhpKSBfX1csCi0gICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X21hc2t6X2FkZHNfZXBpMTYgKF9fbW1hc2sxNiBfX1UsIF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQikKLXsKLSAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wYWRkc3cyNTZfbWFzayAoKF9fdjE2aGkpIF9fQSwKLSAgICAgICAgICAgICAgIChfX3YxNmhpKSBfX0IsCi0gICAgICAgICAgICAgICAoX192MTZoaSkgX21tMjU2X3NldHplcm9fc2kyNTYgKCksCi0gICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2tfYWRkc19lcHU4IChfX20xMjhpIF9fVywgX19tbWFzazE2IF9fVSwgX19tMTI4aSBfX0EsCi0gICAgICAgIF9fbTEyOGkgX19CKQotewotICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BhZGR1c2IxMjhfbWFzayAoKF9fdjE2cWkpIF9fQSwKLSAgICAgICAgICAgICAgIChfX3YxNnFpKSBfX0IsCi0gICAgICAgICAgICAgICAoX192MTZxaSkgX19XLAotICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tYXNrel9hZGRzX2VwdTggKF9fbW1hc2sxNiBfX1UsIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKLXsKLSAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wYWRkdXNiMTI4X21hc2sgKChfX3YxNnFpKSBfX0EsCi0gICAgICAgICAgICAgICAoX192MTZxaSkgX19CLAotICAgICAgICAgICAgICAgKF9fdjE2cWkpIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAotICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXNrX2FkZHNfZXB1OCAoX19tMjU2aSBfX1csIF9fbW1hc2szMiBfX1UsIF9fbTI1NmkgX19BLAotICAgICAgICAgICBfX20yNTZpIF9fQikKLXsKLSAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wYWRkdXNiMjU2X21hc2sgKChfX3YzMnFpKSBfX0EsCi0gICAgICAgICAgICAgICAoX192MzJxaSkgX19CLAotICAgICAgICAgICAgICAgKF9fdjMycWkpIF9fVywKLSAgICAgICAgICAgICAgIChfX21tYXNrMzIpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfbWFza3pfYWRkc19lcHU4IChfX21tYXNrMzIgX19VLCBfX20yNTZpIF9fQSwgX19tMjU2aSBfX0IpCi17Ci0gIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcGFkZHVzYjI1Nl9tYXNrICgoX192MzJxaSkgX19BLAotICAgICAgICAgICAgICAgKF9fdjMycWkpIF9fQiwKLSAgICAgICAgICAgICAgIChfX3YzMnFpKSBfbW0yNTZfc2V0emVyb19zaTI1NiAoKSwKLSAgICAgICAgICAgICAgIChfX21tYXNrMzIpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWFza19hZGRzX2VwdTE2IChfX20xMjhpIF9fVywgX19tbWFzazggX19VLCBfX20xMjhpIF9fQSwKLSAgICAgICAgIF9fbTEyOGkgX19CKQotewotICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BhZGR1c3cxMjhfbWFzayAoKF9fdjhoaSkgX19BLAotICAgICAgICAgICAgICAgKF9fdjhoaSkgX19CLAotICAgICAgICAgICAgICAgKF9fdjhoaSkgX19XLAotICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2t6X2FkZHNfZXB1MTYgKF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQotewotICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BhZGR1c3cxMjhfbWFzayAoKF9fdjhoaSkgX19BLAotICAgICAgICAgICAgICAgKF9fdjhoaSkgX19CLAotICAgICAgICAgICAgICAgKF9fdjhoaSkgX21tX3NldHplcm9fc2kxMjggKCksCi0gICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfbWFza19hZGRzX2VwdTE2IChfX20yNTZpIF9fVywgX19tbWFzazE2IF9fVSwgX19tMjU2aSBfX0EsCi0gICAgICBfX20yNTZpIF9fQikKLXsKLSAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wYWRkdXN3MjU2X21hc2sgKChfX3YxNmhpKSBfX0EsCi0gICAgICAgICAgICAgICAoX192MTZoaSkgX19CLAotICAgICAgICAgICAgICAgKF9fdjE2aGkpIF9fVywKLSAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfbWFza3pfYWRkc19lcHUxNiAoX19tbWFzazE2IF9fVSwgX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKQotewotICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BhZGR1c3cyNTZfbWFzayAoKF9fdjE2aGkpIF9fQSwKLSAgICAgICAgICAgICAgIChfX3YxNmhpKSBfX0IsCi0gICAgICAgICAgICAgICAoX192MTZoaSkgX21tMjU2X3NldHplcm9fc2kyNTYgKCksCi0gICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2tfYXZnX2VwdTggKF9fbTEyOGkgX19XLCBfX21tYXNrMTYgX19VLCBfX20xMjhpIF9fQSwKLSAgICAgICBfX20xMjhpIF9fQikKLXsKLSAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wYXZnYjEyOF9tYXNrICgoX192MTZxaSkgX19BLAotICAgICAgICAgICAgICAgKF9fdjE2cWkpIF9fQiwKLSAgICAgICAgICAgICAgIChfX3YxNnFpKSBfX1csCi0gICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2t6X2F2Z19lcHU4IChfX21tYXNrMTYgX19VLCBfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCi17Ci0gIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcGF2Z2IxMjhfbWFzayAoKF9fdjE2cWkpIF9fQSwKLSAgICAgICAgICAgICAgIChfX3YxNnFpKSBfX0IsCi0gICAgICAgICAgICAgICAoX192MTZxaSkgX21tX3NldHplcm9fc2kxMjggKCksCi0gICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X21hc2tfYXZnX2VwdTggKF9fbTI1NmkgX19XLCBfX21tYXNrMzIgX19VLCBfX20yNTZpIF9fQSwKLSAgICAgICAgICBfX20yNTZpIF9fQikKLXsKLSAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wYXZnYjI1Nl9tYXNrICgoX192MzJxaSkgX19BLAotICAgICAgICAgICAgICAgKF9fdjMycWkpIF9fQiwKLSAgICAgICAgICAgICAgIChfX3YzMnFpKSBfX1csCi0gICAgICAgICAgICAgICAoX19tbWFzazMyKSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X21hc2t6X2F2Z19lcHU4IChfX21tYXNrMzIgX19VLCBfX20yNTZpIF9fQSwgX19tMjU2aSBfX0IpCi17Ci0gIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcGF2Z2IyNTZfbWFzayAoKF9fdjMycWkpIF9fQSwKLSAgICAgICAgICAgICAgIChfX3YzMnFpKSBfX0IsCi0gICAgICAgICAgICAgICAoX192MzJxaSkgX21tMjU2X3NldHplcm9fc2kyNTYgKCksCi0gICAgICAgICAgICAgICAoX19tbWFzazMyKSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2tfYXZnX2VwdTE2IChfX20xMjhpIF9fVywgX19tbWFzazggX19VLCBfX20xMjhpIF9fQSwKLSAgICAgICAgX19tMTI4aSBfX0IpCi17Ci0gIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcGF2Z3cxMjhfbWFzayAoKF9fdjhoaSkgX19BLAotICAgICAgICAgICAgICAgKF9fdjhoaSkgX19CLAotICAgICAgICAgICAgICAgKF9fdjhoaSkgX19XLAotICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2t6X2F2Z19lcHUxNiAoX19tbWFzazggX19VLCBfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCi17Ci0gIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcGF2Z3cxMjhfbWFzayAoKF9fdjhoaSkgX19BLAotICAgICAgICAgICAgICAgKF9fdjhoaSkgX19CLAotICAgICAgICAgICAgICAgKF9fdjhoaSkgX21tX3NldHplcm9fc2kxMjggKCksCi0gICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfbWFza19hdmdfZXB1MTYgKF9fbTI1NmkgX19XLCBfX21tYXNrMTYgX19VLCBfX20yNTZpIF9fQSwKLSAgICAgICAgICAgX19tMjU2aSBfX0IpCi17Ci0gIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcGF2Z3cyNTZfbWFzayAoKF9fdjE2aGkpIF9fQSwKLSAgICAgICAgICAgICAgIChfX3YxNmhpKSBfX0IsCi0gICAgICAgICAgICAgICAoX192MTZoaSkgX19XLAotICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXNrel9hdmdfZXB1MTYgKF9fbW1hc2sxNiBfX1UsIF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQikKLXsKLSAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wYXZndzI1Nl9tYXNrICgoX192MTZoaSkgX19BLAotICAgICAgICAgICAgICAgKF9fdjE2aGkpIF9fQiwKLSAgICAgICAgICAgICAgIChfX3YxNmhpKSBfbW0yNTZfc2V0emVyb19zaTI1NiAoKSwKLSAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWFza3pfbWF4X2VwaTggKF9fbW1hc2sxNiBfX00sIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKLXsKLSAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbWF4c2IxMjhfbWFzayAoKF9fdjE2cWkpIF9fQSwKLSAgICAgICAgICAgICAgIChfX3YxNnFpKSBfX0IsCi0gICAgICAgICAgICAgICAoX192MTZxaSkgX21tX3NldHplcm9fc2kxMjggKCksCi0gICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX00pOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2tfbWF4X2VwaTggKF9fbTEyOGkgX19XLCBfX21tYXNrMTYgX19NLCBfX20xMjhpIF9fQSwKLSAgICAgICBfX20xMjhpIF9fQikKLXsKLSAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbWF4c2IxMjhfbWFzayAoKF9fdjE2cWkpIF9fQSwKLSAgICAgICAgICAgICAgIChfX3YxNnFpKSBfX0IsCi0gICAgICAgICAgICAgICAoX192MTZxaSkgX19XLAotICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19NKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXNrel9tYXhfZXBpOCAoX19tbWFzazMyIF9fTSwgX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKQotewotICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BtYXhzYjI1Nl9tYXNrICgoX192MzJxaSkgX19BLAotICAgICAgICAgICAgICAgKF9fdjMycWkpIF9fQiwKLSAgICAgICAgICAgICAgIChfX3YzMnFpKSBfbW0yNTZfc2V0emVyb19zaTI1NiAoKSwKLSAgICAgICAgICAgICAgIChfX21tYXNrMzIpIF9fTSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfbWFza19tYXhfZXBpOCAoX19tMjU2aSBfX1csIF9fbW1hc2szMiBfX00sIF9fbTI1NmkgX19BLAotICAgICAgICAgIF9fbTI1NmkgX19CKQotewotICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BtYXhzYjI1Nl9tYXNrICgoX192MzJxaSkgX19BLAotICAgICAgICAgICAgICAgKF9fdjMycWkpIF9fQiwKLSAgICAgICAgICAgICAgIChfX3YzMnFpKSBfX1csCi0gICAgICAgICAgICAgICAoX19tbWFzazMyKSBfX00pOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2t6X21heF9lcGkxNiAoX19tbWFzazggX19NLCBfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCi17Ci0gIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1heHN3MTI4X21hc2sgKChfX3Y4aGkpIF9fQSwKLSAgICAgICAgICAgICAgIChfX3Y4aGkpIF9fQiwKLSAgICAgICAgICAgICAgIChfX3Y4aGkpIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAotICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX00pOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2tfbWF4X2VwaTE2IChfX20xMjhpIF9fVywgX19tbWFzazggX19NLCBfX20xMjhpIF9fQSwKLSAgICAgICAgX19tMTI4aSBfX0IpCi17Ci0gIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1heHN3MTI4X21hc2sgKChfX3Y4aGkpIF9fQSwKLSAgICAgICAgICAgICAgIChfX3Y4aGkpIF9fQiwKLSAgICAgICAgICAgICAgIChfX3Y4aGkpIF9fVywKLSAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19NKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXNrel9tYXhfZXBpMTYgKF9fbW1hc2sxNiBfX00sIF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQikKLXsKLSAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wbWF4c3cyNTZfbWFzayAoKF9fdjE2aGkpIF9fQSwKLSAgICAgICAgICAgICAgIChfX3YxNmhpKSBfX0IsCi0gICAgICAgICAgICAgICAoX192MTZoaSkgX21tMjU2X3NldHplcm9fc2kyNTYgKCksCi0gICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX00pOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X21hc2tfbWF4X2VwaTE2IChfX20yNTZpIF9fVywgX19tbWFzazE2IF9fTSwgX19tMjU2aSBfX0EsCi0gICAgICAgICAgIF9fbTI1NmkgX19CKQotewotICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BtYXhzdzI1Nl9tYXNrICgoX192MTZoaSkgX19BLAotICAgICAgICAgICAgICAgKF9fdjE2aGkpIF9fQiwKLSAgICAgICAgICAgICAgIChfX3YxNmhpKSBfX1csCi0gICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX00pOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2t6X21heF9lcHU4IChfX21tYXNrMTYgX19NLCBfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCi17Ci0gIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1heHViMTI4X21hc2sgKChfX3YxNnFpKSBfX0EsCi0gICAgICAgICAgICAgICAoX192MTZxaSkgX19CLAotICAgICAgICAgICAgICAgKF9fdjE2cWkpIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAotICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19NKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tYXNrX21heF9lcHU4IChfX20xMjhpIF9fVywgX19tbWFzazE2IF9fTSwgX19tMTI4aSBfX0EsCi0gICAgICAgX19tMTI4aSBfX0IpCi17Ci0gIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1heHViMTI4X21hc2sgKChfX3YxNnFpKSBfX0EsCi0gICAgICAgICAgICAgICAoX192MTZxaSkgX19CLAotICAgICAgICAgICAgICAgKF9fdjE2cWkpIF9fVywKLSAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fTSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfbWFza3pfbWF4X2VwdTggKF9fbW1hc2szMiBfX00sIF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQikKLXsKLSAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wbWF4dWIyNTZfbWFzayAoKF9fdjMycWkpIF9fQSwKLSAgICAgICAgICAgICAgIChfX3YzMnFpKSBfX0IsCi0gICAgICAgICAgICAgICAoX192MzJxaSkgX21tMjU2X3NldHplcm9fc2kyNTYgKCksCi0gICAgICAgICAgICAgICAoX19tbWFzazMyKSBfX00pOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X21hc2tfbWF4X2VwdTggKF9fbTI1NmkgX19XLCBfX21tYXNrMzIgX19NLCBfX20yNTZpIF9fQSwKLSAgICAgICAgICBfX20yNTZpIF9fQikKLXsKLSAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wbWF4dWIyNTZfbWFzayAoKF9fdjMycWkpIF9fQSwKLSAgICAgICAgICAgICAgIChfX3YzMnFpKSBfX0IsCi0gICAgICAgICAgICAgICAoX192MzJxaSkgX19XLAotICAgICAgICAgICAgICAgKF9fbW1hc2szMikgX19NKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tYXNrel9tYXhfZXB1MTYgKF9fbW1hc2s4IF9fTSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQotewotICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BtYXh1dzEyOF9tYXNrICgoX192OGhpKSBfX0EsCi0gICAgICAgICAgICAgICAoX192OGhpKSBfX0IsCi0gICAgICAgICAgICAgICAoX192OGhpKSBfbW1fc2V0emVyb19zaTEyOCAoKSwKLSAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19NKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tYXNrX21heF9lcHUxNiAoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fTSwgX19tMTI4aSBfX0EsCi0gICAgICAgIF9fbTEyOGkgX19CKQotewotICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BtYXh1dzEyOF9tYXNrICgoX192OGhpKSBfX0EsCi0gICAgICAgICAgICAgICAoX192OGhpKSBfX0IsCi0gICAgICAgICAgICAgICAoX192OGhpKSBfX1csCi0gICAgICAgICAgICAgICAoX19tbWFzazgpIF9fTSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfbWFza3pfbWF4X2VwdTE2IChfX21tYXNrMTYgX19NLCBfX20yNTZpIF9fQSwgX19tMjU2aSBfX0IpCi17Ci0gIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcG1heHV3MjU2X21hc2sgKChfX3YxNmhpKSBfX0EsCi0gICAgICAgICAgICAgICAoX192MTZoaSkgX19CLAotICAgICAgICAgICAgICAgKF9fdjE2aGkpIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2ICgpLAotICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19NKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXNrX21heF9lcHUxNiAoX19tMjU2aSBfX1csIF9fbW1hc2sxNiBfX00sIF9fbTI1NmkgX19BLAotICAgICAgICAgICBfX20yNTZpIF9fQikKLXsKLSAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wbWF4dXcyNTZfbWFzayAoKF9fdjE2aGkpIF9fQSwKLSAgICAgICAgICAgICAgIChfX3YxNmhpKSBfX0IsCi0gICAgICAgICAgICAgICAoX192MTZoaSkgX19XLAotICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19NKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tYXNrel9taW5fZXBpOCAoX19tbWFzazE2IF9fTSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQotewotICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BtaW5zYjEyOF9tYXNrICgoX192MTZxaSkgX19BLAotICAgICAgICAgICAgICAgKF9fdjE2cWkpIF9fQiwKLSAgICAgICAgICAgICAgIChfX3YxNnFpKSBfbW1fc2V0emVyb19zaTEyOCAoKSwKLSAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fTSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWFza19taW5fZXBpOCAoX19tMTI4aSBfX1csIF9fbW1hc2sxNiBfX00sIF9fbTEyOGkgX19BLAotICAgICAgIF9fbTEyOGkgX19CKQotewotICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BtaW5zYjEyOF9tYXNrICgoX192MTZxaSkgX19BLAotICAgICAgICAgICAgICAgKF9fdjE2cWkpIF9fQiwKLSAgICAgICAgICAgICAgIChfX3YxNnFpKSBfX1csCi0gICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX00pOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X21hc2t6X21pbl9lcGk4IChfX21tYXNrMzIgX19NLCBfX20yNTZpIF9fQSwgX19tMjU2aSBfX0IpCi17Ci0gIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcG1pbnNiMjU2X21hc2sgKChfX3YzMnFpKSBfX0EsCi0gICAgICAgICAgICAgICAoX192MzJxaSkgX19CLAotICAgICAgICAgICAgICAgKF9fdjMycWkpIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2ICgpLAotICAgICAgICAgICAgICAgKF9fbW1hc2szMikgX19NKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXNrX21pbl9lcGk4IChfX20yNTZpIF9fVywgX19tbWFzazMyIF9fTSwgX19tMjU2aSBfX0EsCi0gICAgICAgICAgX19tMjU2aSBfX0IpCi17Ci0gIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcG1pbnNiMjU2X21hc2sgKChfX3YzMnFpKSBfX0EsCi0gICAgICAgICAgICAgICAoX192MzJxaSkgX19CLAotICAgICAgICAgICAgICAgKF9fdjMycWkpIF9fVywKLSAgICAgICAgICAgICAgIChfX21tYXNrMzIpIF9fTSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWFza3pfbWluX2VwaTE2IChfX21tYXNrOCBfX00sIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKLXsKLSAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbWluc3cxMjhfbWFzayAoKF9fdjhoaSkgX19BLAotICAgICAgICAgICAgICAgKF9fdjhoaSkgX19CLAotICAgICAgICAgICAgICAgKF9fdjhoaSkgX21tX3NldHplcm9fc2kxMjggKCksCi0gICAgICAgICAgICAgICAoX19tbWFzazgpIF9fTSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWFza19taW5fZXBpMTYgKF9fbTEyOGkgX19XLCBfX21tYXNrOCBfX00sIF9fbTEyOGkgX19BLAotICAgICAgICBfX20xMjhpIF9fQikKLXsKLSAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbWluc3cxMjhfbWFzayAoKF9fdjhoaSkgX19BLAotICAgICAgICAgICAgICAgKF9fdjhoaSkgX19CLAotICAgICAgICAgICAgICAgKF9fdjhoaSkgX19XLAotICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX00pOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X21hc2t6X21pbl9lcGkxNiAoX19tbWFzazE2IF9fTSwgX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKQotewotICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BtaW5zdzI1Nl9tYXNrICgoX192MTZoaSkgX19BLAotICAgICAgICAgICAgICAgKF9fdjE2aGkpIF9fQiwKLSAgICAgICAgICAgICAgIChfX3YxNmhpKSBfbW0yNTZfc2V0emVyb19zaTI1NiAoKSwKLSAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fTSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfbWFza19taW5fZXBpMTYgKF9fbTI1NmkgX19XLCBfX21tYXNrMTYgX19NLCBfX20yNTZpIF9fQSwKLSAgICAgICAgICAgX19tMjU2aSBfX0IpCi17Ci0gIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcG1pbnN3MjU2X21hc2sgKChfX3YxNmhpKSBfX0EsCi0gICAgICAgICAgICAgICAoX192MTZoaSkgX19CLAotICAgICAgICAgICAgICAgKF9fdjE2aGkpIF9fVywKLSAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fTSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWFza3pfbWluX2VwdTggKF9fbW1hc2sxNiBfX00sIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKLXsKLSAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbWludWIxMjhfbWFzayAoKF9fdjE2cWkpIF9fQSwKLSAgICAgICAgICAgICAgIChfX3YxNnFpKSBfX0IsCi0gICAgICAgICAgICAgICAoX192MTZxaSkgX21tX3NldHplcm9fc2kxMjggKCksCi0gICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX00pOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2tfbWluX2VwdTggKF9fbTEyOGkgX19XLCBfX21tYXNrMTYgX19NLCBfX20xMjhpIF9fQSwKLSAgICAgICBfX20xMjhpIF9fQikKLXsKLSAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbWludWIxMjhfbWFzayAoKF9fdjE2cWkpIF9fQSwKLSAgICAgICAgICAgICAgIChfX3YxNnFpKSBfX0IsCi0gICAgICAgICAgICAgICAoX192MTZxaSkgX19XLAotICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19NKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXNrel9taW5fZXB1OCAoX19tbWFzazMyIF9fTSwgX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKQotewotICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BtaW51YjI1Nl9tYXNrICgoX192MzJxaSkgX19BLAotICAgICAgICAgICAgICAgKF9fdjMycWkpIF9fQiwKLSAgICAgICAgICAgICAgIChfX3YzMnFpKSBfbW0yNTZfc2V0emVyb19zaTI1NiAoKSwKLSAgICAgICAgICAgICAgIChfX21tYXNrMzIpIF9fTSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfbWFza19taW5fZXB1OCAoX19tMjU2aSBfX1csIF9fbW1hc2szMiBfX00sIF9fbTI1NmkgX19BLAotICAgICAgICAgIF9fbTI1NmkgX19CKQotewotICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BtaW51YjI1Nl9tYXNrICgoX192MzJxaSkgX19BLAotICAgICAgICAgICAgICAgKF9fdjMycWkpIF9fQiwKLSAgICAgICAgICAgICAgIChfX3YzMnFpKSBfX1csCi0gICAgICAgICAgICAgICAoX19tbWFzazMyKSBfX00pOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2t6X21pbl9lcHUxNiAoX19tbWFzazggX19NLCBfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCi17Ci0gIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1pbnV3MTI4X21hc2sgKChfX3Y4aGkpIF9fQSwKLSAgICAgICAgICAgICAgIChfX3Y4aGkpIF9fQiwKLSAgICAgICAgICAgICAgIChfX3Y4aGkpIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAotICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX00pOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2tfbWluX2VwdTE2IChfX20xMjhpIF9fVywgX19tbWFzazggX19NLCBfX20xMjhpIF9fQSwKLSAgICAgICAgX19tMTI4aSBfX0IpCi17Ci0gIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1pbnV3MTI4X21hc2sgKChfX3Y4aGkpIF9fQSwKLSAgICAgICAgICAgICAgIChfX3Y4aGkpIF9fQiwKLSAgICAgICAgICAgICAgIChfX3Y4aGkpIF9fVywKLSAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19NKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXNrel9taW5fZXB1MTYgKF9fbW1hc2sxNiBfX00sIF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQikKLXsKLSAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wbWludXcyNTZfbWFzayAoKF9fdjE2aGkpIF9fQSwKLSAgICAgICAgICAgICAgIChfX3YxNmhpKSBfX0IsCi0gICAgICAgICAgICAgICAoX192MTZoaSkgX21tMjU2X3NldHplcm9fc2kyNTYgKCksCi0gICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX00pOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X21hc2tfbWluX2VwdTE2IChfX20yNTZpIF9fVywgX19tbWFzazE2IF9fTSwgX19tMjU2aSBfX0EsCi0gICAgICAgICAgIF9fbTI1NmkgX19CKQotewotICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BtaW51dzI1Nl9tYXNrICgoX192MTZoaSkgX19BLAotICAgICAgICAgICAgICAgKF9fdjE2aGkpIF9fQiwKLSAgICAgICAgICAgICAgIChfX3YxNmhpKSBfX1csCi0gICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX00pOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2tfc2h1ZmZsZV9lcGk4IChfX20xMjhpIF9fVywgX19tbWFzazE2IF9fVSwgX19tMTI4aSBfX0EsCi0gICAgICAgICAgIF9fbTEyOGkgX19CKQotewotICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BzaHVmYjEyOF9tYXNrICgoX192MTZxaSkgX19BLAotICAgICAgICAgICAgICAgKF9fdjE2cWkpIF9fQiwKLSAgICAgICAgICAgICAgIChfX3YxNnFpKSBfX1csCi0gICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2t6X3NodWZmbGVfZXBpOCAoX19tbWFzazE2IF9fVSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQotewotICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BzaHVmYjEyOF9tYXNrICgoX192MTZxaSkgX19BLAotICAgICAgICAgICAgICAgKF9fdjE2cWkpIF9fQiwKLSAgICAgICAgICAgICAgIChfX3YxNnFpKSBfbW1fc2V0emVyb19zaTEyOCAoKSwKLSAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfbWFza19zaHVmZmxlX2VwaTggKF9fbTI1NmkgX19XLCBfX21tYXNrMzIgX19VLCBfX20yNTZpIF9fQSwKLSAgICAgICAgX19tMjU2aSBfX0IpCi17Ci0gIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcHNodWZiMjU2X21hc2sgKChfX3YzMnFpKSBfX0EsCi0gICAgICAgICAgICAgICAoX192MzJxaSkgX19CLAotICAgICAgICAgICAgICAgKF9fdjMycWkpIF9fVywKLSAgICAgICAgICAgICAgIChfX21tYXNrMzIpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfbWFza3pfc2h1ZmZsZV9lcGk4IChfX21tYXNrMzIgX19VLCBfX20yNTZpIF9fQSwgX19tMjU2aSBfX0IpCi17Ci0gIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcHNodWZiMjU2X21hc2sgKChfX3YzMnFpKSBfX0EsCi0gICAgICAgICAgICAgICAoX192MzJxaSkgX19CLAotICAgICAgICAgICAgICAgKF9fdjMycWkpIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2ICgpLAotICAgICAgICAgICAgICAgKF9fbW1hc2szMikgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tYXNrX3N1YnNfZXBpOCAoX19tMTI4aSBfX1csIF9fbW1hc2sxNiBfX1UsIF9fbTEyOGkgX19BLAotICAgICAgICBfX20xMjhpIF9fQikKLXsKLSAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wc3Vic2IxMjhfbWFzayAoKF9fdjE2cWkpIF9fQSwKLSAgICAgICAgICAgICAgIChfX3YxNnFpKSBfX0IsCi0gICAgICAgICAgICAgICAoX192MTZxaSkgX19XLAotICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tYXNrel9zdWJzX2VwaTggKF9fbW1hc2sxNiBfX1UsIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKLXsKLSAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wc3Vic2IxMjhfbWFzayAoKF9fdjE2cWkpIF9fQSwKLSAgICAgICAgICAgICAgIChfX3YxNnFpKSBfX0IsCi0gICAgICAgICAgICAgICAoX192MTZxaSkgX21tX3NldHplcm9fc2kxMjggKCksCi0gICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X21hc2tfc3Vic19lcGk4IChfX20yNTZpIF9fVywgX19tbWFzazMyIF9fVSwgX19tMjU2aSBfX0EsCi0gICAgICAgICAgIF9fbTI1NmkgX19CKQotewotICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BzdWJzYjI1Nl9tYXNrICgoX192MzJxaSkgX19BLAotICAgICAgICAgICAgICAgKF9fdjMycWkpIF9fQiwKLSAgICAgICAgICAgICAgIChfX3YzMnFpKSBfX1csCi0gICAgICAgICAgICAgICAoX19tbWFzazMyKSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X21hc2t6X3N1YnNfZXBpOCAoX19tbWFzazMyIF9fVSwgX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKQotewotICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BzdWJzYjI1Nl9tYXNrICgoX192MzJxaSkgX19BLAotICAgICAgICAgICAgICAgKF9fdjMycWkpIF9fQiwKLSAgICAgICAgICAgICAgIChfX3YzMnFpKSBfbW0yNTZfc2V0emVyb19zaTI1NiAoKSwKLSAgICAgICAgICAgICAgIChfX21tYXNrMzIpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWFza19zdWJzX2VwaTE2IChfX20xMjhpIF9fVywgX19tbWFzazggX19VLCBfX20xMjhpIF9fQSwKLSAgICAgICAgIF9fbTEyOGkgX19CKQotewotICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BzdWJzdzEyOF9tYXNrICgoX192OGhpKSBfX0EsCi0gICAgICAgICAgICAgICAoX192OGhpKSBfX0IsCi0gICAgICAgICAgICAgICAoX192OGhpKSBfX1csCi0gICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWFza3pfc3Vic19lcGkxNiAoX19tbWFzazggX19VLCBfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCi17Ci0gIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcHN1YnN3MTI4X21hc2sgKChfX3Y4aGkpIF9fQSwKLSAgICAgICAgICAgICAgIChfX3Y4aGkpIF9fQiwKLSAgICAgICAgICAgICAgIChfX3Y4aGkpIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAotICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X21hc2tfc3Vic19lcGkxNiAoX19tMjU2aSBfX1csIF9fbW1hc2sxNiBfX1UsIF9fbTI1NmkgX19BLAotICAgICAgX19tMjU2aSBfX0IpCi17Ci0gIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcHN1YnN3MjU2X21hc2sgKChfX3YxNmhpKSBfX0EsCi0gICAgICAgICAgICAgICAoX192MTZoaSkgX19CLAotICAgICAgICAgICAgICAgKF9fdjE2aGkpIF9fVywKLSAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfbWFza3pfc3Vic19lcGkxNiAoX19tbWFzazE2IF9fVSwgX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKQotewotICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BzdWJzdzI1Nl9tYXNrICgoX192MTZoaSkgX19BLAotICAgICAgICAgICAgICAgKF9fdjE2aGkpIF9fQiwKLSAgICAgICAgICAgICAgIChfX3YxNmhpKSBfbW0yNTZfc2V0emVyb19zaTI1NiAoKSwKLSAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWFza19zdWJzX2VwdTggKF9fbTEyOGkgX19XLCBfX21tYXNrMTYgX19VLCBfX20xMjhpIF9fQSwKLSAgICAgICAgX19tMTI4aSBfX0IpCi17Ci0gIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcHN1YnVzYjEyOF9tYXNrICgoX192MTZxaSkgX19BLAotICAgICAgICAgICAgICAgKF9fdjE2cWkpIF9fQiwKLSAgICAgICAgICAgICAgIChfX3YxNnFpKSBfX1csCi0gICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2t6X3N1YnNfZXB1OCAoX19tbWFzazE2IF9fVSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQotewotICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BzdWJ1c2IxMjhfbWFzayAoKF9fdjE2cWkpIF9fQSwKLSAgICAgICAgICAgICAgIChfX3YxNnFpKSBfX0IsCi0gICAgICAgICAgICAgICAoX192MTZxaSkgX21tX3NldHplcm9fc2kxMjggKCksCi0gICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X21hc2tfc3Vic19lcHU4IChfX20yNTZpIF9fVywgX19tbWFzazMyIF9fVSwgX19tMjU2aSBfX0EsCi0gICAgICAgICAgIF9fbTI1NmkgX19CKQotewotICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BzdWJ1c2IyNTZfbWFzayAoKF9fdjMycWkpIF9fQSwKLSAgICAgICAgICAgICAgIChfX3YzMnFpKSBfX0IsCi0gICAgICAgICAgICAgICAoX192MzJxaSkgX19XLAotICAgICAgICAgICAgICAgKF9fbW1hc2szMikgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXNrel9zdWJzX2VwdTggKF9fbW1hc2szMiBfX1UsIF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQikKLXsKLSAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wc3VidXNiMjU2X21hc2sgKChfX3YzMnFpKSBfX0EsCi0gICAgICAgICAgICAgICAoX192MzJxaSkgX19CLAotICAgICAgICAgICAgICAgKF9fdjMycWkpIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2ICgpLAotICAgICAgICAgICAgICAgKF9fbW1hc2szMikgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tYXNrX3N1YnNfZXB1MTYgKF9fbTEyOGkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BLAotICAgICAgICAgX19tMTI4aSBfX0IpCi17Ci0gIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcHN1YnVzdzEyOF9tYXNrICgoX192OGhpKSBfX0EsCi0gICAgICAgICAgICAgICAoX192OGhpKSBfX0IsCi0gICAgICAgICAgICAgICAoX192OGhpKSBfX1csCi0gICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWFza3pfc3Vic19lcHUxNiAoX19tbWFzazggX19VLCBfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCi17Ci0gIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcHN1YnVzdzEyOF9tYXNrICgoX192OGhpKSBfX0EsCi0gICAgICAgICAgICAgICAoX192OGhpKSBfX0IsCi0gICAgICAgICAgICAgICAoX192OGhpKSBfbW1fc2V0emVyb19zaTEyOCAoKSwKLSAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXNrX3N1YnNfZXB1MTYgKF9fbTI1NmkgX19XLCBfX21tYXNrMTYgX19VLCBfX20yNTZpIF9fQSwKLSAgICAgIF9fbTI1NmkgX19CKQotewotICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BzdWJ1c3cyNTZfbWFzayAoKF9fdjE2aGkpIF9fQSwKLSAgICAgICAgICAgICAgIChfX3YxNmhpKSBfX0IsCi0gICAgICAgICAgICAgICAoX192MTZoaSkgX19XLAotICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXNrel9zdWJzX2VwdTE2IChfX21tYXNrMTYgX19VLCBfX20yNTZpIF9fQSwgX19tMjU2aSBfX0IpCi17Ci0gIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcHN1YnVzdzI1Nl9tYXNrICgoX192MTZoaSkgX19BLAotICAgICAgICAgICAgICAgKF9fdjE2aGkpIF9fQiwKLSAgICAgICAgICAgICAgIChfX3YxNmhpKSBfbW0yNTZfc2V0emVyb19zaTI1NiAoKSwKLSAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWFzazJfcGVybXV0ZXgydmFyX2VwaTE2IChfX20xMjhpIF9fQSwgX19tMTI4aSBfX0ksIF9fbW1hc2s4IF9fVSwKLSAgICAgICAgICAgIF9fbTEyOGkgX19CKQotewotICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3ZwZXJtaTJ2YXJoaTEyOF9tYXNrICgoX192OGhpKSBfX0EsCi0gICAgICAgICAgICAgICAoX192OGhpKSBfX0kgLyogaWR4ICovICwKLSAgICAgICAgICAgICAgIChfX3Y4aGkpIF9fQiwKLSAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXNrMl9wZXJtdXRleDJ2YXJfZXBpMTYgKF9fbTI1NmkgX19BLCBfX20yNTZpIF9fSSwKLSAgICAgICAgIF9fbW1hc2sxNiBfX1UsIF9fbTI1NmkgX19CKQotewotICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3ZwZXJtaTJ2YXJoaTI1Nl9tYXNrICgoX192MTZoaSkgX19BLAotICAgICAgICAgICAgICAgKF9fdjE2aGkpIF9fSSAvKiBpZHggKi8gLAotICAgICAgICAgICAgICAgKF9fdjE2aGkpIF9fQiwKLSAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fcGVybXV0ZXgydmFyX2VwaTE2IChfX20xMjhpIF9fQSwgX19tMTI4aSBfX0ksIF9fbTEyOGkgX19CKQotewotICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3ZwZXJtdDJ2YXJoaTEyOF9tYXNrICgoX192OGhpKSBfX0kvKiBpZHggKi8sCi0gICAgICAgICAgICAgICAoX192OGhpKSBfX0EsCi0gICAgICAgICAgICAgICAoX192OGhpKSBfX0IsCi0gICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tYXNrX3Blcm11dGV4MnZhcl9lcGkxNiAoX19tMTI4aSBfX0EsIF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0ksCi0gICAgICAgICAgIF9fbTEyOGkgX19CKQotewotICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3ZwZXJtdDJ2YXJoaTEyOF9tYXNrICgoX192OGhpKSBfX0kvKiBpZHggKi8sCi0gICAgICAgICAgICAgICAoX192OGhpKSBfX0EsCi0gICAgICAgICAgICAgICAoX192OGhpKSBfX0IsCi0gICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWFza3pfcGVybXV0ZXgydmFyX2VwaTE2IChfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fSSwKLSAgICAgICAgICAgIF9fbTEyOGkgX19CKQotewotICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3ZwZXJtdDJ2YXJoaTEyOF9tYXNreiAoKF9fdjhoaSkgX19JLyogaWR4ICovLAotICAgICAgICAgICAgICAgKF9fdjhoaSkgX19BLAotICAgICAgICAgICAgICAgKF9fdjhoaSkgX19CLAotICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X3Blcm11dGV4MnZhcl9lcGkxNiAoX19tMjU2aSBfX0EsIF9fbTI1NmkgX19JLCBfX20yNTZpIF9fQikKLXsKLSAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl92cGVybXQydmFyaGkyNTZfbWFzayAoKF9fdjE2aGkpIF9fSS8qIGlkeCAqLywKLSAgICAgICAgICAgICAgIChfX3YxNmhpKSBfX0EsCi0gICAgICAgICAgICAgICAoX192MTZoaSkgX19CLAotICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgLTEpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X21hc2tfcGVybXV0ZXgydmFyX2VwaTE2IChfX20yNTZpIF9fQSwgX19tbWFzazE2IF9fVSwKLSAgICAgICAgX19tMjU2aSBfX0ksIF9fbTI1NmkgX19CKQotewotICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3ZwZXJtdDJ2YXJoaTI1Nl9tYXNrICgoX192MTZoaSkgX19JLyogaWR4ICovLAotICAgICAgICAgICAgICAgKF9fdjE2aGkpIF9fQSwKLSAgICAgICAgICAgICAgIChfX3YxNmhpKSBfX0IsCi0gICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X21hc2t6X3Blcm11dGV4MnZhcl9lcGkxNiAoX19tbWFzazE2IF9fVSwgX19tMjU2aSBfX0EsCi0gICAgICAgICBfX20yNTZpIF9fSSwgX19tMjU2aSBfX0IpCi17Ci0gIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfdnBlcm10MnZhcmhpMjU2X21hc2t6ICgoX192MTZoaSkgX19JLyogaWR4ICovLAotICAgICAgICAgICAgICAgKF9fdjE2aGkpIF9fQSwKLSAgICAgICAgICAgICAgIChfX3YxNmhpKSBfX0IsCi0gICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2tfbWFkZHVic19lcGkxNiAoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX1gsIF9fbTEyOGkgX19ZKSB7Ci0gIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1hZGR1YnN3MTI4X21hc2sgKChfX3YxNnFpKSBfX1gsCi0gICAgICAgICAgICAgICAoX192MTZxaSkgX19ZLAotICAgICAgICAgICAgICAgKF9fdjhoaSkgX19XLAotICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2t6X21hZGR1YnNfZXBpMTYgKF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX1gsIF9fbTEyOGkgX19ZKSB7Ci0gIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1hZGR1YnN3MTI4X21hc2sgKChfX3YxNnFpKSBfX1gsCi0gICAgICAgICAgICAgICAoX192MTZxaSkgX19ZLAotICAgICAgICAgICAgICAoX192OGhpKSBfbW1fc2V0emVyb19zaTEyOCgpLAotICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X21hc2tfbWFkZHVic19lcGkxNiAoX19tMjU2aSBfX1csIF9fbW1hc2sxNiBfX1UsIF9fbTI1NmkgX19YLAotICAgICAgICAgX19tMjU2aSBfX1kpIHsKLSAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wbWFkZHVic3cyNTZfbWFzayAoKF9fdjMycWkpIF9fWCwKLSAgICAgICAgICAgICAgIChfX3YzMnFpKSBfX1ksCi0gICAgICAgICAgICAgICAoX192MTZoaSkgX19XLAotICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXNrel9tYWRkdWJzX2VwaTE2IChfX21tYXNrMTYgX19VLCBfX20yNTZpIF9fWCwgX19tMjU2aSBfX1kpIHsKLSAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wbWFkZHVic3cyNTZfbWFzayAoKF9fdjMycWkpIF9fWCwKLSAgICAgICAgICAgICAgIChfX3YzMnFpKSBfX1ksCi0gICAgICAgICAgICAgICAoX192MTZoaSkgX21tMjU2X3NldHplcm9fc2kyNTYoKSwKLSAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWFza19tYWRkX2VwaTE2IChfX20xMjhpIF9fVywgX19tbWFzazggX19VLCBfX20xMjhpIF9fQSwKLSAgICAgICAgIF9fbTEyOGkgX19CKSB7Ci0gIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1hZGR3ZDEyOF9tYXNrICgoX192OGhpKSBfX0EsCi0gICAgICAgICAgICAgICAoX192OGhpKSBfX0IsCi0gICAgICAgICAgICAgICAoX192NHNpKSBfX1csCi0gICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWFza3pfbWFkZF9lcGkxNiAoX19tbWFzazggX19VLCBfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpIHsKLSAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbWFkZHdkMTI4X21hc2sgKChfX3Y4aGkpIF9fQSwKLSAgICAgICAgICAgICAgIChfX3Y4aGkpIF9fQiwKLSAgICAgICAgICAgICAgIChfX3Y0c2kpIF9tbV9zZXR6ZXJvX3NpMTI4KCksCi0gICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfbWFza19tYWRkX2VwaTE2IChfX20yNTZpIF9fVywgX19tbWFzazggX19VLCBfX20yNTZpIF9fQSwgX19tMjU2aSBfX0IpIHsKLSAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wbWFkZHdkMjU2X21hc2sgKChfX3YxNmhpKSBfX0EsCi0gICAgICAgICAgICAgICAoX192MTZoaSkgX19CLAotICAgICAgICAgICAgICAgKF9fdjhzaSkgX19XLAotICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X21hc2t6X21hZGRfZXBpMTYgKF9fbW1hc2s4IF9fVSwgX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKSB7Ci0gIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcG1hZGR3ZDI1Nl9tYXNrICgoX192MTZoaSkgX19BLAotICAgICAgICAgICAgICAgKF9fdjE2aGkpIF9fQiwKLSAgICAgICAgICAgICAgIChfX3Y4c2kpIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2KCksCi0gICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fY3Z0c2VwaTE2X2VwaTggKF9fbTEyOGkgX19BKSB7Ci0gIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1vdnN3YjEyOF9tYXNrICgoX192OGhpKSBfX0EsCi0gICAgICAgICAgICAgICAoX192MTZxaSkgX21tX3NldHplcm9fc2kxMjgoKSwKLSAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2tfY3Z0c2VwaTE2X2VwaTggKF9fbTEyOGkgX19PLCBfX21tYXNrOCBfX00sIF9fbTEyOGkgX19BKSB7Ci0gIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1vdnN3YjEyOF9tYXNrICgoX192OGhpKSBfX0EsCi0gICAgICAgICAgICAgICAoX192MTZxaSkgX19PLAotICAgICAgICAgICAgICAgIF9fTSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWFza3pfY3Z0c2VwaTE2X2VwaTggKF9fbW1hc2s4IF9fTSwgX19tMTI4aSBfX0EpIHsKLSAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbW92c3diMTI4X21hc2sgKChfX3Y4aGkpIF9fQSwKLSAgICAgICAgICAgICAgIChfX3YxNnFpKSBfbW1fc2V0emVyb19zaTEyOCgpLAotICAgICAgICAgICAgICAgX19NKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9jdnRzZXBpMTZfZXBpOCAoX19tMjU2aSBfX0EpIHsKLSAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbW92c3diMjU2X21hc2sgKChfX3YxNmhpKSBfX0EsCi0gICAgICAgICAgICAgICAoX192MTZxaSkgX21tX3NldHplcm9fc2kxMjgoKSwKLSAgICAgICAgICAgICAgIChfX21tYXNrMTYpIC0xKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXNrX2N2dHNlcGkxNl9lcGk4IChfX20xMjhpIF9fTywgX19tbWFzazE2IF9fTSwgX19tMjU2aSBfX0EpIHsKLSAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbW92c3diMjU2X21hc2sgKChfX3YxNmhpKSBfX0EsCi0gICAgICAgICAgICAgICAoX192MTZxaSkgX19PLAotICAgICAgICAgICAgICAgIF9fTSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfbWFza3pfY3Z0c2VwaTE2X2VwaTggKF9fbW1hc2sxNiBfX00sIF9fbTI1NmkgX19BKSB7Ci0gIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1vdnN3YjI1Nl9tYXNrICgoX192MTZoaSkgX19BLAotICAgICAgICAgICAgICAgKF9fdjE2cWkpIF9tbV9zZXR6ZXJvX3NpMTI4KCksCi0gICAgICAgICAgICAgICBfX00pOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2N2dHVzZXBpMTZfZXBpOCAoX19tMTI4aSBfX0EpIHsKLSAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbW92dXN3YjEyOF9tYXNrICgoX192OGhpKSBfX0EsCi0gICAgICAgICAgICAgICAgKF9fdjE2cWkpIF9tbV9zZXR6ZXJvX3NpMTI4KCksCi0gICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWFza19jdnR1c2VwaTE2X2VwaTggKF9fbTEyOGkgX19PLCBfX21tYXNrOCBfX00sIF9fbTEyOGkgX19BKSB7Ci0gIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1vdnVzd2IxMjhfbWFzayAoKF9fdjhoaSkgX19BLAotICAgICAgICAgICAgICAgIChfX3YxNnFpKSBfX08sCi0gICAgICAgICAgICAgICAgX19NKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tYXNrel9jdnR1c2VwaTE2X2VwaTggKF9fbW1hc2s4IF9fTSwgX19tMTI4aSBfX0EpIHsKLSAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbW92dXN3YjEyOF9tYXNrICgoX192OGhpKSBfX0EsCi0gICAgICAgICAgICAgICAgKF9fdjE2cWkpIF9tbV9zZXR6ZXJvX3NpMTI4KCksCi0gICAgICAgICAgICAgICAgX19NKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9jdnR1c2VwaTE2X2VwaTggKF9fbTI1NmkgX19BKSB7Ci0gIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1vdnVzd2IyNTZfbWFzayAoKF9fdjE2aGkpIF9fQSwKLSAgICAgICAgICAgICAgICAoX192MTZxaSkgX21tX3NldHplcm9fc2kxMjgoKSwKLSAgICAgICAgICAgICAgICAoX19tbWFzazE2KSAtMSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfbWFza19jdnR1c2VwaTE2X2VwaTggKF9fbTEyOGkgX19PLCBfX21tYXNrMTYgX19NLCBfX20yNTZpIF9fQSkgewotICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3Btb3Z1c3diMjU2X21hc2sgKChfX3YxNmhpKSBfX0EsCi0gICAgICAgICAgICAgICAgKF9fdjE2cWkpIF9fTywKLSAgICAgICAgICAgICAgICBfX00pOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X21hc2t6X2N2dHVzZXBpMTZfZXBpOCAoX19tbWFzazE2IF9fTSwgX19tMjU2aSBfX0EpIHsKLSAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbW92dXN3YjI1Nl9tYXNrICgoX192MTZoaSkgX19BLAotICAgICAgICAgICAgICAgIChfX3YxNnFpKSBfbW1fc2V0emVyb19zaTEyOCgpLAotICAgICAgICAgICAgICAgIF9fTSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fY3Z0ZXBpMTZfZXBpOCAoX19tMTI4aSBfX0EpIHsKLQotICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3Btb3Z3YjEyOF9tYXNrICgoX192OGhpKSBfX0EsCi0gICAgICAgICAgICAgICAoX192MTZxaSkgX21tX3NldHplcm9fc2kxMjgoKSwKLSAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2tfY3Z0ZXBpMTZfZXBpOCAoX19tMTI4aSBfX08sIF9fbW1hc2s4IF9fTSwgX19tMTI4aSBfX0EpIHsKLSAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbW92d2IxMjhfbWFzayAoKF9fdjhoaSkgX19BLAotICAgICAgICAgICAgICAgKF9fdjE2cWkpIF9fTywKLSAgICAgICAgICAgICAgIF9fTSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWFza3pfY3Z0ZXBpMTZfZXBpOCAoX19tbWFzazggX19NLCBfX20xMjhpIF9fQSkgewotICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3Btb3Z3YjEyOF9tYXNrICgoX192OGhpKSBfX0EsCi0gICAgICAgICAgICAgICAoX192MTZxaSkgX21tX3NldHplcm9fc2kxMjgoKSwKLSAgICAgICAgICAgICAgIF9fTSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfY3Z0ZXBpMTZfZXBpOCAoX19tMjU2aSBfX0EpIHsKLSAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbW92d2IyNTZfbWFzayAoKF9fdjE2aGkpIF9fQSwKLSAgICAgICAgICAgICAgIChfX3YxNnFpKSBfbW1fc2V0emVyb19zaTEyOCgpLAotICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgLTEpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X21hc2tfY3Z0ZXBpMTZfZXBpOCAoX19tMTI4aSBfX08sIF9fbW1hc2sxNiBfX00sIF9fbTI1NmkgX19BKSB7Ci0gIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1vdndiMjU2X21hc2sgKChfX3YxNmhpKSBfX0EsCi0gICAgICAgICAgICAgICAoX192MTZxaSkgX19PLAotICAgICAgICAgICAgICAgX19NKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXNrel9jdnRlcGkxNl9lcGk4IChfX21tYXNrMTYgX19NLCBfX20yNTZpIF9fQSkgewotICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3Btb3Z3YjI1Nl9tYXNrICgoX192MTZoaSkgX19BLAotICAgICAgICAgICAgICAgKF9fdjE2cWkpIF9tbV9zZXR6ZXJvX3NpMTI4KCksCi0gICAgICAgICAgICAgICBfX00pOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2tfbXVsaHJzX2VwaTE2IChfX20xMjhpIF9fVywgX19tbWFzazggX19VLCBfX20xMjhpIF9fWCwgX19tMTI4aSBfX1kpIHsKLSAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbXVsaHJzdzEyOF9tYXNrICgoX192OGhpKSBfX1gsCi0gICAgICAgICAgICAgICAoX192OGhpKSBfX1ksCi0gICAgICAgICAgICAgICAoX192OGhpKSBfX1csCi0gICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWFza3pfbXVsaHJzX2VwaTE2IChfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19YLCBfX20xMjhpIF9fWSkgewotICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BtdWxocnN3MTI4X21hc2sgKChfX3Y4aGkpIF9fWCwKLSAgICAgICAgICAgICAgIChfX3Y4aGkpIF9fWSwKLSAgICAgICAgICAgICAgKF9fdjhoaSkgX21tX3NldHplcm9fc2kxMjgoKSwKLSAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXNrX211bGhyc19lcGkxNiAoX19tMjU2aSBfX1csIF9fbW1hc2sxNiBfX1UsIF9fbTI1NmkgX19YLCBfX20yNTZpIF9fWSkgewotICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BtdWxocnN3MjU2X21hc2sgKChfX3YxNmhpKSBfX1gsCi0gICAgICAgICAgICAgICAoX192MTZoaSkgX19ZLAotICAgICAgICAgICAgICAgKF9fdjE2aGkpIF9fVywKLSAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfbWFza3pfbXVsaHJzX2VwaTE2IChfX21tYXNrMTYgX19VLCBfX20yNTZpIF9fWCwgX19tMjU2aSBfX1kpIHsKLSAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wbXVsaHJzdzI1Nl9tYXNrICgoX192MTZoaSkgX19YLAotICAgICAgICAgICAgICAgKF9fdjE2aGkpIF9fWSwKLSAgICAgICAgICAgICAgIChfX3YxNmhpKSBfbW0yNTZfc2V0emVyb19zaTI1NigpLAotICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tYXNrX211bGhpX2VwdTE2IChfX20xMjhpIF9fVywgX19tbWFzazggX19VLCBfX20xMjhpIF9fQSwKLSAgICAgICAgICBfX20xMjhpIF9fQikgewotICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BtdWxodXcxMjhfbWFzayAoKF9fdjhoaSkgX19BLAotICAgICAgICAgICAgICAgKF9fdjhoaSkgX19CLAotICAgICAgICAgICAgICAgKF9fdjhoaSkgX19XLAotICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2t6X211bGhpX2VwdTE2IChfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikgewotICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BtdWxodXcxMjhfbWFzayAoKF9fdjhoaSkgX19BLAotICAgICAgICAgICAgICAgKF9fdjhoaSkgX19CLAotICAgICAgICAgICAgICAoX192OGhpKSBfbW1fc2V0emVyb19zaTEyOCgpLAotICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X21hc2tfbXVsaGlfZXB1MTYgKF9fbTI1NmkgX19XLCBfX21tYXNrMTYgX19VLCBfX20yNTZpIF9fQSwKLSAgICAgICBfX20yNTZpIF9fQikgewotICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BtdWxodXcyNTZfbWFzayAoKF9fdjE2aGkpIF9fQSwKLSAgICAgICAgICAgICAgIChfX3YxNmhpKSBfX0IsCi0gICAgICAgICAgICAgICAoX192MTZoaSkgX19XLAotICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXNrel9tdWxoaV9lcHUxNiAoX19tbWFzazE2IF9fVSwgX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKSB7Ci0gIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcG11bGh1dzI1Nl9tYXNrICgoX192MTZoaSkgX19BLAotICAgICAgICAgICAgICAgKF9fdjE2aGkpIF9fQiwKLSAgICAgICAgICAgICAgIChfX3YxNmhpKSBfbW0yNTZfc2V0emVyb19zaTI1NigpLAotICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tYXNrX211bGhpX2VwaTE2IChfX20xMjhpIF9fVywgX19tbWFzazggX19VLCBfX20xMjhpIF9fQSwKLSAgICAgICAgICBfX20xMjhpIF9fQikgewotICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BtdWxodzEyOF9tYXNrICgoX192OGhpKSBfX0EsCi0gICAgICAgICAgICAgICAoX192OGhpKSBfX0IsCi0gICAgICAgICAgICAgICAoX192OGhpKSBfX1csCi0gICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWFza3pfbXVsaGlfZXBpMTYgKF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKSB7Ci0gIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG11bGh3MTI4X21hc2sgKChfX3Y4aGkpIF9fQSwKLSAgICAgICAgICAgICAgIChfX3Y4aGkpIF9fQiwKLSAgICAgICAgICAgICAgKF9fdjhoaSkgX21tX3NldHplcm9fc2kxMjgoKSwKLSAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXNrX211bGhpX2VwaTE2IChfX20yNTZpIF9fVywgX19tbWFzazE2IF9fVSwgX19tMjU2aSBfX0EsCi0gICAgICAgX19tMjU2aSBfX0IpIHsKLSAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wbXVsaHcyNTZfbWFzayAoKF9fdjE2aGkpIF9fQSwKLSAgICAgICAgICAgICAgIChfX3YxNmhpKSBfX0IsCi0gICAgICAgICAgICAgICAoX192MTZoaSkgX19XLAotICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXNrel9tdWxoaV9lcGkxNiAoX19tbWFzazE2IF9fVSwgX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKSB7Ci0gIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcG11bGh3MjU2X21hc2sgKChfX3YxNmhpKSBfX0EsCi0gICAgICAgICAgICAgICAoX192MTZoaSkgX19CLAotICAgICAgICAgICAgICAgKF9fdjE2aGkpIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2KCksCi0gICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2tfdW5wYWNraGlfZXBpOCAoX19tMTI4aSBfX1csIF9fbW1hc2sxNiBfX1UsIF9fbTEyOGkgX19BLAotICAgICAgX19tMTI4aSBfX0IpIHsKLSAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wdW5wY2toYncxMjhfbWFzayAoKF9fdjE2cWkpIF9fQSwKLSAgICAgICAgICAgICAgIChfX3YxNnFpKSBfX0IsCi0gICAgICAgICAgICAgICAoX192MTZxaSkgX19XLAotICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tYXNrel91bnBhY2toaV9lcGk4IChfX21tYXNrMTYgX19VLCBfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpIHsKLSAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wdW5wY2toYncxMjhfbWFzayAoKF9fdjE2cWkpIF9fQSwKLSAgICAgICAgICAgICAgIChfX3YxNnFpKSBfX0IsCi0gICAgICAgICAgICAgICAoX192MTZxaSkgX21tX3NldHplcm9fc2kxMjgoKSwKLSAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfbWFza191bnBhY2toaV9lcGk4IChfX20yNTZpIF9fVywgX19tbWFzazMyIF9fVSwgX19tMjU2aSBfX0EsCi0gICAgICAgICBfX20yNTZpIF9fQikgewotICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3B1bnBja2hidzI1Nl9tYXNrICgoX192MzJxaSkgX19BLAotICAgICAgICAgICAgICAgKF9fdjMycWkpIF9fQiwKLSAgICAgICAgICAgICAgIChfX3YzMnFpKSBfX1csCi0gICAgICAgICAgICAgICAoX19tbWFzazMyKSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X21hc2t6X3VucGFja2hpX2VwaTggKF9fbW1hc2szMiBfX1UsIF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQikgewotICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3B1bnBja2hidzI1Nl9tYXNrICgoX192MzJxaSkgX19BLAotICAgICAgICAgICAgICAgKF9fdjMycWkpIF9fQiwKLSAgICAgICAgICAgICAgIChfX3YzMnFpKSBfbW0yNTZfc2V0emVyb19zaTI1NigpLAotICAgICAgICAgICAgICAgKF9fbW1hc2szMikgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tYXNrX3VucGFja2hpX2VwaTE2IChfX20xMjhpIF9fVywgX19tbWFzazggX19VLCBfX20xMjhpIF9fQSwKLSAgICAgICBfX20xMjhpIF9fQikgewotICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3B1bnBja2h3ZDEyOF9tYXNrICgoX192OGhpKSBfX0EsCi0gICAgICAgICAgICAgICAoX192OGhpKSBfX0IsCi0gICAgICAgICAgICAgICAoX192OGhpKSBfX1csCi0gICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWFza3pfdW5wYWNraGlfZXBpMTYgKF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKSB7Ci0gIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcHVucGNraHdkMTI4X21hc2sgKChfX3Y4aGkpIF9fQSwKLSAgICAgICAgICAgICAgIChfX3Y4aGkpIF9fQiwKLSAgICAgICAgICAgICAgIChfX3Y4aGkpIF9tbV9zZXR6ZXJvX3NpMTI4KCksCi0gICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfbWFza191bnBhY2toaV9lcGkxNiAoX19tMjU2aSBfX1csIF9fbW1hc2sxNiBfX1UsIF9fbTI1NmkgX19BLAotICAgICAgICAgIF9fbTI1NmkgX19CKSB7Ci0gIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcHVucGNraHdkMjU2X21hc2sgKChfX3YxNmhpKSBfX0EsCi0gICAgICAgICAgICAgICAoX192MTZoaSkgX19CLAotICAgICAgICAgICAgICAgKF9fdjE2aGkpIF9fVywKLSAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfbWFza3pfdW5wYWNraGlfZXBpMTYgKF9fbW1hc2sxNiBfX1UsIF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQikgewotICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3B1bnBja2h3ZDI1Nl9tYXNrICgoX192MTZoaSkgX19BLAotICAgICAgICAgICAgICAgKF9fdjE2aGkpIF9fQiwKLSAgICAgICAgICAgICAgIChfX3YxNmhpKSBfbW0yNTZfc2V0emVyb19zaTI1NigpLAotICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tYXNrX3VucGFja2xvX2VwaTggKF9fbTEyOGkgX19XLCBfX21tYXNrMTYgX19VLCBfX20xMjhpIF9fQSwKLSAgICAgIF9fbTEyOGkgX19CKSB7Ci0gIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcHVucGNrbGJ3MTI4X21hc2sgKChfX3YxNnFpKSBfX0EsCi0gICAgICAgICAgICAgICAoX192MTZxaSkgX19CLAotICAgICAgICAgICAgICAgKF9fdjE2cWkpIF9fVywKLSAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWFza3pfdW5wYWNrbG9fZXBpOCAoX19tbWFzazE2IF9fVSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKSB7Ci0gIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcHVucGNrbGJ3MTI4X21hc2sgKChfX3YxNnFpKSBfX0EsCi0gICAgICAgICAgICAgICAoX192MTZxaSkgX19CLAotICAgICAgICAgICAgICAgKF9fdjE2cWkpIF9tbV9zZXR6ZXJvX3NpMTI4KCksCi0gICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X21hc2tfdW5wYWNrbG9fZXBpOCAoX19tMjU2aSBfX1csIF9fbW1hc2szMiBfX1UsIF9fbTI1NmkgX19BLAotICAgICAgICAgX19tMjU2aSBfX0IpIHsKLSAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wdW5wY2tsYncyNTZfbWFzayAoKF9fdjMycWkpIF9fQSwKLSAgICAgICAgICAgICAgIChfX3YzMnFpKSBfX0IsCi0gICAgICAgICAgICAgICAoX192MzJxaSkgX19XLAotICAgICAgICAgICAgICAgKF9fbW1hc2szMikgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXNrel91bnBhY2tsb19lcGk4IChfX21tYXNrMzIgX19VLCBfX20yNTZpIF9fQSwgX19tMjU2aSBfX0IpIHsKLSAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wdW5wY2tsYncyNTZfbWFzayAoKF9fdjMycWkpIF9fQSwKLSAgICAgICAgICAgICAgIChfX3YzMnFpKSBfX0IsCi0gICAgICAgICAgICAgICAoX192MzJxaSkgX21tMjU2X3NldHplcm9fc2kyNTYoKSwKLSAgICAgICAgICAgICAgIChfX21tYXNrMzIpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWFza191bnBhY2tsb19lcGkxNiAoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EsCi0gICAgICAgX19tMTI4aSBfX0IpIHsKLSAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wdW5wY2tsd2QxMjhfbWFzayAoKF9fdjhoaSkgX19BLAotICAgICAgICAgICAgICAgKF9fdjhoaSkgX19CLAotICAgICAgICAgICAgICAgKF9fdjhoaSkgX19XLAotICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2t6X3VucGFja2xvX2VwaTE2IChfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikgewotICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3B1bnBja2x3ZDEyOF9tYXNrICgoX192OGhpKSBfX0EsCi0gICAgICAgICAgICAgICAoX192OGhpKSBfX0IsCi0gICAgICAgICAgICAgICAoX192OGhpKSBfbW1fc2V0emVyb19zaTEyOCgpLAotICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X21hc2tfdW5wYWNrbG9fZXBpMTYgKF9fbTI1NmkgX19XLCBfX21tYXNrMTYgX19VLCBfX20yNTZpIF9fQSwKLSAgICAgICAgICBfX20yNTZpIF9fQikgewotICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3B1bnBja2x3ZDI1Nl9tYXNrICgoX192MTZoaSkgX19BLAotICAgICAgICAgICAgICAgKF9fdjE2aGkpIF9fQiwKLSAgICAgICAgICAgICAgIChfX3YxNmhpKSBfX1csCi0gICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X21hc2t6X3VucGFja2xvX2VwaTE2IChfX21tYXNrMTYgX19VLCBfX20yNTZpIF9fQSwgX19tMjU2aSBfX0IpIHsKLSAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wdW5wY2tsd2QyNTZfbWFzayAoKF9fdjE2aGkpIF9fQSwKLSAgICAgICAgICAgICAgIChfX3YxNmhpKSBfX0IsCi0gICAgICAgICAgICAgICAoX192MTZoaSkgX21tMjU2X3NldHplcm9fc2kyNTYoKSwKLSAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSk7Ci19Ci0KLSNkZWZpbmUgX21tX2NtcF9lcGk4X21hc2soYSwgYiwgcCkgX19leHRlbnNpb25fXyAoeyBcCi0gIChfX21tYXNrMTYpX19idWlsdGluX2lhMzJfY21wYjEyOF9tYXNrKChfX3YxNnFpKShfX20xMjhpKShhKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZxaSkoX19tMTI4aSkoYiksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHApLCAoX19tbWFzazE2KS0xKTsgfSkKLQotI2RlZmluZSBfbW1fbWFza19jbXBfZXBpOF9tYXNrKG0sIGEsIGIsIHApIF9fZXh0ZW5zaW9uX18gKHsgXAotICAoX19tbWFzazE2KV9fYnVpbHRpbl9pYTMyX2NtcGIxMjhfbWFzaygoX192MTZxaSkoX19tMTI4aSkoYSksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2cWkpKF9fbTEyOGkpKGIpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwKSwgKF9fbW1hc2sxNikobSkpOyB9KQotCi0jZGVmaW5lIF9tbV9jbXBfZXB1OF9tYXNrKGEsIGIsIHApIF9fZXh0ZW5zaW9uX18gKHsgXAotICAoX19tbWFzazE2KV9fYnVpbHRpbl9pYTMyX3VjbXBiMTI4X21hc2soKF9fdjE2cWkpKF9fbTEyOGkpKGEpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZxaSkoX19tMTI4aSkoYiksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwKSwgKF9fbW1hc2sxNiktMSk7IH0pCi0KLSNkZWZpbmUgX21tX21hc2tfY21wX2VwdThfbWFzayhtLCBhLCBiLCBwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgKF9fbW1hc2sxNilfX2J1aWx0aW5faWEzMl91Y21wYjEyOF9tYXNrKChfX3YxNnFpKShfX20xMjhpKShhKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2cWkpKF9fbTEyOGkpKGIpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocCksIChfX21tYXNrMTYpKG0pKTsgfSkKLQotI2RlZmluZSBfbW0yNTZfY21wX2VwaThfbWFzayhhLCBiLCBwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgKF9fbW1hc2szMilfX2J1aWx0aW5faWEzMl9jbXBiMjU2X21hc2soKF9fdjMycWkpKF9fbTI1NmkpKGEpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YzMnFpKShfX20yNTZpKShiKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocCksIChfX21tYXNrMzIpLTEpOyB9KQotCi0jZGVmaW5lIF9tbTI1Nl9tYXNrX2NtcF9lcGk4X21hc2sobSwgYSwgYiwgcCkgX19leHRlbnNpb25fXyAoeyBcCi0gIChfX21tYXNrMzIpX19idWlsdGluX2lhMzJfY21wYjI1Nl9tYXNrKChfX3YzMnFpKShfX20yNTZpKShhKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MzJxaSkoX19tMjU2aSkoYiksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHApLCAoX19tbWFzazMyKShtKSk7IH0pCi0KLSNkZWZpbmUgX21tMjU2X2NtcF9lcHU4X21hc2soYSwgYiwgcCkgX19leHRlbnNpb25fXyAoeyBcCi0gIChfX21tYXNrMzIpX19idWlsdGluX2lhMzJfdWNtcGIyNTZfbWFzaygoX192MzJxaSkoX19tMjU2aSkoYSksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YzMnFpKShfX20yNTZpKShiKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHApLCAoX19tbWFzazMyKS0xKTsgfSkKLQotI2RlZmluZSBfbW0yNTZfbWFza19jbXBfZXB1OF9tYXNrKG0sIGEsIGIsIHApIF9fZXh0ZW5zaW9uX18gKHsgXAotICAoX19tbWFzazMyKV9fYnVpbHRpbl9pYTMyX3VjbXBiMjU2X21hc2soKF9fdjMycWkpKF9fbTI1NmkpKGEpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MzJxaSkoX19tMjU2aSkoYiksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwKSwgKF9fbW1hc2szMikobSkpOyB9KQotCi0jZGVmaW5lIF9tbV9jbXBfZXBpMTZfbWFzayhhLCBiLCBwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX2NtcHcxMjhfbWFzaygoX192OGhpKShfX20xMjhpKShhKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4aGkpKF9fbTEyOGkpKGIpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHApLCAoX19tbWFzazgpLTEpOyB9KQotCi0jZGVmaW5lIF9tbV9tYXNrX2NtcF9lcGkxNl9tYXNrKG0sIGEsIGIsIHApIF9fZXh0ZW5zaW9uX18gKHsgXAotICAoX19tbWFzazgpX19idWlsdGluX2lhMzJfY21wdzEyOF9tYXNrKChfX3Y4aGkpKF9fbTEyOGkpKGEpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhoaSkoX19tMTI4aSkoYiksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocCksIChfX21tYXNrOCkobSkpOyB9KQotCi0jZGVmaW5lIF9tbV9jbXBfZXB1MTZfbWFzayhhLCBiLCBwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3VjbXB3MTI4X21hc2soKF9fdjhoaSkoX19tMTI4aSkoYSksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhoaSkoX19tMTI4aSkoYiksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHApLCAoX19tbWFzazgpLTEpOyB9KQotCi0jZGVmaW5lIF9tbV9tYXNrX2NtcF9lcHUxNl9tYXNrKG0sIGEsIGIsIHApIF9fZXh0ZW5zaW9uX18gKHsgXAotICAoX19tbWFzazgpX19idWlsdGluX2lhMzJfdWNtcHcxMjhfbWFzaygoX192OGhpKShfX20xMjhpKShhKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGhpKShfX20xMjhpKShiKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocCksIChfX21tYXNrOCkobSkpOyB9KQotCi0jZGVmaW5lIF9tbTI1Nl9jbXBfZXBpMTZfbWFzayhhLCBiLCBwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgKF9fbW1hc2sxNilfX2J1aWx0aW5faWEzMl9jbXB3MjU2X21hc2soKF9fdjE2aGkpKF9fbTI1NmkpKGEpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNmhpKShfX20yNTZpKShiKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocCksIChfX21tYXNrMTYpLTEpOyB9KQotCi0jZGVmaW5lIF9tbTI1Nl9tYXNrX2NtcF9lcGkxNl9tYXNrKG0sIGEsIGIsIHApIF9fZXh0ZW5zaW9uX18gKHsgXAotICAoX19tbWFzazE2KV9fYnVpbHRpbl9pYTMyX2NtcHcyNTZfbWFzaygoX192MTZoaSkoX19tMjU2aSkoYSksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2aGkpKF9fbTI1NmkpKGIpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwKSwgKF9fbW1hc2sxNikobSkpOyB9KQotCi0jZGVmaW5lIF9tbTI1Nl9jbXBfZXB1MTZfbWFzayhhLCBiLCBwKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgKF9fbW1hc2sxNilfX2J1aWx0aW5faWEzMl91Y21wdzI1Nl9tYXNrKChfX3YxNmhpKShfX20yNTZpKShhKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2aGkpKF9fbTI1NmkpKGIpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocCksIChfX21tYXNrMTYpLTEpOyB9KQotCi0jZGVmaW5lIF9tbTI1Nl9tYXNrX2NtcF9lcHUxNl9tYXNrKG0sIGEsIGIsIHApIF9fZXh0ZW5zaW9uX18gKHsgXAotICAoX19tbWFzazE2KV9fYnVpbHRpbl9pYTMyX3VjbXB3MjU2X21hc2soKF9fdjE2aGkpKF9fbTI1NmkpKGEpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZoaSkoX19tMjU2aSkoYiksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwKSwgKF9fbW1hc2sxNikobSkpOyB9KQotCi0jdW5kZWYgX19ERUZBVUxUX0ZOX0FUVFJTCi0KLSNlbmRpZiAvKiBfX0FWWDUxMlZMQldJTlRSSU5fSCAqLwpkaWZmIC0tZ2l0IGEvY2xhbmctMjU3NzExMy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9hdng1MTJ2bGRxaW50cmluLmggYi9jbGFuZy0yNTc3MTEzL2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL2F2eDUxMnZsZHFpbnRyaW4uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGZkODU4ZS4uMDAwMDAwMAotLS0gYS9jbGFuZy0yNTc3MTEzL2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL2F2eDUxMnZsZHFpbnRyaW4uaAorKysgL2Rldi9udWxsCkBAIC0xLDk1MyArMCwwIEBACi0vKj09PS0tLS0gYXZ4NTEydmxkcWludHJpbi5oIC0gQVZYNTEyVkwgYW5kIEFWWDUxMkRRIGludHJpbnNpY3MgLS0tLS0tLS0tLS0tPT09Ci0gKgotICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQotICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKLSAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKLSAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKLSAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcwotICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKLSAqCi0gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgotICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCi0gKgotICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKLSAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAotICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCi0gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAotICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgotICogVEhFIFNPRlRXQVJFLgotICoKLSAqPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KLSAqLwotCi0jaWZuZGVmIF9fSU1NSU5UUklOX0gKLSNlcnJvciAiTmV2ZXIgdXNlIDxhdng1MTJ2bGRxaW50cmluLmg+IGRpcmVjdGx5OyBpbmNsdWRlIDxpbW1pbnRyaW4uaD4gaW5zdGVhZC4iCi0jZW5kaWYKLQotI2lmbmRlZiBfX0FWWDUxMlZMRFFJTlRSSU5fSAotI2RlZmluZSBfX0FWWDUxMlZMRFFJTlRSSU5fSAotCi0vKiBEZWZpbmUgdGhlIGRlZmF1bHQgYXR0cmlidXRlcyBmb3IgdGhlIGZ1bmN0aW9ucyBpbiB0aGlzIGZpbGUuICovCi0jZGVmaW5lIF9fREVGQVVMVF9GTl9BVFRSUyBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18sIF9fdGFyZ2V0X18oImF2eDUxMnZsLGF2eDUxMmRxIikpKQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X211bGxvX2VwaTY0IChfX20yNTZpIF9fQSwgX19tMjU2aSBfX0IpIHsKLSAgcmV0dXJuIChfX20yNTZpKSAoKF9fdjRkaSkgX19BICogKF9fdjRkaSkgX19CKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXNrX211bGxvX2VwaTY0IChfX20yNTZpIF9fVywgX19tbWFzazggX19VLCBfX20yNTZpIF9fQSwgX19tMjU2aSBfX0IpIHsKLSAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wbXVsbHEyNTZfbWFzayAoKF9fdjRkaSkgX19BLAotICAgICAgICAgICAgICAoX192NGRpKSBfX0IsCi0gICAgICAgICAgICAgIChfX3Y0ZGkpIF9fVywKLSAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X21hc2t6X211bGxvX2VwaTY0IChfX21tYXNrOCBfX1UsIF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQikgewotICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BtdWxscTI1Nl9tYXNrICgoX192NGRpKSBfX0EsCi0gICAgICAgICAgICAgIChfX3Y0ZGkpIF9fQiwKLSAgICAgICAgICAgICAgKF9fdjRkaSkKLSAgICAgICAgICAgICAgX21tMjU2X3NldHplcm9fc2kyNTYgKCksCi0gICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tdWxsb19lcGk2NCAoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKSB7Ci0gIHJldHVybiAoX19tMTI4aSkgKChfX3YyZGkpIF9fQSAqIChfX3YyZGkpIF9fQik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWFza19tdWxsb19lcGk2NCAoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKSB7Ci0gIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG11bGxxMTI4X21hc2sgKChfX3YyZGkpIF9fQSwKLSAgICAgICAgICAgICAgKF9fdjJkaSkgX19CLAotICAgICAgICAgICAgICAoX192MmRpKSBfX1csCi0gICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tYXNrel9tdWxsb19lcGk2NCAoX19tbWFzazggX19VLCBfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpIHsKLSAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbXVsbHExMjhfbWFzayAoKF9fdjJkaSkgX19BLAotICAgICAgICAgICAgICAoX192MmRpKSBfX0IsCi0gICAgICAgICAgICAgIChfX3YyZGkpCi0gICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAotICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfbWFza19hbmRub3RfcGQgKF9fbTI1NmQgX19XLCBfX21tYXNrOCBfX1UsIF9fbTI1NmQgX19BLCBfX20yNTZkIF9fQikgewotICByZXR1cm4gKF9fbTI1NmQpIF9fYnVpbHRpbl9pYTMyX2FuZG5wZDI1Nl9tYXNrICgoX192NGRmKSBfX0EsCi0gICAgICAgICAgICAgIChfX3Y0ZGYpIF9fQiwKLSAgICAgICAgICAgICAgKF9fdjRkZikgX19XLAotICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfbWFza3pfYW5kbm90X3BkIChfX21tYXNrOCBfX1UsIF9fbTI1NmQgX19BLCBfX20yNTZkIF9fQikgewotICByZXR1cm4gKF9fbTI1NmQpIF9fYnVpbHRpbl9pYTMyX2FuZG5wZDI1Nl9tYXNrICgoX192NGRmKSBfX0EsCi0gICAgICAgICAgICAgIChfX3Y0ZGYpIF9fQiwKLSAgICAgICAgICAgICAgKF9fdjRkZikKLSAgICAgICAgICAgICAgX21tMjU2X3NldHplcm9fcGQgKCksCi0gICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tYXNrX2FuZG5vdF9wZCAoX19tMTI4ZCBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4ZCBfX0EsIF9fbTEyOGQgX19CKSB7Ci0gIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfYW5kbnBkMTI4X21hc2sgKChfX3YyZGYpIF9fQSwKLSAgICAgICAgICAgICAgKF9fdjJkZikgX19CLAotICAgICAgICAgICAgICAoX192MmRmKSBfX1csCi0gICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tYXNrel9hbmRub3RfcGQgKF9fbW1hc2s4IF9fVSwgX19tMTI4ZCBfX0EsIF9fbTEyOGQgX19CKSB7Ci0gIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfYW5kbnBkMTI4X21hc2sgKChfX3YyZGYpIF9fQSwKLSAgICAgICAgICAgICAgKF9fdjJkZikgX19CLAotICAgICAgICAgICAgICAoX192MmRmKQotICAgICAgICAgICAgICBfbW1fc2V0emVyb19wZCAoKSwKLSAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfbWFza19hbmRub3RfcHMgKF9fbTI1NiBfX1csIF9fbW1hc2s4IF9fVSwgX19tMjU2IF9fQSwgX19tMjU2IF9fQikgewotICByZXR1cm4gKF9fbTI1NikgX19idWlsdGluX2lhMzJfYW5kbnBzMjU2X21hc2sgKChfX3Y4c2YpIF9fQSwKLSAgICAgICAgICAgICAoX192OHNmKSBfX0IsCi0gICAgICAgICAgICAgKF9fdjhzZikgX19XLAotICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X21hc2t6X2FuZG5vdF9wcyAoX19tbWFzazggX19VLCBfX20yNTYgX19BLCBfX20yNTYgX19CKSB7Ci0gIHJldHVybiAoX19tMjU2KSBfX2J1aWx0aW5faWEzMl9hbmRucHMyNTZfbWFzayAoKF9fdjhzZikgX19BLAotICAgICAgICAgICAgIChfX3Y4c2YpIF9fQiwKLSAgICAgICAgICAgICAoX192OHNmKQotICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3BzICgpLAotICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2tfYW5kbm90X3BzIChfX20xMjggX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IpIHsKLSAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX2FuZG5wczEyOF9tYXNrICgoX192NHNmKSBfX0EsCi0gICAgICAgICAgICAgKF9fdjRzZikgX19CLAotICAgICAgICAgICAgIChfX3Y0c2YpIF9fVywKLSAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tYXNrel9hbmRub3RfcHMgKF9fbW1hc2s4IF9fVSwgX19tMTI4IF9fQSwgX19tMTI4IF9fQikgewotICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfYW5kbnBzMTI4X21hc2sgKChfX3Y0c2YpIF9fQSwKLSAgICAgICAgICAgICAoX192NHNmKSBfX0IsCi0gICAgICAgICAgICAgKF9fdjRzZikKLSAgICAgICAgICAgICBfbW1fc2V0emVyb19wcyAoKSwKLSAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfbWFza19hbmRfcGQgKF9fbTI1NmQgX19XLCBfX21tYXNrOCBfX1UsIF9fbTI1NmQgX19BLCBfX20yNTZkIF9fQikgewotICByZXR1cm4gKF9fbTI1NmQpIF9fYnVpbHRpbl9pYTMyX2FuZHBkMjU2X21hc2sgKChfX3Y0ZGYpIF9fQSwKLSAgICAgICAgICAgICAoX192NGRmKSBfX0IsCi0gICAgICAgICAgICAgKF9fdjRkZikgX19XLAotICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXNrel9hbmRfcGQgKF9fbW1hc2s4IF9fVSwgX19tMjU2ZCBfX0EsIF9fbTI1NmQgX19CKSB7Ci0gIHJldHVybiAoX19tMjU2ZCkgX19idWlsdGluX2lhMzJfYW5kcGQyNTZfbWFzayAoKF9fdjRkZikgX19BLAotICAgICAgICAgICAgIChfX3Y0ZGYpIF9fQiwKLSAgICAgICAgICAgICAoX192NGRmKQotICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3BkICgpLAotICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tYXNrX2FuZF9wZCAoX19tMTI4ZCBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4ZCBfX0EsIF9fbTEyOGQgX19CKSB7Ci0gIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfYW5kcGQxMjhfbWFzayAoKF9fdjJkZikgX19BLAotICAgICAgICAgICAgIChfX3YyZGYpIF9fQiwKLSAgICAgICAgICAgICAoX192MmRmKSBfX1csCi0gICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2t6X2FuZF9wZCAoX19tbWFzazggX19VLCBfX20xMjhkIF9fQSwgX19tMTI4ZCBfX0IpIHsKLSAgcmV0dXJuIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl9hbmRwZDEyOF9tYXNrICgoX192MmRmKSBfX0EsCi0gICAgICAgICAgICAgKF9fdjJkZikgX19CLAotICAgICAgICAgICAgIChfX3YyZGYpCi0gICAgICAgICAgICAgX21tX3NldHplcm9fcGQgKCksCi0gICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfbWFza19hbmRfcHMgKF9fbTI1NiBfX1csIF9fbW1hc2s4IF9fVSwgX19tMjU2IF9fQSwgX19tMjU2IF9fQikgewotICByZXR1cm4gKF9fbTI1NikgX19idWlsdGluX2lhMzJfYW5kcHMyNTZfbWFzayAoKF9fdjhzZikgX19BLAotICAgICAgICAgICAgKF9fdjhzZikgX19CLAotICAgICAgICAgICAgKF9fdjhzZikgX19XLAotICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfbWFza3pfYW5kX3BzIChfX21tYXNrOCBfX1UsIF9fbTI1NiBfX0EsIF9fbTI1NiBfX0IpIHsKLSAgcmV0dXJuIChfX20yNTYpIF9fYnVpbHRpbl9pYTMyX2FuZHBzMjU2X21hc2sgKChfX3Y4c2YpIF9fQSwKLSAgICAgICAgICAgIChfX3Y4c2YpIF9fQiwKLSAgICAgICAgICAgIChfX3Y4c2YpCi0gICAgICAgICAgICBfbW0yNTZfc2V0emVyb19wcyAoKSwKLSAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2tfYW5kX3BzIChfX20xMjggX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IpIHsKLSAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX2FuZHBzMTI4X21hc2sgKChfX3Y0c2YpIF9fQSwKLSAgICAgICAgICAgIChfX3Y0c2YpIF9fQiwKLSAgICAgICAgICAgIChfX3Y0c2YpIF9fVywKLSAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2t6X2FuZF9wcyAoX19tbWFzazggX19VLCBfX20xMjggX19BLCBfX20xMjggX19CKSB7Ci0gIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl9hbmRwczEyOF9tYXNrICgoX192NHNmKSBfX0EsCi0gICAgICAgICAgICAoX192NHNmKSBfX0IsCi0gICAgICAgICAgICAoX192NHNmKQotICAgICAgICAgICAgX21tX3NldHplcm9fcHMgKCksCi0gICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfbWFza194b3JfcGQgKF9fbTI1NmQgX19XLCBfX21tYXNrOCBfX1UsIF9fbTI1NmQgX19BLAotICAgICAgICBfX20yNTZkIF9fQikgewotICByZXR1cm4gKF9fbTI1NmQpIF9fYnVpbHRpbl9pYTMyX3hvcnBkMjU2X21hc2sgKChfX3Y0ZGYpIF9fQSwKLSAgICAgICAgICAgICAoX192NGRmKSBfX0IsCi0gICAgICAgICAgICAgKF9fdjRkZikgX19XLAotICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXNrel94b3JfcGQgKF9fbW1hc2s4IF9fVSwgX19tMjU2ZCBfX0EsIF9fbTI1NmQgX19CKSB7Ci0gIHJldHVybiAoX19tMjU2ZCkgX19idWlsdGluX2lhMzJfeG9ycGQyNTZfbWFzayAoKF9fdjRkZikgX19BLAotICAgICAgICAgICAgIChfX3Y0ZGYpIF9fQiwKLSAgICAgICAgICAgICAoX192NGRmKQotICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3BkICgpLAotICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tYXNrX3hvcl9wZCAoX19tMTI4ZCBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4ZCBfX0EsIF9fbTEyOGQgX19CKSB7Ci0gIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfeG9ycGQxMjhfbWFzayAoKF9fdjJkZikgX19BLAotICAgICAgICAgICAgIChfX3YyZGYpIF9fQiwKLSAgICAgICAgICAgICAoX192MmRmKSBfX1csCi0gICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2t6X3hvcl9wZCAoX19tbWFzazggX19VLCBfX20xMjhkIF9fQSwgX19tMTI4ZCBfX0IpIHsKLSAgcmV0dXJuIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl94b3JwZDEyOF9tYXNrICgoX192MmRmKSBfX0EsCi0gICAgICAgICAgICAgKF9fdjJkZikgX19CLAotICAgICAgICAgICAgIChfX3YyZGYpCi0gICAgICAgICAgICAgX21tX3NldHplcm9fcGQgKCksCi0gICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfbWFza194b3JfcHMgKF9fbTI1NiBfX1csIF9fbW1hc2s4IF9fVSwgX19tMjU2IF9fQSwgX19tMjU2IF9fQikgewotICByZXR1cm4gKF9fbTI1NikgX19idWlsdGluX2lhMzJfeG9ycHMyNTZfbWFzayAoKF9fdjhzZikgX19BLAotICAgICAgICAgICAgKF9fdjhzZikgX19CLAotICAgICAgICAgICAgKF9fdjhzZikgX19XLAotICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfbWFza3pfeG9yX3BzIChfX21tYXNrOCBfX1UsIF9fbTI1NiBfX0EsIF9fbTI1NiBfX0IpIHsKLSAgcmV0dXJuIChfX20yNTYpIF9fYnVpbHRpbl9pYTMyX3hvcnBzMjU2X21hc2sgKChfX3Y4c2YpIF9fQSwKLSAgICAgICAgICAgIChfX3Y4c2YpIF9fQiwKLSAgICAgICAgICAgIChfX3Y4c2YpCi0gICAgICAgICAgICBfbW0yNTZfc2V0emVyb19wcyAoKSwKLSAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2tfeG9yX3BzIChfX20xMjggX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IpIHsKLSAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX3hvcnBzMTI4X21hc2sgKChfX3Y0c2YpIF9fQSwKLSAgICAgICAgICAgIChfX3Y0c2YpIF9fQiwKLSAgICAgICAgICAgIChfX3Y0c2YpIF9fVywKLSAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2t6X3hvcl9wcyAoX19tbWFzazggX19VLCBfX20xMjggX19BLCBfX20xMjggX19CKSB7Ci0gIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl94b3JwczEyOF9tYXNrICgoX192NHNmKSBfX0EsCi0gICAgICAgICAgICAoX192NHNmKSBfX0IsCi0gICAgICAgICAgICAoX192NHNmKQotICAgICAgICAgICAgX21tX3NldHplcm9fcHMgKCksCi0gICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfbWFza19vcl9wZCAoX19tMjU2ZCBfX1csIF9fbW1hc2s4IF9fVSwgX19tMjU2ZCBfX0EsIF9fbTI1NmQgX19CKSB7Ci0gIHJldHVybiAoX19tMjU2ZCkgX19idWlsdGluX2lhMzJfb3JwZDI1Nl9tYXNrICgoX192NGRmKSBfX0EsCi0gICAgICAgICAgICAoX192NGRmKSBfX0IsCi0gICAgICAgICAgICAoX192NGRmKSBfX1csCi0gICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfbWFza3pfb3JfcGQgKF9fbW1hc2s4IF9fVSwgX19tMjU2ZCBfX0EsIF9fbTI1NmQgX19CKSB7Ci0gIHJldHVybiAoX19tMjU2ZCkgX19idWlsdGluX2lhMzJfb3JwZDI1Nl9tYXNrICgoX192NGRmKSBfX0EsCi0gICAgICAgICAgICAoX192NGRmKSBfX0IsCi0gICAgICAgICAgICAoX192NGRmKQotICAgICAgICAgICAgX21tMjU2X3NldHplcm9fcGQgKCksCi0gICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWFza19vcl9wZCAoX19tMTI4ZCBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4ZCBfX0EsIF9fbTEyOGQgX19CKSB7Ci0gIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfb3JwZDEyOF9tYXNrICgoX192MmRmKSBfX0EsCi0gICAgICAgICAgICAoX192MmRmKSBfX0IsCi0gICAgICAgICAgICAoX192MmRmKSBfX1csCi0gICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWFza3pfb3JfcGQgKF9fbW1hc2s4IF9fVSwgX19tMTI4ZCBfX0EsIF9fbTEyOGQgX19CKSB7Ci0gIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfb3JwZDEyOF9tYXNrICgoX192MmRmKSBfX0EsCi0gICAgICAgICAgICAoX192MmRmKSBfX0IsCi0gICAgICAgICAgICAoX192MmRmKQotICAgICAgICAgICAgX21tX3NldHplcm9fcGQgKCksCi0gICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXNrX29yX3BzIChfX20yNTYgX19XLCBfX21tYXNrOCBfX1UsIF9fbTI1NiBfX0EsIF9fbTI1NiBfX0IpIHsKLSAgcmV0dXJuIChfX20yNTYpIF9fYnVpbHRpbl9pYTMyX29ycHMyNTZfbWFzayAoKF9fdjhzZikgX19BLAotICAgICAgICAgICAgICAgICAoX192OHNmKSBfX0IsCi0gICAgICAgICAgICAgICAgIChfX3Y4c2YpIF9fVywKLSAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfbWFza3pfb3JfcHMgKF9fbW1hc2s4IF9fVSwgX19tMjU2IF9fQSwgX19tMjU2IF9fQikgewotICByZXR1cm4gKF9fbTI1NikgX19idWlsdGluX2lhMzJfb3JwczI1Nl9tYXNrICgoX192OHNmKSBfX0EsCi0gICAgICAgICAgICAgICAgIChfX3Y4c2YpIF9fQiwKLSAgICAgICAgICAgICAgICAgKF9fdjhzZikKLSAgICAgICAgICAgICAgICAgX21tMjU2X3NldHplcm9fcHMgKCksCi0gICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2tfb3JfcHMgKF9fbTEyOCBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4IF9fQSwgX19tMTI4IF9fQikgewotICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfb3JwczEyOF9tYXNrICgoX192NHNmKSBfX0EsCi0gICAgICAgICAgICAgICAgIChfX3Y0c2YpIF9fQiwKLSAgICAgICAgICAgICAgICAgKF9fdjRzZikgX19XLAotICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tYXNrel9vcl9wcyAoX19tbWFzazggX19VLCBfX20xMjggX19BLCBfX20xMjggX19CKSB7Ci0gIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl9vcnBzMTI4X21hc2sgKChfX3Y0c2YpIF9fQSwKLSAgICAgICAgICAgICAgICAgKF9fdjRzZikgX19CLAotICAgICAgICAgICAgICAgICAoX192NHNmKQotICAgICAgICAgICAgICAgICBfbW1fc2V0emVyb19wcyAoKSwKLSAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2N2dHBkX2VwaTY0IChfX20xMjhkIF9fQSkgewotICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX2N2dHBkMnFxMTI4X21hc2sgKChfX3YyZGYpIF9fQSwKLSAgICAgICAgICAgICAgICAoX192MmRpKSBfbW1fc2V0emVyb19zaTEyOCgpLAotICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2tfY3Z0cGRfZXBpNjQgKF9fbTEyOGkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGQgX19BKSB7Ci0gIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfY3Z0cGQycXExMjhfbWFzayAoKF9fdjJkZikgX19BLAotICAgICAgICAgICAgICAgIChfX3YyZGkpIF9fVywKLSAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWFza3pfY3Z0cGRfZXBpNjQgKF9fbW1hc2s4IF9fVSwgX19tMTI4ZCBfX0EpIHsKLSAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9jdnRwZDJxcTEyOF9tYXNrICgoX192MmRmKSBfX0EsCi0gICAgICAgICAgICAgICAgKF9fdjJkaSkgX21tX3NldHplcm9fc2kxMjgoKSwKLSAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfY3Z0cGRfZXBpNjQgKF9fbTI1NmQgX19BKSB7Ci0gIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfY3Z0cGQycXEyNTZfbWFzayAoKF9fdjRkZikgX19BLAotICAgICAgICAgICAgICAgIChfX3Y0ZGkpIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2KCksCi0gICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfbWFza19jdnRwZF9lcGk2NCAoX19tMjU2aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMjU2ZCBfX0EpIHsKLSAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9jdnRwZDJxcTI1Nl9tYXNrICgoX192NGRmKSBfX0EsCi0gICAgICAgICAgICAgICAgKF9fdjRkaSkgX19XLAotICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXNrel9jdnRwZF9lcGk2NCAoX19tbWFzazggX19VLCBfX20yNTZkIF9fQSkgewotICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX2N2dHBkMnFxMjU2X21hc2sgKChfX3Y0ZGYpIF9fQSwKLSAgICAgICAgICAgICAgICAoX192NGRpKSBfbW0yNTZfc2V0emVyb19zaTI1NigpLAotICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9jdnRwZF9lcHU2NCAoX19tMTI4ZCBfX0EpIHsKLSAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9jdnRwZDJ1cXExMjhfbWFzayAoKF9fdjJkZikgX19BLAotICAgICAgICAgICAgICAgIChfX3YyZGkpIF9tbV9zZXR6ZXJvX3NpMTI4KCksCi0gICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWFza19jdnRwZF9lcHU2NCAoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4ZCBfX0EpIHsKLSAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9jdnRwZDJ1cXExMjhfbWFzayAoKF9fdjJkZikgX19BLAotICAgICAgICAgICAgICAgIChfX3YyZGkpIF9fVywKLSAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWFza3pfY3Z0cGRfZXB1NjQgKF9fbW1hc2s4IF9fVSwgX19tMTI4ZCBfX0EpIHsKLSAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9jdnRwZDJ1cXExMjhfbWFzayAoKF9fdjJkZikgX19BLAotICAgICAgICAgICAgICAgIChfX3YyZGkpIF9tbV9zZXR6ZXJvX3NpMTI4KCksCi0gICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X2N2dHBkX2VwdTY0IChfX20yNTZkIF9fQSkgewotICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX2N2dHBkMnVxcTI1Nl9tYXNrICgoX192NGRmKSBfX0EsCi0gICAgICAgICAgICAgICAgKF9fdjRkaSkgX21tMjU2X3NldHplcm9fc2kyNTYoKSwKLSAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXNrX2N2dHBkX2VwdTY0IChfX20yNTZpIF9fVywgX19tbWFzazggX19VLCBfX20yNTZkIF9fQSkgewotICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX2N2dHBkMnVxcTI1Nl9tYXNrICgoX192NGRmKSBfX0EsCi0gICAgICAgICAgICAgICAgKF9fdjRkaSkgX19XLAotICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXNrel9jdnRwZF9lcHU2NCAoX19tbWFzazggX19VLCBfX20yNTZkIF9fQSkgewotICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX2N2dHBkMnVxcTI1Nl9tYXNrICgoX192NGRmKSBfX0EsCi0gICAgICAgICAgICAgICAgKF9fdjRkaSkgX21tMjU2X3NldHplcm9fc2kyNTYoKSwKLSAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fY3Z0cHNfZXBpNjQgKF9fbTEyOCBfX0EpIHsKLSAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9jdnRwczJxcTEyOF9tYXNrICgoX192NHNmKSBfX0EsCi0gICAgICAgICAgICAgICAgKF9fdjJkaSkgX21tX3NldHplcm9fc2kxMjgoKSwKLSAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tYXNrX2N2dHBzX2VwaTY0IChfX20xMjhpIF9fVywgX19tbWFzazggX19VLCBfX20xMjggX19BKSB7Ci0gIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfY3Z0cHMycXExMjhfbWFzayAoKF9fdjRzZikgX19BLAotICAgICAgICAgICAgICAgIChfX3YyZGkpIF9fVywKLSAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWFza3pfY3Z0cHNfZXBpNjQgKF9fbW1hc2s4IF9fVSwgX19tMTI4IF9fQSkgewotICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX2N2dHBzMnFxMTI4X21hc2sgKChfX3Y0c2YpIF9fQSwKLSAgICAgICAgICAgICAgICAoX192MmRpKSBfbW1fc2V0emVyb19zaTEyOCgpLAotICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9jdnRwc19lcGk2NCAoX19tMTI4IF9fQSkgewotICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX2N2dHBzMnFxMjU2X21hc2sgKChfX3Y0c2YpIF9fQSwKLSAgICAgICAgICAgICAgICAoX192NGRpKSBfbW0yNTZfc2V0emVyb19zaTI1NigpLAotICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X21hc2tfY3Z0cHNfZXBpNjQgKF9fbTI1NmkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOCBfX0EpIHsKLSAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9jdnRwczJxcTI1Nl9tYXNrICgoX192NHNmKSBfX0EsCi0gICAgICAgICAgICAgICAgKF9fdjRkaSkgX19XLAotICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXNrel9jdnRwc19lcGk2NCAoX19tbWFzazggX19VLCBfX20xMjggX19BKSB7Ci0gIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfY3Z0cHMycXEyNTZfbWFzayAoKF9fdjRzZikgX19BLAotICAgICAgICAgICAgICAgIChfX3Y0ZGkpIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2KCksCi0gICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2N2dHBzX2VwdTY0IChfX20xMjggX19BKSB7Ci0gIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfY3Z0cHMydXFxMTI4X21hc2sgKChfX3Y0c2YpIF9fQSwKLSAgICAgICAgICAgICAgICAoX192MmRpKSBfbW1fc2V0emVyb19zaTEyOCgpLAotICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2tfY3Z0cHNfZXB1NjQgKF9fbTEyOGkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOCBfX0EpIHsKLSAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9jdnRwczJ1cXExMjhfbWFzayAoKF9fdjRzZikgX19BLAotICAgICAgICAgICAgICAgIChfX3YyZGkpIF9fVywKLSAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWFza3pfY3Z0cHNfZXB1NjQgKF9fbW1hc2s4IF9fVSwgX19tMTI4IF9fQSkgewotICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX2N2dHBzMnVxcTEyOF9tYXNrICgoX192NHNmKSBfX0EsCi0gICAgICAgICAgICAgICAgKF9fdjJkaSkgX21tX3NldHplcm9fc2kxMjgoKSwKLSAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfY3Z0cHNfZXB1NjQgKF9fbTEyOCBfX0EpIHsKLSAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9jdnRwczJ1cXEyNTZfbWFzayAoKF9fdjRzZikgX19BLAotICAgICAgICAgICAgICAgIChfX3Y0ZGkpIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2KCksCi0gICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfbWFza19jdnRwc19lcHU2NCAoX19tMjU2aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4IF9fQSkgewotICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX2N2dHBzMnVxcTI1Nl9tYXNrICgoX192NHNmKSBfX0EsCi0gICAgICAgICAgICAgICAgKF9fdjRkaSkgX19XLAotICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXNrel9jdnRwc19lcHU2NCAoX19tbWFzazggX19VLCBfX20xMjggX19BKSB7Ci0gIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfY3Z0cHMydXFxMjU2X21hc2sgKChfX3Y0c2YpIF9fQSwKLSAgICAgICAgICAgICAgICAoX192NGRpKSBfbW0yNTZfc2V0emVyb19zaTI1NigpLAotICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9jdnRlcGk2NF9wZCAoX19tMTI4aSBfX0EpIHsKLSAgcmV0dXJuIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl9jdnRxcTJwZDEyOF9tYXNrICgoX192MmRpKSBfX0EsCi0gICAgICAgICAgICAgICAgKF9fdjJkZikgX21tX3NldHplcm9fcGQoKSwKLSAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tYXNrX2N2dGVwaTY0X3BkIChfX20xMjhkIF9fVywgX19tbWFzazggX19VLCBfX20xMjhpIF9fQSkgewotICByZXR1cm4gKF9fbTEyOGQpIF9fYnVpbHRpbl9pYTMyX2N2dHFxMnBkMTI4X21hc2sgKChfX3YyZGkpIF9fQSwKLSAgICAgICAgICAgICAgICAoX192MmRmKSBfX1csCi0gICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2t6X2N2dGVwaTY0X3BkIChfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BKSB7Ci0gIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfY3Z0cXEycGQxMjhfbWFzayAoKF9fdjJkaSkgX19BLAotICAgICAgICAgICAgICAgIChfX3YyZGYpIF9tbV9zZXR6ZXJvX3BkKCksCi0gICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X2N2dGVwaTY0X3BkIChfX20yNTZpIF9fQSkgewotICByZXR1cm4gKF9fbTI1NmQpIF9fYnVpbHRpbl9pYTMyX2N2dHFxMnBkMjU2X21hc2sgKChfX3Y0ZGkpIF9fQSwKLSAgICAgICAgICAgICAgICAoX192NGRmKSBfbW0yNTZfc2V0emVyb19wZCgpLAotICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X21hc2tfY3Z0ZXBpNjRfcGQgKF9fbTI1NmQgX19XLCBfX21tYXNrOCBfX1UsIF9fbTI1NmkgX19BKSB7Ci0gIHJldHVybiAoX19tMjU2ZCkgX19idWlsdGluX2lhMzJfY3Z0cXEycGQyNTZfbWFzayAoKF9fdjRkaSkgX19BLAotICAgICAgICAgICAgICAgIChfX3Y0ZGYpIF9fVywKLSAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfbWFza3pfY3Z0ZXBpNjRfcGQgKF9fbW1hc2s4IF9fVSwgX19tMjU2aSBfX0EpIHsKLSAgcmV0dXJuIChfX20yNTZkKSBfX2J1aWx0aW5faWEzMl9jdnRxcTJwZDI1Nl9tYXNrICgoX192NGRpKSBfX0EsCi0gICAgICAgICAgICAgICAgKF9fdjRkZikgX21tMjU2X3NldHplcm9fcGQoKSwKLSAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9jdnRlcGk2NF9wcyAoX19tMTI4aSBfX0EpIHsKLSAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX2N2dHFxMnBzMTI4X21hc2sgKChfX3YyZGkpIF9fQSwKLSAgICAgICAgICAgICAgICAoX192NHNmKSBfbW1fc2V0emVyb19wcygpLAotICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWFza19jdnRlcGk2NF9wcyAoX19tMTI4IF9fVywgX19tbWFzazggX19VLCBfX20xMjhpIF9fQSkgewotICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfY3Z0cXEycHMxMjhfbWFzayAoKF9fdjJkaSkgX19BLAotICAgICAgICAgICAgICAgIChfX3Y0c2YpIF9fVywKLSAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tYXNrel9jdnRlcGk2NF9wcyAoX19tbWFzazggX19VLCBfX20xMjhpIF9fQSkgewotICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfY3Z0cXEycHMxMjhfbWFzayAoKF9fdjJkaSkgX19BLAotICAgICAgICAgICAgICAgIChfX3Y0c2YpIF9tbV9zZXR6ZXJvX3BzKCksCi0gICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfY3Z0ZXBpNjRfcHMgKF9fbTI1NmkgX19BKSB7Ci0gIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl9jdnRxcTJwczI1Nl9tYXNrICgoX192NGRpKSBfX0EsCi0gICAgICAgICAgICAgICAgKF9fdjRzZikgX21tX3NldHplcm9fcHMoKSwKLSAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X21hc2tfY3Z0ZXBpNjRfcHMgKF9fbTEyOCBfX1csIF9fbW1hc2s4IF9fVSwgX19tMjU2aSBfX0EpIHsKLSAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX2N2dHFxMnBzMjU2X21hc2sgKChfX3Y0ZGkpIF9fQSwKLSAgICAgICAgICAgICAgICAoX192NHNmKSBfX1csCi0gICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfbWFza3pfY3Z0ZXBpNjRfcHMgKF9fbW1hc2s4IF9fVSwgX19tMjU2aSBfX0EpIHsKLSAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX2N2dHFxMnBzMjU2X21hc2sgKChfX3Y0ZGkpIF9fQSwKLSAgICAgICAgICAgICAgICAoX192NHNmKSBfbW1fc2V0emVyb19wcygpLAotICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9jdnR0cGRfZXBpNjQgKF9fbTEyOGQgX19BKSB7Ci0gIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfY3Z0dHBkMnFxMTI4X21hc2sgKChfX3YyZGYpIF9fQSwKLSAgICAgICAgICAgICAgICAoX192MmRpKSBfbW1fc2V0emVyb19zaTEyOCgpLAotICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2tfY3Z0dHBkX2VwaTY0IChfX20xMjhpIF9fVywgX19tbWFzazggX19VLCBfX20xMjhkIF9fQSkgewotICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX2N2dHRwZDJxcTEyOF9tYXNrICgoX192MmRmKSBfX0EsCi0gICAgICAgICAgICAgICAgKF9fdjJkaSkgX19XLAotICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tYXNrel9jdnR0cGRfZXBpNjQgKF9fbW1hc2s4IF9fVSwgX19tMTI4ZCBfX0EpIHsKLSAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9jdnR0cGQycXExMjhfbWFzayAoKF9fdjJkZikgX19BLAotICAgICAgICAgICAgICAgIChfX3YyZGkpIF9tbV9zZXR6ZXJvX3NpMTI4KCksCi0gICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X2N2dHRwZF9lcGk2NCAoX19tMjU2ZCBfX0EpIHsKLSAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9jdnR0cGQycXEyNTZfbWFzayAoKF9fdjRkZikgX19BLAotICAgICAgICAgICAgICAgIChfX3Y0ZGkpIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2KCksCi0gICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfbWFza19jdnR0cGRfZXBpNjQgKF9fbTI1NmkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTI1NmQgX19BKSB7Ci0gIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfY3Z0dHBkMnFxMjU2X21hc2sgKChfX3Y0ZGYpIF9fQSwKLSAgICAgICAgICAgICAgICAoX192NGRpKSBfX1csCi0gICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X21hc2t6X2N2dHRwZF9lcGk2NCAoX19tbWFzazggX19VLCBfX20yNTZkIF9fQSkgewotICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX2N2dHRwZDJxcTI1Nl9tYXNrICgoX192NGRmKSBfX0EsCi0gICAgICAgICAgICAgICAgKF9fdjRkaSkgX21tMjU2X3NldHplcm9fc2kyNTYoKSwKLSAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fY3Z0dHBkX2VwdTY0IChfX20xMjhkIF9fQSkgewotICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX2N2dHRwZDJ1cXExMjhfbWFzayAoKF9fdjJkZikgX19BLAotICAgICAgICAgICAgICAgIChfX3YyZGkpIF9tbV9zZXR6ZXJvX3NpMTI4KCksCi0gICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWFza19jdnR0cGRfZXB1NjQgKF9fbTEyOGkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGQgX19BKSB7Ci0gIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfY3Z0dHBkMnVxcTEyOF9tYXNrICgoX192MmRmKSBfX0EsCi0gICAgICAgICAgICAgICAgKF9fdjJkaSkgX19XLAotICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tYXNrel9jdnR0cGRfZXB1NjQgKF9fbW1hc2s4IF9fVSwgX19tMTI4ZCBfX0EpIHsKLSAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9jdnR0cGQydXFxMTI4X21hc2sgKChfX3YyZGYpIF9fQSwKLSAgICAgICAgICAgICAgICAoX192MmRpKSBfbW1fc2V0emVyb19zaTEyOCgpLAotICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9jdnR0cGRfZXB1NjQgKF9fbTI1NmQgX19BKSB7Ci0gIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfY3Z0dHBkMnVxcTI1Nl9tYXNrICgoX192NGRmKSBfX0EsCi0gICAgICAgICAgICAgICAgKF9fdjRkaSkgX21tMjU2X3NldHplcm9fc2kyNTYoKSwKLSAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXNrX2N2dHRwZF9lcHU2NCAoX19tMjU2aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMjU2ZCBfX0EpIHsKLSAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9jdnR0cGQydXFxMjU2X21hc2sgKChfX3Y0ZGYpIF9fQSwKLSAgICAgICAgICAgICAgICAoX192NGRpKSBfX1csCi0gICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X21hc2t6X2N2dHRwZF9lcHU2NCAoX19tbWFzazggX19VLCBfX20yNTZkIF9fQSkgewotICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX2N2dHRwZDJ1cXEyNTZfbWFzayAoKF9fdjRkZikgX19BLAotICAgICAgICAgICAgICAgIChfX3Y0ZGkpIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2KCksCi0gICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2N2dHRwc19lcGk2NCAoX19tMTI4IF9fQSkgewotICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX2N2dHRwczJxcTEyOF9tYXNrICgoX192NHNmKSBfX0EsCi0gICAgICAgICAgICAgICAgKF9fdjJkaSkgX21tX3NldHplcm9fc2kxMjgoKSwKLSAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tYXNrX2N2dHRwc19lcGk2NCAoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4IF9fQSkgewotICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX2N2dHRwczJxcTEyOF9tYXNrICgoX192NHNmKSBfX0EsCi0gICAgICAgICAgICAgICAgKF9fdjJkaSkgX19XLAotICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tYXNrel9jdnR0cHNfZXBpNjQgKF9fbW1hc2s4IF9fVSwgX19tMTI4IF9fQSkgewotICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX2N2dHRwczJxcTEyOF9tYXNrICgoX192NHNmKSBfX0EsCi0gICAgICAgICAgICAgICAgKF9fdjJkaSkgX21tX3NldHplcm9fc2kxMjgoKSwKLSAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfY3Z0dHBzX2VwaTY0IChfX20xMjggX19BKSB7Ci0gIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfY3Z0dHBzMnFxMjU2X21hc2sgKChfX3Y0c2YpIF9fQSwKLSAgICAgICAgICAgICAgICAoX192NGRpKSBfbW0yNTZfc2V0emVyb19zaTI1NigpLAotICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X21hc2tfY3Z0dHBzX2VwaTY0IChfX20yNTZpIF9fVywgX19tbWFzazggX19VLCBfX20xMjggX19BKSB7Ci0gIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfY3Z0dHBzMnFxMjU2X21hc2sgKChfX3Y0c2YpIF9fQSwKLSAgICAgICAgICAgICAgICAoX192NGRpKSBfX1csCi0gICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X21hc2t6X2N2dHRwc19lcGk2NCAoX19tbWFzazggX19VLCBfX20xMjggX19BKSB7Ci0gIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfY3Z0dHBzMnFxMjU2X21hc2sgKChfX3Y0c2YpIF9fQSwKLSAgICAgICAgICAgICAgICAoX192NGRpKSBfbW0yNTZfc2V0emVyb19zaTI1NigpLAotICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9jdnR0cHNfZXB1NjQgKF9fbTEyOCBfX0EpIHsKLSAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9jdnR0cHMydXFxMTI4X21hc2sgKChfX3Y0c2YpIF9fQSwKLSAgICAgICAgICAgICAgICAoX192MmRpKSBfbW1fc2V0emVyb19zaTEyOCgpLAotICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2tfY3Z0dHBzX2VwdTY0IChfX20xMjhpIF9fVywgX19tbWFzazggX19VLCBfX20xMjggX19BKSB7Ci0gIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfY3Z0dHBzMnVxcTEyOF9tYXNrICgoX192NHNmKSBfX0EsCi0gICAgICAgICAgICAgICAgKF9fdjJkaSkgX19XLAotICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tYXNrel9jdnR0cHNfZXB1NjQgKF9fbW1hc2s4IF9fVSwgX19tMTI4IF9fQSkgewotICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX2N2dHRwczJ1cXExMjhfbWFzayAoKF9fdjRzZikgX19BLAotICAgICAgICAgICAgICAgIChfX3YyZGkpIF9tbV9zZXR6ZXJvX3NpMTI4KCksCi0gICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X2N2dHRwc19lcHU2NCAoX19tMTI4IF9fQSkgewotICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX2N2dHRwczJ1cXEyNTZfbWFzayAoKF9fdjRzZikgX19BLAotICAgICAgICAgICAgICAgIChfX3Y0ZGkpIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2KCksCi0gICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfbWFza19jdnR0cHNfZXB1NjQgKF9fbTI1NmkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOCBfX0EpIHsKLSAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9jdnR0cHMydXFxMjU2X21hc2sgKChfX3Y0c2YpIF9fQSwKLSAgICAgICAgICAgICAgICAoX192NGRpKSBfX1csCi0gICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X21hc2t6X2N2dHRwc19lcHU2NCAoX19tbWFzazggX19VLCBfX20xMjggX19BKSB7Ci0gIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfY3Z0dHBzMnVxcTI1Nl9tYXNrICgoX192NHNmKSBfX0EsCi0gICAgICAgICAgICAgICAgKF9fdjRkaSkgX21tMjU2X3NldHplcm9fc2kyNTYoKSwKLSAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fY3Z0ZXB1NjRfcGQgKF9fbTEyOGkgX19BKSB7Ci0gIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfY3Z0dXFxMnBkMTI4X21hc2sgKChfX3YyZGkpIF9fQSwKLSAgICAgICAgICAgICAgICAoX192MmRmKSBfbW1fc2V0emVyb19wZCgpLAotICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2tfY3Z0ZXB1NjRfcGQgKF9fbTEyOGQgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BKSB7Ci0gIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfY3Z0dXFxMnBkMTI4X21hc2sgKChfX3YyZGkpIF9fQSwKLSAgICAgICAgICAgICAgICAoX192MmRmKSBfX1csCi0gICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2t6X2N2dGVwdTY0X3BkIChfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BKSB7Ci0gIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfY3Z0dXFxMnBkMTI4X21hc2sgKChfX3YyZGkpIF9fQSwKLSAgICAgICAgICAgICAgICAoX192MmRmKSBfbW1fc2V0emVyb19wZCgpLAotICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9jdnRlcHU2NF9wZCAoX19tMjU2aSBfX0EpIHsKLSAgcmV0dXJuIChfX20yNTZkKSBfX2J1aWx0aW5faWEzMl9jdnR1cXEycGQyNTZfbWFzayAoKF9fdjRkaSkgX19BLAotICAgICAgICAgICAgICAgIChfX3Y0ZGYpIF9tbTI1Nl9zZXR6ZXJvX3BkKCksCi0gICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfbWFza19jdnRlcHU2NF9wZCAoX19tMjU2ZCBfX1csIF9fbW1hc2s4IF9fVSwgX19tMjU2aSBfX0EpIHsKLSAgcmV0dXJuIChfX20yNTZkKSBfX2J1aWx0aW5faWEzMl9jdnR1cXEycGQyNTZfbWFzayAoKF9fdjRkaSkgX19BLAotICAgICAgICAgICAgICAgIChfX3Y0ZGYpIF9fVywKLSAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfbWFza3pfY3Z0ZXB1NjRfcGQgKF9fbW1hc2s4IF9fVSwgX19tMjU2aSBfX0EpIHsKLSAgcmV0dXJuIChfX20yNTZkKSBfX2J1aWx0aW5faWEzMl9jdnR1cXEycGQyNTZfbWFzayAoKF9fdjRkaSkgX19BLAotICAgICAgICAgICAgICAgIChfX3Y0ZGYpIF9tbTI1Nl9zZXR6ZXJvX3BkKCksCi0gICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fY3Z0ZXB1NjRfcHMgKF9fbTEyOGkgX19BKSB7Ci0gIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl9jdnR1cXEycHMxMjhfbWFzayAoKF9fdjJkaSkgX19BLAotICAgICAgICAgICAgICAgIChfX3Y0c2YpIF9tbV9zZXR6ZXJvX3BzKCksCi0gICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tYXNrX2N2dGVwdTY0X3BzIChfX20xMjggX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BKSB7Ci0gIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl9jdnR1cXEycHMxMjhfbWFzayAoKF9fdjJkaSkgX19BLAotICAgICAgICAgICAgICAgIChfX3Y0c2YpIF9fVywKLSAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tYXNrel9jdnRlcHU2NF9wcyAoX19tbWFzazggX19VLCBfX20xMjhpIF9fQSkgewotICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfY3Z0dXFxMnBzMTI4X21hc2sgKChfX3YyZGkpIF9fQSwKLSAgICAgICAgICAgICAgICAoX192NHNmKSBfbW1fc2V0emVyb19wcygpLAotICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X2N2dGVwdTY0X3BzIChfX20yNTZpIF9fQSkgewotICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfY3Z0dXFxMnBzMjU2X21hc2sgKChfX3Y0ZGkpIF9fQSwKLSAgICAgICAgICAgICAgICAoX192NHNmKSBfbW1fc2V0emVyb19wcygpLAotICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfbWFza19jdnRlcHU2NF9wcyAoX19tMTI4IF9fVywgX19tbWFzazggX19VLCBfX20yNTZpIF9fQSkgewotICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfY3Z0dXFxMnBzMjU2X21hc2sgKChfX3Y0ZGkpIF9fQSwKLSAgICAgICAgICAgICAgICAoX192NHNmKSBfX1csCi0gICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfbWFza3pfY3Z0ZXB1NjRfcHMgKF9fbW1hc2s4IF9fVSwgX19tMjU2aSBfX0EpIHsKLSAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX2N2dHVxcTJwczI1Nl9tYXNrICgoX192NGRpKSBfX0EsCi0gICAgICAgICAgICAgICAgKF9fdjRzZikgX21tX3NldHplcm9fcHMoKSwKLSAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLSNkZWZpbmUgX21tX3JhbmdlX3BkKF9fQSwgX19CLCBfX0MpIF9fZXh0ZW5zaW9uX18gKHsgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfcmFuZ2VwZDEyOF9tYXNrICgoX192MmRmKSBfX0EsIChfX3YyZGYpIF9fQiwgX19DLCBcCi0gICAgICAgICAgICAgICAgKF9fdjJkZikgX21tX3NldHplcm9fcGQoKSwgKF9fbW1hc2s4KSAtMSk7IH0pCi0KLSNkZWZpbmUgX21tX21hc2tfcmFuZ2VfcGQoX19XLCBfX1UsIF9fQSwgX19CLCBfX0MpIF9fZXh0ZW5zaW9uX18gKHsgICAgICAgICAgXAotICAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfcmFuZ2VwZDEyOF9tYXNrICgoX192MmRmKSBfX0EsIChfX3YyZGYpIF9fQiwgX19DLCBcCi0gICAgICAgICAgICAgICAgKF9fdjJkZikgX19XLCAoX19tbWFzazgpIF9fVSk7IH0pCi0KLSNkZWZpbmUgX21tX21hc2t6X3JhbmdlX3BkKF9fVSwgX19BLCBfX0IsIF9fQykgX19leHRlbnNpb25fXyAoeyAgICAgICAgICAgICAgXAotICAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfcmFuZ2VwZDEyOF9tYXNrICgoX192MmRmKSBfX0EsIChfX3YyZGYpIF9fQiwgX19DLCBcCi0gICAgICAgICAgICAgICAgKF9fdjJkZikgX21tX3NldHplcm9fcGQoKSwgKF9fbW1hc2s4KSBfX1UpOyB9KQotCi0jZGVmaW5lIF9tbTI1Nl9yYW5nZV9wZChfX0EsIF9fQiwgX19DKSBfX2V4dGVuc2lvbl9fICh7ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgKF9fbTI1NmQpIF9fYnVpbHRpbl9pYTMyX3JhbmdlcGQyNTZfbWFzayAoKF9fdjRkZikgX19BLCAoX192NGRmKSBfX0IsIF9fQywgXAotICAgICAgICAgICAgICAgIChfX3Y0ZGYpIF9tbTI1Nl9zZXR6ZXJvX3BkKCksIChfX21tYXNrOCkgLTEpOyB9KQotCi0jZGVmaW5lIF9tbTI1Nl9tYXNrX3JhbmdlX3BkKF9fVywgX19VLCBfX0EsIF9fQiwgX19DKSBfX2V4dGVuc2lvbl9fICh7ICAgICAgIFwKLSAgKF9fbTI1NmQpIF9fYnVpbHRpbl9pYTMyX3JhbmdlcGQyNTZfbWFzayAoKF9fdjRkZikgX19BLCAoX192NGRmKSBfX0IsIF9fQywgXAotICAgICAgICAgICAgICAgIChfX3Y0ZGYpIF9fVywgKF9fbW1hc2s4KSBfX1UpOyB9KQotCi0jZGVmaW5lIF9tbTI1Nl9tYXNrel9yYW5nZV9wZChfX1UsIF9fQSwgX19CLCBfX0MpIF9fZXh0ZW5zaW9uX18gKHsgICAgICAgICAgIFwKLSAgKF9fbTI1NmQpIF9fYnVpbHRpbl9pYTMyX3JhbmdlcGQyNTZfbWFzayAoKF9fdjRkZikgX19BLCAoX192NGRmKSBfX0IsIF9fQywgXAotICAgICAgICAgICAgICAgIChfX3Y0ZGYpIF9tbTI1Nl9zZXR6ZXJvX3BkKCksIChfX21tYXNrOCkgX19VKTsgfSkKLQotI2RlZmluZSBfbW1fcmFuZ2VfcHMoX19BLCBfX0IsIF9fQykgX19leHRlbnNpb25fXyAoeyAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX3JhbmdlcHMxMjhfbWFzayAoKF9fdjRzZikgX19BLCAoX192NHNmKSBfX0IsIF9fQywgIFwKLSAgICAgICAgICAgICAgICAoX192NHNmKSBfbW1fc2V0emVyb19wcygpLCAoX19tbWFzazgpIC0xKTsgfSkKLQotI2RlZmluZSBfbW1fbWFza19yYW5nZV9wcyhfX1csIF9fVSwgX19BLCBfX0IsIF9fQykgX19leHRlbnNpb25fXyAoeyAgICAgICAgICBcCi0gIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX3JhbmdlcHMxMjhfbWFzayAoKF9fdjRzZikgX19BLCAoX192NHNmKSBfX0IsIF9fQywgIFwKLSAgICAgICAgICAgICAgICAoX192NHNmKSBfX1csIChfX21tYXNrOCkgX19VKTsgfSkKLQotI2RlZmluZSBfbW1fbWFza3pfcmFuZ2VfcHMoX19VLCBfX0EsIF9fQiwgX19DKSBfX2V4dGVuc2lvbl9fICh7ICAgICAgICAgICAgICBcCi0gIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX3JhbmdlcHMxMjhfbWFzayAoKF9fdjRzZikgX19BLCAoX192NHNmKSBfX0IsIF9fQywgIFwKLSAgICAgICAgICAgICAgICAoX192NHNmKSBfbW1fc2V0emVyb19wcygpLCAoX19tbWFzazgpIF9fVSk7IH0pCi0KLSNkZWZpbmUgX21tMjU2X3JhbmdlX3BzKF9fQSwgX19CLCBfX0MpIF9fZXh0ZW5zaW9uX18gKHsgICAgICAgICAgICAgICAgICAgICAgXAotICAoX19tMjU2KSBfX2J1aWx0aW5faWEzMl9yYW5nZXBzMjU2X21hc2sgKChfX3Y4c2YpIF9fQSwgKF9fdjhzZikgX19CLCBfX0MsICBcCi0gICAgICAgICAgICAgICAgKF9fdjhzZikgX21tMjU2X3NldHplcm9fcHMoKSwgKF9fbW1hc2s4KSAtMSk7IH0pCi0KLSNkZWZpbmUgX21tMjU2X21hc2tfcmFuZ2VfcHMoX19XLCBfX1UsIF9fQSwgX19CLCBfX0MpIF9fZXh0ZW5zaW9uX18gKHsgICAgICAgXAotICAoX19tMjU2KSBfX2J1aWx0aW5faWEzMl9yYW5nZXBzMjU2X21hc2sgKChfX3Y4c2YpIF9fQSwgKF9fdjhzZikgX19CLCBfX0MsICBcCi0gICAgICAgICAgICAgICAgKF9fdjhzZikgX19XLCAoX19tbWFzazgpIF9fVSk7IH0pCi0KLSNkZWZpbmUgX21tMjU2X21hc2t6X3JhbmdlX3BzKF9fVSwgX19BLCBfX0IsIF9fQykgX19leHRlbnNpb25fXyAoeyAgICAgICAgICAgXAotICAoX19tMjU2KSBfX2J1aWx0aW5faWEzMl9yYW5nZXBzMjU2X21hc2sgKChfX3Y4c2YpIF9fQSwgKF9fdjhzZikgX19CLCBfX0MsICBcCi0gICAgICAgICAgICAgICAgKF9fdjhzZikgX21tMjU2X3NldHplcm9fcHMoKSwgKF9fbW1hc2s4KSBfX1UpOyB9KQotCi0jZGVmaW5lIF9tbV9yZWR1Y2VfcGQoX19BLCBfX0IpIF9fZXh0ZW5zaW9uX18gKHsgICAgICAgICAgICAgICAgXAotICAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfcmVkdWNlcGQxMjhfbWFzayAoKF9fdjJkZikgX19BLCBfX0IsIFwKLSAgICAgICAgICAgICAgICAoX192MmRmKSBfbW1fc2V0emVyb19wZCgpLCAoX19tbWFzazgpIC0xKTsgfSkKLQotI2RlZmluZSBfbW1fbWFza19yZWR1Y2VfcGQoX19XLCBfX1UsIF9fQSwgX19CKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgKF9fbTEyOGQpIF9fYnVpbHRpbl9pYTMyX3JlZHVjZXBkMTI4X21hc2sgKChfX3YyZGYpIF9fQSwgX19CLCBcCi0gICAgICAgICAgICAgICAgKF9fdjJkZikgX19XLCAoX19tbWFzazgpIF9fVSk7IH0pCi0KLSNkZWZpbmUgX21tX21hc2t6X3JlZHVjZV9wZChfX1UsIF9fQSwgX19CKSBfX2V4dGVuc2lvbl9fICh7ICAgICBcCi0gIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl9yZWR1Y2VwZDEyOF9tYXNrICgoX192MmRmKSBfX0EsIF9fQiwgXAotICAgICAgICAgICAgICAgIChfX3YyZGYpIF9tbV9zZXR6ZXJvX3BkKCksIChfX21tYXNrOCkgX19VKTsgfSkKLQotI2RlZmluZSBfbW0yNTZfcmVkdWNlX3BkKF9fQSwgX19CKSBfX2V4dGVuc2lvbl9fICh7ICAgICAgICAgICAgICAgIFwKLSAgKF9fbTI1NmQpIF9fYnVpbHRpbl9pYTMyX3JlZHVjZXBkMjU2X21hc2sgKChfX3Y0ZGYpIF9fQSwgX19CLCAgICBcCi0gICAgICAgICAgICAgICAgKF9fdjRkZikgX21tMjU2X3NldHplcm9fcGQoKSwgKF9fbW1hc2s4KSAtMSk7IH0pCi0KLSNkZWZpbmUgX21tMjU2X21hc2tfcmVkdWNlX3BkKF9fVywgX19VLCBfX0EsIF9fQikgX19leHRlbnNpb25fXyAoeyBcCi0gIChfX20yNTZkKSBfX2J1aWx0aW5faWEzMl9yZWR1Y2VwZDI1Nl9tYXNrICgoX192NGRmKSBfX0EsIF9fQiwgICAgXAotICAgICAgICAgICAgICAgIChfX3Y0ZGYpIF9fVywgKF9fbW1hc2s4KSBfX1UpOyB9KQotCi0jZGVmaW5lIF9tbTI1Nl9tYXNrel9yZWR1Y2VfcGQoX19VLCBfX0EsIF9fQikgX19leHRlbnNpb25fXyAoeyAgICAgXAotICAoX19tMjU2ZCkgX19idWlsdGluX2lhMzJfcmVkdWNlcGQyNTZfbWFzayAoKF9fdjRkZikgX19BLCBfX0IsICAgIFwKLSAgICAgICAgICAgICAgICAoX192NGRmKSBfbW0yNTZfc2V0emVyb19wZCgpLCAoX19tbWFzazgpIF9fVSk7IH0pCi0KLSNkZWZpbmUgX21tX3JlZHVjZV9wcyhfX0EsIF9fQikgX19leHRlbnNpb25fXyAoeyAgICAgICAgICAgICAgICAgICBcCi0gIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX3JlZHVjZXBzMTI4X21hc2sgKChfX3Y0c2YpIF9fQSwgX19CLCAgICAgXAotICAgICAgICAgICAgICAgIChfX3Y0c2YpIF9tbV9zZXR6ZXJvX3BzKCksIChfX21tYXNrOCkgLTEpOyB9KQotCi0jZGVmaW5lIF9tbV9tYXNrX3JlZHVjZV9wcyhfX1csIF9fVSwgX19BLCBfX0IpIF9fZXh0ZW5zaW9uX18gKHsgICAgXAotICAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl9yZWR1Y2VwczEyOF9tYXNrICgoX192NHNmKSBfX0EsIF9fQiwgICAgIFwKLSAgICAgICAgICAgICAgICAoX192NHNmKSBfX1csIChfX21tYXNrOCkgX19VKTsgfSkKLQotI2RlZmluZSBfbW1fbWFza3pfcmVkdWNlX3BzKF9fVSwgX19BLCBfX0IpIF9fZXh0ZW5zaW9uX18gKHsgICAgICAgIFwKLSAgKF9fbTEyOCkgX19idWlsdGluX2lhMzJfcmVkdWNlcHMxMjhfbWFzayAoKF9fdjRzZikgX19BLCBfX0IsICAgICBcCi0gICAgICAgICAgICAgICAgKF9fdjRzZikgX21tX3NldHplcm9fcHMoKSwgKF9fbW1hc2s4KSBfX1UpOyB9KQotCi0jZGVmaW5lIF9tbTI1Nl9yZWR1Y2VfcHMoX19BLCBfX0IpIF9fZXh0ZW5zaW9uX18gKHsgICAgICAgICAgICAgICAgXAotICAoX19tMjU2KSBfX2J1aWx0aW5faWEzMl9yZWR1Y2VwczI1Nl9tYXNrICgoX192OHNmKSBfX0EsIF9fQiwgICAgIFwKLSAgICAgICAgICAgICAgICAoX192OHNmKSBfbW0yNTZfc2V0emVyb19wcygpLCAoX19tbWFzazgpIC0xKTsgfSkKLQotI2RlZmluZSBfbW0yNTZfbWFza19yZWR1Y2VfcHMoX19XLCBfX1UsIF9fQSwgX19CKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgKF9fbTI1NikgX19idWlsdGluX2lhMzJfcmVkdWNlcHMyNTZfbWFzayAoKF9fdjhzZikgX19BLCBfX0IsICAgICBcCi0gICAgICAgICAgICAgICAgKF9fdjhzZikgX19XLCAoX19tbWFzazgpIF9fVSk7IH0pCi0KLSNkZWZpbmUgX21tMjU2X21hc2t6X3JlZHVjZV9wcyhfX1UsIF9fQSwgX19CKSBfX2V4dGVuc2lvbl9fICh7ICAgICBcCi0gIChfX20yNTYpIF9fYnVpbHRpbl9pYTMyX3JlZHVjZXBzMjU2X21hc2sgKChfX3Y4c2YpIF9fQSwgX19CLCAgICAgXAotICAgICAgICAgICAgICAgIChfX3Y4c2YpIF9tbTI1Nl9zZXR6ZXJvX3BzKCksIChfX21tYXNrOCkgX19VKTsgfSkKLQotI3VuZGVmIF9fREVGQVVMVF9GTl9BVFRSUwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2NsYW5nLTI1NzcxMTMvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvYXZ4NTEydmxpbnRyaW4uaCBiL2NsYW5nLTI1NzcxMTMvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvYXZ4NTEydmxpbnRyaW4uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGYxMzUzNi4uMDAwMDAwMAotLS0gYS9jbGFuZy0yNTc3MTEzL2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL2F2eDUxMnZsaW50cmluLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0NjA2ICswLDAgQEAKLS8qPT09LS0tLSBhdng1MTJ2bGludHJpbi5oIC0gQVZYNTEyVkwgaW50cmluc2ljcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KLSAqCi0gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5Ci0gKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAotICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cwotICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAotICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCi0gKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgotICoKLSAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCi0gKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KLSAqCi0gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgotICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCi0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKLSAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCi0gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCi0gKiBUSEUgU09GVFdBUkUuCi0gKgotICo9PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQotICovCi0KLSNpZm5kZWYgX19JTU1JTlRSSU5fSAotI2Vycm9yICJOZXZlciB1c2UgPGF2eDUxMnZsaW50cmluLmg+IGRpcmVjdGx5OyBpbmNsdWRlIDxpbW1pbnRyaW4uaD4gaW5zdGVhZC4iCi0jZW5kaWYKLQotI2lmbmRlZiBfX0FWWDUxMlZMSU5UUklOX0gKLSNkZWZpbmUgX19BVlg1MTJWTElOVFJJTl9ICi0KLSNkZWZpbmUgX19ERUZBVUxUX0ZOX0FUVFJTIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXywgX190YXJnZXRfXygiYXZ4NTEydmwiKSkpCi0jZGVmaW5lIF9fREVGQVVMVF9GTl9BVFRSU19CT1RIIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXywgX190YXJnZXRfXygiYXZ4NTEydmwsIGF2eDUxMmJ3IikpKQotCi0vKiBJbnRlZ2VyIGNvbXBhcmUgKi8KLQotc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTX0JPVEgKLV9tbV9jbXBlcV9lcGkzMl9tYXNrKF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikgewotICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3BjbXBlcWQxMjhfbWFzaygoX192NHNpKV9fYSwgKF9fdjRzaSlfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSU19CT1RICi1fbW1fbWFza19jbXBlcV9lcGkzMl9tYXNrKF9fbW1hc2s4IF9fdSwgX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKSB7Ci0gIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfcGNtcGVxZDEyOF9tYXNrKChfX3Y0c2kpX19hLCAoX192NHNpKV9fYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fY21wZXFfZXB1MzJfbWFzayhfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpIHsKLSAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl91Y21wZDEyOF9tYXNrKChfX3Y0c2kpX19hLCAoX192NHNpKV9fYiwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2tfY21wZXFfZXB1MzJfbWFzayhfX21tYXNrOCBfX3UsIF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikgewotICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3VjbXBkMTI4X21hc2soKF9fdjRzaSlfX2EsIChfX3Y0c2kpX19iLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTX0JPVEgKLV9tbTI1Nl9jbXBlcV9lcGkzMl9tYXNrKF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikgewotICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3BjbXBlcWQyNTZfbWFzaygoX192OHNpKV9fYSwgKF9fdjhzaSlfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSU19CT1RICi1fbW0yNTZfbWFza19jbXBlcV9lcGkzMl9tYXNrKF9fbW1hc2s4IF9fdSwgX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7Ci0gIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfcGNtcGVxZDI1Nl9tYXNrKChfX3Y4c2kpX19hLCAoX192OHNpKV9fYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfY21wZXFfZXB1MzJfbWFzayhfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpIHsKLSAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl91Y21wZDI1Nl9tYXNrKChfX3Y4c2kpX19hLCAoX192OHNpKV9fYiwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X21hc2tfY21wZXFfZXB1MzJfbWFzayhfX21tYXNrOCBfX3UsIF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikgewotICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3VjbXBkMjU2X21hc2soKF9fdjhzaSlfX2EsIChfX3Y4c2kpX19iLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTX0JPVEgKLV9tbV9jbXBlcV9lcGk2NF9tYXNrKF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikgewotICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3BjbXBlcXExMjhfbWFzaygoX192MmRpKV9fYSwgKF9fdjJkaSlfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSU19CT1RICi1fbW1fbWFza19jbXBlcV9lcGk2NF9tYXNrKF9fbW1hc2s4IF9fdSwgX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKSB7Ci0gIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfcGNtcGVxcTEyOF9tYXNrKChfX3YyZGkpX19hLCAoX192MmRpKV9fYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fY21wZXFfZXB1NjRfbWFzayhfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpIHsKLSAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl91Y21wcTEyOF9tYXNrKChfX3YyZGkpX19hLCAoX192MmRpKV9fYiwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2tfY21wZXFfZXB1NjRfbWFzayhfX21tYXNrOCBfX3UsIF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikgewotICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3VjbXBxMTI4X21hc2soKF9fdjJkaSlfX2EsIChfX3YyZGkpX19iLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTX0JPVEgKLV9tbTI1Nl9jbXBlcV9lcGk2NF9tYXNrKF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikgewotICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3BjbXBlcXEyNTZfbWFzaygoX192NGRpKV9fYSwgKF9fdjRkaSlfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSU19CT1RICi1fbW0yNTZfbWFza19jbXBlcV9lcGk2NF9tYXNrKF9fbW1hc2s4IF9fdSwgX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7Ci0gIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfcGNtcGVxcTI1Nl9tYXNrKChfX3Y0ZGkpX19hLCAoX192NGRpKV9fYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfY21wZXFfZXB1NjRfbWFzayhfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpIHsKLSAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl91Y21wcTI1Nl9tYXNrKChfX3Y0ZGkpX19hLCAoX192NGRpKV9fYiwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X21hc2tfY21wZXFfZXB1NjRfbWFzayhfX21tYXNrOCBfX3UsIF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikgewotICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3VjbXBxMjU2X21hc2soKF9fdjRkaSlfX2EsIChfX3Y0ZGkpX19iLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKLX0KLQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9jbXBnZV9lcGkzMl9tYXNrKF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikgewotICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX2NtcGQxMjhfbWFzaygoX192NHNpKV9fYSwgKF9fdjRzaSlfX2IsIDUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2tfY21wZ2VfZXBpMzJfbWFzayhfX21tYXNrOCBfX3UsIF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikgewotICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX2NtcGQxMjhfbWFzaygoX192NHNpKV9fYSwgKF9fdjRzaSlfX2IsIDUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2NtcGdlX2VwdTMyX21hc2soX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKSB7Ci0gIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfdWNtcGQxMjhfbWFzaygoX192NHNpKV9fYSwgKF9fdjRzaSlfX2IsIDUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tYXNrX2NtcGdlX2VwdTMyX21hc2soX19tbWFzazggX191LCBfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpIHsKLSAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl91Y21wZDEyOF9tYXNrKChfX3Y0c2kpX19hLCAoX192NHNpKV9fYiwgNSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X2NtcGdlX2VwaTMyX21hc2soX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7Ci0gIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfY21wZDI1Nl9tYXNrKChfX3Y4c2kpX19hLCAoX192OHNpKV9fYiwgNSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfbWFza19jbXBnZV9lcGkzMl9tYXNrKF9fbW1hc2s4IF9fdSwgX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7Ci0gIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfY21wZDI1Nl9tYXNrKChfX3Y4c2kpX19hLCAoX192OHNpKV9fYiwgNSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfY21wZ2VfZXB1MzJfbWFzayhfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpIHsKLSAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl91Y21wZDI1Nl9tYXNrKChfX3Y4c2kpX19hLCAoX192OHNpKV9fYiwgNSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X21hc2tfY21wZ2VfZXB1MzJfbWFzayhfX21tYXNrOCBfX3UsIF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikgewotICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3VjbXBkMjU2X21hc2soKF9fdjhzaSlfX2EsIChfX3Y4c2kpX19iLCA1LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fY21wZ2VfZXBpNjRfbWFzayhfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpIHsKLSAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9jbXBxMTI4X21hc2soKF9fdjJkaSlfX2EsIChfX3YyZGkpX19iLCA1LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tYXNrX2NtcGdlX2VwaTY0X21hc2soX19tbWFzazggX191LCBfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpIHsKLSAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9jbXBxMTI4X21hc2soKF9fdjJkaSlfX2EsIChfX3YyZGkpX19iLCA1LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9jbXBnZV9lcHU2NF9tYXNrKF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikgewotICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3VjbXBxMTI4X21hc2soKF9fdjJkaSlfX2EsIChfX3YyZGkpX19iLCA1LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWFza19jbXBnZV9lcHU2NF9tYXNrKF9fbW1hc2s4IF9fdSwgX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKSB7Ci0gIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfdWNtcHExMjhfbWFzaygoX192MmRpKV9fYSwgKF9fdjJkaSlfX2IsIDUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9jbXBnZV9lcGk2NF9tYXNrKF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikgewotICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX2NtcHEyNTZfbWFzaygoX192NGRpKV9fYSwgKF9fdjRkaSlfX2IsIDUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X21hc2tfY21wZ2VfZXBpNjRfbWFzayhfX21tYXNrOCBfX3UsIF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikgewotICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX2NtcHEyNTZfbWFzaygoX192NGRpKV9fYSwgKF9fdjRkaSlfX2IsIDUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X2NtcGdlX2VwdTY0X21hc2soX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7Ci0gIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfdWNtcHEyNTZfbWFzaygoX192NGRpKV9fYSwgKF9fdjRkaSlfX2IsIDUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXNrX2NtcGdlX2VwdTY0X21hc2soX19tbWFzazggX191LCBfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpIHsKLSAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl91Y21wcTI1Nl9tYXNrKChfX3Y0ZGkpX19hLCAoX192NGRpKV9fYiwgNSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSU19CT1RICi1fbW1fY21wZ3RfZXBpMzJfbWFzayhfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpIHsKLSAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9wY21wZ3RkMTI4X21hc2soKF9fdjRzaSlfX2EsIChfX3Y0c2kpX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlNfQk9USAotX21tX21hc2tfY21wZ3RfZXBpMzJfbWFzayhfX21tYXNrOCBfX3UsIF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikgewotICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3BjbXBndGQxMjhfbWFzaygoX192NHNpKV9fYSwgKF9fdjRzaSlfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2NtcGd0X2VwdTMyX21hc2soX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKSB7Ci0gIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfdWNtcGQxMjhfbWFzaygoX192NHNpKV9fYSwgKF9fdjRzaSlfX2IsIDYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tYXNrX2NtcGd0X2VwdTMyX21hc2soX19tbWFzazggX191LCBfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpIHsKLSAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl91Y21wZDEyOF9tYXNrKChfX3Y0c2kpX19hLCAoX192NHNpKV9fYiwgNiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSU19CT1RICi1fbW0yNTZfY21wZ3RfZXBpMzJfbWFzayhfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpIHsKLSAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9wY21wZ3RkMjU2X21hc2soKF9fdjhzaSlfX2EsIChfX3Y4c2kpX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlNfQk9USAotX21tMjU2X21hc2tfY21wZ3RfZXBpMzJfbWFzayhfX21tYXNrOCBfX3UsIF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikgewotICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3BjbXBndGQyNTZfbWFzaygoX192OHNpKV9fYSwgKF9fdjhzaSlfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X2NtcGd0X2VwdTMyX21hc2soX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7Ci0gIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfdWNtcGQyNTZfbWFzaygoX192OHNpKV9fYSwgKF9fdjhzaSlfX2IsIDYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXNrX2NtcGd0X2VwdTMyX21hc2soX19tbWFzazggX191LCBfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpIHsKLSAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl91Y21wZDI1Nl9tYXNrKChfX3Y4c2kpX19hLCAoX192OHNpKV9fYiwgNiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSU19CT1RICi1fbW1fY21wZ3RfZXBpNjRfbWFzayhfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpIHsKLSAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9wY21wZ3RxMTI4X21hc2soKF9fdjJkaSlfX2EsIChfX3YyZGkpX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlNfQk9USAotX21tX21hc2tfY21wZ3RfZXBpNjRfbWFzayhfX21tYXNrOCBfX3UsIF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikgewotICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3BjbXBndHExMjhfbWFzaygoX192MmRpKV9fYSwgKF9fdjJkaSlfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2NtcGd0X2VwdTY0X21hc2soX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKSB7Ci0gIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfdWNtcHExMjhfbWFzaygoX192MmRpKV9fYSwgKF9fdjJkaSlfX2IsIDYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tYXNrX2NtcGd0X2VwdTY0X21hc2soX19tbWFzazggX191LCBfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpIHsKLSAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl91Y21wcTEyOF9tYXNrKChfX3YyZGkpX19hLCAoX192MmRpKV9fYiwgNiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSU19CT1RICi1fbW0yNTZfY21wZ3RfZXBpNjRfbWFzayhfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpIHsKLSAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9wY21wZ3RxMjU2X21hc2soKF9fdjRkaSlfX2EsIChfX3Y0ZGkpX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlNfQk9USAotX21tMjU2X21hc2tfY21wZ3RfZXBpNjRfbWFzayhfX21tYXNrOCBfX3UsIF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikgewotICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3BjbXBndHEyNTZfbWFzaygoX192NGRpKV9fYSwgKF9fdjRkaSlfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X2NtcGd0X2VwdTY0X21hc2soX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7Ci0gIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfdWNtcHEyNTZfbWFzaygoX192NGRpKV9fYSwgKF9fdjRkaSlfX2IsIDYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXNrX2NtcGd0X2VwdTY0X21hc2soX19tbWFzazggX191LCBfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpIHsKLSAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl91Y21wcTI1Nl9tYXNrKChfX3Y0ZGkpX19hLCAoX192NGRpKV9fYiwgNiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2NtcGxlX2VwaTMyX21hc2soX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKSB7Ci0gIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfY21wZDEyOF9tYXNrKChfX3Y0c2kpX19hLCAoX192NHNpKV9fYiwgMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWFza19jbXBsZV9lcGkzMl9tYXNrKF9fbW1hc2s4IF9fdSwgX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKSB7Ci0gIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfY21wZDEyOF9tYXNrKChfX3Y0c2kpX19hLCAoX192NHNpKV9fYiwgMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fY21wbGVfZXB1MzJfbWFzayhfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpIHsKLSAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl91Y21wZDEyOF9tYXNrKChfX3Y0c2kpX19hLCAoX192NHNpKV9fYiwgMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2tfY21wbGVfZXB1MzJfbWFzayhfX21tYXNrOCBfX3UsIF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikgewotICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3VjbXBkMTI4X21hc2soKF9fdjRzaSlfX2EsIChfX3Y0c2kpX19iLCAyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfY21wbGVfZXBpMzJfbWFzayhfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpIHsKLSAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9jbXBkMjU2X21hc2soKF9fdjhzaSlfX2EsIChfX3Y4c2kpX19iLCAyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXNrX2NtcGxlX2VwaTMyX21hc2soX19tbWFzazggX191LCBfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpIHsKLSAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9jbXBkMjU2X21hc2soKF9fdjhzaSlfX2EsIChfX3Y4c2kpX19iLCAyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9jbXBsZV9lcHUzMl9tYXNrKF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikgewotICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3VjbXBkMjU2X21hc2soKF9fdjhzaSlfX2EsIChfX3Y4c2kpX19iLCAyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfbWFza19jbXBsZV9lcHUzMl9tYXNrKF9fbW1hc2s4IF9fdSwgX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7Ci0gIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfdWNtcGQyNTZfbWFzaygoX192OHNpKV9fYSwgKF9fdjhzaSlfX2IsIDIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9jbXBsZV9lcGk2NF9tYXNrKF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikgewotICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX2NtcHExMjhfbWFzaygoX192MmRpKV9fYSwgKF9fdjJkaSlfX2IsIDIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2tfY21wbGVfZXBpNjRfbWFzayhfX21tYXNrOCBfX3UsIF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikgewotICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX2NtcHExMjhfbWFzaygoX192MmRpKV9fYSwgKF9fdjJkaSlfX2IsIDIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2NtcGxlX2VwdTY0X21hc2soX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKSB7Ci0gIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfdWNtcHExMjhfbWFzaygoX192MmRpKV9fYSwgKF9fdjJkaSlfX2IsIDIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tYXNrX2NtcGxlX2VwdTY0X21hc2soX19tbWFzazggX191LCBfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpIHsKLSAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl91Y21wcTEyOF9tYXNrKChfX3YyZGkpX19hLCAoX192MmRpKV9fYiwgMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X2NtcGxlX2VwaTY0X21hc2soX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7Ci0gIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfY21wcTI1Nl9tYXNrKChfX3Y0ZGkpX19hLCAoX192NGRpKV9fYiwgMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfbWFza19jbXBsZV9lcGk2NF9tYXNrKF9fbW1hc2s4IF9fdSwgX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7Ci0gIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfY21wcTI1Nl9tYXNrKChfX3Y0ZGkpX19hLCAoX192NGRpKV9fYiwgMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfY21wbGVfZXB1NjRfbWFzayhfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpIHsKLSAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl91Y21wcTI1Nl9tYXNrKChfX3Y0ZGkpX19hLCAoX192NGRpKV9fYiwgMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X21hc2tfY21wbGVfZXB1NjRfbWFzayhfX21tYXNrOCBfX3UsIF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikgewotICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3VjbXBxMjU2X21hc2soKF9fdjRkaSlfX2EsIChfX3Y0ZGkpX19iLCAyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fY21wbHRfZXBpMzJfbWFzayhfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpIHsKLSAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9jbXBkMTI4X21hc2soKF9fdjRzaSlfX2EsIChfX3Y0c2kpX19iLCAxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tYXNrX2NtcGx0X2VwaTMyX21hc2soX19tbWFzazggX191LCBfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpIHsKLSAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9jbXBkMTI4X21hc2soKF9fdjRzaSlfX2EsIChfX3Y0c2kpX19iLCAxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9jbXBsdF9lcHUzMl9tYXNrKF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikgewotICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3VjbXBkMTI4X21hc2soKF9fdjRzaSlfX2EsIChfX3Y0c2kpX19iLCAxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWFza19jbXBsdF9lcHUzMl9tYXNrKF9fbW1hc2s4IF9fdSwgX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKSB7Ci0gIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfdWNtcGQxMjhfbWFzaygoX192NHNpKV9fYSwgKF9fdjRzaSlfX2IsIDEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9jbXBsdF9lcGkzMl9tYXNrKF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikgewotICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX2NtcGQyNTZfbWFzaygoX192OHNpKV9fYSwgKF9fdjhzaSlfX2IsIDEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X21hc2tfY21wbHRfZXBpMzJfbWFzayhfX21tYXNrOCBfX3UsIF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikgewotICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX2NtcGQyNTZfbWFzaygoX192OHNpKV9fYSwgKF9fdjhzaSlfX2IsIDEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X2NtcGx0X2VwdTMyX21hc2soX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7Ci0gIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfdWNtcGQyNTZfbWFzaygoX192OHNpKV9fYSwgKF9fdjhzaSlfX2IsIDEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXNrX2NtcGx0X2VwdTMyX21hc2soX19tbWFzazggX191LCBfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpIHsKLSAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl91Y21wZDI1Nl9tYXNrKChfX3Y4c2kpX19hLCAoX192OHNpKV9fYiwgMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2NtcGx0X2VwaTY0X21hc2soX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKSB7Ci0gIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfY21wcTEyOF9tYXNrKChfX3YyZGkpX19hLCAoX192MmRpKV9fYiwgMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWFza19jbXBsdF9lcGk2NF9tYXNrKF9fbW1hc2s4IF9fdSwgX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKSB7Ci0gIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfY21wcTEyOF9tYXNrKChfX3YyZGkpX19hLCAoX192MmRpKV9fYiwgMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fY21wbHRfZXB1NjRfbWFzayhfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpIHsKLSAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl91Y21wcTEyOF9tYXNrKChfX3YyZGkpX19hLCAoX192MmRpKV9fYiwgMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2tfY21wbHRfZXB1NjRfbWFzayhfX21tYXNrOCBfX3UsIF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikgewotICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3VjbXBxMTI4X21hc2soKF9fdjJkaSlfX2EsIChfX3YyZGkpX19iLCAxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfY21wbHRfZXBpNjRfbWFzayhfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpIHsKLSAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9jbXBxMjU2X21hc2soKF9fdjRkaSlfX2EsIChfX3Y0ZGkpX19iLCAxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXNrX2NtcGx0X2VwaTY0X21hc2soX19tbWFzazggX191LCBfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpIHsKLSAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9jbXBxMjU2X21hc2soKF9fdjRkaSlfX2EsIChfX3Y0ZGkpX19iLCAxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9jbXBsdF9lcHU2NF9tYXNrKF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikgewotICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3VjbXBxMjU2X21hc2soKF9fdjRkaSlfX2EsIChfX3Y0ZGkpX19iLCAxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfbWFza19jbXBsdF9lcHU2NF9tYXNrKF9fbW1hc2s4IF9fdSwgX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7Ci0gIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfdWNtcHEyNTZfbWFzaygoX192NGRpKV9fYSwgKF9fdjRkaSlfX2IsIDEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9jbXBuZXFfZXBpMzJfbWFzayhfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpIHsKLSAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9jbXBkMTI4X21hc2soKF9fdjRzaSlfX2EsIChfX3Y0c2kpX19iLCA0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tYXNrX2NtcG5lcV9lcGkzMl9tYXNrKF9fbW1hc2s4IF9fdSwgX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKSB7Ci0gIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfY21wZDEyOF9tYXNrKChfX3Y0c2kpX19hLCAoX192NHNpKV9fYiwgNCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fY21wbmVxX2VwdTMyX21hc2soX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKSB7Ci0gIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfdWNtcGQxMjhfbWFzaygoX192NHNpKV9fYSwgKF9fdjRzaSlfX2IsIDQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tYXNrX2NtcG5lcV9lcHUzMl9tYXNrKF9fbW1hc2s4IF9fdSwgX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKSB7Ci0gIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfdWNtcGQxMjhfbWFzaygoX192NHNpKV9fYSwgKF9fdjRzaSlfX2IsIDQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9jbXBuZXFfZXBpMzJfbWFzayhfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpIHsKLSAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9jbXBkMjU2X21hc2soKF9fdjhzaSlfX2EsIChfX3Y4c2kpX19iLCA0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXNrX2NtcG5lcV9lcGkzMl9tYXNrKF9fbW1hc2s4IF9fdSwgX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7Ci0gIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfY21wZDI1Nl9tYXNrKChfX3Y4c2kpX19hLCAoX192OHNpKV9fYiwgNCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfY21wbmVxX2VwdTMyX21hc2soX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7Ci0gIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfdWNtcGQyNTZfbWFzaygoX192OHNpKV9fYSwgKF9fdjhzaSlfX2IsIDQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXNrX2NtcG5lcV9lcHUzMl9tYXNrKF9fbW1hc2s4IF9fdSwgX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7Ci0gIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfdWNtcGQyNTZfbWFzaygoX192OHNpKV9fYSwgKF9fdjhzaSlfX2IsIDQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9jbXBuZXFfZXBpNjRfbWFzayhfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpIHsKLSAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9jbXBxMTI4X21hc2soKF9fdjJkaSlfX2EsIChfX3YyZGkpX19iLCA0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tYXNrX2NtcG5lcV9lcGk2NF9tYXNrKF9fbW1hc2s4IF9fdSwgX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKSB7Ci0gIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfY21wcTEyOF9tYXNrKChfX3YyZGkpX19hLCAoX192MmRpKV9fYiwgNCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fY21wbmVxX2VwdTY0X21hc2soX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKSB7Ci0gIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfdWNtcHExMjhfbWFzaygoX192MmRpKV9fYSwgKF9fdjJkaSlfX2IsIDQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tYXNrX2NtcG5lcV9lcHU2NF9tYXNrKF9fbW1hc2s4IF9fdSwgX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKSB7Ci0gIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfdWNtcHExMjhfbWFzaygoX192MmRpKV9fYSwgKF9fdjJkaSlfX2IsIDQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9jbXBuZXFfZXBpNjRfbWFzayhfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpIHsKLSAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9jbXBxMjU2X21hc2soKF9fdjRkaSlfX2EsIChfX3Y0ZGkpX19iLCA0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXNrX2NtcG5lcV9lcGk2NF9tYXNrKF9fbW1hc2s4IF9fdSwgX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7Ci0gIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfY21wcTI1Nl9tYXNrKChfX3Y0ZGkpX19hLCAoX192NGRpKV9fYiwgNCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfY21wbmVxX2VwdTY0X21hc2soX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7Ci0gIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfdWNtcHEyNTZfbWFzaygoX192NGRpKV9fYSwgKF9fdjRkaSlfX2IsIDQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXNrX2NtcG5lcV9lcHU2NF9tYXNrKF9fbW1hc2s4IF9fdSwgX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7Ci0gIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfdWNtcHEyNTZfbWFzaygoX192NGRpKV9fYSwgKF9fdjRkaSlfX2IsIDQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X21hc2tfYWRkX2VwaTMyIChfX20yNTZpIF9fVywgX19tbWFzazggX19VLCBfX20yNTZpIF9fQSwKLSAgICAgICAgICAgX19tMjU2aSBfX0IpCi17Ci0gIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcGFkZGQyNTZfbWFzayAoKF9fdjhzaSkgX19BLAotICAgICAgICAgICAgIChfX3Y4c2kpIF9fQiwKLSAgICAgICAgICAgICAoX192OHNpKSBfX1csCi0gICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X21hc2t6X2FkZF9lcGkzMiAoX19tbWFzazggX19VLCBfX20yNTZpIF9fQSwgX19tMjU2aSBfX0IpCi17Ci0gIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcGFkZGQyNTZfbWFzayAoKF9fdjhzaSkgX19BLAotICAgICAgICAgICAgIChfX3Y4c2kpIF9fQiwKLSAgICAgICAgICAgICAoX192OHNpKQotICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2ICgpLAotICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXNrX2FkZF9lcGk2NCAoX19tMjU2aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMjU2aSBfX0EsCi0gICAgICAgICAgIF9fbTI1NmkgX19CKQotewotICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BhZGRxMjU2X21hc2sgKChfX3Y0ZGkpIF9fQSwKLSAgICAgICAgICAgICAoX192NGRpKSBfX0IsCi0gICAgICAgICAgICAgKF9fdjRkaSkgX19XLAotICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXNrel9hZGRfZXBpNjQgKF9fbW1hc2s4IF9fVSwgX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKQotewotICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BhZGRxMjU2X21hc2sgKChfX3Y0ZGkpIF9fQSwKLSAgICAgICAgICAgICAoX192NGRpKSBfX0IsCi0gICAgICAgICAgICAgKF9fdjRkaSkKLSAgICAgICAgICAgICBfbW0yNTZfc2V0emVyb19zaTI1NiAoKSwKLSAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfbWFza19zdWJfZXBpMzIgKF9fbTI1NmkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTI1NmkgX19BLAotICAgICAgICAgICBfX20yNTZpIF9fQikKLXsKLSAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wc3ViZDI1Nl9tYXNrICgoX192OHNpKSBfX0EsCi0gICAgICAgICAgICAgKF9fdjhzaSkgX19CLAotICAgICAgICAgICAgIChfX3Y4c2kpIF9fVywKLSAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfbWFza3pfc3ViX2VwaTMyIChfX21tYXNrOCBfX1UsIF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQikKLXsKLSAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wc3ViZDI1Nl9tYXNrICgoX192OHNpKSBfX0EsCi0gICAgICAgICAgICAgKF9fdjhzaSkgX19CLAotICAgICAgICAgICAgIChfX3Y4c2kpCi0gICAgICAgICAgICAgX21tMjU2X3NldHplcm9fc2kyNTYgKCksCi0gICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X21hc2tfc3ViX2VwaTY0IChfX20yNTZpIF9fVywgX19tbWFzazggX19VLCBfX20yNTZpIF9fQSwKLSAgICAgICAgICAgX19tMjU2aSBfX0IpCi17Ci0gIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcHN1YnEyNTZfbWFzayAoKF9fdjRkaSkgX19BLAotICAgICAgICAgICAgIChfX3Y0ZGkpIF9fQiwKLSAgICAgICAgICAgICAoX192NGRpKSBfX1csCi0gICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X21hc2t6X3N1Yl9lcGk2NCAoX19tbWFzazggX19VLCBfX20yNTZpIF9fQSwgX19tMjU2aSBfX0IpCi17Ci0gIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcHN1YnEyNTZfbWFzayAoKF9fdjRkaSkgX19BLAotICAgICAgICAgICAgIChfX3Y0ZGkpIF9fQiwKLSAgICAgICAgICAgICAoX192NGRpKQotICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2ICgpLAotICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tYXNrX2FkZF9lcGkzMiAoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EsCi0gICAgICAgIF9fbTEyOGkgX19CKQotewotICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BhZGRkMTI4X21hc2sgKChfX3Y0c2kpIF9fQSwKLSAgICAgICAgICAgICAoX192NHNpKSBfX0IsCi0gICAgICAgICAgICAgKF9fdjRzaSkgX19XLAotICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tYXNrel9hZGRfZXBpMzIgKF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQotewotICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BhZGRkMTI4X21hc2sgKChfX3Y0c2kpIF9fQSwKLSAgICAgICAgICAgICAoX192NHNpKSBfX0IsCi0gICAgICAgICAgICAgKF9fdjRzaSkKLSAgICAgICAgICAgICBfbW1fc2V0emVyb19zaTEyOCAoKSwKLSAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWFza19hZGRfZXBpNjQgKF9fbTEyOGkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BLAotICAgICAgICBfX20xMjhpIF9fQikKLXsKLSAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wYWRkcTEyOF9tYXNrICgoX192MmRpKSBfX0EsCi0gICAgICAgICAgICAgKF9fdjJkaSkgX19CLAotICAgICAgICAgICAgIChfX3YyZGkpIF9fVywKLSAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWFza3pfYWRkX2VwaTY0IChfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKLXsKLSAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wYWRkcTEyOF9tYXNrICgoX192MmRpKSBfX0EsCi0gICAgICAgICAgICAgKF9fdjJkaSkgX19CLAotICAgICAgICAgICAgIChfX3YyZGkpCi0gICAgICAgICAgICAgX21tX3NldHplcm9fc2kxMjggKCksCi0gICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2tfc3ViX2VwaTMyIChfX20xMjhpIF9fVywgX19tbWFzazggX19VLCBfX20xMjhpIF9fQSwKLSAgICAgICAgX19tMTI4aSBfX0IpCi17Ci0gIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcHN1YmQxMjhfbWFzayAoKF9fdjRzaSkgX19BLAotICAgICAgICAgICAgIChfX3Y0c2kpIF9fQiwKLSAgICAgICAgICAgICAoX192NHNpKSBfX1csCi0gICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2t6X3N1Yl9lcGkzMiAoX19tbWFzazggX19VLCBfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCi17Ci0gIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcHN1YmQxMjhfbWFzayAoKF9fdjRzaSkgX19BLAotICAgICAgICAgICAgIChfX3Y0c2kpIF9fQiwKLSAgICAgICAgICAgICAoX192NHNpKQotICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAotICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tYXNrX3N1Yl9lcGk2NCAoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EsCi0gICAgICAgIF9fbTEyOGkgX19CKQotewotICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BzdWJxMTI4X21hc2sgKChfX3YyZGkpIF9fQSwKLSAgICAgICAgICAgICAoX192MmRpKSBfX0IsCi0gICAgICAgICAgICAgKF9fdjJkaSkgX19XLAotICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tYXNrel9zdWJfZXBpNjQgKF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQotewotICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BzdWJxMTI4X21hc2sgKChfX3YyZGkpIF9fQSwKLSAgICAgICAgICAgICAoX192MmRpKSBfX0IsCi0gICAgICAgICAgICAgKF9fdjJkaSkKLSAgICAgICAgICAgICBfbW1fc2V0emVyb19zaTEyOCAoKSwKLSAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfbWFza19tdWxfZXBpMzIgKF9fbTI1NmkgX19XLCBfX21tYXNrOCBfX00sIF9fbTI1NmkgX19YLAotICAgICAgICAgICBfX20yNTZpIF9fWSkKLXsKLSAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wbXVsZHEyNTZfbWFzayAoKF9fdjhzaSkgX19YLAotICAgICAgICAgICAgICAoX192OHNpKSBfX1ksCi0gICAgICAgICAgICAgIChfX3Y0ZGkpIF9fVywgX19NKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXNrel9tdWxfZXBpMzIgKF9fbW1hc2s4IF9fTSwgX19tMjU2aSBfX1gsIF9fbTI1NmkgX19ZKQotewotICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BtdWxkcTI1Nl9tYXNrICgoX192OHNpKSBfX1gsCi0gICAgICAgICAgICAgIChfX3Y4c2kpIF9fWSwKLSAgICAgICAgICAgICAgKF9fdjRkaSkKLSAgICAgICAgICAgICAgX21tMjU2X3NldHplcm9fc2kyNTYgKCksCi0gICAgICAgICAgICAgIF9fTSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWFza19tdWxfZXBpMzIgKF9fbTEyOGkgX19XLCBfX21tYXNrOCBfX00sIF9fbTEyOGkgX19YLAotICAgICAgICBfX20xMjhpIF9fWSkKLXsKLSAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbXVsZHExMjhfbWFzayAoKF9fdjRzaSkgX19YLAotICAgICAgICAgICAgICAoX192NHNpKSBfX1ksCi0gICAgICAgICAgICAgIChfX3YyZGkpIF9fVywgX19NKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tYXNrel9tdWxfZXBpMzIgKF9fbW1hc2s4IF9fTSwgX19tMTI4aSBfX1gsIF9fbTEyOGkgX19ZKQotewotICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BtdWxkcTEyOF9tYXNrICgoX192NHNpKSBfX1gsCi0gICAgICAgICAgICAgIChfX3Y0c2kpIF9fWSwKLSAgICAgICAgICAgICAgKF9fdjJkaSkKLSAgICAgICAgICAgICAgX21tX3NldHplcm9fc2kxMjggKCksCi0gICAgICAgICAgICAgIF9fTSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfbWFza19tdWxfZXB1MzIgKF9fbTI1NmkgX19XLCBfX21tYXNrOCBfX00sIF9fbTI1NmkgX19YLAotICAgICAgICAgICBfX20yNTZpIF9fWSkKLXsKLSAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wbXVsdWRxMjU2X21hc2sgKChfX3Y4c2kpIF9fWCwKLSAgICAgICAgICAgICAgIChfX3Y4c2kpIF9fWSwKLSAgICAgICAgICAgICAgIChfX3Y0ZGkpIF9fVywgX19NKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXNrel9tdWxfZXB1MzIgKF9fbW1hc2s4IF9fTSwgX19tMjU2aSBfX1gsIF9fbTI1NmkgX19ZKQotewotICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BtdWx1ZHEyNTZfbWFzayAoKF9fdjhzaSkgX19YLAotICAgICAgICAgICAgICAgKF9fdjhzaSkgX19ZLAotICAgICAgICAgICAgICAgKF9fdjRkaSkKLSAgICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2ICgpLAotICAgICAgICAgICAgICAgX19NKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tYXNrX211bF9lcHUzMiAoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fTSwgX19tMTI4aSBfX1gsCi0gICAgICAgIF9fbTEyOGkgX19ZKQotewotICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BtdWx1ZHExMjhfbWFzayAoKF9fdjRzaSkgX19YLAotICAgICAgICAgICAgICAgKF9fdjRzaSkgX19ZLAotICAgICAgICAgICAgICAgKF9fdjJkaSkgX19XLCBfX00pOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2t6X211bF9lcHUzMiAoX19tbWFzazggX19NLCBfX20xMjhpIF9fWCwgX19tMTI4aSBfX1kpCi17Ci0gIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG11bHVkcTEyOF9tYXNrICgoX192NHNpKSBfX1gsCi0gICAgICAgICAgICAgICAoX192NHNpKSBfX1ksCi0gICAgICAgICAgICAgICAoX192MmRpKQotICAgICAgICAgICAgICAgX21tX3NldHplcm9fc2kxMjggKCksCi0gICAgICAgICAgICAgICBfX00pOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X21hc2t6X211bGxvX2VwaTMyIChfX21tYXNrOCBfX00sIF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQikKLXsKLSAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wbXVsbGQyNTZfbWFzayAoKF9fdjhzaSkgX19BLAotICAgICAgICAgICAgICAoX192OHNpKSBfX0IsCi0gICAgICAgICAgICAgIChfX3Y4c2kpCi0gICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2ICgpLAotICAgICAgICAgICAgICBfX00pOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X21hc2tfbXVsbG9fZXBpMzIgKF9fbTI1NmkgX19XLCBfX21tYXNrOCBfX00sIF9fbTI1NmkgX19BLAotICAgICAgIF9fbTI1NmkgX19CKQotewotICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BtdWxsZDI1Nl9tYXNrICgoX192OHNpKSBfX0EsCi0gICAgICAgICAgICAgIChfX3Y4c2kpIF9fQiwKLSAgICAgICAgICAgICAgKF9fdjhzaSkgX19XLCBfX00pOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2t6X211bGxvX2VwaTMyIChfX21tYXNrOCBfX00sIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKLXsKLSAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbXVsbGQxMjhfbWFzayAoKF9fdjRzaSkgX19BLAotICAgICAgICAgICAgICAoX192NHNpKSBfX0IsCi0gICAgICAgICAgICAgIChfX3Y0c2kpCi0gICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAotICAgICAgICAgICAgICBfX00pOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2tfbXVsbG9fZXBpMzIgKF9fbTEyOGkgX19XLCBfX21tYXNrMTYgX19NLCBfX20xMjhpIF9fQSwKLSAgICAgICAgICBfX20xMjhpIF9fQikKLXsKLSAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbXVsbGQxMjhfbWFzayAoKF9fdjRzaSkgX19BLAotICAgICAgICAgICAgICAoX192NHNpKSBfX0IsCi0gICAgICAgICAgICAgIChfX3Y0c2kpIF9fVywgX19NKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXNrX2FuZF9lcGkzMiAoX19tMjU2aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMjU2aSBfX0EsCi0gICAgICAgICAgIF9fbTI1NmkgX19CKQotewotICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BhbmRkMjU2X21hc2sgKChfX3Y4c2kpIF9fQSwKLSAgICAgICAgICAgICAoX192OHNpKSBfX0IsCi0gICAgICAgICAgICAgKF9fdjhzaSkgX19XLAotICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXNrel9hbmRfZXBpMzIgKF9fbW1hc2s4IF9fVSwgX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKQotewotICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BhbmRkMjU2X21hc2sgKChfX3Y4c2kpIF9fQSwKLSAgICAgICAgICAgICAoX192OHNpKSBfX0IsCi0gICAgICAgICAgICAgKF9fdjhzaSkKLSAgICAgICAgICAgICBfbW0yNTZfc2V0emVyb19zaTI1NiAoKSwKLSAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWFza19hbmRfZXBpMzIgKF9fbTEyOGkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKLXsKLSAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wYW5kZDEyOF9tYXNrICgoX192NHNpKSBfX0EsCi0gICAgICAgICAgICAgKF9fdjRzaSkgX19CLAotICAgICAgICAgICAgIChfX3Y0c2kpIF9fVywKLSAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWFza3pfYW5kX2VwaTMyIChfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKLXsKLSAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wYW5kZDEyOF9tYXNrICgoX192NHNpKSBfX0EsCi0gICAgICAgICAgICAgKF9fdjRzaSkgX19CLAotICAgICAgICAgICAgIChfX3Y0c2kpCi0gICAgICAgICAgICAgX21tX3NldHplcm9fc2kxMjggKCksCi0gICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X21hc2tfYW5kbm90X2VwaTMyIChfX20yNTZpIF9fVywgX19tbWFzazggX19VLCBfX20yNTZpIF9fQSwKLSAgICAgICAgX19tMjU2aSBfX0IpCi17Ci0gIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcGFuZG5kMjU2X21hc2sgKChfX3Y4c2kpIF9fQSwKLSAgICAgICAgICAgICAgKF9fdjhzaSkgX19CLAotICAgICAgICAgICAgICAoX192OHNpKSBfX1csCi0gICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXNrel9hbmRub3RfZXBpMzIgKF9fbW1hc2s4IF9fVSwgX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKQotewotICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BhbmRuZDI1Nl9tYXNrICgoX192OHNpKSBfX0EsCi0gICAgICAgICAgICAgIChfX3Y4c2kpIF9fQiwKLSAgICAgICAgICAgICAgKF9fdjhzaSkKLSAgICAgICAgICAgICAgX21tMjU2X3NldHplcm9fc2kyNTYgKCksCi0gICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tYXNrX2FuZG5vdF9lcGkzMiAoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EsCi0gICAgICAgICAgIF9fbTEyOGkgX19CKQotewotICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BhbmRuZDEyOF9tYXNrICgoX192NHNpKSBfX0EsCi0gICAgICAgICAgICAgIChfX3Y0c2kpIF9fQiwKLSAgICAgICAgICAgICAgKF9fdjRzaSkgX19XLAotICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWFza3pfYW5kbm90X2VwaTMyIChfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKLXsKLSAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wYW5kbmQxMjhfbWFzayAoKF9fdjRzaSkgX19BLAotICAgICAgICAgICAgICAoX192NHNpKSBfX0IsCi0gICAgICAgICAgICAgIChfX3Y0c2kpCi0gICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAotICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfbWFza19vcl9lcGkzMiAoX19tMjU2aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMjU2aSBfX0EsCi0gICAgICAgICAgX19tMjU2aSBfX0IpCi17Ci0gIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcG9yZDI1Nl9tYXNrICgoX192OHNpKSBfX0EsCi0gICAgICAgICAgICAoX192OHNpKSBfX0IsCi0gICAgICAgICAgICAoX192OHNpKSBfX1csCi0gICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfbWFza3pfb3JfZXBpMzIgKF9fbW1hc2s4IF9fVSwgX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKQotewotICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BvcmQyNTZfbWFzayAoKF9fdjhzaSkgX19BLAotICAgICAgICAgICAgKF9fdjhzaSkgX19CLAotICAgICAgICAgICAgKF9fdjhzaSkKLSAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2ICgpLAotICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2tfb3JfZXBpMzIgKF9fbTEyOGkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKLXsKLSAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wb3JkMTI4X21hc2sgKChfX3Y0c2kpIF9fQSwKLSAgICAgICAgICAgIChfX3Y0c2kpIF9fQiwKLSAgICAgICAgICAgIChfX3Y0c2kpIF9fVywKLSAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tYXNrel9vcl9lcGkzMiAoX19tbWFzazggX19VLCBfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCi17Ci0gIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG9yZDEyOF9tYXNrICgoX192NHNpKSBfX0EsCi0gICAgICAgICAgICAoX192NHNpKSBfX0IsCi0gICAgICAgICAgICAoX192NHNpKQotICAgICAgICAgICAgX21tX3NldHplcm9fc2kxMjggKCksCi0gICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfbWFza194b3JfZXBpMzIgKF9fbTI1NmkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTI1NmkgX19BLAotICAgICAgICAgICBfX20yNTZpIF9fQikKLXsKLSAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9weG9yZDI1Nl9tYXNrICgoX192OHNpKSBfX0EsCi0gICAgICAgICAgICAgKF9fdjhzaSkgX19CLAotICAgICAgICAgICAgIChfX3Y4c2kpIF9fVywKLSAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfbWFza3pfeG9yX2VwaTMyIChfX21tYXNrOCBfX1UsIF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQikKLXsKLSAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9weG9yZDI1Nl9tYXNrICgoX192OHNpKSBfX0EsCi0gICAgICAgICAgICAgKF9fdjhzaSkgX19CLAotICAgICAgICAgICAgIChfX3Y4c2kpCi0gICAgICAgICAgICAgX21tMjU2X3NldHplcm9fc2kyNTYgKCksCi0gICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2tfeG9yX2VwaTMyIChfX20xMjhpIF9fVywgX19tbWFzazggX19VLCBfX20xMjhpIF9fQSwKLSAgICAgICAgX19tMTI4aSBfX0IpCi17Ci0gIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcHhvcmQxMjhfbWFzayAoKF9fdjRzaSkgX19BLAotICAgICAgICAgICAgIChfX3Y0c2kpIF9fQiwKLSAgICAgICAgICAgICAoX192NHNpKSBfX1csCi0gICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2t6X3hvcl9lcGkzMiAoX19tbWFzazggX19VLCBfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCi17Ci0gIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcHhvcmQxMjhfbWFzayAoKF9fdjRzaSkgX19BLAotICAgICAgICAgICAgIChfX3Y0c2kpIF9fQiwKLSAgICAgICAgICAgICAoX192NHNpKQotICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAotICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXNrX2FuZF9lcGk2NCAoX19tMjU2aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMjU2aSBfX0EsCi0gICAgICAgICAgIF9fbTI1NmkgX19CKQotewotICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BhbmRxMjU2X21hc2sgKChfX3Y0ZGkpIF9fQSwKLSAgICAgICAgICAgICAoX192NGRpKSBfX0IsCi0gICAgICAgICAgICAgKF9fdjRkaSkgX19XLCBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X21hc2t6X2FuZF9lcGk2NCAoX19tbWFzazggX19VLCBfX20yNTZpIF9fQSwgX19tMjU2aSBfX0IpCi17Ci0gIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcGFuZHEyNTZfbWFzayAoKF9fdjRkaSkgX19BLAotICAgICAgICAgICAgIChfX3Y0ZGkpIF9fQiwKLSAgICAgICAgICAgICAoX192NGRpKQotICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3BkICgpLAotICAgICAgICAgICAgIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWFza19hbmRfZXBpNjQgKF9fbTEyOGkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BLAotICAgICAgICBfX20xMjhpIF9fQikKLXsKLSAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wYW5kcTEyOF9tYXNrICgoX192MmRpKSBfX0EsCi0gICAgICAgICAgICAgKF9fdjJkaSkgX19CLAotICAgICAgICAgICAgIChfX3YyZGkpIF9fVywgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tYXNrel9hbmRfZXBpNjQgKF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQotewotICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BhbmRxMTI4X21hc2sgKChfX3YyZGkpIF9fQSwKLSAgICAgICAgICAgICAoX192MmRpKSBfX0IsCi0gICAgICAgICAgICAgKF9fdjJkaSkKLSAgICAgICAgICAgICBfbW1fc2V0emVyb19wZCAoKSwKLSAgICAgICAgICAgICBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X21hc2tfYW5kbm90X2VwaTY0IChfX20yNTZpIF9fVywgX19tbWFzazggX19VLCBfX20yNTZpIF9fQSwKLSAgICAgICAgX19tMjU2aSBfX0IpCi17Ci0gIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcGFuZG5xMjU2X21hc2sgKChfX3Y0ZGkpIF9fQSwKLSAgICAgICAgICAgICAgKF9fdjRkaSkgX19CLAotICAgICAgICAgICAgICAoX192NGRpKSBfX1csIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfbWFza3pfYW5kbm90X2VwaTY0IChfX21tYXNrOCBfX1UsIF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQikKLXsKLSAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wYW5kbnEyNTZfbWFzayAoKF9fdjRkaSkgX19BLAotICAgICAgICAgICAgICAoX192NGRpKSBfX0IsCi0gICAgICAgICAgICAgIChfX3Y0ZGkpCi0gICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3BkICgpLAotICAgICAgICAgICAgICBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2tfYW5kbm90X2VwaTY0IChfX20xMjhpIF9fVywgX19tbWFzazggX19VLCBfX20xMjhpIF9fQSwKLSAgICAgICAgICAgX19tMTI4aSBfX0IpCi17Ci0gIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcGFuZG5xMTI4X21hc2sgKChfX3YyZGkpIF9fQSwKLSAgICAgICAgICAgICAgKF9fdjJkaSkgX19CLAotICAgICAgICAgICAgICAoX192MmRpKSBfX1csIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWFza3pfYW5kbm90X2VwaTY0IChfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKLXsKLSAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wYW5kbnExMjhfbWFzayAoKF9fdjJkaSkgX19BLAotICAgICAgICAgICAgICAoX192MmRpKSBfX0IsCi0gICAgICAgICAgICAgIChfX3YyZGkpCi0gICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3BkICgpLAotICAgICAgICAgICAgICBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X21hc2tfb3JfZXBpNjQgKF9fbTI1NmkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTI1NmkgX19BLAotICAgICAgICAgIF9fbTI1NmkgX19CKQotewotICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BvcnEyNTZfbWFzayAoKF9fdjRkaSkgX19BLAotICAgICAgICAgICAgKF9fdjRkaSkgX19CLAotICAgICAgICAgICAgKF9fdjRkaSkgX19XLAotICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X21hc2t6X29yX2VwaTY0IChfX21tYXNrOCBfX1UsIF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQikKLXsKLSAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wb3JxMjU2X21hc2sgKChfX3Y0ZGkpIF9fQSwKLSAgICAgICAgICAgIChfX3Y0ZGkpIF9fQiwKLSAgICAgICAgICAgIChfX3Y0ZGkpCi0gICAgICAgICAgICBfbW0yNTZfc2V0emVyb19zaTI1NiAoKSwKLSAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tYXNrX29yX2VwaTY0IChfX20xMjhpIF9fVywgX19tbWFzazggX19VLCBfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCi17Ci0gIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG9ycTEyOF9tYXNrICgoX192MmRpKSBfX0EsCi0gICAgICAgICAgICAoX192MmRpKSBfX0IsCi0gICAgICAgICAgICAoX192MmRpKSBfX1csCi0gICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWFza3pfb3JfZXBpNjQgKF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQotewotICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BvcnExMjhfbWFzayAoKF9fdjJkaSkgX19BLAotICAgICAgICAgICAgKF9fdjJkaSkgX19CLAotICAgICAgICAgICAgKF9fdjJkaSkKLSAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAotICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X21hc2tfeG9yX2VwaTY0IChfX20yNTZpIF9fVywgX19tbWFzazggX19VLCBfX20yNTZpIF9fQSwKLSAgICAgICAgICAgX19tMjU2aSBfX0IpCi17Ci0gIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcHhvcnEyNTZfbWFzayAoKF9fdjRkaSkgX19BLAotICAgICAgICAgICAgIChfX3Y0ZGkpIF9fQiwKLSAgICAgICAgICAgICAoX192NGRpKSBfX1csCi0gICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X21hc2t6X3hvcl9lcGk2NCAoX19tbWFzazggX19VLCBfX20yNTZpIF9fQSwgX19tMjU2aSBfX0IpCi17Ci0gIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcHhvcnEyNTZfbWFzayAoKF9fdjRkaSkgX19BLAotICAgICAgICAgICAgIChfX3Y0ZGkpIF9fQiwKLSAgICAgICAgICAgICAoX192NGRpKQotICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2ICgpLAotICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tYXNrX3hvcl9lcGk2NCAoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EsCi0gICAgICAgIF9fbTEyOGkgX19CKQotewotICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3B4b3JxMTI4X21hc2sgKChfX3YyZGkpIF9fQSwKLSAgICAgICAgICAgICAoX192MmRpKSBfX0IsCi0gICAgICAgICAgICAgKF9fdjJkaSkgX19XLAotICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tYXNrel94b3JfZXBpNjQgKF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQotewotICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3B4b3JxMTI4X21hc2sgKChfX3YyZGkpIF9fQSwKLSAgICAgICAgICAgICAoX192MmRpKSBfX0IsCi0gICAgICAgICAgICAgKF9fdjJkaSkKLSAgICAgICAgICAgICBfbW1fc2V0emVyb19zaTEyOCAoKSwKLSAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLSNkZWZpbmUgX21tX2NtcF9lcGkzMl9tYXNrKGEsIGIsIHApIF9fZXh0ZW5zaW9uX18gKHsgXAotICAoX19tbWFzazgpX19idWlsdGluX2lhMzJfY21wZDEyOF9tYXNrKChfX3Y0c2kpKF9fbTEyOGkpKGEpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzaSkoX19tMTI4aSkoYiksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocCksIChfX21tYXNrOCktMSk7IH0pCi0KLSNkZWZpbmUgX21tX21hc2tfY21wX2VwaTMyX21hc2sobSwgYSwgYiwgcCkgX19leHRlbnNpb25fXyAoeyBcCi0gIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9jbXBkMTI4X21hc2soKF9fdjRzaSkoX19tMTI4aSkoYSksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNpKShfX20xMjhpKShiKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwKSwgKF9fbW1hc2s4KShtKSk7IH0pCi0KLSNkZWZpbmUgX21tX2NtcF9lcHUzMl9tYXNrKGEsIGIsIHApIF9fZXh0ZW5zaW9uX18gKHsgXAotICAoX19tbWFzazgpX19idWlsdGluX2lhMzJfdWNtcGQxMjhfbWFzaygoX192NHNpKShfX20xMjhpKShhKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNpKShfX20xMjhpKShiKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocCksIChfX21tYXNrOCktMSk7IH0pCi0KLSNkZWZpbmUgX21tX21hc2tfY21wX2VwdTMyX21hc2sobSwgYSwgYiwgcCkgX19leHRlbnNpb25fXyAoeyBcCi0gIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl91Y21wZDEyOF9tYXNrKChfX3Y0c2kpKF9fbTEyOGkpKGEpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2kpKF9fbTEyOGkpKGIpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwKSwgKF9fbW1hc2s4KShtKSk7IH0pCi0KLSNkZWZpbmUgX21tMjU2X2NtcF9lcGkzMl9tYXNrKGEsIGIsIHApIF9fZXh0ZW5zaW9uX18gKHsgXAotICAoX19tbWFzazgpX19idWlsdGluX2lhMzJfY21wZDI1Nl9tYXNrKChfX3Y4c2kpKF9fbTI1NmkpKGEpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzaSkoX19tMjU2aSkoYiksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocCksIChfX21tYXNrOCktMSk7IH0pCi0KLSNkZWZpbmUgX21tMjU2X21hc2tfY21wX2VwaTMyX21hc2sobSwgYSwgYiwgcCkgX19leHRlbnNpb25fXyAoeyBcCi0gIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9jbXBkMjU2X21hc2soKF9fdjhzaSkoX19tMjU2aSkoYSksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNpKShfX20yNTZpKShiKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwKSwgKF9fbW1hc2s4KShtKSk7IH0pCi0KLSNkZWZpbmUgX21tMjU2X2NtcF9lcHUzMl9tYXNrKGEsIGIsIHApIF9fZXh0ZW5zaW9uX18gKHsgXAotICAoX19tbWFzazgpX19idWlsdGluX2lhMzJfdWNtcGQyNTZfbWFzaygoX192OHNpKShfX20yNTZpKShhKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNpKShfX20yNTZpKShiKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocCksIChfX21tYXNrOCktMSk7IH0pCi0KLSNkZWZpbmUgX21tMjU2X21hc2tfY21wX2VwdTMyX21hc2sobSwgYSwgYiwgcCkgX19leHRlbnNpb25fXyAoeyBcCi0gIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl91Y21wZDI1Nl9tYXNrKChfX3Y4c2kpKF9fbTI1NmkpKGEpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2kpKF9fbTI1NmkpKGIpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwKSwgKF9fbW1hc2s4KShtKSk7IH0pCi0KLSNkZWZpbmUgX21tX2NtcF9lcGk2NF9tYXNrKGEsIGIsIHApIF9fZXh0ZW5zaW9uX18gKHsgXAotICAoX19tbWFzazgpX19idWlsdGluX2lhMzJfY21wcTEyOF9tYXNrKChfX3YyZGkpKF9fbTEyOGkpKGEpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkaSkoX19tMTI4aSkoYiksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocCksIChfX21tYXNrOCktMSk7IH0pCi0KLSNkZWZpbmUgX21tX21hc2tfY21wX2VwaTY0X21hc2sobSwgYSwgYiwgcCkgX19leHRlbnNpb25fXyAoeyBcCi0gIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9jbXBxMTI4X21hc2soKF9fdjJkaSkoX19tMTI4aSkoYSksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRpKShfX20xMjhpKShiKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwKSwgKF9fbW1hc2s4KShtKSk7IH0pCi0KLSNkZWZpbmUgX21tX2NtcF9lcHU2NF9tYXNrKGEsIGIsIHApIF9fZXh0ZW5zaW9uX18gKHsgXAotICAoX19tbWFzazgpX19idWlsdGluX2lhMzJfdWNtcHExMjhfbWFzaygoX192MmRpKShfX20xMjhpKShhKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRpKShfX20xMjhpKShiKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocCksIChfX21tYXNrOCktMSk7IH0pCi0KLSNkZWZpbmUgX21tX21hc2tfY21wX2VwdTY0X21hc2sobSwgYSwgYiwgcCkgX19leHRlbnNpb25fXyAoeyBcCi0gIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl91Y21wcTEyOF9tYXNrKChfX3YyZGkpKF9fbTEyOGkpKGEpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGkpKF9fbTEyOGkpKGIpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwKSwgKF9fbW1hc2s4KShtKSk7IH0pCi0KLSNkZWZpbmUgX21tMjU2X2NtcF9lcGk2NF9tYXNrKGEsIGIsIHApIF9fZXh0ZW5zaW9uX18gKHsgXAotICAoX19tbWFzazgpX19idWlsdGluX2lhMzJfY21wcTI1Nl9tYXNrKChfX3Y0ZGkpKF9fbTI1NmkpKGEpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkaSkoX19tMjU2aSkoYiksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocCksIChfX21tYXNrOCktMSk7IH0pCi0KLSNkZWZpbmUgX21tMjU2X21hc2tfY21wX2VwaTY0X21hc2sobSwgYSwgYiwgcCkgX19leHRlbnNpb25fXyAoeyBcCi0gIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9jbXBxMjU2X21hc2soKF9fdjRkaSkoX19tMjU2aSkoYSksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRpKShfX20yNTZpKShiKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwKSwgKF9fbW1hc2s4KShtKSk7IH0pCi0KLSNkZWZpbmUgX21tMjU2X2NtcF9lcHU2NF9tYXNrKGEsIGIsIHApIF9fZXh0ZW5zaW9uX18gKHsgXAotICAoX19tbWFzazgpX19idWlsdGluX2lhMzJfdWNtcHEyNTZfbWFzaygoX192NGRpKShfX20yNTZpKShhKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRpKShfX20yNTZpKShiKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocCksIChfX21tYXNrOCktMSk7IH0pCi0KLSNkZWZpbmUgX21tMjU2X21hc2tfY21wX2VwdTY0X21hc2sobSwgYSwgYiwgcCkgX19leHRlbnNpb25fXyAoeyBcCi0gIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl91Y21wcTI1Nl9tYXNrKChfX3Y0ZGkpKF9fbTI1NmkpKGEpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGkpKF9fbTI1NmkpKGIpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwKSwgKF9fbW1hc2s4KShtKSk7IH0pCi0KLSNkZWZpbmUgX21tMjU2X2NtcF9wc19tYXNrKGEsIGIsIHApICBfX2V4dGVuc2lvbl9fICh7IFwKLSAgKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX2NtcHBzMjU2X21hc2soKF9fdjhzZikoX19tMjU2KShhKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNmKShfX20yNTYpKGIpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwKSwgKF9fbW1hc2s4KS0xKTsgfSkKLQotI2RlZmluZSBfbW0yNTZfbWFza19jbXBfcHNfbWFzayhtLCBhLCBiLCBwKSAgX19leHRlbnNpb25fXyAoeyBcCi0gIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9jbXBwczI1Nl9tYXNrKChfX3Y4c2YpKF9fbTI1NikoYSksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzZikoX19tMjU2KShiKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocCksIChfX21tYXNrOCkobSkpOyB9KQotCi0jZGVmaW5lIF9tbTI1Nl9jbXBfcGRfbWFzayhhLCBiLCBwKSAgX19leHRlbnNpb25fXyAoeyBcCi0gIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9jbXBwZDI1Nl9tYXNrKChfX3Y0ZGYpKF9fbTI1NikoYSksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkZikoX19tMjU2KShiKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocCksIChfX21tYXNrOCktMSk7IH0pCi0KLSNkZWZpbmUgX21tMjU2X21hc2tfY21wX3BkX21hc2sobSwgYSwgYiwgcCkgIF9fZXh0ZW5zaW9uX18gKHsgXAotICAoX19tbWFzazgpX19idWlsdGluX2lhMzJfY21wcGQyNTZfbWFzaygoX192NGRmKShfX20yNTYpKGEpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGYpKF9fbTI1NikoYiksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHApLCAoX19tbWFzazgpKG0pKTsgfSkKLQotI2RlZmluZSBfbW0xMjhfY21wX3BzX21hc2soYSwgYiwgcCkgIF9fZXh0ZW5zaW9uX18gKHsgXAotICAoX19tbWFzazgpX19idWlsdGluX2lhMzJfY21wcHMxMjhfbWFzaygoX192NHNmKShfX20xMjgpKGEpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpKF9fbTEyOCkoYiksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHApLCAoX19tbWFzazgpLTEpOyB9KQotCi0jZGVmaW5lIF9tbTEyOF9tYXNrX2NtcF9wc19tYXNrKG0sIGEsIGIsIHApICBfX2V4dGVuc2lvbl9fICh7IFwKLSAgKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX2NtcHBzMTI4X21hc2soKF9fdjRzZikoX19tMTI4KShhKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKShfX20xMjgpKGIpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwKSwgKF9fbW1hc2s4KShtKSk7IH0pCi0KLSNkZWZpbmUgX21tMTI4X2NtcF9wZF9tYXNrKGEsIGIsIHApICBfX2V4dGVuc2lvbl9fICh7IFwKLSAgKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX2NtcHBkMTI4X21hc2soKF9fdjJkZikoX19tMTI4KShhKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKShfX20xMjgpKGIpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwKSwgKF9fbW1hc2s4KS0xKTsgfSkKLQotI2RlZmluZSBfbW0xMjhfbWFza19jbXBfcGRfbWFzayhtLCBhLCBiLCBwKSAgX19leHRlbnNpb25fXyAoeyBcCi0gIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9jbXBwZDEyOF9tYXNrKChfX3YyZGYpKF9fbTEyOCkoYSksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikoX19tMTI4KShiKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocCksIChfX21tYXNrOCkobSkpOyB9KQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2tfZm1hZGRfcGQoX19tMTI4ZCBfX0EsIF9fbW1hc2s4IF9fVSwgX19tMTI4ZCBfX0IsIF9fbTEyOGQgX19DKQotewotICByZXR1cm4gKF9fbTEyOGQpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHBkMTI4X21hc2sgKChfX3YyZGYpIF9fQSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKSBfX0IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikgX19DLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tYXNrM19mbWFkZF9wZChfX20xMjhkIF9fQSwgX19tMTI4ZCBfX0IsIF9fbTEyOGQgX19DLCBfX21tYXNrOCBfX1UpCi17Ci0gIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfdmZtYWRkcGQxMjhfbWFzazMgKChfX3YyZGYpIF9fQSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikgX19CLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKSBfX0MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tYXNrel9mbWFkZF9wZChfX21tYXNrOCBfX1UsIF9fbTEyOGQgX19BLCBfX20xMjhkIF9fQiwgX19tMTI4ZCBfX0MpCi17Ci0gIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfdmZtYWRkcGQxMjhfbWFza3ogKChfX3YyZGYpIF9fQSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikgX19CLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKSBfX0MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tYXNrX2Ztc3ViX3BkKF9fbTEyOGQgX19BLCBfX21tYXNrOCBfX1UsIF9fbTEyOGQgX19CLCBfX20xMjhkIF9fQykKLXsKLSAgcmV0dXJuIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl92Zm1hZGRwZDEyOF9tYXNrICgoX192MmRmKSBfX0EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikgX19CLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oX192MmRmKSBfX0MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2t6X2Ztc3ViX3BkKF9fbW1hc2s4IF9fVSwgX19tMTI4ZCBfX0EsIF9fbTEyOGQgX19CLCBfX20xMjhkIF9fQykKLXsKLSAgcmV0dXJuIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl92Zm1hZGRwZDEyOF9tYXNreiAoKF9fdjJkZikgX19BLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKSBfX0IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oX192MmRmKSBfX0MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tYXNrM19mbm1hZGRfcGQoX19tMTI4ZCBfX0EsIF9fbTEyOGQgX19CLCBfX20xMjhkIF9fQywgX19tbWFzazggX19VKQotewotICByZXR1cm4gKF9fbTEyOGQpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHBkMTI4X21hc2szICgtKF9fdjJkZikgX19BLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKSBfX0IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpIF9fQywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2t6X2ZubWFkZF9wZChfX21tYXNrOCBfX1UsIF9fbTEyOGQgX19BLCBfX20xMjhkIF9fQiwgX19tMTI4ZCBfX0MpCi17Ci0gIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfdmZtYWRkcGQxMjhfbWFza3ogKC0oX192MmRmKSBfX0EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpIF9fQiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikgX19DLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWFza3pfZm5tc3ViX3BkKF9fbW1hc2s4IF9fVSwgX19tMTI4ZCBfX0EsIF9fbTEyOGQgX19CLCBfX20xMjhkIF9fQykKLXsKLSAgcmV0dXJuIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl92Zm1hZGRwZDEyOF9tYXNreiAoLShfX3YyZGYpIF9fQSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikgX19CLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKF9fdjJkZikgX19DLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfbWFza19mbWFkZF9wZChfX20yNTZkIF9fQSwgX19tbWFzazggX19VLCBfX20yNTZkIF9fQiwgX19tMjU2ZCBfX0MpCi17Ci0gIHJldHVybiAoX19tMjU2ZCkgX19idWlsdGluX2lhMzJfdmZtYWRkcGQyNTZfbWFzayAoKF9fdjRkZikgX19BLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGYpIF9fQiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRmKSBfX0MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X21hc2szX2ZtYWRkX3BkKF9fbTI1NmQgX19BLCBfX20yNTZkIF9fQiwgX19tMjU2ZCBfX0MsIF9fbW1hc2s4IF9fVSkKLXsKLSAgcmV0dXJuIChfX20yNTZkKSBfX2J1aWx0aW5faWEzMl92Zm1hZGRwZDI1Nl9tYXNrMyAoKF9fdjRkZikgX19BLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRmKSBfX0IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGYpIF9fQywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X21hc2t6X2ZtYWRkX3BkKF9fbW1hc2s4IF9fVSwgX19tMjU2ZCBfX0EsIF9fbTI1NmQgX19CLCBfX20yNTZkIF9fQykKLXsKLSAgcmV0dXJuIChfX20yNTZkKSBfX2J1aWx0aW5faWEzMl92Zm1hZGRwZDI1Nl9tYXNreiAoKF9fdjRkZikgX19BLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRmKSBfX0IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGYpIF9fQywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X21hc2tfZm1zdWJfcGQoX19tMjU2ZCBfX0EsIF9fbW1hc2s4IF9fVSwgX19tMjU2ZCBfX0IsIF9fbTI1NmQgX19DKQotewotICByZXR1cm4gKF9fbTI1NmQpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHBkMjU2X21hc2sgKChfX3Y0ZGYpIF9fQSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRmKSBfX0IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLShfX3Y0ZGYpIF9fQywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfbWFza3pfZm1zdWJfcGQoX19tbWFzazggX19VLCBfX20yNTZkIF9fQSwgX19tMjU2ZCBfX0IsIF9fbTI1NmQgX19DKQotewotICByZXR1cm4gKF9fbTI1NmQpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHBkMjU2X21hc2t6ICgoX192NGRmKSBfX0EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGYpIF9fQiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLShfX3Y0ZGYpIF9fQywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X21hc2szX2ZubWFkZF9wZChfX20yNTZkIF9fQSwgX19tMjU2ZCBfX0IsIF9fbTI1NmQgX19DLCBfX21tYXNrOCBfX1UpCi17Ci0gIHJldHVybiAoX19tMjU2ZCkgX19idWlsdGluX2lhMzJfdmZtYWRkcGQyNTZfbWFzazMgKC0oX192NGRmKSBfX0EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGYpIF9fQiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkZikgX19DLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfbWFza3pfZm5tYWRkX3BkKF9fbW1hc2s4IF9fVSwgX19tMjU2ZCBfX0EsIF9fbTI1NmQgX19CLCBfX20yNTZkIF9fQykKLXsKLSAgcmV0dXJuIChfX20yNTZkKSBfX2J1aWx0aW5faWEzMl92Zm1hZGRwZDI1Nl9tYXNreiAoLShfX3Y0ZGYpIF9fQSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkZikgX19CLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRmKSBfX0MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXNrel9mbm1zdWJfcGQoX19tbWFzazggX19VLCBfX20yNTZkIF9fQSwgX19tMjU2ZCBfX0IsIF9fbTI1NmQgX19DKQotewotICByZXR1cm4gKF9fbTI1NmQpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHBkMjU2X21hc2t6ICgtKF9fdjRkZikgX19BLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRmKSBfX0IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oX192NGRmKSBfX0MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2tfZm1hZGRfcHMoX19tMTI4IF9fQSwgX19tbWFzazggX19VLCBfX20xMjggX19CLCBfX20xMjggX19DKQotewotICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfdmZtYWRkcHMxMjhfbWFzayAoKF9fdjRzZikgX19BLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikgX19CLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikgX19DLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWFzazNfZm1hZGRfcHMoX19tMTI4IF9fQSwgX19tMTI4IF9fQiwgX19tMTI4IF9fQywgX19tbWFzazggX19VKQotewotICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfdmZtYWRkcHMxMjhfbWFzazMgKChfX3Y0c2YpIF9fQSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKSBfX0IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikgX19DLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2t6X2ZtYWRkX3BzKF9fbW1hc2s4IF9fVSwgX19tMTI4IF9fQSwgX19tMTI4IF9fQiwgX19tMTI4IF9fQykKLXsKLSAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHBzMTI4X21hc2t6ICgoX192NHNmKSBfX0EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikgX19CLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpIF9fQywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tYXNrX2Ztc3ViX3BzKF9fbTEyOCBfX0EsIF9fbW1hc2s4IF9fVSwgX19tMTI4IF9fQiwgX19tMTI4IF9fQykKLXsKLSAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHBzMTI4X21hc2sgKChfX3Y0c2YpIF9fQSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpIF9fQiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oX192NHNmKSBfX0MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tYXNrel9mbXN1Yl9wcyhfX21tYXNrOCBfX1UsIF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IsIF9fbTEyOCBfX0MpCi17Ci0gIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl92Zm1hZGRwczEyOF9tYXNreiAoKF9fdjRzZikgX19BLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpIF9fQiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKF9fdjRzZikgX19DLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2szX2ZubWFkZF9wcyhfX20xMjggX19BLCBfX20xMjggX19CLCBfX20xMjggX19DLCBfX21tYXNrOCBfX1UpCi17Ci0gIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl92Zm1hZGRwczEyOF9tYXNrMyAoLShfX3Y0c2YpIF9fQSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKSBfX0IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikgX19DLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2t6X2ZubWFkZF9wcyhfX21tYXNrOCBfX1UsIF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IsIF9fbTEyOCBfX0MpCi17Ci0gIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl92Zm1hZGRwczEyOF9tYXNreiAoLShfX3Y0c2YpIF9fQSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKSBfX0IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikgX19DLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2t6X2ZubXN1Yl9wcyhfX21tYXNrOCBfX1UsIF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IsIF9fbTEyOCBfX0MpCi17Ci0gIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl92Zm1hZGRwczEyOF9tYXNreiAoLShfX3Y0c2YpIF9fQSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKSBfX0IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLShfX3Y0c2YpIF9fQywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXNrX2ZtYWRkX3BzKF9fbTI1NiBfX0EsIF9fbW1hc2s4IF9fVSwgX19tMjU2IF9fQiwgX19tMjU2IF9fQykKLXsKLSAgcmV0dXJuIChfX20yNTYpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHBzMjU2X21hc2sgKChfX3Y4c2YpIF9fQSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2YpIF9fQiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2YpIF9fQywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X21hc2szX2ZtYWRkX3BzKF9fbTI1NiBfX0EsIF9fbTI1NiBfX0IsIF9fbTI1NiBfX0MsIF9fbW1hc2s4IF9fVSkKLXsKLSAgcmV0dXJuIChfX20yNTYpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHBzMjU2X21hc2szICgoX192OHNmKSBfX0EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzZikgX19CLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2YpIF9fQywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXNrel9mbWFkZF9wcyhfX21tYXNrOCBfX1UsIF9fbTI1NiBfX0EsIF9fbTI1NiBfX0IsIF9fbTI1NiBfX0MpCi17Ci0gIHJldHVybiAoX19tMjU2KSBfX2J1aWx0aW5faWEzMl92Zm1hZGRwczI1Nl9tYXNreiAoKF9fdjhzZikgX19BLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2YpIF9fQiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNmKSBfX0MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfbWFza19mbXN1Yl9wcyhfX20yNTYgX19BLCBfX21tYXNrOCBfX1UsIF9fbTI1NiBfX0IsIF9fbTI1NiBfX0MpCi17Ci0gIHJldHVybiAoX19tMjU2KSBfX2J1aWx0aW5faWEzMl92Zm1hZGRwczI1Nl9tYXNrICgoX192OHNmKSBfX0EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNmKSBfX0IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKF9fdjhzZikgX19DLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfbWFza3pfZm1zdWJfcHMoX19tbWFzazggX19VLCBfX20yNTYgX19BLCBfX20yNTYgX19CLCBfX20yNTYgX19DKQotewotICByZXR1cm4gKF9fbTI1NikgX19idWlsdGluX2lhMzJfdmZtYWRkcHMyNTZfbWFza3ogKChfX3Y4c2YpIF9fQSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNmKSBfX0IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLShfX3Y4c2YpIF9fQywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXNrM19mbm1hZGRfcHMoX19tMjU2IF9fQSwgX19tMjU2IF9fQiwgX19tMjU2IF9fQywgX19tbWFzazggX19VKQotewotICByZXR1cm4gKF9fbTI1NikgX19idWlsdGluX2lhMzJfdmZtYWRkcHMyNTZfbWFzazMgKC0oX192OHNmKSBfX0EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzZikgX19CLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2YpIF9fQywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXNrel9mbm1hZGRfcHMoX19tbWFzazggX19VLCBfX20yNTYgX19BLCBfX20yNTYgX19CLCBfX20yNTYgX19DKQotewotICByZXR1cm4gKF9fbTI1NikgX19idWlsdGluX2lhMzJfdmZtYWRkcHMyNTZfbWFza3ogKC0oX192OHNmKSBfX0EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzZikgX19CLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2YpIF9fQywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXNrel9mbm1zdWJfcHMoX19tbWFzazggX19VLCBfX20yNTYgX19BLCBfX20yNTYgX19CLCBfX20yNTYgX19DKQotewotICByZXR1cm4gKF9fbTI1NikgX19idWlsdGluX2lhMzJfdmZtYWRkcHMyNTZfbWFza3ogKC0oX192OHNmKSBfX0EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzZikgX19CLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oX192OHNmKSBfX0MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2tfZm1hZGRzdWJfcGQoX19tMTI4ZCBfX0EsIF9fbW1hc2s4IF9fVSwgX19tMTI4ZCBfX0IsIF9fbTEyOGQgX19DKQotewotICByZXR1cm4gKF9fbTEyOGQpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHN1YnBkMTI4X21hc2sgKChfX3YyZGYpIF9fQSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKSBfX0IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikgX19DLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tYXNrM19mbWFkZHN1Yl9wZChfX20xMjhkIF9fQSwgX19tMTI4ZCBfX0IsIF9fbTEyOGQgX19DLCBfX21tYXNrOCBfX1UpCi17Ci0gIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfdmZtYWRkc3VicGQxMjhfbWFzazMgKChfX3YyZGYpIF9fQSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikgX19CLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKSBfX0MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tYXNrel9mbWFkZHN1Yl9wZChfX21tYXNrOCBfX1UsIF9fbTEyOGQgX19BLCBfX20xMjhkIF9fQiwgX19tMTI4ZCBfX0MpCi17Ci0gIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfdmZtYWRkc3VicGQxMjhfbWFza3ogKChfX3YyZGYpIF9fQSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikgX19CLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKSBfX0MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tYXNrX2Ztc3ViYWRkX3BkKF9fbTEyOGQgX19BLCBfX21tYXNrOCBfX1UsIF9fbTEyOGQgX19CLCBfX20xMjhkIF9fQykKLXsKLSAgcmV0dXJuIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl92Zm1hZGRzdWJwZDEyOF9tYXNrICgoX192MmRmKSBfX0EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikgX19CLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oX192MmRmKSBfX0MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2t6X2Ztc3ViYWRkX3BkKF9fbW1hc2s4IF9fVSwgX19tMTI4ZCBfX0EsIF9fbTEyOGQgX19CLCBfX20xMjhkIF9fQykKLXsKLSAgcmV0dXJuIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl92Zm1hZGRzdWJwZDEyOF9tYXNreiAoKF9fdjJkZikgX19BLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKSBfX0IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oX192MmRmKSBfX0MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXNrX2ZtYWRkc3ViX3BkKF9fbTI1NmQgX19BLCBfX21tYXNrOCBfX1UsIF9fbTI1NmQgX19CLCBfX20yNTZkIF9fQykKLXsKLSAgcmV0dXJuIChfX20yNTZkKSBfX2J1aWx0aW5faWEzMl92Zm1hZGRzdWJwZDI1Nl9tYXNrICgoX192NGRmKSBfX0EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkZikgX19CLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGYpIF9fQywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfbWFzazNfZm1hZGRzdWJfcGQoX19tMjU2ZCBfX0EsIF9fbTI1NmQgX19CLCBfX20yNTZkIF9fQywgX19tbWFzazggX19VKQotewotICByZXR1cm4gKF9fbTI1NmQpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHN1YnBkMjU2X21hc2szICgoX192NGRmKSBfX0EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGYpIF9fQiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkZikgX19DLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfbWFza3pfZm1hZGRzdWJfcGQoX19tbWFzazggX19VLCBfX20yNTZkIF9fQSwgX19tMjU2ZCBfX0IsIF9fbTI1NmQgX19DKQotewotICByZXR1cm4gKF9fbTI1NmQpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHN1YnBkMjU2X21hc2t6ICgoX192NGRmKSBfX0EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGYpIF9fQiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkZikgX19DLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfbWFza19mbXN1YmFkZF9wZChfX20yNTZkIF9fQSwgX19tbWFzazggX19VLCBfX20yNTZkIF9fQiwgX19tMjU2ZCBfX0MpCi17Ci0gIHJldHVybiAoX19tMjU2ZCkgX19idWlsdGluX2lhMzJfdmZtYWRkc3VicGQyNTZfbWFzayAoKF9fdjRkZikgX19BLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGYpIF9fQiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKF9fdjRkZikgX19DLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXNrel9mbXN1YmFkZF9wZChfX21tYXNrOCBfX1UsIF9fbTI1NmQgX19BLCBfX20yNTZkIF9fQiwgX19tMjU2ZCBfX0MpCi17Ci0gIHJldHVybiAoX19tMjU2ZCkgX19idWlsdGluX2lhMzJfdmZtYWRkc3VicGQyNTZfbWFza3ogKChfX3Y0ZGYpIF9fQSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkZikgX19CLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKF9fdjRkZikgX19DLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tYXNrX2ZtYWRkc3ViX3BzKF9fbTEyOCBfX0EsIF9fbW1hc2s4IF9fVSwgX19tMTI4IF9fQiwgX19tMTI4IF9fQykKLXsKLSAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHN1YnBzMTI4X21hc2sgKChfX3Y0c2YpIF9fQSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpIF9fQiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpIF9fQywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2szX2ZtYWRkc3ViX3BzKF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IsIF9fbTEyOCBfX0MsIF9fbW1hc2s4IF9fVSkKLXsKLSAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHN1YnBzMTI4X21hc2szICgoX192NHNmKSBfX0EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikgX19CLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpIF9fQywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tYXNrel9mbWFkZHN1Yl9wcyhfX21tYXNrOCBfX1UsIF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IsIF9fbTEyOCBfX0MpCi17Ci0gIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl92Zm1hZGRzdWJwczEyOF9tYXNreiAoKF9fdjRzZikgX19BLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpIF9fQiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKSBfX0MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWFza19mbXN1YmFkZF9wcyhfX20xMjggX19BLCBfX21tYXNrOCBfX1UsIF9fbTEyOCBfX0IsIF9fbTEyOCBfX0MpCi17Ci0gIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl92Zm1hZGRzdWJwczEyOF9tYXNrICgoX192NHNmKSBfX0EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKSBfX0IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKF9fdjRzZikgX19DLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWFza3pfZm1zdWJhZGRfcHMoX19tbWFzazggX19VLCBfX20xMjggX19BLCBfX20xMjggX19CLCBfX20xMjggX19DKQotewotICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfdmZtYWRkc3VicHMxMjhfbWFza3ogKChfX3Y0c2YpIF9fQSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKSBfX0IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLShfX3Y0c2YpIF9fQywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXNrX2ZtYWRkc3ViX3BzKF9fbTI1NiBfX0EsIF9fbW1hc2s4IF9fVSwgX19tMjU2IF9fQiwKLSAgICAgICAgICAgICAgICAgICAgICAgICBfX20yNTYgX19DKQotewotICByZXR1cm4gKF9fbTI1NikgX19idWlsdGluX2lhMzJfdmZtYWRkc3VicHMyNTZfbWFzayAoKF9fdjhzZikgX19BLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzZikgX19CLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzZikgX19DLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfbWFzazNfZm1hZGRzdWJfcHMoX19tMjU2IF9fQSwgX19tMjU2IF9fQiwgX19tMjU2IF9fQywgX19tbWFzazggX19VKQotewotICByZXR1cm4gKF9fbTI1NikgX19idWlsdGluX2lhMzJfdmZtYWRkc3VicHMyNTZfbWFzazMgKChfX3Y4c2YpIF9fQSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNmKSBfX0IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzZikgX19DLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X21hc2t6X2ZtYWRkc3ViX3BzKF9fbW1hc2s4IF9fVSwgX19tMjU2IF9fQSwgX19tMjU2IF9fQiwgX19tMjU2IF9fQykKLXsKLSAgcmV0dXJuIChfX20yNTYpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHN1YnBzMjU2X21hc2t6ICgoX192OHNmKSBfX0EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzZikgX19CLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2YpIF9fQywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXNrX2Ztc3ViYWRkX3BzKF9fbTI1NiBfX0EsIF9fbW1hc2s4IF9fVSwgX19tMjU2IF9fQiwgX19tMjU2IF9fQykKLXsKLSAgcmV0dXJuIChfX20yNTYpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHN1YnBzMjU2X21hc2sgKChfX3Y4c2YpIF9fQSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2YpIF9fQiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oX192OHNmKSBfX0MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXNrel9mbXN1YmFkZF9wcyhfX21tYXNrOCBfX1UsIF9fbTI1NiBfX0EsIF9fbTI1NiBfX0IsIF9fbTI1NiBfX0MpCi17Ci0gIHJldHVybiAoX19tMjU2KSBfX2J1aWx0aW5faWEzMl92Zm1hZGRzdWJwczI1Nl9tYXNreiAoKF9fdjhzZikgX19BLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2YpIF9fQiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKF9fdjhzZikgX19DLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tYXNrM19mbXN1Yl9wZChfX20xMjhkIF9fQSwgX19tMTI4ZCBfX0IsIF9fbTEyOGQgX19DLCBfX21tYXNrOCBfX1UpCi17Ci0gIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfdmZtc3VicGQxMjhfbWFzazMgKChfX3YyZGYpIF9fQSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikgX19CLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKSBfX0MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXNrM19mbXN1Yl9wZChfX20yNTZkIF9fQSwgX19tMjU2ZCBfX0IsIF9fbTI1NmQgX19DLCBfX21tYXNrOCBfX1UpCi17Ci0gIHJldHVybiAoX19tMjU2ZCkgX19idWlsdGluX2lhMzJfdmZtc3VicGQyNTZfbWFzazMgKChfX3Y0ZGYpIF9fQSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkZikgX19CLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRmKSBfX0MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2szX2Ztc3ViX3BzKF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IsIF9fbTEyOCBfX0MsIF9fbW1hc2s4IF9fVSkKLXsKLSAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX3ZmbXN1YnBzMTI4X21hc2szICgoX192NHNmKSBfX0EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikgX19CLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpIF9fQywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXNrM19mbXN1Yl9wcyhfX20yNTYgX19BLCBfX20yNTYgX19CLCBfX20yNTYgX19DLCBfX21tYXNrOCBfX1UpCi17Ci0gIHJldHVybiAoX19tMjU2KSBfX2J1aWx0aW5faWEzMl92Zm1zdWJwczI1Nl9tYXNrMyAoKF9fdjhzZikgX19BLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2YpIF9fQiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNmKSBfX0MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2szX2Ztc3ViYWRkX3BkKF9fbTEyOGQgX19BLCBfX20xMjhkIF9fQiwgX19tMTI4ZCBfX0MsIF9fbW1hc2s4IF9fVSkKLXsKLSAgcmV0dXJuIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl92Zm1zdWJhZGRwZDEyOF9tYXNrMyAoKF9fdjJkZikgX19BLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKSBfX0IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpIF9fQywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X21hc2szX2Ztc3ViYWRkX3BkKF9fbTI1NmQgX19BLCBfX20yNTZkIF9fQiwgX19tMjU2ZCBfX0MsIF9fbW1hc2s4IF9fVSkKLXsKLSAgcmV0dXJuIChfX20yNTZkKSBfX2J1aWx0aW5faWEzMl92Zm1zdWJhZGRwZDI1Nl9tYXNrMyAoKF9fdjRkZikgX19BLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRmKSBfX0IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGYpIF9fQywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWFzazNfZm1zdWJhZGRfcHMoX19tMTI4IF9fQSwgX19tMTI4IF9fQiwgX19tMTI4IF9fQywgX19tbWFzazggX19VKQotewotICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfdmZtc3ViYWRkcHMxMjhfbWFzazMgKChfX3Y0c2YpIF9fQSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKSBfX0IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikgX19DLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X21hc2szX2Ztc3ViYWRkX3BzKF9fbTI1NiBfX0EsIF9fbTI1NiBfX0IsIF9fbTI1NiBfX0MsIF9fbW1hc2s4IF9fVSkKLXsKLSAgcmV0dXJuIChfX20yNTYpIF9fYnVpbHRpbl9pYTMyX3ZmbXN1YmFkZHBzMjU2X21hc2szICgoX192OHNmKSBfX0EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzZikgX19CLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2YpIF9fQywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWFza19mbm1hZGRfcGQoX19tMTI4ZCBfX0EsIF9fbW1hc2s4IF9fVSwgX19tMTI4ZCBfX0IsIF9fbTEyOGQgX19DKQotewotICByZXR1cm4gKF9fbTEyOGQpIF9fYnVpbHRpbl9pYTMyX3Zmbm1hZGRwZDEyOF9tYXNrICgoX192MmRmKSBfX0EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpIF9fQiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikgX19DLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfbWFza19mbm1hZGRfcGQoX19tMjU2ZCBfX0EsIF9fbW1hc2s4IF9fVSwgX19tMjU2ZCBfX0IsIF9fbTI1NmQgX19DKQotewotICByZXR1cm4gKF9fbTI1NmQpIF9fYnVpbHRpbl9pYTMyX3Zmbm1hZGRwZDI1Nl9tYXNrICgoX192NGRmKSBfX0EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGYpIF9fQiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkZikgX19DLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tYXNrX2ZubWFkZF9wcyhfX20xMjggX19BLCBfX21tYXNrOCBfX1UsIF9fbTEyOCBfX0IsIF9fbTEyOCBfX0MpCi17Ci0gIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl92Zm5tYWRkcHMxMjhfbWFzayAoKF9fdjRzZikgX19BLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpIF9fQiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKSBfX0MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfbWFza19mbm1hZGRfcHMoX19tMjU2IF9fQSwgX19tbWFzazggX19VLCBfX20yNTYgX19CLCBfX20yNTYgX19DKQotewotICByZXR1cm4gKF9fbTI1NikgX19idWlsdGluX2lhMzJfdmZubWFkZHBzMjU2X21hc2sgKChfX3Y4c2YpIF9fQSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNmKSBfX0IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzZikgX19DLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tYXNrX2ZubXN1Yl9wZChfX20xMjhkIF9fQSwgX19tbWFzazggX19VLCBfX20xMjhkIF9fQiwgX19tMTI4ZCBfX0MpCi17Ci0gIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfdmZubXN1YnBkMTI4X21hc2sgKChfX3YyZGYpIF9fQSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikgX19CLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKSBfX0MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tYXNrM19mbm1zdWJfcGQoX19tMTI4ZCBfX0EsIF9fbTEyOGQgX19CLCBfX20xMjhkIF9fQywgX19tbWFzazggX19VKQotewotICByZXR1cm4gKF9fbTEyOGQpIF9fYnVpbHRpbl9pYTMyX3Zmbm1zdWJwZDEyOF9tYXNrMyAoKF9fdjJkZikgX19BLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikgX19CLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikgX19DLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X21hc2tfZm5tc3ViX3BkKF9fbTI1NmQgX19BLCBfX21tYXNrOCBfX1UsIF9fbTI1NmQgX19CLCBfX20yNTZkIF9fQykKLXsKLSAgcmV0dXJuIChfX20yNTZkKSBfX2J1aWx0aW5faWEzMl92Zm5tc3VicGQyNTZfbWFzayAoKF9fdjRkZikgX19BLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRmKSBfX0IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGYpIF9fQywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X21hc2szX2ZubXN1Yl9wZChfX20yNTZkIF9fQSwgX19tMjU2ZCBfX0IsIF9fbTI1NmQgX19DLCBfX21tYXNrOCBfX1UpCi17Ci0gIHJldHVybiAoX19tMjU2ZCkgX19idWlsdGluX2lhMzJfdmZubXN1YnBkMjU2X21hc2szICgoX192NGRmKSBfX0EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRmKSBfX0IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRmKSBfX0MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tYXNrX2ZubXN1Yl9wcyhfX20xMjggX19BLCBfX21tYXNrOCBfX1UsIF9fbTEyOCBfX0IsIF9fbTEyOCBfX0MpCi17Ci0gIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl92Zm5tc3VicHMxMjhfbWFzayAoKF9fdjRzZikgX19BLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpIF9fQiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKSBfX0MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWFzazNfZm5tc3ViX3BzKF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IsIF9fbTEyOCBfX0MsIF9fbW1hc2s4IF9fVSkKLXsKLSAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX3Zmbm1zdWJwczEyOF9tYXNrMyAoKF9fdjRzZikgX19BLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKSBfX0IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpIF9fQywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfbWFza19mbm1zdWJfcHMoX19tMjU2IF9fQSwgX19tbWFzazggX19VLCBfX20yNTYgX19CLCBfX20yNTYgX19DKQotewotICByZXR1cm4gKF9fbTI1NikgX19idWlsdGluX2lhMzJfdmZubXN1YnBzMjU2X21hc2sgKChfX3Y4c2YpIF9fQSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNmKSBfX0IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzZikgX19DLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X21hc2szX2ZubXN1Yl9wcyhfX20yNTYgX19BLCBfX20yNTYgX19CLCBfX20yNTYgX19DLCBfX21tYXNrOCBfX1UpCi17Ci0gIHJldHVybiAoX19tMjU2KSBfX2J1aWx0aW5faWEzMl92Zm5tc3VicHMyNTZfbWFzazMgKChfX3Y4c2YpIF9fQSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzZikgX19CLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNmKSBfX0MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tYXNrX2FkZF9wZCAoX19tMTI4ZCBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4ZCBfX0EsIF9fbTEyOGQgX19CKSB7Ci0gIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfYWRkcGQxMjhfbWFzayAoKF9fdjJkZikgX19BLAotICAgICAgICAgICAgIChfX3YyZGYpIF9fQiwKLSAgICAgICAgICAgICAoX192MmRmKSBfX1csCi0gICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2t6X2FkZF9wZCAoX19tbWFzazggX19VLCBfX20xMjhkIF9fQSwgX19tMTI4ZCBfX0IpIHsKLSAgcmV0dXJuIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl9hZGRwZDEyOF9tYXNrICgoX192MmRmKSBfX0EsCi0gICAgICAgICAgICAgKF9fdjJkZikgX19CLAotICAgICAgICAgICAgIChfX3YyZGYpCi0gICAgICAgICAgICAgX21tX3NldHplcm9fcGQgKCksCi0gICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X21hc2tfYWRkX3BkIChfX20yNTZkIF9fVywgX19tbWFzazggX19VLCBfX20yNTZkIF9fQSwgX19tMjU2ZCBfX0IpIHsKLSAgcmV0dXJuIChfX20yNTZkKSBfX2J1aWx0aW5faWEzMl9hZGRwZDI1Nl9tYXNrICgoX192NGRmKSBfX0EsCi0gICAgICAgICAgICAgKF9fdjRkZikgX19CLAotICAgICAgICAgICAgIChfX3Y0ZGYpIF9fVywKLSAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfbWFza3pfYWRkX3BkIChfX21tYXNrOCBfX1UsIF9fbTI1NmQgX19BLCBfX20yNTZkIF9fQikgewotICByZXR1cm4gKF9fbTI1NmQpIF9fYnVpbHRpbl9pYTMyX2FkZHBkMjU2X21hc2sgKChfX3Y0ZGYpIF9fQSwKLSAgICAgICAgICAgICAoX192NGRmKSBfX0IsCi0gICAgICAgICAgICAgKF9fdjRkZikKLSAgICAgICAgICAgICBfbW0yNTZfc2V0emVyb19wZCAoKSwKLSAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tYXNrX2FkZF9wcyAoX19tMTI4IF9fVywgX19tbWFzazE2IF9fVSwgX19tMTI4IF9fQSwgX19tMTI4IF9fQikgewotICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfYWRkcHMxMjhfbWFzayAoKF9fdjRzZikgX19BLAotICAgICAgICAgICAgKF9fdjRzZikgX19CLAotICAgICAgICAgICAgKF9fdjRzZikgX19XLAotICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWFza3pfYWRkX3BzIChfX21tYXNrMTYgX19VLCBfX20xMjggX19BLCBfX20xMjggX19CKSB7Ci0gIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl9hZGRwczEyOF9tYXNrICgoX192NHNmKSBfX0EsCi0gICAgICAgICAgICAoX192NHNmKSBfX0IsCi0gICAgICAgICAgICAoX192NHNmKQotICAgICAgICAgICAgX21tX3NldHplcm9fcHMgKCksCi0gICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXNrX2FkZF9wcyAoX19tMjU2IF9fVywgX19tbWFzazE2IF9fVSwgX19tMjU2IF9fQSwgX19tMjU2IF9fQikgewotICByZXR1cm4gKF9fbTI1NikgX19idWlsdGluX2lhMzJfYWRkcHMyNTZfbWFzayAoKF9fdjhzZikgX19BLAotICAgICAgICAgICAgKF9fdjhzZikgX19CLAotICAgICAgICAgICAgKF9fdjhzZikgX19XLAotICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfbWFza3pfYWRkX3BzIChfX21tYXNrMTYgX19VLCBfX20yNTYgX19BLCBfX20yNTYgX19CKSB7Ci0gIHJldHVybiAoX19tMjU2KSBfX2J1aWx0aW5faWEzMl9hZGRwczI1Nl9tYXNrICgoX192OHNmKSBfX0EsCi0gICAgICAgICAgICAoX192OHNmKSBfX0IsCi0gICAgICAgICAgICAoX192OHNmKQotICAgICAgICAgICAgX21tMjU2X3NldHplcm9fcHMgKCksCi0gICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWFza19ibGVuZF9lcGkzMiAoX19tbWFzazggX19VLCBfX20xMjhpIF9fQSwgX19tMTI4aSBfX1cpIHsKLSAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9ibGVuZG1kXzEyOF9tYXNrICgoX192NHNpKSBfX0EsCi0gICAgICAgICAgICAgICAgKF9fdjRzaSkgX19XLAotICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXNrX2JsZW5kX2VwaTMyIChfX21tYXNrOCBfX1UsIF9fbTI1NmkgX19BLCBfX20yNTZpIF9fVykgewotICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX2JsZW5kbWRfMjU2X21hc2sgKChfX3Y4c2kpIF9fQSwKLSAgICAgICAgICAgICAgICAoX192OHNpKSBfX1csCi0gICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2tfYmxlbmRfcGQgKF9fbW1hc2s4IF9fVSwgX19tMTI4ZCBfX0EsIF9fbTEyOGQgX19XKSB7Ci0gIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfYmxlbmRtcGRfMTI4X21hc2sgKChfX3YyZGYpIF9fQSwKLSAgICAgICAgICAgICAgICAgKF9fdjJkZikgX19XLAotICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfbWFza19ibGVuZF9wZCAoX19tbWFzazggX19VLCBfX20yNTZkIF9fQSwgX19tMjU2ZCBfX1cpIHsKLSAgcmV0dXJuIChfX20yNTZkKSBfX2J1aWx0aW5faWEzMl9ibGVuZG1wZF8yNTZfbWFzayAoKF9fdjRkZikgX19BLAotICAgICAgICAgICAgICAgICAoX192NGRmKSBfX1csCi0gICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2tfYmxlbmRfcHMgKF9fbW1hc2s4IF9fVSwgX19tMTI4IF9fQSwgX19tMTI4IF9fVykgewotICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfYmxlbmRtcHNfMTI4X21hc2sgKChfX3Y0c2YpIF9fQSwKLSAgICAgICAgICAgICAgICAoX192NHNmKSBfX1csCi0gICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfbWFza19ibGVuZF9wcyAoX19tbWFzazggX19VLCBfX20yNTYgX19BLCBfX20yNTYgX19XKSB7Ci0gIHJldHVybiAoX19tMjU2KSBfX2J1aWx0aW5faWEzMl9ibGVuZG1wc18yNTZfbWFzayAoKF9fdjhzZikgX19BLAotICAgICAgICAgICAgICAgIChfX3Y4c2YpIF9fVywKLSAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWFza19ibGVuZF9lcGk2NCAoX19tbWFzazggX19VLCBfX20xMjhpIF9fQSwgX19tMTI4aSBfX1cpIHsKLSAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9ibGVuZG1xXzEyOF9tYXNrICgoX192MmRpKSBfX0EsCi0gICAgICAgICAgICAgICAgKF9fdjJkaSkgX19XLAotICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXNrX2JsZW5kX2VwaTY0IChfX21tYXNrOCBfX1UsIF9fbTI1NmkgX19BLCBfX20yNTZpIF9fVykgewotICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX2JsZW5kbXFfMjU2X21hc2sgKChfX3Y0ZGkpIF9fQSwKLSAgICAgICAgICAgICAgICAoX192NGRpKSBfX1csCi0gICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2tfY29tcHJlc3NfcGQgKF9fbTEyOGQgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGQgX19BKSB7Ci0gIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfY29tcHJlc3NkZjEyOF9tYXNrICgoX192MmRmKSBfX0EsCi0gICAgICAgICAgICAgICAgICAoX192MmRmKSBfX1csCi0gICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWFza3pfY29tcHJlc3NfcGQgKF9fbW1hc2s4IF9fVSwgX19tMTI4ZCBfX0EpIHsKLSAgcmV0dXJuIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl9jb21wcmVzc2RmMTI4X21hc2sgKChfX3YyZGYpIF9fQSwKLSAgICAgICAgICAgICAgICAgIChfX3YyZGYpCi0gICAgICAgICAgICAgICAgICBfbW1fc2V0emVyb19wZCAoKSwKLSAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXNrX2NvbXByZXNzX3BkIChfX20yNTZkIF9fVywgX19tbWFzazggX19VLCBfX20yNTZkIF9fQSkgewotICByZXR1cm4gKF9fbTI1NmQpIF9fYnVpbHRpbl9pYTMyX2NvbXByZXNzZGYyNTZfbWFzayAoKF9fdjRkZikgX19BLAotICAgICAgICAgICAgICAgICAgKF9fdjRkZikgX19XLAotICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X21hc2t6X2NvbXByZXNzX3BkIChfX21tYXNrOCBfX1UsIF9fbTI1NmQgX19BKSB7Ci0gIHJldHVybiAoX19tMjU2ZCkgX19idWlsdGluX2lhMzJfY29tcHJlc3NkZjI1Nl9tYXNrICgoX192NGRmKSBfX0EsCi0gICAgICAgICAgICAgICAgICAoX192NGRmKQotICAgICAgICAgICAgICAgICAgX21tMjU2X3NldHplcm9fcGQgKCksCi0gICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWFza19jb21wcmVzc19lcGk2NCAoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EpIHsKLSAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9jb21wcmVzc2RpMTI4X21hc2sgKChfX3YyZGkpIF9fQSwKLSAgICAgICAgICAgICAgICAgIChfX3YyZGkpIF9fVywKLSAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tYXNrel9jb21wcmVzc19lcGk2NCAoX19tbWFzazggX19VLCBfX20xMjhpIF9fQSkgewotICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX2NvbXByZXNzZGkxMjhfbWFzayAoKF9fdjJkaSkgX19BLAotICAgICAgICAgICAgICAgICAgKF9fdjJkaSkKLSAgICAgICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAotICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X21hc2tfY29tcHJlc3NfZXBpNjQgKF9fbTI1NmkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTI1NmkgX19BKSB7Ci0gIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfY29tcHJlc3NkaTI1Nl9tYXNrICgoX192NGRpKSBfX0EsCi0gICAgICAgICAgICAgICAgICAoX192NGRpKSBfX1csCi0gICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfbWFza3pfY29tcHJlc3NfZXBpNjQgKF9fbW1hc2s4IF9fVSwgX19tMjU2aSBfX0EpIHsKLSAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9jb21wcmVzc2RpMjU2X21hc2sgKChfX3Y0ZGkpIF9fQSwKLSAgICAgICAgICAgICAgICAgIChfX3Y0ZGkpCi0gICAgICAgICAgICAgICAgICBfbW0yNTZfc2V0emVyb19zaTI1NiAoKSwKLSAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2tfY29tcHJlc3NfcHMgKF9fbTEyOCBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4IF9fQSkgewotICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfY29tcHJlc3NzZjEyOF9tYXNrICgoX192NHNmKSBfX0EsCi0gICAgICAgICAgICAgICAgIChfX3Y0c2YpIF9fVywKLSAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWFza3pfY29tcHJlc3NfcHMgKF9fbW1hc2s4IF9fVSwgX19tMTI4IF9fQSkgewotICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfY29tcHJlc3NzZjEyOF9tYXNrICgoX192NHNmKSBfX0EsCi0gICAgICAgICAgICAgICAgIChfX3Y0c2YpCi0gICAgICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3BzICgpLAotICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXNrX2NvbXByZXNzX3BzIChfX20yNTYgX19XLCBfX21tYXNrOCBfX1UsIF9fbTI1NiBfX0EpIHsKLSAgcmV0dXJuIChfX20yNTYpIF9fYnVpbHRpbl9pYTMyX2NvbXByZXNzc2YyNTZfbWFzayAoKF9fdjhzZikgX19BLAotICAgICAgICAgICAgICAgICAoX192OHNmKSBfX1csCi0gICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X21hc2t6X2NvbXByZXNzX3BzIChfX21tYXNrOCBfX1UsIF9fbTI1NiBfX0EpIHsKLSAgcmV0dXJuIChfX20yNTYpIF9fYnVpbHRpbl9pYTMyX2NvbXByZXNzc2YyNTZfbWFzayAoKF9fdjhzZikgX19BLAotICAgICAgICAgICAgICAgICAoX192OHNmKQotICAgICAgICAgICAgICAgICBfbW0yNTZfc2V0emVyb19wcyAoKSwKLSAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2tfY29tcHJlc3NfZXBpMzIgKF9fbTEyOGkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BKSB7Ci0gIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfY29tcHJlc3NzaTEyOF9tYXNrICgoX192NHNpKSBfX0EsCi0gICAgICAgICAgICAgICAgICAoX192NHNpKSBfX1csCi0gICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWFza3pfY29tcHJlc3NfZXBpMzIgKF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EpIHsKLSAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9jb21wcmVzc3NpMTI4X21hc2sgKChfX3Y0c2kpIF9fQSwKLSAgICAgICAgICAgICAgICAgIChfX3Y0c2kpCi0gICAgICAgICAgICAgICAgICBfbW1fc2V0emVyb19zaTEyOCAoKSwKLSAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXNrX2NvbXByZXNzX2VwaTMyIChfX20yNTZpIF9fVywgX19tbWFzazggX19VLCBfX20yNTZpIF9fQSkgewotICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX2NvbXByZXNzc2kyNTZfbWFzayAoKF9fdjhzaSkgX19BLAotICAgICAgICAgICAgICAgICAgKF9fdjhzaSkgX19XLAotICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X21hc2t6X2NvbXByZXNzX2VwaTMyIChfX21tYXNrOCBfX1UsIF9fbTI1NmkgX19BKSB7Ci0gIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfY29tcHJlc3NzaTI1Nl9tYXNrICgoX192OHNpKSBfX0EsCi0gICAgICAgICAgICAgICAgICAoX192OHNpKQotICAgICAgICAgICAgICAgICAgX21tMjU2X3NldHplcm9fc2kyNTYgKCksCi0gICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWFza19jb21wcmVzc3N0b3JldV9wZCAodm9pZCAqX19QLCBfX21tYXNrOCBfX1UsIF9fbTEyOGQgX19BKSB7Ci0gIF9fYnVpbHRpbl9pYTMyX2NvbXByZXNzc3RvcmVkZjEyOF9tYXNrICgoX192MmRmICopIF9fUCwKLSAgICAgICAgICAgIChfX3YyZGYpIF9fQSwKLSAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXNrX2NvbXByZXNzc3RvcmV1X3BkICh2b2lkICpfX1AsIF9fbW1hc2s4IF9fVSwgX19tMjU2ZCBfX0EpIHsKLSAgX19idWlsdGluX2lhMzJfY29tcHJlc3NzdG9yZWRmMjU2X21hc2sgKChfX3Y0ZGYgKikgX19QLAotICAgICAgICAgICAgKF9fdjRkZikgX19BLAotICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2tfY29tcHJlc3NzdG9yZXVfZXBpNjQgKHZvaWQgKl9fUCwgX19tbWFzazggX19VLCBfX20xMjhpIF9fQSkgewotICBfX2J1aWx0aW5faWEzMl9jb21wcmVzc3N0b3JlZGkxMjhfbWFzayAoKF9fdjJkaSAqKSBfX1AsCi0gICAgICAgICAgICAoX192MmRpKSBfX0EsCi0gICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfbWFza19jb21wcmVzc3N0b3JldV9lcGk2NCAodm9pZCAqX19QLCBfX21tYXNrOCBfX1UsIF9fbTI1NmkgX19BKSB7Ci0gIF9fYnVpbHRpbl9pYTMyX2NvbXByZXNzc3RvcmVkaTI1Nl9tYXNrICgoX192NGRpICopIF9fUCwKLSAgICAgICAgICAgIChfX3Y0ZGkpIF9fQSwKLSAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tYXNrX2NvbXByZXNzc3RvcmV1X3BzICh2b2lkICpfX1AsIF9fbW1hc2s4IF9fVSwgX19tMTI4IF9fQSkgewotICBfX2J1aWx0aW5faWEzMl9jb21wcmVzc3N0b3Jlc2YxMjhfbWFzayAoKF9fdjRzZiAqKSBfX1AsCi0gICAgICAgICAgICAoX192NHNmKSBfX0EsCi0gICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfbWFza19jb21wcmVzc3N0b3JldV9wcyAodm9pZCAqX19QLCBfX21tYXNrOCBfX1UsIF9fbTI1NiBfX0EpIHsKLSAgX19idWlsdGluX2lhMzJfY29tcHJlc3NzdG9yZXNmMjU2X21hc2sgKChfX3Y4c2YgKikgX19QLAotICAgICAgICAgICAgKF9fdjhzZikgX19BLAotICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2tfY29tcHJlc3NzdG9yZXVfZXBpMzIgKHZvaWQgKl9fUCwgX19tbWFzazggX19VLCBfX20xMjhpIF9fQSkgewotICBfX2J1aWx0aW5faWEzMl9jb21wcmVzc3N0b3Jlc2kxMjhfbWFzayAoKF9fdjRzaSAqKSBfX1AsCi0gICAgICAgICAgICAoX192NHNpKSBfX0EsCi0gICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfbWFza19jb21wcmVzc3N0b3JldV9lcGkzMiAodm9pZCAqX19QLCBfX21tYXNrOCBfX1UsIF9fbTI1NmkgX19BKSB7Ci0gIF9fYnVpbHRpbl9pYTMyX2NvbXByZXNzc3RvcmVzaTI1Nl9tYXNrICgoX192OHNpICopIF9fUCwKLSAgICAgICAgICAgIChfX3Y4c2kpIF9fQSwKLSAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tYXNrX2N2dGVwaTMyX3BkIChfX20xMjhkIF9fVywgX19tbWFzazggX19VLCBfX20xMjhpIF9fQSkgewotICByZXR1cm4gKF9fbTEyOGQpIF9fYnVpbHRpbl9pYTMyX2N2dGRxMnBkMTI4X21hc2sgKChfX3Y0c2kpIF9fQSwKLSAgICAgICAgICAgICAgICAoX192MmRmKSBfX1csCi0gICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2t6X2N2dGVwaTMyX3BkIChfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BKSB7Ci0gIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfY3Z0ZHEycGQxMjhfbWFzayAoKF9fdjRzaSkgX19BLAotICAgICAgICAgICAgICAgIChfX3YyZGYpCi0gICAgICAgICAgICAgICAgX21tX3NldHplcm9fcGQgKCksCi0gICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X21hc2tfY3Z0ZXBpMzJfcGQgKF9fbTI1NmQgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BKSB7Ci0gIHJldHVybiAoX19tMjU2ZCkgX19idWlsdGluX2lhMzJfY3Z0ZHEycGQyNTZfbWFzayAoKF9fdjRzaSkgX19BLAotICAgICAgICAgICAgICAgIChfX3Y0ZGYpIF9fVywKLSAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfbWFza3pfY3Z0ZXBpMzJfcGQgKF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EpIHsKLSAgcmV0dXJuIChfX20yNTZkKSBfX2J1aWx0aW5faWEzMl9jdnRkcTJwZDI1Nl9tYXNrICgoX192NHNpKSBfX0EsCi0gICAgICAgICAgICAgICAgKF9fdjRkZikKLSAgICAgICAgICAgICAgICBfbW0yNTZfc2V0emVyb19wZCAoKSwKLSAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tYXNrX2N2dGVwaTMyX3BzIChfX20xMjggX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BKSB7Ci0gIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl9jdnRkcTJwczEyOF9tYXNrICgoX192NHNpKSBfX0EsCi0gICAgICAgICAgICAgICAoX192NHNmKSBfX1csCi0gICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tYXNrel9jdnRlcGkzMl9wcyAoX19tbWFzazE2IF9fVSwgX19tMTI4aSBfX0EpIHsKLSAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX2N2dGRxMnBzMTI4X21hc2sgKChfX3Y0c2kpIF9fQSwKLSAgICAgICAgICAgICAgIChfX3Y0c2YpCi0gICAgICAgICAgICAgICBfbW1fc2V0emVyb19wcyAoKSwKLSAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X21hc2tfY3Z0ZXBpMzJfcHMgKF9fbTI1NiBfX1csIF9fbW1hc2s4IF9fVSwgX19tMjU2aSBfX0EpIHsKLSAgcmV0dXJuIChfX20yNTYpIF9fYnVpbHRpbl9pYTMyX2N2dGRxMnBzMjU2X21hc2sgKChfX3Y4c2kpIF9fQSwKLSAgICAgICAgICAgICAgIChfX3Y4c2YpIF9fVywKLSAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X21hc2t6X2N2dGVwaTMyX3BzIChfX21tYXNrMTYgX19VLCBfX20yNTZpIF9fQSkgewotICByZXR1cm4gKF9fbTI1NikgX19idWlsdGluX2lhMzJfY3Z0ZHEycHMyNTZfbWFzayAoKF9fdjhzaSkgX19BLAotICAgICAgICAgICAgICAgKF9fdjhzZikKLSAgICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3BzICgpLAotICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2tfY3Z0cGRfZXBpMzIgKF9fbTEyOGkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGQgX19BKSB7Ci0gIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfY3Z0cGQyZHExMjhfbWFzayAoKF9fdjJkZikgX19BLAotICAgICAgICAgICAgICAgIChfX3Y0c2kpIF9fVywKLSAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWFza3pfY3Z0cGRfZXBpMzIgKF9fbW1hc2s4IF9fVSwgX19tMTI4ZCBfX0EpIHsKLSAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9jdnRwZDJkcTEyOF9tYXNrICgoX192MmRmKSBfX0EsCi0gICAgICAgICAgICAgICAgKF9fdjRzaSkKLSAgICAgICAgICAgICAgICBfbW1fc2V0emVyb19zaTEyOCAoKSwKLSAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfbWFza19jdnRwZF9lcGkzMiAoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMjU2ZCBfX0EpIHsKLSAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9jdnRwZDJkcTI1Nl9tYXNrICgoX192NGRmKSBfX0EsCi0gICAgICAgICAgICAgICAgKF9fdjRzaSkgX19XLAotICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXNrel9jdnRwZF9lcGkzMiAoX19tbWFzazggX19VLCBfX20yNTZkIF9fQSkgewotICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX2N2dHBkMmRxMjU2X21hc2sgKChfX3Y0ZGYpIF9fQSwKLSAgICAgICAgICAgICAgICAoX192NHNpKQotICAgICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAotICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2tfY3Z0cGRfcHMgKF9fbTEyOCBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4ZCBfX0EpIHsKLSAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX2N2dHBkMnBzX21hc2sgKChfX3YyZGYpIF9fQSwKLSAgICAgICAgICAgIChfX3Y0c2YpIF9fVywKLSAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2t6X2N2dHBkX3BzIChfX21tYXNrOCBfX1UsIF9fbTEyOGQgX19BKSB7Ci0gIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl9jdnRwZDJwc19tYXNrICgoX192MmRmKSBfX0EsCi0gICAgICAgICAgICAoX192NHNmKQotICAgICAgICAgICAgX21tX3NldHplcm9fcHMgKCksCi0gICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXNrX2N2dHBkX3BzIChfX20xMjggX19XLCBfX21tYXNrOCBfX1UsIF9fbTI1NmQgX19BKSB7Ci0gIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl9jdnRwZDJwczI1Nl9tYXNrICgoX192NGRmKSBfX0EsCi0gICAgICAgICAgICAgICAoX192NHNmKSBfX1csCi0gICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXNrel9jdnRwZF9wcyAoX19tbWFzazggX19VLCBfX20yNTZkIF9fQSkgewotICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfY3Z0cGQycHMyNTZfbWFzayAoKF9fdjRkZikgX19BLAotICAgICAgICAgICAgICAgKF9fdjRzZikKLSAgICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3BzICgpLAotICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2N2dHBkX2VwdTMyIChfX20xMjhkIF9fQSkgewotICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX2N2dHBkMnVkcTEyOF9tYXNrICgoX192MmRmKSBfX0EsCi0gICAgICAgICAgICAgICAgIChfX3Y0c2kpCi0gICAgICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAotICAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tYXNrX2N2dHBkX2VwdTMyIChfX20xMjhpIF9fVywgX19tbWFzazggX19VLCBfX20xMjhkIF9fQSkgewotICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX2N2dHBkMnVkcTEyOF9tYXNrICgoX192MmRmKSBfX0EsCi0gICAgICAgICAgICAgICAgIChfX3Y0c2kpIF9fVywKLSAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2t6X2N2dHBkX2VwdTMyIChfX21tYXNrOCBfX1UsIF9fbTEyOGQgX19BKSB7Ci0gIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfY3Z0cGQydWRxMTI4X21hc2sgKChfX3YyZGYpIF9fQSwKLSAgICAgICAgICAgICAgICAgKF9fdjRzaSkKLSAgICAgICAgICAgICAgICAgX21tX3NldHplcm9fc2kxMjggKCksCi0gICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9jdnRwZF9lcHUzMiAoX19tMjU2ZCBfX0EpIHsKLSAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9jdnRwZDJ1ZHEyNTZfbWFzayAoKF9fdjRkZikgX19BLAotICAgICAgICAgICAgICAgICAoX192NHNpKQotICAgICAgICAgICAgICAgICBfbW1fc2V0emVyb19zaTEyOCAoKSwKLSAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfbWFza19jdnRwZF9lcHUzMiAoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMjU2ZCBfX0EpIHsKLSAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9jdnRwZDJ1ZHEyNTZfbWFzayAoKF9fdjRkZikgX19BLAotICAgICAgICAgICAgICAgICAoX192NHNpKSBfX1csCi0gICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXNrel9jdnRwZF9lcHUzMiAoX19tbWFzazggX19VLCBfX20yNTZkIF9fQSkgewotICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX2N2dHBkMnVkcTI1Nl9tYXNrICgoX192NGRmKSBfX0EsCi0gICAgICAgICAgICAgICAgIChfX3Y0c2kpCi0gICAgICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAotICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWFza19jdnRwc19lcGkzMiAoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4IF9fQSkgewotICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX2N2dHBzMmRxMTI4X21hc2sgKChfX3Y0c2YpIF9fQSwKLSAgICAgICAgICAgICAgICAoX192NHNpKSBfX1csCi0gICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2t6X2N2dHBzX2VwaTMyIChfX21tYXNrOCBfX1UsIF9fbTEyOCBfX0EpIHsKLSAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9jdnRwczJkcTEyOF9tYXNrICgoX192NHNmKSBfX0EsCi0gICAgICAgICAgICAgICAgKF9fdjRzaSkKLSAgICAgICAgICAgICAgICBfbW1fc2V0emVyb19zaTEyOCAoKSwKLSAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfbWFza19jdnRwc19lcGkzMiAoX19tMjU2aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMjU2IF9fQSkgewotICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX2N2dHBzMmRxMjU2X21hc2sgKChfX3Y4c2YpIF9fQSwKLSAgICAgICAgICAgICAgICAoX192OHNpKSBfX1csCi0gICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X21hc2t6X2N2dHBzX2VwaTMyIChfX21tYXNrOCBfX1UsIF9fbTI1NiBfX0EpIHsKLSAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9jdnRwczJkcTI1Nl9tYXNrICgoX192OHNmKSBfX0EsCi0gICAgICAgICAgICAgICAgKF9fdjhzaSkKLSAgICAgICAgICAgICAgICBfbW0yNTZfc2V0emVyb19zaTI1NiAoKSwKLSAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWFza19jdnRwc19wZCAoX19tMTI4ZCBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4IF9fQSkgewotICByZXR1cm4gKF9fbTEyOGQpIF9fYnVpbHRpbl9pYTMyX2N2dHBzMnBkMTI4X21hc2sgKChfX3Y0c2YpIF9fQSwKLSAgICAgICAgICAgICAgICAoX192MmRmKSBfX1csCi0gICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2t6X2N2dHBzX3BkIChfX21tYXNrOCBfX1UsIF9fbTEyOCBfX0EpIHsKLSAgcmV0dXJuIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl9jdnRwczJwZDEyOF9tYXNrICgoX192NHNmKSBfX0EsCi0gICAgICAgICAgICAgICAgKF9fdjJkZikKLSAgICAgICAgICAgICAgICBfbW1fc2V0emVyb19wZCAoKSwKLSAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfbWFza19jdnRwc19wZCAoX19tMjU2ZCBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4IF9fQSkgewotICByZXR1cm4gKF9fbTI1NmQpIF9fYnVpbHRpbl9pYTMyX2N2dHBzMnBkMjU2X21hc2sgKChfX3Y0c2YpIF9fQSwKLSAgICAgICAgICAgICAgICAoX192NGRmKSBfX1csCi0gICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X21hc2t6X2N2dHBzX3BkIChfX21tYXNrOCBfX1UsIF9fbTEyOCBfX0EpIHsKLSAgcmV0dXJuIChfX20yNTZkKSBfX2J1aWx0aW5faWEzMl9jdnRwczJwZDI1Nl9tYXNrICgoX192NHNmKSBfX0EsCi0gICAgICAgICAgICAgICAgKF9fdjRkZikKLSAgICAgICAgICAgICAgICBfbW0yNTZfc2V0emVyb19wZCAoKSwKLSAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fY3Z0cHNfZXB1MzIgKF9fbTEyOCBfX0EpIHsKLSAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9jdnRwczJ1ZHExMjhfbWFzayAoKF9fdjRzZikgX19BLAotICAgICAgICAgICAgICAgICAoX192NHNpKQotICAgICAgICAgICAgICAgICBfbW1fc2V0emVyb19zaTEyOCAoKSwKLSAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWFza19jdnRwc19lcHUzMiAoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4IF9fQSkgewotICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX2N2dHBzMnVkcTEyOF9tYXNrICgoX192NHNmKSBfX0EsCi0gICAgICAgICAgICAgICAgIChfX3Y0c2kpIF9fVywKLSAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2t6X2N2dHBzX2VwdTMyIChfX21tYXNrOCBfX1UsIF9fbTEyOCBfX0EpIHsKLSAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9jdnRwczJ1ZHExMjhfbWFzayAoKF9fdjRzZikgX19BLAotICAgICAgICAgICAgICAgICAoX192NHNpKQotICAgICAgICAgICAgICAgICBfbW1fc2V0emVyb19zaTEyOCAoKSwKLSAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X2N2dHBzX2VwdTMyIChfX20yNTYgX19BKSB7Ci0gIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfY3Z0cHMydWRxMjU2X21hc2sgKChfX3Y4c2YpIF9fQSwKLSAgICAgICAgICAgICAgICAgKF9fdjhzaSkKLSAgICAgICAgICAgICAgICAgX21tMjU2X3NldHplcm9fc2kyNTYgKCksCi0gICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X21hc2tfY3Z0cHNfZXB1MzIgKF9fbTI1NmkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTI1NiBfX0EpIHsKLSAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9jdnRwczJ1ZHEyNTZfbWFzayAoKF9fdjhzZikgX19BLAotICAgICAgICAgICAgICAgICAoX192OHNpKSBfX1csCi0gICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXNrel9jdnRwc19lcHUzMiAoX19tbWFzazggX19VLCBfX20yNTYgX19BKSB7Ci0gIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfY3Z0cHMydWRxMjU2X21hc2sgKChfX3Y4c2YpIF9fQSwKLSAgICAgICAgICAgICAgICAgKF9fdjhzaSkKLSAgICAgICAgICAgICAgICAgX21tMjU2X3NldHplcm9fc2kyNTYgKCksCi0gICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tYXNrX2N2dHRwZF9lcGkzMiAoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4ZCBfX0EpIHsKLSAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9jdnR0cGQyZHExMjhfbWFzayAoKF9fdjJkZikgX19BLAotICAgICAgICAgICAgICAgICAoX192NHNpKSBfX1csCi0gICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tYXNrel9jdnR0cGRfZXBpMzIgKF9fbW1hc2s4IF9fVSwgX19tMTI4ZCBfX0EpIHsKLSAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9jdnR0cGQyZHExMjhfbWFzayAoKF9fdjJkZikgX19BLAotICAgICAgICAgICAgICAgICAoX192NHNpKQotICAgICAgICAgICAgICAgICBfbW1fc2V0emVyb19zaTEyOCAoKSwKLSAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X21hc2tfY3Z0dHBkX2VwaTMyIChfX20xMjhpIF9fVywgX19tbWFzazggX19VLCBfX20yNTZkIF9fQSkgewotICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX2N2dHRwZDJkcTI1Nl9tYXNrICgoX192NGRmKSBfX0EsCi0gICAgICAgICAgICAgICAgIChfX3Y0c2kpIF9fVywKLSAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X21hc2t6X2N2dHRwZF9lcGkzMiAoX19tbWFzazggX19VLCBfX20yNTZkIF9fQSkgewotICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX2N2dHRwZDJkcTI1Nl9tYXNrICgoX192NGRmKSBfX0EsCi0gICAgICAgICAgICAgICAgIChfX3Y0c2kpCi0gICAgICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAotICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fY3Z0dHBkX2VwdTMyIChfX20xMjhkIF9fQSkgewotICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX2N2dHRwZDJ1ZHExMjhfbWFzayAoKF9fdjJkZikgX19BLAotICAgICAgICAgICAgICAgICAgKF9fdjRzaSkKLSAgICAgICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAotICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWFza19jdnR0cGRfZXB1MzIgKF9fbTEyOGkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGQgX19BKSB7Ci0gIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfY3Z0dHBkMnVkcTEyOF9tYXNrICgoX192MmRmKSBfX0EsCi0gICAgICAgICAgICAgICAgICAoX192NHNpKSBfX1csCi0gICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWFza3pfY3Z0dHBkX2VwdTMyIChfX21tYXNrOCBfX1UsIF9fbTEyOGQgX19BKSB7Ci0gIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfY3Z0dHBkMnVkcTEyOF9tYXNrICgoX192MmRmKSBfX0EsCi0gICAgICAgICAgICAgICAgICAoX192NHNpKQotICAgICAgICAgICAgICAgICAgX21tX3NldHplcm9fc2kxMjggKCksCi0gICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfY3Z0dHBkX2VwdTMyIChfX20yNTZkIF9fQSkgewotICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX2N2dHRwZDJ1ZHEyNTZfbWFzayAoKF9fdjRkZikgX19BLAotICAgICAgICAgICAgICAgICAgKF9fdjRzaSkKLSAgICAgICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAotICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfbWFza19jdnR0cGRfZXB1MzIgKF9fbTEyOGkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTI1NmQgX19BKSB7Ci0gIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfY3Z0dHBkMnVkcTI1Nl9tYXNrICgoX192NGRmKSBfX0EsCi0gICAgICAgICAgICAgICAgICAoX192NHNpKSBfX1csCi0gICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfbWFza3pfY3Z0dHBkX2VwdTMyIChfX21tYXNrOCBfX1UsIF9fbTI1NmQgX19BKSB7Ci0gIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfY3Z0dHBkMnVkcTI1Nl9tYXNrICgoX192NGRmKSBfX0EsCi0gICAgICAgICAgICAgICAgICAoX192NHNpKQotICAgICAgICAgICAgICAgICAgX21tX3NldHplcm9fc2kxMjggKCksCi0gICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWFza19jdnR0cHNfZXBpMzIgKF9fbTEyOGkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOCBfX0EpIHsKLSAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9jdnR0cHMyZHExMjhfbWFzayAoKF9fdjRzZikgX19BLAotICAgICAgICAgICAgICAgICAoX192NHNpKSBfX1csCi0gICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tYXNrel9jdnR0cHNfZXBpMzIgKF9fbW1hc2s4IF9fVSwgX19tMTI4IF9fQSkgewotICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX2N2dHRwczJkcTEyOF9tYXNrICgoX192NHNmKSBfX0EsCi0gICAgICAgICAgICAgICAgIChfX3Y0c2kpCi0gICAgICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAotICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfbWFza19jdnR0cHNfZXBpMzIgKF9fbTI1NmkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTI1NiBfX0EpIHsKLSAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9jdnR0cHMyZHEyNTZfbWFzayAoKF9fdjhzZikgX19BLAotICAgICAgICAgICAgICAgICAoX192OHNpKSBfX1csCi0gICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXNrel9jdnR0cHNfZXBpMzIgKF9fbW1hc2s4IF9fVSwgX19tMjU2IF9fQSkgewotICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX2N2dHRwczJkcTI1Nl9tYXNrICgoX192OHNmKSBfX0EsCi0gICAgICAgICAgICAgICAgIChfX3Y4c2kpCi0gICAgICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2ICgpLAotICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fY3Z0dHBzX2VwdTMyIChfX20xMjggX19BKSB7Ci0gIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfY3Z0dHBzMnVkcTEyOF9tYXNrICgoX192NHNmKSBfX0EsCi0gICAgICAgICAgICAgICAgICAoX192NHNpKQotICAgICAgICAgICAgICAgICAgX21tX3NldHplcm9fc2kxMjggKCksCi0gICAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tYXNrX2N2dHRwc19lcHUzMiAoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4IF9fQSkgewotICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX2N2dHRwczJ1ZHExMjhfbWFzayAoKF9fdjRzZikgX19BLAotICAgICAgICAgICAgICAgICAgKF9fdjRzaSkgX19XLAotICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2t6X2N2dHRwc19lcHUzMiAoX19tbWFzazggX19VLCBfX20xMjggX19BKSB7Ci0gIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfY3Z0dHBzMnVkcTEyOF9tYXNrICgoX192NHNmKSBfX0EsCi0gICAgICAgICAgICAgICAgICAoX192NHNpKQotICAgICAgICAgICAgICAgICAgX21tX3NldHplcm9fc2kxMjggKCksCi0gICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfY3Z0dHBzX2VwdTMyIChfX20yNTYgX19BKSB7Ci0gIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfY3Z0dHBzMnVkcTI1Nl9tYXNrICgoX192OHNmKSBfX0EsCi0gICAgICAgICAgICAgICAgICAoX192OHNpKQotICAgICAgICAgICAgICAgICAgX21tMjU2X3NldHplcm9fc2kyNTYgKCksCi0gICAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXNrX2N2dHRwc19lcHUzMiAoX19tMjU2aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMjU2IF9fQSkgewotICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX2N2dHRwczJ1ZHEyNTZfbWFzayAoKF9fdjhzZikgX19BLAotICAgICAgICAgICAgICAgICAgKF9fdjhzaSkgX19XLAotICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X21hc2t6X2N2dHRwc19lcHUzMiAoX19tbWFzazggX19VLCBfX20yNTYgX19BKSB7Ci0gIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfY3Z0dHBzMnVkcTI1Nl9tYXNrICgoX192OHNmKSBfX0EsCi0gICAgICAgICAgICAgICAgICAoX192OHNpKQotICAgICAgICAgICAgICAgICAgX21tMjU2X3NldHplcm9fc2kyNTYgKCksCi0gICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fY3Z0ZXB1MzJfcGQgKF9fbTEyOGkgX19BKSB7Ci0gIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfY3Z0dWRxMnBkMTI4X21hc2sgKChfX3Y0c2kpIF9fQSwKLSAgICAgICAgICAgICAgICAgKF9fdjJkZikKLSAgICAgICAgICAgICAgICAgX21tX3NldHplcm9fcGQgKCksCi0gICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2tfY3Z0ZXB1MzJfcGQgKF9fbTEyOGQgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BKSB7Ci0gIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfY3Z0dWRxMnBkMTI4X21hc2sgKChfX3Y0c2kpIF9fQSwKLSAgICAgICAgICAgICAgICAgKF9fdjJkZikgX19XLAotICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWFza3pfY3Z0ZXB1MzJfcGQgKF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EpIHsKLSAgcmV0dXJuIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl9jdnR1ZHEycGQxMjhfbWFzayAoKF9fdjRzaSkgX19BLAotICAgICAgICAgICAgICAgICAoX192MmRmKQotICAgICAgICAgICAgICAgICBfbW1fc2V0emVyb19wZCAoKSwKLSAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X2N2dGVwdTMyX3BkIChfX20xMjhpIF9fQSkgewotICByZXR1cm4gKF9fbTI1NmQpIF9fYnVpbHRpbl9pYTMyX2N2dHVkcTJwZDI1Nl9tYXNrICgoX192NHNpKSBfX0EsCi0gICAgICAgICAgICAgICAgIChfX3Y0ZGYpCi0gICAgICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3BkICgpLAotICAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXNrX2N2dGVwdTMyX3BkIChfX20yNTZkIF9fVywgX19tbWFzazggX19VLCBfX20xMjhpIF9fQSkgewotICByZXR1cm4gKF9fbTI1NmQpIF9fYnVpbHRpbl9pYTMyX2N2dHVkcTJwZDI1Nl9tYXNrICgoX192NHNpKSBfX0EsCi0gICAgICAgICAgICAgICAgIChfX3Y0ZGYpIF9fVywKLSAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X21hc2t6X2N2dGVwdTMyX3BkIChfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BKSB7Ci0gIHJldHVybiAoX19tMjU2ZCkgX19idWlsdGluX2lhMzJfY3Z0dWRxMnBkMjU2X21hc2sgKChfX3Y0c2kpIF9fQSwKLSAgICAgICAgICAgICAgICAgKF9fdjRkZikKLSAgICAgICAgICAgICAgICAgX21tMjU2X3NldHplcm9fcGQgKCksCi0gICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2N2dGVwdTMyX3BzIChfX20xMjhpIF9fQSkgewotICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfY3Z0dWRxMnBzMTI4X21hc2sgKChfX3Y0c2kpIF9fQSwKLSAgICAgICAgICAgICAgICAoX192NHNmKQotICAgICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3BzICgpLAotICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWFza19jdnRlcHUzMl9wcyAoX19tMTI4IF9fVywgX19tbWFzazggX19VLCBfX20xMjhpIF9fQSkgewotICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfY3Z0dWRxMnBzMTI4X21hc2sgKChfX3Y0c2kpIF9fQSwKLSAgICAgICAgICAgICAgICAoX192NHNmKSBfX1csCi0gICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWFza3pfY3Z0ZXB1MzJfcHMgKF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EpIHsKLSAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX2N2dHVkcTJwczEyOF9tYXNrICgoX192NHNpKSBfX0EsCi0gICAgICAgICAgICAgICAgKF9fdjRzZikKLSAgICAgICAgICAgICAgICBfbW1fc2V0emVyb19wcyAoKSwKLSAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9jdnRlcHUzMl9wcyAoX19tMjU2aSBfX0EpIHsKLSAgcmV0dXJuIChfX20yNTYpIF9fYnVpbHRpbl9pYTMyX2N2dHVkcTJwczI1Nl9tYXNrICgoX192OHNpKSBfX0EsCi0gICAgICAgICAgICAgICAgKF9fdjhzZikKLSAgICAgICAgICAgICAgICBfbW0yNTZfc2V0emVyb19wcyAoKSwKLSAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X21hc2tfY3Z0ZXB1MzJfcHMgKF9fbTI1NiBfX1csIF9fbW1hc2s4IF9fVSwgX19tMjU2aSBfX0EpIHsKLSAgcmV0dXJuIChfX20yNTYpIF9fYnVpbHRpbl9pYTMyX2N2dHVkcTJwczI1Nl9tYXNrICgoX192OHNpKSBfX0EsCi0gICAgICAgICAgICAgICAgKF9fdjhzZikgX19XLAotICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X21hc2t6X2N2dGVwdTMyX3BzIChfX21tYXNrOCBfX1UsIF9fbTI1NmkgX19BKSB7Ci0gIHJldHVybiAoX19tMjU2KSBfX2J1aWx0aW5faWEzMl9jdnR1ZHEycHMyNTZfbWFzayAoKF9fdjhzaSkgX19BLAotICAgICAgICAgICAgICAgIChfX3Y4c2YpCi0gICAgICAgICAgICAgICAgX21tMjU2X3NldHplcm9fcHMgKCksCi0gICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2tfZGl2X3BkIChfX20xMjhkIF9fVywgX19tbWFzazggX19VLCBfX20xMjhkIF9fQSwgX19tMTI4ZCBfX0IpIHsKLSAgcmV0dXJuIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl9kaXZwZF9tYXNrICgoX192MmRmKSBfX0EsCi0gICAgICAgICAgICAgICAgKF9fdjJkZikgX19CLAotICAgICAgICAgICAgICAgIChfX3YyZGYpIF9fVywKLSAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWFza3pfZGl2X3BkIChfX21tYXNrOCBfX1UsIF9fbTEyOGQgX19BLCBfX20xMjhkIF9fQikgewotICByZXR1cm4gKF9fbTEyOGQpIF9fYnVpbHRpbl9pYTMyX2RpdnBkX21hc2sgKChfX3YyZGYpIF9fQSwKLSAgICAgICAgICAgICAgICAoX192MmRmKSBfX0IsCi0gICAgICAgICAgICAgICAgKF9fdjJkZikKLSAgICAgICAgICAgICAgICBfbW1fc2V0emVyb19wZCAoKSwKLSAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfbWFza19kaXZfcGQgKF9fbTI1NmQgX19XLCBfX21tYXNrOCBfX1UsIF9fbTI1NmQgX19BLAotICAgICAgICBfX20yNTZkIF9fQikgewotICByZXR1cm4gKF9fbTI1NmQpIF9fYnVpbHRpbl9pYTMyX2RpdnBkMjU2X21hc2sgKChfX3Y0ZGYpIF9fQSwKLSAgICAgICAgICAgICAoX192NGRmKSBfX0IsCi0gICAgICAgICAgICAgKF9fdjRkZikgX19XLAotICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXNrel9kaXZfcGQgKF9fbW1hc2s4IF9fVSwgX19tMjU2ZCBfX0EsIF9fbTI1NmQgX19CKSB7Ci0gIHJldHVybiAoX19tMjU2ZCkgX19idWlsdGluX2lhMzJfZGl2cGQyNTZfbWFzayAoKF9fdjRkZikgX19BLAotICAgICAgICAgICAgIChfX3Y0ZGYpIF9fQiwKLSAgICAgICAgICAgICAoX192NGRmKQotICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3BkICgpLAotICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2tfZGl2X3BzIChfX20xMjggX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IpIHsKLSAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX2RpdnBzX21hc2sgKChfX3Y0c2YpIF9fQSwKLSAgICAgICAgICAgICAgIChfX3Y0c2YpIF9fQiwKLSAgICAgICAgICAgICAgIChfX3Y0c2YpIF9fVywKLSAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2t6X2Rpdl9wcyAoX19tbWFzazggX19VLCBfX20xMjggX19BLCBfX20xMjggX19CKSB7Ci0gIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl9kaXZwc19tYXNrICgoX192NHNmKSBfX0EsCi0gICAgICAgICAgICAgICAoX192NHNmKSBfX0IsCi0gICAgICAgICAgICAgICAoX192NHNmKQotICAgICAgICAgICAgICAgX21tX3NldHplcm9fcHMgKCksCi0gICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXNrX2Rpdl9wcyAoX19tMjU2IF9fVywgX19tbWFzazggX19VLCBfX20yNTYgX19BLCBfX20yNTYgX19CKSB7Ci0gIHJldHVybiAoX19tMjU2KSBfX2J1aWx0aW5faWEzMl9kaXZwczI1Nl9tYXNrICgoX192OHNmKSBfX0EsCi0gICAgICAgICAgICAoX192OHNmKSBfX0IsCi0gICAgICAgICAgICAoX192OHNmKSBfX1csCi0gICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXNrel9kaXZfcHMgKF9fbW1hc2s4IF9fVSwgX19tMjU2IF9fQSwgX19tMjU2IF9fQikgewotICByZXR1cm4gKF9fbTI1NikgX19idWlsdGluX2lhMzJfZGl2cHMyNTZfbWFzayAoKF9fdjhzZikgX19BLAotICAgICAgICAgICAgKF9fdjhzZikgX19CLAotICAgICAgICAgICAgKF9fdjhzZikKLSAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3BzICgpLAotICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2tfZXhwYW5kX3BkIChfX20xMjhkIF9fVywgX19tbWFzazggX19VLCBfX20xMjhkIF9fQSkgewotICByZXR1cm4gKF9fbTEyOGQpIF9fYnVpbHRpbl9pYTMyX2V4cGFuZGRmMTI4X21hc2sgKChfX3YyZGYpIF9fQSwKLSAgICAgICAgICAgICAgICAoX192MmRmKSBfX1csCi0gICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2t6X2V4cGFuZF9wZCAoX19tbWFzazggX19VLCBfX20xMjhkIF9fQSkgewotICByZXR1cm4gKF9fbTEyOGQpIF9fYnVpbHRpbl9pYTMyX2V4cGFuZGRmMTI4X21hc2sgKChfX3YyZGYpIF9fQSwKLSAgICAgICAgICAgICAgICAgKF9fdjJkZikKLSAgICAgICAgICAgICAgICAgX21tX3NldHplcm9fcGQgKCksCi0gICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXNrX2V4cGFuZF9wZCAoX19tMjU2ZCBfX1csIF9fbW1hc2s4IF9fVSwgX19tMjU2ZCBfX0EpIHsKLSAgcmV0dXJuIChfX20yNTZkKSBfX2J1aWx0aW5faWEzMl9leHBhbmRkZjI1Nl9tYXNrICgoX192NGRmKSBfX0EsCi0gICAgICAgICAgICAgICAgKF9fdjRkZikgX19XLAotICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXNrel9leHBhbmRfcGQgKF9fbW1hc2s4IF9fVSwgX19tMjU2ZCBfX0EpIHsKLSAgcmV0dXJuIChfX20yNTZkKSBfX2J1aWx0aW5faWEzMl9leHBhbmRkZjI1Nl9tYXNrICgoX192NGRmKSBfX0EsCi0gICAgICAgICAgICAgICAgIChfX3Y0ZGYpCi0gICAgICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3BkICgpLAotICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWFza19leHBhbmRfZXBpNjQgKF9fbTEyOGkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BKSB7Ci0gIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfZXhwYW5kZGkxMjhfbWFzayAoKF9fdjJkaSkgX19BLAotICAgICAgICAgICAgICAgIChfX3YyZGkpIF9fVywKLSAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWFza3pfZXhwYW5kX2VwaTY0IChfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BKSB7Ci0gIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfZXhwYW5kZGkxMjhfbWFzayAoKF9fdjJkaSkgX19BLAotICAgICAgICAgICAgICAgICAoX192MmRpKQotICAgICAgICAgICAgICAgICBfbW1fc2V0emVyb19zaTEyOCAoKSwKLSAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X21hc2tfZXhwYW5kX2VwaTY0IChfX20yNTZpIF9fVywgX19tbWFzazggX19VLCBfX20yNTZpIF9fQSkgewotICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX2V4cGFuZGRpMjU2X21hc2sgKChfX3Y0ZGkpIF9fQSwKLSAgICAgICAgICAgICAgICAoX192NGRpKSBfX1csCi0gICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X21hc2t6X2V4cGFuZF9lcGk2NCAoX19tbWFzazggX19VLCBfX20yNTZpIF9fQSkgewotICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX2V4cGFuZGRpMjU2X21hc2sgKChfX3Y0ZGkpIF9fQSwKLSAgICAgICAgICAgICAgICAgKF9fdjRkaSkKLSAgICAgICAgICAgICAgICAgX21tMjU2X3NldHplcm9fc2kyNTYgKCksCi0gICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tYXNrX2V4cGFuZGxvYWR1X3BkIChfX20xMjhkIF9fVywgX19tbWFzazggX19VLCB2b2lkIGNvbnN0ICpfX1ApIHsKLSAgcmV0dXJuIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl9leHBhbmRsb2FkZGYxMjhfbWFzayAoKF9fdjJkZiAqKSBfX1AsCi0gICAgICAgICAgICAgIChfX3YyZGYpIF9fVywKLSAgICAgICAgICAgICAgKF9fbW1hc2s4KQotICAgICAgICAgICAgICBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2t6X2V4cGFuZGxvYWR1X3BkIChfX21tYXNrOCBfX1UsIHZvaWQgY29uc3QgKl9fUCkgewotICByZXR1cm4gKF9fbTEyOGQpIF9fYnVpbHRpbl9pYTMyX2V4cGFuZGxvYWRkZjEyOF9tYXNrICgoX192MmRmICopIF9fUCwKLSAgICAgICAgICAgICAgIChfX3YyZGYpCi0gICAgICAgICAgICAgICBfbW1fc2V0emVyb19wZCAoKSwKLSAgICAgICAgICAgICAgIChfX21tYXNrOCkKLSAgICAgICAgICAgICAgIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfbWFza19leHBhbmRsb2FkdV9wZCAoX19tMjU2ZCBfX1csIF9fbW1hc2s4IF9fVSwgdm9pZCBjb25zdCAqX19QKSB7Ci0gIHJldHVybiAoX19tMjU2ZCkgX19idWlsdGluX2lhMzJfZXhwYW5kbG9hZGRmMjU2X21hc2sgKChfX3Y0ZGYgKikgX19QLAotICAgICAgICAgICAgICAoX192NGRmKSBfX1csCi0gICAgICAgICAgICAgIChfX21tYXNrOCkKLSAgICAgICAgICAgICAgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXNrel9leHBhbmRsb2FkdV9wZCAoX19tbWFzazggX19VLCB2b2lkIGNvbnN0ICpfX1ApIHsKLSAgcmV0dXJuIChfX20yNTZkKSBfX2J1aWx0aW5faWEzMl9leHBhbmRsb2FkZGYyNTZfbWFzayAoKF9fdjRkZiAqKSBfX1AsCi0gICAgICAgICAgICAgICAoX192NGRmKQotICAgICAgICAgICAgICAgX21tMjU2X3NldHplcm9fcGQgKCksCi0gICAgICAgICAgICAgICAoX19tbWFzazgpCi0gICAgICAgICAgICAgICBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2tfZXhwYW5kbG9hZHVfZXBpNjQgKF9fbTEyOGkgX19XLCBfX21tYXNrOCBfX1UsIHZvaWQgY29uc3QgKl9fUCkgewotICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX2V4cGFuZGxvYWRkaTEyOF9tYXNrICgoX192MmRpICopIF9fUCwKLSAgICAgICAgICAgICAgKF9fdjJkaSkgX19XLAotICAgICAgICAgICAgICAoX19tbWFzazgpCi0gICAgICAgICAgICAgIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWFza3pfZXhwYW5kbG9hZHVfZXBpNjQgKF9fbW1hc2s4IF9fVSwgdm9pZCBjb25zdCAqX19QKSB7Ci0gIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfZXhwYW5kbG9hZGRpMTI4X21hc2sgKChfX3YyZGkgKikgX19QLAotICAgICAgICAgICAgICAgKF9fdjJkaSkKLSAgICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAotICAgICAgICAgICAgICAgKF9fbW1hc2s4KQotICAgICAgICAgICAgICAgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXNrX2V4cGFuZGxvYWR1X2VwaTY0IChfX20yNTZpIF9fVywgX19tbWFzazggX19VLAotICAgICAgICAgICAgIHZvaWQgY29uc3QgKl9fUCkgewotICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX2V4cGFuZGxvYWRkaTI1Nl9tYXNrICgoX192NGRpICopIF9fUCwKLSAgICAgICAgICAgICAgKF9fdjRkaSkgX19XLAotICAgICAgICAgICAgICAoX19tbWFzazgpCi0gICAgICAgICAgICAgIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfbWFza3pfZXhwYW5kbG9hZHVfZXBpNjQgKF9fbW1hc2s4IF9fVSwgdm9pZCBjb25zdCAqX19QKSB7Ci0gIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfZXhwYW5kbG9hZGRpMjU2X21hc2sgKChfX3Y0ZGkgKikgX19QLAotICAgICAgICAgICAgICAgKF9fdjRkaSkKLSAgICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2ICgpLAotICAgICAgICAgICAgICAgKF9fbW1hc2s4KQotICAgICAgICAgICAgICAgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2tfZXhwYW5kbG9hZHVfcHMgKF9fbTEyOCBfX1csIF9fbW1hc2s4IF9fVSwgdm9pZCBjb25zdCAqX19QKSB7Ci0gIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl9leHBhbmRsb2Fkc2YxMjhfbWFzayAoKF9fdjRzZiAqKSBfX1AsCi0gICAgICAgICAgICAgICAgICAgKF9fdjRzZikgX19XLAotICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2t6X2V4cGFuZGxvYWR1X3BzIChfX21tYXNrOCBfX1UsIHZvaWQgY29uc3QgKl9fUCkgewotICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfZXhwYW5kbG9hZHNmMTI4X21hc2sgKChfX3Y0c2YgKikgX19QLAotICAgICAgICAgICAgICAoX192NHNmKQotICAgICAgICAgICAgICBfbW1fc2V0emVyb19wcyAoKSwKLSAgICAgICAgICAgICAgKF9fbW1hc2s4KQotICAgICAgICAgICAgICBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfbWFza19leHBhbmRsb2FkdV9wcyAoX19tMjU2IF9fVywgX19tbWFzazggX19VLCB2b2lkIGNvbnN0ICpfX1ApIHsKLSAgcmV0dXJuIChfX20yNTYpIF9fYnVpbHRpbl9pYTMyX2V4cGFuZGxvYWRzZjI1Nl9tYXNrICgoX192OHNmICopIF9fUCwKLSAgICAgICAgICAgICAgICAgICAoX192OHNmKSBfX1csCi0gICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfbWFza3pfZXhwYW5kbG9hZHVfcHMgKF9fbW1hc2s4IF9fVSwgdm9pZCBjb25zdCAqX19QKSB7Ci0gIHJldHVybiAoX19tMjU2KSBfX2J1aWx0aW5faWEzMl9leHBhbmRsb2Fkc2YyNTZfbWFzayAoKF9fdjhzZiAqKSBfX1AsCi0gICAgICAgICAgICAgIChfX3Y4c2YpCi0gICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3BzICgpLAotICAgICAgICAgICAgICAoX19tbWFzazgpCi0gICAgICAgICAgICAgIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWFza19leHBhbmRsb2FkdV9lcGkzMiAoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fVSwgdm9pZCBjb25zdCAqX19QKSB7Ci0gIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfZXhwYW5kbG9hZHNpMTI4X21hc2sgKChfX3Y0c2kgKikgX19QLAotICAgICAgICAgICAgICAoX192NHNpKSBfX1csCi0gICAgICAgICAgICAgIChfX21tYXNrOCkKLSAgICAgICAgICAgICAgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tYXNrel9leHBhbmRsb2FkdV9lcGkzMiAoX19tbWFzazggX19VLCB2b2lkIGNvbnN0ICpfX1ApIHsKLSAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9leHBhbmRsb2Fkc2kxMjhfbWFzayAoKF9fdjRzaSAqKSBfX1AsCi0gICAgICAgICAgICAgICAoX192NHNpKQotICAgICAgICAgICAgICAgX21tX3NldHplcm9fc2kxMjggKCksCi0gICAgICAgICAgICAgICAoX19tbWFzazgpICAgICBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X21hc2tfZXhwYW5kbG9hZHVfZXBpMzIgKF9fbTI1NmkgX19XLCBfX21tYXNrOCBfX1UsCi0gICAgICAgICAgICAgdm9pZCBjb25zdCAqX19QKSB7Ci0gIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfZXhwYW5kbG9hZHNpMjU2X21hc2sgKChfX3Y4c2kgKikgX19QLAotICAgICAgICAgICAgICAoX192OHNpKSBfX1csCi0gICAgICAgICAgICAgIChfX21tYXNrOCkKLSAgICAgICAgICAgICAgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXNrel9leHBhbmRsb2FkdV9lcGkzMiAoX19tbWFzazggX19VLCB2b2lkIGNvbnN0ICpfX1ApIHsKLSAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9leHBhbmRsb2Fkc2kyNTZfbWFzayAoKF9fdjhzaSAqKSBfX1AsCi0gICAgICAgICAgICAgICAoX192OHNpKQotICAgICAgICAgICAgICAgX21tMjU2X3NldHplcm9fc2kyNTYgKCksCi0gICAgICAgICAgICAgICAoX19tbWFzazgpCi0gICAgICAgICAgICAgICBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWFza19leHBhbmRfcHMgKF9fbTEyOCBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4IF9fQSkgewotICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfZXhwYW5kc2YxMjhfbWFzayAoKF9fdjRzZikgX19BLAotICAgICAgICAgICAgICAgKF9fdjRzZikgX19XLAotICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWFza3pfZXhwYW5kX3BzIChfX21tYXNrOCBfX1UsIF9fbTEyOCBfX0EpIHsKLSAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX2V4cGFuZHNmMTI4X21hc2sgKChfX3Y0c2YpIF9fQSwKLSAgICAgICAgICAgICAgICAoX192NHNmKQotICAgICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3BzICgpLAotICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X21hc2tfZXhwYW5kX3BzIChfX20yNTYgX19XLCBfX21tYXNrOCBfX1UsIF9fbTI1NiBfX0EpIHsKLSAgcmV0dXJuIChfX20yNTYpIF9fYnVpbHRpbl9pYTMyX2V4cGFuZHNmMjU2X21hc2sgKChfX3Y4c2YpIF9fQSwKLSAgICAgICAgICAgICAgIChfX3Y4c2YpIF9fVywKLSAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X21hc2t6X2V4cGFuZF9wcyAoX19tbWFzazggX19VLCBfX20yNTYgX19BKSB7Ci0gIHJldHVybiAoX19tMjU2KSBfX2J1aWx0aW5faWEzMl9leHBhbmRzZjI1Nl9tYXNrICgoX192OHNmKSBfX0EsCi0gICAgICAgICAgICAgICAgKF9fdjhzZikKLSAgICAgICAgICAgICAgICBfbW0yNTZfc2V0emVyb19wcyAoKSwKLSAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWFza19leHBhbmRfZXBpMzIgKF9fbTEyOGkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BKSB7Ci0gIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfZXhwYW5kc2kxMjhfbWFzayAoKF9fdjRzaSkgX19BLAotICAgICAgICAgICAgICAgIChfX3Y0c2kpIF9fVywKLSAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWFza3pfZXhwYW5kX2VwaTMyIChfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BKSB7Ci0gIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfZXhwYW5kc2kxMjhfbWFzayAoKF9fdjRzaSkgX19BLAotICAgICAgICAgICAgICAgICAoX192NHNpKQotICAgICAgICAgICAgICAgICBfbW1fc2V0emVyb19zaTEyOCAoKSwKLSAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X21hc2tfZXhwYW5kX2VwaTMyIChfX20yNTZpIF9fVywgX19tbWFzazggX19VLCBfX20yNTZpIF9fQSkgewotICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX2V4cGFuZHNpMjU2X21hc2sgKChfX3Y4c2kpIF9fQSwKLSAgICAgICAgICAgICAgICAoX192OHNpKSBfX1csCi0gICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X21hc2t6X2V4cGFuZF9lcGkzMiAoX19tbWFzazggX19VLCBfX20yNTZpIF9fQSkgewotICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX2V4cGFuZHNpMjU2X21hc2sgKChfX3Y4c2kpIF9fQSwKLSAgICAgICAgICAgICAgICAgKF9fdjhzaSkKLSAgICAgICAgICAgICAgICAgX21tMjU2X3NldHplcm9fc2kyNTYgKCksCi0gICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9nZXRleHBfcGQgKF9fbTEyOGQgX19BKSB7Ci0gIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfZ2V0ZXhwcGQxMjhfbWFzayAoKF9fdjJkZikgX19BLAotICAgICAgICAgICAgICAgIChfX3YyZGYpCi0gICAgICAgICAgICAgICAgX21tX3NldHplcm9fcGQgKCksCi0gICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWFza19nZXRleHBfcGQgKF9fbTEyOGQgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGQgX19BKSB7Ci0gIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfZ2V0ZXhwcGQxMjhfbWFzayAoKF9fdjJkZikgX19BLAotICAgICAgICAgICAgICAgIChfX3YyZGYpIF9fVywKLSAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWFza3pfZ2V0ZXhwX3BkIChfX21tYXNrOCBfX1UsIF9fbTEyOGQgX19BKSB7Ci0gIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfZ2V0ZXhwcGQxMjhfbWFzayAoKF9fdjJkZikgX19BLAotICAgICAgICAgICAgICAgIChfX3YyZGYpCi0gICAgICAgICAgICAgICAgX21tX3NldHplcm9fcGQgKCksCi0gICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X2dldGV4cF9wZCAoX19tMjU2ZCBfX0EpIHsKLSAgcmV0dXJuIChfX20yNTZkKSBfX2J1aWx0aW5faWEzMl9nZXRleHBwZDI1Nl9tYXNrICgoX192NGRmKSBfX0EsCi0gICAgICAgICAgICAgICAgKF9fdjRkZikKLSAgICAgICAgICAgICAgICBfbW0yNTZfc2V0emVyb19wZCAoKSwKLSAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXNrX2dldGV4cF9wZCAoX19tMjU2ZCBfX1csIF9fbW1hc2s4IF9fVSwgX19tMjU2ZCBfX0EpIHsKLSAgcmV0dXJuIChfX20yNTZkKSBfX2J1aWx0aW5faWEzMl9nZXRleHBwZDI1Nl9tYXNrICgoX192NGRmKSBfX0EsCi0gICAgICAgICAgICAgICAgKF9fdjRkZikgX19XLAotICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXNrel9nZXRleHBfcGQgKF9fbW1hc2s4IF9fVSwgX19tMjU2ZCBfX0EpIHsKLSAgcmV0dXJuIChfX20yNTZkKSBfX2J1aWx0aW5faWEzMl9nZXRleHBwZDI1Nl9tYXNrICgoX192NGRmKSBfX0EsCi0gICAgICAgICAgICAgICAgKF9fdjRkZikKLSAgICAgICAgICAgICAgICBfbW0yNTZfc2V0emVyb19wZCAoKSwKLSAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9nZXRleHBfcHMgKF9fbTEyOCBfX0EpIHsKLSAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX2dldGV4cHBzMTI4X21hc2sgKChfX3Y0c2YpIF9fQSwKLSAgICAgICAgICAgICAgIChfX3Y0c2YpCi0gICAgICAgICAgICAgICBfbW1fc2V0emVyb19wcyAoKSwKLSAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWFza19nZXRleHBfcHMgKF9fbTEyOCBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4IF9fQSkgewotICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfZ2V0ZXhwcHMxMjhfbWFzayAoKF9fdjRzZikgX19BLAotICAgICAgICAgICAgICAgKF9fdjRzZikgX19XLAotICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWFza3pfZ2V0ZXhwX3BzIChfX21tYXNrOCBfX1UsIF9fbTEyOCBfX0EpIHsKLSAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX2dldGV4cHBzMTI4X21hc2sgKChfX3Y0c2YpIF9fQSwKLSAgICAgICAgICAgICAgIChfX3Y0c2YpCi0gICAgICAgICAgICAgICBfbW1fc2V0emVyb19wcyAoKSwKLSAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X2dldGV4cF9wcyAoX19tMjU2IF9fQSkgewotICByZXR1cm4gKF9fbTI1NikgX19idWlsdGluX2lhMzJfZ2V0ZXhwcHMyNTZfbWFzayAoKF9fdjhzZikgX19BLAotICAgICAgICAgICAgICAgKF9fdjhzZikKLSAgICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3BzICgpLAotICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXNrX2dldGV4cF9wcyAoX19tMjU2IF9fVywgX19tbWFzazggX19VLCBfX20yNTYgX19BKSB7Ci0gIHJldHVybiAoX19tMjU2KSBfX2J1aWx0aW5faWEzMl9nZXRleHBwczI1Nl9tYXNrICgoX192OHNmKSBfX0EsCi0gICAgICAgICAgICAgICAoX192OHNmKSBfX1csCi0gICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXNrel9nZXRleHBfcHMgKF9fbW1hc2s4IF9fVSwgX19tMjU2IF9fQSkgewotICByZXR1cm4gKF9fbTI1NikgX19idWlsdGluX2lhMzJfZ2V0ZXhwcHMyNTZfbWFzayAoKF9fdjhzZikgX19BLAotICAgICAgICAgICAgICAgKF9fdjhzZikKLSAgICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3BzICgpLAotICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2tfbWF4X3BkIChfX20xMjhkIF9fVywgX19tbWFzazggX19VLCBfX20xMjhkIF9fQSwgX19tMTI4ZCBfX0IpIHsKLSAgcmV0dXJuIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl9tYXhwZF9tYXNrICgoX192MmRmKSBfX0EsCi0gICAgICAgICAgICAgICAgKF9fdjJkZikgX19CLAotICAgICAgICAgICAgICAgIChfX3YyZGYpIF9fVywKLSAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWFza3pfbWF4X3BkIChfX21tYXNrOCBfX1UsIF9fbTEyOGQgX19BLCBfX20xMjhkIF9fQikgewotICByZXR1cm4gKF9fbTEyOGQpIF9fYnVpbHRpbl9pYTMyX21heHBkX21hc2sgKChfX3YyZGYpIF9fQSwKLSAgICAgICAgICAgICAgICAoX192MmRmKSBfX0IsCi0gICAgICAgICAgICAgICAgKF9fdjJkZikKLSAgICAgICAgICAgICAgICBfbW1fc2V0emVyb19wZCAoKSwKLSAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfbWFza19tYXhfcGQgKF9fbTI1NmQgX19XLCBfX21tYXNrOCBfX1UsIF9fbTI1NmQgX19BLAotICAgICAgICBfX20yNTZkIF9fQikgewotICByZXR1cm4gKF9fbTI1NmQpIF9fYnVpbHRpbl9pYTMyX21heHBkMjU2X21hc2sgKChfX3Y0ZGYpIF9fQSwKLSAgICAgICAgICAgICAoX192NGRmKSBfX0IsCi0gICAgICAgICAgICAgKF9fdjRkZikgX19XLAotICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXNrel9tYXhfcGQgKF9fbW1hc2s4IF9fVSwgX19tMjU2ZCBfX0EsIF9fbTI1NmQgX19CKSB7Ci0gIHJldHVybiAoX19tMjU2ZCkgX19idWlsdGluX2lhMzJfbWF4cGQyNTZfbWFzayAoKF9fdjRkZikgX19BLAotICAgICAgICAgICAgIChfX3Y0ZGYpIF9fQiwKLSAgICAgICAgICAgICAoX192NGRmKQotICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3BkICgpLAotICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2tfbWF4X3BzIChfX20xMjggX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IpIHsKLSAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX21heHBzX21hc2sgKChfX3Y0c2YpIF9fQSwKLSAgICAgICAgICAgICAgIChfX3Y0c2YpIF9fQiwKLSAgICAgICAgICAgICAgIChfX3Y0c2YpIF9fVywKLSAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2t6X21heF9wcyAoX19tbWFzazggX19VLCBfX20xMjggX19BLCBfX20xMjggX19CKSB7Ci0gIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl9tYXhwc19tYXNrICgoX192NHNmKSBfX0EsCi0gICAgICAgICAgICAgICAoX192NHNmKSBfX0IsCi0gICAgICAgICAgICAgICAoX192NHNmKQotICAgICAgICAgICAgICAgX21tX3NldHplcm9fcHMgKCksCi0gICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXNrX21heF9wcyAoX19tMjU2IF9fVywgX19tbWFzazggX19VLCBfX20yNTYgX19BLCBfX20yNTYgX19CKSB7Ci0gIHJldHVybiAoX19tMjU2KSBfX2J1aWx0aW5faWEzMl9tYXhwczI1Nl9tYXNrICgoX192OHNmKSBfX0EsCi0gICAgICAgICAgICAoX192OHNmKSBfX0IsCi0gICAgICAgICAgICAoX192OHNmKSBfX1csCi0gICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXNrel9tYXhfcHMgKF9fbW1hc2s4IF9fVSwgX19tMjU2IF9fQSwgX19tMjU2IF9fQikgewotICByZXR1cm4gKF9fbTI1NikgX19idWlsdGluX2lhMzJfbWF4cHMyNTZfbWFzayAoKF9fdjhzZikgX19BLAotICAgICAgICAgICAgKF9fdjhzZikgX19CLAotICAgICAgICAgICAgKF9fdjhzZikKLSAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3BzICgpLAotICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2tfbWluX3BkIChfX20xMjhkIF9fVywgX19tbWFzazggX19VLCBfX20xMjhkIF9fQSwgX19tMTI4ZCBfX0IpIHsKLSAgcmV0dXJuIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl9taW5wZF9tYXNrICgoX192MmRmKSBfX0EsCi0gICAgICAgICAgICAgICAgKF9fdjJkZikgX19CLAotICAgICAgICAgICAgICAgIChfX3YyZGYpIF9fVywKLSAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWFza3pfbWluX3BkIChfX21tYXNrOCBfX1UsIF9fbTEyOGQgX19BLCBfX20xMjhkIF9fQikgewotICByZXR1cm4gKF9fbTEyOGQpIF9fYnVpbHRpbl9pYTMyX21pbnBkX21hc2sgKChfX3YyZGYpIF9fQSwKLSAgICAgICAgICAgICAgICAoX192MmRmKSBfX0IsCi0gICAgICAgICAgICAgICAgKF9fdjJkZikKLSAgICAgICAgICAgICAgICBfbW1fc2V0emVyb19wZCAoKSwKLSAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfbWFza19taW5fcGQgKF9fbTI1NmQgX19XLCBfX21tYXNrOCBfX1UsIF9fbTI1NmQgX19BLAotICAgICAgICBfX20yNTZkIF9fQikgewotICByZXR1cm4gKF9fbTI1NmQpIF9fYnVpbHRpbl9pYTMyX21pbnBkMjU2X21hc2sgKChfX3Y0ZGYpIF9fQSwKLSAgICAgICAgICAgICAoX192NGRmKSBfX0IsCi0gICAgICAgICAgICAgKF9fdjRkZikgX19XLAotICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXNrel9taW5fcGQgKF9fbW1hc2s4IF9fVSwgX19tMjU2ZCBfX0EsIF9fbTI1NmQgX19CKSB7Ci0gIHJldHVybiAoX19tMjU2ZCkgX19idWlsdGluX2lhMzJfbWlucGQyNTZfbWFzayAoKF9fdjRkZikgX19BLAotICAgICAgICAgICAgIChfX3Y0ZGYpIF9fQiwKLSAgICAgICAgICAgICAoX192NGRmKQotICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3BkICgpLAotICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2tfbWluX3BzIChfX20xMjggX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IpIHsKLSAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX21pbnBzX21hc2sgKChfX3Y0c2YpIF9fQSwKLSAgICAgICAgICAgICAgIChfX3Y0c2YpIF9fQiwKLSAgICAgICAgICAgICAgIChfX3Y0c2YpIF9fVywKLSAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2t6X21pbl9wcyAoX19tbWFzazggX19VLCBfX20xMjggX19BLCBfX20xMjggX19CKSB7Ci0gIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl9taW5wc19tYXNrICgoX192NHNmKSBfX0EsCi0gICAgICAgICAgICAgICAoX192NHNmKSBfX0IsCi0gICAgICAgICAgICAgICAoX192NHNmKQotICAgICAgICAgICAgICAgX21tX3NldHplcm9fcHMgKCksCi0gICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXNrX21pbl9wcyAoX19tMjU2IF9fVywgX19tbWFzazggX19VLCBfX20yNTYgX19BLCBfX20yNTYgX19CKSB7Ci0gIHJldHVybiAoX19tMjU2KSBfX2J1aWx0aW5faWEzMl9taW5wczI1Nl9tYXNrICgoX192OHNmKSBfX0EsCi0gICAgICAgICAgICAoX192OHNmKSBfX0IsCi0gICAgICAgICAgICAoX192OHNmKSBfX1csCi0gICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXNrel9taW5fcHMgKF9fbW1hc2s4IF9fVSwgX19tMjU2IF9fQSwgX19tMjU2IF9fQikgewotICByZXR1cm4gKF9fbTI1NikgX19idWlsdGluX2lhMzJfbWlucHMyNTZfbWFzayAoKF9fdjhzZikgX19BLAotICAgICAgICAgICAgKF9fdjhzZikgX19CLAotICAgICAgICAgICAgKF9fdjhzZikKLSAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3BzICgpLAotICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2tfbXVsX3BkIChfX20xMjhkIF9fVywgX19tbWFzazggX19VLCBfX20xMjhkIF9fQSwgX19tMTI4ZCBfX0IpIHsKLSAgcmV0dXJuIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl9tdWxwZF9tYXNrICgoX192MmRmKSBfX0EsCi0gICAgICAgICAgICAgICAgKF9fdjJkZikgX19CLAotICAgICAgICAgICAgICAgIChfX3YyZGYpIF9fVywKLSAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWFza3pfbXVsX3BkIChfX21tYXNrOCBfX1UsIF9fbTEyOGQgX19BLCBfX20xMjhkIF9fQikgewotICByZXR1cm4gKF9fbTEyOGQpIF9fYnVpbHRpbl9pYTMyX211bHBkX21hc2sgKChfX3YyZGYpIF9fQSwKLSAgICAgICAgICAgICAgICAoX192MmRmKSBfX0IsCi0gICAgICAgICAgICAgICAgKF9fdjJkZikKLSAgICAgICAgICAgICAgICBfbW1fc2V0emVyb19wZCAoKSwKLSAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfbWFza19tdWxfcGQgKF9fbTI1NmQgX19XLCBfX21tYXNrOCBfX1UsIF9fbTI1NmQgX19BLAotICAgICAgICBfX20yNTZkIF9fQikgewotICByZXR1cm4gKF9fbTI1NmQpIF9fYnVpbHRpbl9pYTMyX211bHBkMjU2X21hc2sgKChfX3Y0ZGYpIF9fQSwKLSAgICAgICAgICAgICAoX192NGRmKSBfX0IsCi0gICAgICAgICAgICAgKF9fdjRkZikgX19XLAotICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXNrel9tdWxfcGQgKF9fbW1hc2s4IF9fVSwgX19tMjU2ZCBfX0EsIF9fbTI1NmQgX19CKSB7Ci0gIHJldHVybiAoX19tMjU2ZCkgX19idWlsdGluX2lhMzJfbXVscGQyNTZfbWFzayAoKF9fdjRkZikgX19BLAotICAgICAgICAgICAgIChfX3Y0ZGYpIF9fQiwKLSAgICAgICAgICAgICAoX192NGRmKQotICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3BkICgpLAotICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2tfbXVsX3BzIChfX20xMjggX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IpIHsKLSAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX211bHBzX21hc2sgKChfX3Y0c2YpIF9fQSwKLSAgICAgICAgICAgICAgIChfX3Y0c2YpIF9fQiwKLSAgICAgICAgICAgICAgIChfX3Y0c2YpIF9fVywKLSAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2t6X211bF9wcyAoX19tbWFzazggX19VLCBfX20xMjggX19BLCBfX20xMjggX19CKSB7Ci0gIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl9tdWxwc19tYXNrICgoX192NHNmKSBfX0EsCi0gICAgICAgICAgICAgICAoX192NHNmKSBfX0IsCi0gICAgICAgICAgICAgICAoX192NHNmKQotICAgICAgICAgICAgICAgX21tX3NldHplcm9fcHMgKCksCi0gICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXNrX211bF9wcyAoX19tMjU2IF9fVywgX19tbWFzazggX19VLCBfX20yNTYgX19BLCBfX20yNTYgX19CKSB7Ci0gIHJldHVybiAoX19tMjU2KSBfX2J1aWx0aW5faWEzMl9tdWxwczI1Nl9tYXNrICgoX192OHNmKSBfX0EsCi0gICAgICAgICAgICAoX192OHNmKSBfX0IsCi0gICAgICAgICAgICAoX192OHNmKSBfX1csCi0gICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXNrel9tdWxfcHMgKF9fbW1hc2s4IF9fVSwgX19tMjU2IF9fQSwgX19tMjU2IF9fQikgewotICByZXR1cm4gKF9fbTI1NikgX19idWlsdGluX2lhMzJfbXVscHMyNTZfbWFzayAoKF9fdjhzZikgX19BLAotICAgICAgICAgICAgKF9fdjhzZikgX19CLAotICAgICAgICAgICAgKF9fdjhzZikKLSAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3BzICgpLAotICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2tfYWJzX2VwaTMyIChfX20xMjhpIF9fVywgX19tbWFzazggX19VLCBfX20xMjhpIF9fQSkgewotICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BhYnNkMTI4X21hc2sgKChfX3Y0c2kpIF9fQSwKLSAgICAgICAgICAgICAoX192NHNpKSBfX1csCi0gICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2t6X2Fic19lcGkzMiAoX19tbWFzazggX19VLCBfX20xMjhpIF9fQSkgewotICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BhYnNkMTI4X21hc2sgKChfX3Y0c2kpIF9fQSwKLSAgICAgICAgICAgICAoX192NHNpKQotICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAotICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXNrX2Fic19lcGkzMiAoX19tMjU2aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMjU2aSBfX0EpIHsKLSAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wYWJzZDI1Nl9tYXNrICgoX192OHNpKSBfX0EsCi0gICAgICAgICAgICAgKF9fdjhzaSkgX19XLAotICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXNrel9hYnNfZXBpMzIgKF9fbW1hc2s4IF9fVSwgX19tMjU2aSBfX0EpIHsKLSAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wYWJzZDI1Nl9tYXNrICgoX192OHNpKSBfX0EsCi0gICAgICAgICAgICAgKF9fdjhzaSkKLSAgICAgICAgICAgICBfbW0yNTZfc2V0emVyb19zaTI1NiAoKSwKLSAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fYWJzX2VwaTY0IChfX20xMjhpIF9fQSkgewotICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BhYnNxMTI4X21hc2sgKChfX3YyZGkpIF9fQSwKLSAgICAgICAgICAgICAoX192MmRpKQotICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAotICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2tfYWJzX2VwaTY0IChfX20xMjhpIF9fVywgX19tbWFzazggX19VLCBfX20xMjhpIF9fQSkgewotICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BhYnNxMTI4X21hc2sgKChfX3YyZGkpIF9fQSwKLSAgICAgICAgICAgICAoX192MmRpKSBfX1csCi0gICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2t6X2Fic19lcGk2NCAoX19tbWFzazggX19VLCBfX20xMjhpIF9fQSkgewotICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BhYnNxMTI4X21hc2sgKChfX3YyZGkpIF9fQSwKLSAgICAgICAgICAgICAoX192MmRpKQotICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAotICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9hYnNfZXBpNjQgKF9fbTI1NmkgX19BKSB7Ci0gIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcGFic3EyNTZfbWFzayAoKF9fdjRkaSkgX19BLAotICAgICAgICAgICAgIChfX3Y0ZGkpCi0gICAgICAgICAgICAgX21tMjU2X3NldHplcm9fc2kyNTYgKCksCi0gICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfbWFza19hYnNfZXBpNjQgKF9fbTI1NmkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTI1NmkgX19BKSB7Ci0gIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcGFic3EyNTZfbWFzayAoKF9fdjRkaSkgX19BLAotICAgICAgICAgICAgIChfX3Y0ZGkpIF9fVywKLSAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfbWFza3pfYWJzX2VwaTY0IChfX21tYXNrOCBfX1UsIF9fbTI1NmkgX19BKSB7Ci0gIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcGFic3EyNTZfbWFzayAoKF9fdjRkaSkgX19BLAotICAgICAgICAgICAgIChfX3Y0ZGkpCi0gICAgICAgICAgICAgX21tMjU2X3NldHplcm9fc2kyNTYgKCksCi0gICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2t6X21heF9lcGkzMiAoX19tbWFzazggX19NLCBfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpIHsKLSAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbWF4c2QxMjhfbWFzayAoKF9fdjRzaSkgX19BLAotICAgICAgICAgICAgICAoX192NHNpKSBfX0IsCi0gICAgICAgICAgICAgIChfX3Y0c2kpCi0gICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAotICAgICAgICAgICAgICBfX00pOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2tfbWF4X2VwaTMyIChfX20xMjhpIF9fVywgX19tbWFzazggX19NLCBfX20xMjhpIF9fQSwKLSAgICAgICAgX19tMTI4aSBfX0IpIHsKLSAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbWF4c2QxMjhfbWFzayAoKF9fdjRzaSkgX19BLAotICAgICAgICAgICAgICAoX192NHNpKSBfX0IsCi0gICAgICAgICAgICAgIChfX3Y0c2kpIF9fVywgX19NKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXNrel9tYXhfZXBpMzIgKF9fbW1hc2s4IF9fTSwgX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKSB7Ci0gIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcG1heHNkMjU2X21hc2sgKChfX3Y4c2kpIF9fQSwKLSAgICAgICAgICAgICAgKF9fdjhzaSkgX19CLAotICAgICAgICAgICAgICAoX192OHNpKQotICAgICAgICAgICAgICBfbW0yNTZfc2V0emVyb19zaTI1NiAoKSwKLSAgICAgICAgICAgICAgX19NKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXNrX21heF9lcGkzMiAoX19tMjU2aSBfX1csIF9fbW1hc2s4IF9fTSwgX19tMjU2aSBfX0EsCi0gICAgICAgICAgIF9fbTI1NmkgX19CKSB7Ci0gIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcG1heHNkMjU2X21hc2sgKChfX3Y4c2kpIF9fQSwKLSAgICAgICAgICAgICAgKF9fdjhzaSkgX19CLAotICAgICAgICAgICAgICAoX192OHNpKSBfX1csIF9fTSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWFza3pfbWF4X2VwaTY0IChfX21tYXNrOCBfX00sIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikgewotICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BtYXhzcTEyOF9tYXNrICgoX192MmRpKSBfX0EsCi0gICAgICAgICAgICAgIChfX3YyZGkpIF9fQiwKLSAgICAgICAgICAgICAgKF9fdjJkaSkKLSAgICAgICAgICAgICAgX21tX3NldHplcm9fc2kxMjggKCksCi0gICAgICAgICAgICAgIF9fTSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWFza19tYXhfZXBpNjQgKF9fbTEyOGkgX19XLCBfX21tYXNrOCBfX00sIF9fbTEyOGkgX19BLAotICAgICAgICBfX20xMjhpIF9fQikgewotICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BtYXhzcTEyOF9tYXNrICgoX192MmRpKSBfX0EsCi0gICAgICAgICAgICAgIChfX3YyZGkpIF9fQiwKLSAgICAgICAgICAgICAgKF9fdjJkaSkgX19XLCBfX00pOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21heF9lcGk2NCAoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKSB7Ci0gIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1heHNxMTI4X21hc2sgKChfX3YyZGkpIF9fQSwKLSAgICAgICAgICAgICAgKF9fdjJkaSkgX19CLAotICAgICAgICAgICAgICAoX192MmRpKQotICAgICAgICAgICAgICBfbW1fc2V0emVyb19zaTEyOCAoKSwKLSAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfbWFza3pfbWF4X2VwaTY0IChfX21tYXNrOCBfX00sIF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQikgewotICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BtYXhzcTI1Nl9tYXNrICgoX192NGRpKSBfX0EsCi0gICAgICAgICAgICAgIChfX3Y0ZGkpIF9fQiwKLSAgICAgICAgICAgICAgKF9fdjRkaSkKLSAgICAgICAgICAgICAgX21tMjU2X3NldHplcm9fc2kyNTYgKCksCi0gICAgICAgICAgICAgIF9fTSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfbWFza19tYXhfZXBpNjQgKF9fbTI1NmkgX19XLCBfX21tYXNrOCBfX00sIF9fbTI1NmkgX19BLAotICAgICAgICAgICBfX20yNTZpIF9fQikgewotICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BtYXhzcTI1Nl9tYXNrICgoX192NGRpKSBfX0EsCi0gICAgICAgICAgICAgIChfX3Y0ZGkpIF9fQiwKLSAgICAgICAgICAgICAgKF9fdjRkaSkgX19XLCBfX00pOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X21heF9lcGk2NCAoX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKSB7Ci0gIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcG1heHNxMjU2X21hc2sgKChfX3Y0ZGkpIF9fQSwKLSAgICAgICAgICAgICAgKF9fdjRkaSkgX19CLAotICAgICAgICAgICAgICAoX192NGRpKQotICAgICAgICAgICAgICBfbW0yNTZfc2V0emVyb19zaTI1NiAoKSwKLSAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWFza3pfbWF4X2VwdTMyIChfX21tYXNrOCBfX00sIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikgewotICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BtYXh1ZDEyOF9tYXNrICgoX192NHNpKSBfX0EsCi0gICAgICAgICAgICAgIChfX3Y0c2kpIF9fQiwKLSAgICAgICAgICAgICAgKF9fdjRzaSkKLSAgICAgICAgICAgICAgX21tX3NldHplcm9fc2kxMjggKCksCi0gICAgICAgICAgICAgIF9fTSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWFza19tYXhfZXB1MzIgKF9fbTEyOGkgX19XLCBfX21tYXNrOCBfX00sIF9fbTEyOGkgX19BLAotICAgICAgICBfX20xMjhpIF9fQikgewotICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BtYXh1ZDEyOF9tYXNrICgoX192NHNpKSBfX0EsCi0gICAgICAgICAgICAgIChfX3Y0c2kpIF9fQiwKLSAgICAgICAgICAgICAgKF9fdjRzaSkgX19XLCBfX00pOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X21hc2t6X21heF9lcHUzMiAoX19tbWFzazggX19NLCBfX20yNTZpIF9fQSwgX19tMjU2aSBfX0IpIHsKLSAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wbWF4dWQyNTZfbWFzayAoKF9fdjhzaSkgX19BLAotICAgICAgICAgICAgICAoX192OHNpKSBfX0IsCi0gICAgICAgICAgICAgIChfX3Y4c2kpCi0gICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2ICgpLAotICAgICAgICAgICAgICBfX00pOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X21hc2tfbWF4X2VwdTMyIChfX20yNTZpIF9fVywgX19tbWFzazggX19NLCBfX20yNTZpIF9fQSwKLSAgICAgICAgICAgX19tMjU2aSBfX0IpIHsKLSAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wbWF4dWQyNTZfbWFzayAoKF9fdjhzaSkgX19BLAotICAgICAgICAgICAgICAoX192OHNpKSBfX0IsCi0gICAgICAgICAgICAgIChfX3Y4c2kpIF9fVywgX19NKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tYXNrel9tYXhfZXB1NjQgKF9fbW1hc2s4IF9fTSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKSB7Ci0gIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1heHVxMTI4X21hc2sgKChfX3YyZGkpIF9fQSwKLSAgICAgICAgICAgICAgKF9fdjJkaSkgX19CLAotICAgICAgICAgICAgICAoX192MmRpKQotICAgICAgICAgICAgICBfbW1fc2V0emVyb19zaTEyOCAoKSwKLSAgICAgICAgICAgICAgX19NKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tYXhfZXB1NjQgKF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikgewotICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BtYXh1cTEyOF9tYXNrICgoX192MmRpKSBfX0EsCi0gICAgICAgICAgICAgIChfX3YyZGkpIF9fQiwKLSAgICAgICAgICAgICAgKF9fdjJkaSkKLSAgICAgICAgICAgICAgX21tX3NldHplcm9fc2kxMjggKCksCi0gICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2tfbWF4X2VwdTY0IChfX20xMjhpIF9fVywgX19tbWFzazggX19NLCBfX20xMjhpIF9fQSwKLSAgICAgICAgX19tMTI4aSBfX0IpIHsKLSAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbWF4dXExMjhfbWFzayAoKF9fdjJkaSkgX19BLAotICAgICAgICAgICAgICAoX192MmRpKSBfX0IsCi0gICAgICAgICAgICAgIChfX3YyZGkpIF9fVywgX19NKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXNrel9tYXhfZXB1NjQgKF9fbW1hc2s4IF9fTSwgX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKSB7Ci0gIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcG1heHVxMjU2X21hc2sgKChfX3Y0ZGkpIF9fQSwKLSAgICAgICAgICAgICAgKF9fdjRkaSkgX19CLAotICAgICAgICAgICAgICAoX192NGRpKQotICAgICAgICAgICAgICBfbW0yNTZfc2V0emVyb19zaTI1NiAoKSwKLSAgICAgICAgICAgICAgX19NKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXhfZXB1NjQgKF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQikgewotICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BtYXh1cTI1Nl9tYXNrICgoX192NGRpKSBfX0EsCi0gICAgICAgICAgICAgIChfX3Y0ZGkpIF9fQiwKLSAgICAgICAgICAgICAgKF9fdjRkaSkKLSAgICAgICAgICAgICAgX21tMjU2X3NldHplcm9fc2kyNTYgKCksCi0gICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X21hc2tfbWF4X2VwdTY0IChfX20yNTZpIF9fVywgX19tbWFzazggX19NLCBfX20yNTZpIF9fQSwKLSAgICAgICAgICAgX19tMjU2aSBfX0IpIHsKLSAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wbWF4dXEyNTZfbWFzayAoKF9fdjRkaSkgX19BLAotICAgICAgICAgICAgICAoX192NGRpKSBfX0IsCi0gICAgICAgICAgICAgIChfX3Y0ZGkpIF9fVywgX19NKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tYXNrel9taW5fZXBpMzIgKF9fbW1hc2s4IF9fTSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKSB7Ci0gIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1pbnNkMTI4X21hc2sgKChfX3Y0c2kpIF9fQSwKLSAgICAgICAgICAgICAgKF9fdjRzaSkgX19CLAotICAgICAgICAgICAgICAoX192NHNpKQotICAgICAgICAgICAgICBfbW1fc2V0emVyb19zaTEyOCAoKSwKLSAgICAgICAgICAgICAgX19NKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tYXNrX21pbl9lcGkzMiAoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fTSwgX19tMTI4aSBfX0EsCi0gICAgICAgIF9fbTEyOGkgX19CKSB7Ci0gIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1pbnNkMTI4X21hc2sgKChfX3Y0c2kpIF9fQSwKLSAgICAgICAgICAgICAgKF9fdjRzaSkgX19CLAotICAgICAgICAgICAgICAoX192NHNpKSBfX1csIF9fTSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfbWFza3pfbWluX2VwaTMyIChfX21tYXNrOCBfX00sIF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQikgewotICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BtaW5zZDI1Nl9tYXNrICgoX192OHNpKSBfX0EsCi0gICAgICAgICAgICAgIChfX3Y4c2kpIF9fQiwKLSAgICAgICAgICAgICAgKF9fdjhzaSkKLSAgICAgICAgICAgICAgX21tMjU2X3NldHplcm9fc2kyNTYgKCksCi0gICAgICAgICAgICAgIF9fTSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfbWFza19taW5fZXBpMzIgKF9fbTI1NmkgX19XLCBfX21tYXNrOCBfX00sIF9fbTI1NmkgX19BLAotICAgICAgICAgICBfX20yNTZpIF9fQikgewotICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BtaW5zZDI1Nl9tYXNrICgoX192OHNpKSBfX0EsCi0gICAgICAgICAgICAgIChfX3Y4c2kpIF9fQiwKLSAgICAgICAgICAgICAgKF9fdjhzaSkgX19XLCBfX00pOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21pbl9lcGk2NCAoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKSB7Ci0gIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1pbnNxMTI4X21hc2sgKChfX3YyZGkpIF9fQSwKLSAgICAgICAgICAgICAgKF9fdjJkaSkgX19CLAotICAgICAgICAgICAgICAoX192MmRpKQotICAgICAgICAgICAgICBfbW1fc2V0emVyb19zaTEyOCAoKSwKLSAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWFza19taW5fZXBpNjQgKF9fbTEyOGkgX19XLCBfX21tYXNrOCBfX00sIF9fbTEyOGkgX19BLAotICAgICAgICBfX20xMjhpIF9fQikgewotICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BtaW5zcTEyOF9tYXNrICgoX192MmRpKSBfX0EsCi0gICAgICAgICAgICAgIChfX3YyZGkpIF9fQiwKLSAgICAgICAgICAgICAgKF9fdjJkaSkgX19XLCBfX00pOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2t6X21pbl9lcGk2NCAoX19tbWFzazggX19NLCBfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpIHsKLSAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbWluc3ExMjhfbWFzayAoKF9fdjJkaSkgX19BLAotICAgICAgICAgICAgICAoX192MmRpKSBfX0IsCi0gICAgICAgICAgICAgIChfX3YyZGkpCi0gICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAotICAgICAgICAgICAgICBfX00pOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X21pbl9lcGk2NCAoX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKSB7Ci0gIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcG1pbnNxMjU2X21hc2sgKChfX3Y0ZGkpIF9fQSwKLSAgICAgICAgICAgICAgKF9fdjRkaSkgX19CLAotICAgICAgICAgICAgICAoX192NGRpKQotICAgICAgICAgICAgICBfbW0yNTZfc2V0emVyb19zaTI1NiAoKSwKLSAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfbWFza19taW5fZXBpNjQgKF9fbTI1NmkgX19XLCBfX21tYXNrOCBfX00sIF9fbTI1NmkgX19BLAotICAgICAgICAgICBfX20yNTZpIF9fQikgewotICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BtaW5zcTI1Nl9tYXNrICgoX192NGRpKSBfX0EsCi0gICAgICAgICAgICAgIChfX3Y0ZGkpIF9fQiwKLSAgICAgICAgICAgICAgKF9fdjRkaSkgX19XLCBfX00pOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X21hc2t6X21pbl9lcGk2NCAoX19tbWFzazggX19NLCBfX20yNTZpIF9fQSwgX19tMjU2aSBfX0IpIHsKLSAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wbWluc3EyNTZfbWFzayAoKF9fdjRkaSkgX19BLAotICAgICAgICAgICAgICAoX192NGRpKSBfX0IsCi0gICAgICAgICAgICAgIChfX3Y0ZGkpCi0gICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2ICgpLAotICAgICAgICAgICAgICBfX00pOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2t6X21pbl9lcHUzMiAoX19tbWFzazggX19NLCBfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpIHsKLSAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbWludWQxMjhfbWFzayAoKF9fdjRzaSkgX19BLAotICAgICAgICAgICAgICAoX192NHNpKSBfX0IsCi0gICAgICAgICAgICAgIChfX3Y0c2kpCi0gICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAotICAgICAgICAgICAgICBfX00pOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2tfbWluX2VwdTMyIChfX20xMjhpIF9fVywgX19tbWFzazggX19NLCBfX20xMjhpIF9fQSwKLSAgICAgICAgX19tMTI4aSBfX0IpIHsKLSAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbWludWQxMjhfbWFzayAoKF9fdjRzaSkgX19BLAotICAgICAgICAgICAgICAoX192NHNpKSBfX0IsCi0gICAgICAgICAgICAgIChfX3Y0c2kpIF9fVywgX19NKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXNrel9taW5fZXB1MzIgKF9fbW1hc2s4IF9fTSwgX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKSB7Ci0gIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcG1pbnVkMjU2X21hc2sgKChfX3Y4c2kpIF9fQSwKLSAgICAgICAgICAgICAgKF9fdjhzaSkgX19CLAotICAgICAgICAgICAgICAoX192OHNpKQotICAgICAgICAgICAgICBfbW0yNTZfc2V0emVyb19zaTI1NiAoKSwKLSAgICAgICAgICAgICAgX19NKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXNrX21pbl9lcHUzMiAoX19tMjU2aSBfX1csIF9fbW1hc2s4IF9fTSwgX19tMjU2aSBfX0EsCi0gICAgICAgICAgIF9fbTI1NmkgX19CKSB7Ci0gIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcG1pbnVkMjU2X21hc2sgKChfX3Y4c2kpIF9fQSwKLSAgICAgICAgICAgICAgKF9fdjhzaSkgX19CLAotICAgICAgICAgICAgICAoX192OHNpKSBfX1csIF9fTSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWluX2VwdTY0IChfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpIHsKLSAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbWludXExMjhfbWFzayAoKF9fdjJkaSkgX19BLAotICAgICAgICAgICAgICAoX192MmRpKSBfX0IsCi0gICAgICAgICAgICAgIChfX3YyZGkpCi0gICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAotICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tYXNrX21pbl9lcHU2NCAoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fTSwgX19tMTI4aSBfX0EsCi0gICAgICAgIF9fbTEyOGkgX19CKSB7Ci0gIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1pbnVxMTI4X21hc2sgKChfX3YyZGkpIF9fQSwKLSAgICAgICAgICAgICAgKF9fdjJkaSkgX19CLAotICAgICAgICAgICAgICAoX192MmRpKSBfX1csIF9fTSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWFza3pfbWluX2VwdTY0IChfX21tYXNrOCBfX00sIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikgewotICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BtaW51cTEyOF9tYXNrICgoX192MmRpKSBfX0EsCi0gICAgICAgICAgICAgIChfX3YyZGkpIF9fQiwKLSAgICAgICAgICAgICAgKF9fdjJkaSkKLSAgICAgICAgICAgICAgX21tX3NldHplcm9fc2kxMjggKCksCi0gICAgICAgICAgICAgIF9fTSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfbWluX2VwdTY0IChfX20yNTZpIF9fQSwgX19tMjU2aSBfX0IpIHsKLSAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wbWludXEyNTZfbWFzayAoKF9fdjRkaSkgX19BLAotICAgICAgICAgICAgICAoX192NGRpKSBfX0IsCi0gICAgICAgICAgICAgIChfX3Y0ZGkpCi0gICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2ICgpLAotICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXNrX21pbl9lcHU2NCAoX19tMjU2aSBfX1csIF9fbW1hc2s4IF9fTSwgX19tMjU2aSBfX0EsCi0gICAgICAgICAgIF9fbTI1NmkgX19CKSB7Ci0gIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcG1pbnVxMjU2X21hc2sgKChfX3Y0ZGkpIF9fQSwKLSAgICAgICAgICAgICAgKF9fdjRkaSkgX19CLAotICAgICAgICAgICAgICAoX192NGRpKSBfX1csIF9fTSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfbWFza3pfbWluX2VwdTY0IChfX21tYXNrOCBfX00sIF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQikgewotICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BtaW51cTI1Nl9tYXNrICgoX192NGRpKSBfX0EsCi0gICAgICAgICAgICAgIChfX3Y0ZGkpIF9fQiwKLSAgICAgICAgICAgICAgKF9fdjRkaSkKLSAgICAgICAgICAgICAgX21tMjU2X3NldHplcm9fc2kyNTYgKCksCi0gICAgICAgICAgICAgIF9fTSk7Ci19Ci0KLSNkZWZpbmUgX21tX3JvdW5kc2NhbGVfcGQoX19BLCBfX2ltbSkgX19leHRlbnNpb25fXyAoeyBcCi0gIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl9ybmRzY2FsZXBkXzEyOF9tYXNrICgoX192MmRmKSBfX0EsIFwKLSAgICAgICAgICAgICAgICAgICBfX2ltbSwgKF9fdjJkZikgX21tX3NldHplcm9fcGQgKCksIChfX21tYXNrOCkgLTEpOyB9KQotCi0KLSNkZWZpbmUgX21tX21hc2tfcm91bmRzY2FsZV9wZChfX1csIF9fVSwgX19BLCBfX2ltbSkgX19leHRlbnNpb25fXyAoeyBcCi0gIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl9ybmRzY2FsZXBkXzEyOF9tYXNrICgoX192MmRmKSBfX0EsIF9faW1tLCBcCi0gICAgICAgICAgICAgICAgICAgKF9fdjJkZikgX19XLCAoX19tbWFzazgpIF9fVSk7IH0pCi0KLQotI2RlZmluZSBfbW1fbWFza3pfcm91bmRzY2FsZV9wZChfX1UsIF9fQSwgX19pbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAotICAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfcm5kc2NhbGVwZF8xMjhfbWFzayAoKF9fdjJkZikgX19BLCBfX2ltbSwgXAotICAgICAgICAgICAgICAgICAgIChfX3YyZGYpIF9tbV9zZXR6ZXJvX3BkICgpLCAoX19tbWFzazgpIF9fVSk7IH0pCi0KLQotI2RlZmluZSBfbW0yNTZfcm91bmRzY2FsZV9wZChfX0EsIF9faW1tKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgKF9fbTI1NmQpIF9fYnVpbHRpbl9pYTMyX3JuZHNjYWxlcGRfMjU2X21hc2sgKChfX3Y0ZGYpIF9fQSwgX19pbW0sIFwKLSAgICAgICAgICAgICAgICAgICAoX192NGRmKSBfbW0yNTZfc2V0emVyb19wZCAoKSwgKF9fbW1hc2s4KSAtMSk7IH0pCi0KLQotI2RlZmluZSBfbW0yNTZfbWFza19yb3VuZHNjYWxlX3BkKF9fVywgX19VLCBfX0EsIF9faW1tKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgKF9fbTI1NmQpIF9fYnVpbHRpbl9pYTMyX3JuZHNjYWxlcGRfMjU2X21hc2sgKChfX3Y0ZGYpIF9fQSwgX19pbW0sIFwKLSAgICAgICAgICAgICAgICAgICAoX192NGRmKSBfX1csIChfX21tYXNrOCkgX19VKTsgfSkKLQotCi0jZGVmaW5lIF9tbTI1Nl9tYXNrel9yb3VuZHNjYWxlX3BkKF9fVSwgX19BLCBfX2ltbSkgIF9fZXh0ZW5zaW9uX18gKHsgXAotICAoX19tMjU2ZCkgX19idWlsdGluX2lhMzJfcm5kc2NhbGVwZF8yNTZfbWFzayAoKF9fdjRkZikgX19BLCBfX2ltbSwgXAotICAgICAgICAgICAgICAgICAgIChfX3Y0ZGYpIF9tbTI1Nl9zZXR6ZXJvX3BkKCksIChfX21tYXNrOCkgX19VKTsgfSkKLQotI2RlZmluZSBfbW1fcm91bmRzY2FsZV9wcyhfX0EsIF9faW1tKSAgX19leHRlbnNpb25fXyAoeyBcCi0gIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX3JuZHNjYWxlcHNfMTI4X21hc2sgKChfX3Y0c2YpIF9fQSwgX19pbW0sIFwKLSAgICAgICAgICAgICAgICAgIChfX3Y0c2YpIF9tbV9zZXR6ZXJvX3BzKCksIChfX21tYXNrOCkgLTEpOyB9KQotCi0KLSNkZWZpbmUgX21tX21hc2tfcm91bmRzY2FsZV9wcyhfX1csIF9fVSwgX19BLCBfX2ltbSkgIF9fZXh0ZW5zaW9uX18gKHsgXAotICAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl9ybmRzY2FsZXBzXzEyOF9tYXNrICgoX192NHNmKSBfX0EsIF9faW1tLCBcCi0gICAgICAgICAgICAgICAgICAoX192NHNmKSBfX1csIChfX21tYXNrOCkgX19VKTsgfSkKLQotCi0jZGVmaW5lIF9tbV9tYXNrel9yb3VuZHNjYWxlX3BzKF9fVSwgX19BLCBfX2ltbSkgIF9fZXh0ZW5zaW9uX18gKHsgXAotICAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl9ybmRzY2FsZXBzXzEyOF9tYXNrICgoX192NHNmKSBfX0EsIF9faW1tLCBcCi0gICAgICAgICAgICAgICAgICAoX192NHNmKSBfbW1fc2V0emVyb19wcygpLCAoX19tbWFzazgpIF9fVSk7IH0pCi0KLSNkZWZpbmUgX21tMjU2X3JvdW5kc2NhbGVfcHMoX19BLCBfX2ltbSkgIF9fZXh0ZW5zaW9uX18gKHsgXAotICAoX19tMjU2KSBfX2J1aWx0aW5faWEzMl9ybmRzY2FsZXBzXzI1Nl9tYXNrICgoX192OHNmKSBfX0EsX19pbW0sIFwKLSAgICAgICAgICAgICAgICAgIChfX3Y4c2YpIF9tbTI1Nl9zZXR6ZXJvX3BzKCksIChfX21tYXNrOCkgLTEpOyB9KQotCi0jZGVmaW5lIF9tbTI1Nl9tYXNrX3JvdW5kc2NhbGVfcHMoX19XLCBfX1UsIF9fQSxfX2ltbSkgIF9fZXh0ZW5zaW9uX18gKHsgXAotICAoX19tMjU2KSBfX2J1aWx0aW5faWEzMl9ybmRzY2FsZXBzXzI1Nl9tYXNrICgoX192OHNmKSBfX0EsIF9faW1tLCBcCi0gICAgICAgICAgICAgICAgICAoX192OHNmKSBfX1csIChfX21tYXNrOCkgX19VKTsgfSkKLQotCi0jZGVmaW5lIF9tbTI1Nl9tYXNrel9yb3VuZHNjYWxlX3BzKF9fVSwgX19BLCBfX2ltbSkgIF9fZXh0ZW5zaW9uX18gKHsgXAotICAoX19tMjU2KSBfX2J1aWx0aW5faWEzMl9ybmRzY2FsZXBzXzI1Nl9tYXNrICgoX192OHNmKSBfX0EsIF9faW1tLCBcCi0gICAgICAgICAgICAgICAgICAoX192OHNmKSBfbW0yNTZfc2V0emVyb19wcygpLCAoX19tbWFzazgpIF9fVSk7IH0pCi0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fc2NhbGVmX3BkIChfX20xMjhkIF9fQSwgX19tMTI4ZCBfX0IpIHsKLSAgcmV0dXJuIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl9zY2FsZWZwZDEyOF9tYXNrICgoX192MmRmKSBfX0EsCi0gICAgICAgICAgICAgICAgKF9fdjJkZikgX19CLAotICAgICAgICAgICAgICAgIChfX3YyZGYpCi0gICAgICAgICAgICAgICAgX21tX3NldHplcm9fcGQgKCksCi0gICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWFza19zY2FsZWZfcGQgKF9fbTEyOGQgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGQgX19BLAotICAgICAgICBfX20xMjhkIF9fQikgewotICByZXR1cm4gKF9fbTEyOGQpIF9fYnVpbHRpbl9pYTMyX3NjYWxlZnBkMTI4X21hc2sgKChfX3YyZGYpIF9fQSwKLSAgICAgICAgICAgICAgICAoX192MmRmKSBfX0IsCi0gICAgICAgICAgICAgICAgKF9fdjJkZikgX19XLAotICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tYXNrel9zY2FsZWZfcGQgKF9fbW1hc2s4IF9fVSwgX19tMTI4ZCBfX0EsIF9fbTEyOGQgX19CKSB7Ci0gIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfc2NhbGVmcGQxMjhfbWFzayAoKF9fdjJkZikgX19BLAotICAgICAgICAgICAgICAgIChfX3YyZGYpIF9fQiwKLSAgICAgICAgICAgICAgICAoX192MmRmKQotICAgICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3BkICgpLAotICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9zY2FsZWZfcGQgKF9fbTI1NmQgX19BLCBfX20yNTZkIF9fQikgewotICByZXR1cm4gKF9fbTI1NmQpIF9fYnVpbHRpbl9pYTMyX3NjYWxlZnBkMjU2X21hc2sgKChfX3Y0ZGYpIF9fQSwKLSAgICAgICAgICAgICAgICAoX192NGRmKSBfX0IsCi0gICAgICAgICAgICAgICAgKF9fdjRkZikKLSAgICAgICAgICAgICAgICBfbW0yNTZfc2V0emVyb19wZCAoKSwKLSAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXNrX3NjYWxlZl9wZCAoX19tMjU2ZCBfX1csIF9fbW1hc2s4IF9fVSwgX19tMjU2ZCBfX0EsCi0gICAgICAgICAgIF9fbTI1NmQgX19CKSB7Ci0gIHJldHVybiAoX19tMjU2ZCkgX19idWlsdGluX2lhMzJfc2NhbGVmcGQyNTZfbWFzayAoKF9fdjRkZikgX19BLAotICAgICAgICAgICAgICAgIChfX3Y0ZGYpIF9fQiwKLSAgICAgICAgICAgICAgICAoX192NGRmKSBfX1csCi0gICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X21hc2t6X3NjYWxlZl9wZCAoX19tbWFzazggX19VLCBfX20yNTZkIF9fQSwgX19tMjU2ZCBfX0IpIHsKLSAgcmV0dXJuIChfX20yNTZkKSBfX2J1aWx0aW5faWEzMl9zY2FsZWZwZDI1Nl9tYXNrICgoX192NGRmKSBfX0EsCi0gICAgICAgICAgICAgICAgKF9fdjRkZikgX19CLAotICAgICAgICAgICAgICAgIChfX3Y0ZGYpCi0gICAgICAgICAgICAgICAgX21tMjU2X3NldHplcm9fcGQgKCksCi0gICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fc2NhbGVmX3BzIChfX20xMjggX19BLCBfX20xMjggX19CKSB7Ci0gIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl9zY2FsZWZwczEyOF9tYXNrICgoX192NHNmKSBfX0EsCi0gICAgICAgICAgICAgICAoX192NHNmKSBfX0IsCi0gICAgICAgICAgICAgICAoX192NHNmKQotICAgICAgICAgICAgICAgX21tX3NldHplcm9fcHMgKCksCi0gICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2tfc2NhbGVmX3BzIChfX20xMjggX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IpIHsKLSAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX3NjYWxlZnBzMTI4X21hc2sgKChfX3Y0c2YpIF9fQSwKLSAgICAgICAgICAgICAgIChfX3Y0c2YpIF9fQiwKLSAgICAgICAgICAgICAgIChfX3Y0c2YpIF9fVywKLSAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2t6X3NjYWxlZl9wcyAoX19tbWFzazggX19VLCBfX20xMjggX19BLCBfX20xMjggX19CKSB7Ci0gIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl9zY2FsZWZwczEyOF9tYXNrICgoX192NHNmKSBfX0EsCi0gICAgICAgICAgICAgICAoX192NHNmKSBfX0IsCi0gICAgICAgICAgICAgICAoX192NHNmKQotICAgICAgICAgICAgICAgX21tX3NldHplcm9fcHMgKCksCi0gICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9zY2FsZWZfcHMgKF9fbTI1NiBfX0EsIF9fbTI1NiBfX0IpIHsKLSAgcmV0dXJuIChfX20yNTYpIF9fYnVpbHRpbl9pYTMyX3NjYWxlZnBzMjU2X21hc2sgKChfX3Y4c2YpIF9fQSwKLSAgICAgICAgICAgICAgIChfX3Y4c2YpIF9fQiwKLSAgICAgICAgICAgICAgIChfX3Y4c2YpCi0gICAgICAgICAgICAgICBfbW0yNTZfc2V0emVyb19wcyAoKSwKLSAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfbWFza19zY2FsZWZfcHMgKF9fbTI1NiBfX1csIF9fbW1hc2s4IF9fVSwgX19tMjU2IF9fQSwKLSAgICAgICAgICAgX19tMjU2IF9fQikgewotICByZXR1cm4gKF9fbTI1NikgX19idWlsdGluX2lhMzJfc2NhbGVmcHMyNTZfbWFzayAoKF9fdjhzZikgX19BLAotICAgICAgICAgICAgICAgKF9fdjhzZikgX19CLAotICAgICAgICAgICAgICAgKF9fdjhzZikgX19XLAotICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfbWFza3pfc2NhbGVmX3BzIChfX21tYXNrOCBfX1UsIF9fbTI1NiBfX0EsIF9fbTI1NiBfX0IpIHsKLSAgcmV0dXJuIChfX20yNTYpIF9fYnVpbHRpbl9pYTMyX3NjYWxlZnBzMjU2X21hc2sgKChfX3Y4c2YpIF9fQSwKLSAgICAgICAgICAgICAgIChfX3Y4c2YpIF9fQiwKLSAgICAgICAgICAgICAgIChfX3Y4c2YpCi0gICAgICAgICAgICAgICBfbW0yNTZfc2V0emVyb19wcyAoKSwKLSAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotI2RlZmluZSBfbW1faTY0c2NhdHRlcl9wZChfX2FkZHIsX19pbmRleCwgX192MSwgX19zY2FsZSkgX19leHRlbnNpb25fXyAoeyBcCi0gIF9fYnVpbHRpbl9pYTMyX3NjYXR0ZXJkaXYyZGYoX19hZGRyLCAoX19tbWFzazgpIDB4RkYsIChfX3YyZGkpIF9faW5kZXgsIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpIF9fdjEsIF9fc2NhbGUpOyB9KQotCi0jZGVmaW5lIF9tbV9tYXNrX2k2NHNjYXR0ZXJfcGQoX19hZGRyLCBfX21hc2ssIF9faW5kZXgsIF9fdjEsIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3NjYWxlKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgX19idWlsdGluX2lhMzJfc2NhdHRlcmRpdjJkZiAoX19hZGRyLCBfX21hc2ssIChfX3YyZGkpIF9faW5kZXgsIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKSBfX3YxLCBfX3NjYWxlKTsgfSkKLQotCi0jZGVmaW5lIF9tbV9pNjRzY2F0dGVyX2VwaTY0KF9fYWRkciwgX19pbmRleCwgX192MSwgX19zY2FsZSkgX19leHRlbnNpb25fXyAoeyBcCi0gIF9fYnVpbHRpbl9pYTMyX3NjYXR0ZXJkaXYyZGkgKF9fYWRkciwgKF9fbW1hc2s4KSAweEZGLCBcCi0gICAgICAgIChfX3YyZGkpIF9faW5kZXgsIChfX3YyZGkpIF9fdjEsIF9fc2NhbGUpOyB9KQotCi0jZGVmaW5lIF9tbV9tYXNrX2k2NHNjYXR0ZXJfZXBpNjQoX19hZGRyLCBfX21hc2ssIF9faW5kZXgsIF9fdjEsXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc2NhbGUpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBfX2J1aWx0aW5faWEzMl9zY2F0dGVyZGl2MmRpIChfX2FkZHIsIF9fbWFzaywgKF9fdjJkaSkgX19pbmRleCxcCi0gICAgICAgIChfX3YyZGkpIF9fdjEsIF9fc2NhbGUpOyB9KQotCi0jZGVmaW5lIF9tbTI1Nl9pNjRzY2F0dGVyX3BkKF9fYWRkciwgX19pbmRleCwgX192MSwgX19zY2FsZSkgX19leHRlbnNpb25fXyAoeyBcCi0gIF9fYnVpbHRpbl9pYTMyX3NjYXR0ZXJkaXY0ZGYgKF9fYWRkciwgKF9fbW1hc2s4KSAweEZGLFwKLSAgICAgICAgKF9fdjRkaSkgX19pbmRleCwgKF9fdjRkZikgX192MSwgX19zY2FsZSk7IH0pCi0KLSNkZWZpbmUgX21tMjU2X21hc2tfaTY0c2NhdHRlcl9wZChfX2FkZHIsIF9fbWFzaywgX19pbmRleCwgX192MSxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc2NhbGUpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBfX2J1aWx0aW5faWEzMl9zY2F0dGVyZGl2NGRmIChfX2FkZHIsIF9fbWFzaywgKF9fdjRkaSkgX19pbmRleCxcCi0gICAgICAgIChfX3Y0ZGYpIF9fdjEsIF9fc2NhbGUpOyB9KQotCi0jZGVmaW5lIF9tbTI1Nl9pNjRzY2F0dGVyX2VwaTY0KF9fYWRkciwgX19pbmRleCwgX192MSwgX19zY2FsZSkgX19leHRlbnNpb25fXyAoeyBcCi0gIF9fYnVpbHRpbl9pYTMyX3NjYXR0ZXJkaXY0ZGkgKF9fYWRkciwgKF9fbW1hc2s4KSAweEZGLCAoX192NGRpKSBfX2luZGV4LFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRpKSBfX3YxLCBfX3NjYWxlKTsgfSkKLQotI2RlZmluZSBfbW0yNTZfbWFza19pNjRzY2F0dGVyX2VwaTY0KF9fYWRkciwgX19tYXNrLCBfX2luZGV4LCBfX3YxLFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zY2FsZSkgX19leHRlbnNpb25fXyAoeyBcCi0gIF9fYnVpbHRpbl9pYTMyX3NjYXR0ZXJkaXY0ZGkgKF9fYWRkciwgX19tYXNrLCAoX192NGRpKSBfX2luZGV4LFwKLSAgICAgICAgKF9fdjRkaSkgX192MSwgX19zY2FsZSk7IH0pCi0KLSNkZWZpbmUgX21tX2k2NHNjYXR0ZXJfcHMoX19hZGRyLCBfX2luZGV4LCBfX3YxLCBfX3NjYWxlKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgX19idWlsdGluX2lhMzJfc2NhdHRlcmRpdjRzZiAoX19hZGRyLCAoX19tbWFzazgpIDB4RkYsXAotICAgICAgICAoX192MmRpKSBfX2luZGV4LCAoX192NHNmKSBfX3YxLCBfX3NjYWxlKTsgfSkKLQotI2RlZmluZSBfbW1fbWFza19pNjRzY2F0dGVyX3BzKF9fYWRkciwgX19tYXNrLCBfX2luZGV4LCBfX3YxLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc2NhbGUpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBfX2J1aWx0aW5faWEzMl9zY2F0dGVyZGl2NHNmIChfX2FkZHIsIF9fbWFzaywgKF9fdjJkaSkgX19pbmRleCxcCi0gICAgICAgIChfX3Y0c2YpIF9fdjEsIF9fc2NhbGUpOyB9KQotCi0jZGVmaW5lIF9tbV9pNjRzY2F0dGVyX2VwaTMyKF9fYWRkciwgX19pbmRleCwgX192MSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zY2FsZSkgX19leHRlbnNpb25fXyAoeyBcCi0gIF9fYnVpbHRpbl9pYTMyX3NjYXR0ZXJkaXY0c2kgKF9fYWRkciwgKF9fbW1hc2s4KSAweEZGLFwKLSAgICAgICAgKF9fdjJkaSkgX19pbmRleCwgKF9fdjRzaSkgX192MSwgX19zY2FsZSk7IH0pCi0KLSNkZWZpbmUgX21tX21hc2tfaTY0c2NhdHRlcl9lcGkzMihfX2FkZHIsIF9fbWFzaywgX19pbmRleCwgX192MSxcCi0gICAgICAgICBfX3NjYWxlKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgX19idWlsdGluX2lhMzJfc2NhdHRlcmRpdjRzaSAoX19hZGRyLCBfX21hc2ssIChfX3YyZGkpIF9faW5kZXgsXAotICAgICAgICAoX192NHNpKSBfX3YxLCBfX3NjYWxlKTsgfSkKLQotI2RlZmluZSBfbW0yNTZfaTY0c2NhdHRlcl9wcyhfX2FkZHIsIF9faW5kZXgsIF9fdjEsIF9fc2NhbGUpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBfX2J1aWx0aW5faWEzMl9zY2F0dGVyZGl2OHNmIChfX2FkZHIsIChfX21tYXNrOCkgMHhGRiwgKF9fdjRkaSkgX19pbmRleCwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikgX192MSwgX19zY2FsZSk7IH0pCi0KLSNkZWZpbmUgX21tMjU2X21hc2tfaTY0c2NhdHRlcl9wcyhfX2FkZHIsIF9fbWFzaywgX19pbmRleCwgX192MSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3NjYWxlKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgX19idWlsdGluX2lhMzJfc2NhdHRlcmRpdjhzZiAoX19hZGRyLCBfX21hc2ssIChfX3Y0ZGkpIF9faW5kZXgsIFwKLSAgICAgICAgKF9fdjRzZikgX192MSwgX19zY2FsZSk7IH0pCi0KLSNkZWZpbmUgX21tMjU2X2k2NHNjYXR0ZXJfZXBpMzIoX19hZGRyLCBfX2luZGV4LCBfX3YxLCBfX3NjYWxlKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgX19idWlsdGluX2lhMzJfc2NhdHRlcmRpdjhzaSAoX19hZGRyLCAoX19tbWFzazgpIDB4RkYsIFwKLSAgICAgICAgKF9fdjRkaSkgX19pbmRleCwgKF9fdjRzaSkgX192MSwgX19zY2FsZSk7IH0pCi0KLSNkZWZpbmUgX21tMjU2X21hc2tfaTY0c2NhdHRlcl9lcGkzMihfX2FkZHIsIF9fbWFzaywgX19pbmRleCwgX192MSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3NjYWxlKSBfX2V4dGVuc2lvbl9fICh7ICBcCi0gIF9fYnVpbHRpbl9pYTMyX3NjYXR0ZXJkaXY4c2koX19hZGRyLCBfX21hc2ssIChfX3Y0ZGkpIF9faW5kZXgsIFwKLSAgICAgICAgKF9fdjRzaSkgX192MSwgX19zY2FsZSk7IH0pCi0KLSNkZWZpbmUgX21tX2kzMnNjYXR0ZXJfcGQoX19hZGRyLCBfX2luZGV4LCBfX3YxLCAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgX19zY2FsZSkgX19leHRlbnNpb25fXyAoeyAgICAgIFwKLSAgX19idWlsdGluX2lhMzJfc2NhdHRlcnNpdjJkZiAoX19hZGRyLCAoX19tbWFzazgpIDB4RkYsIFwKLSAgICAgICAgKF9fdjRzaSkgX19pbmRleCwgKF9fdjJkZikgX192MSwgX19zY2FsZSk7IH0pCi0KLSNkZWZpbmUgX21tX21hc2tfaTMyc2NhdHRlcl9wZChfX2FkZHIsIF9fbWFzaywgX19pbmRleCwgX192MSwgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3NjYWxlKSBfX2V4dGVuc2lvbl9fICh7ICAgICAgICBcCi0gIF9fYnVpbHRpbl9pYTMyX3NjYXR0ZXJzaXYyZGYgKF9fYWRkciwgX19tYXNrLCAoX192NHNpKSBfX2luZGV4LFwKLSAgICAgICAgIChfX3YyZGYpIF9fdjEsIF9fc2NhbGUpOyB9KQotCi0jZGVmaW5lIF9tbV9pMzJzY2F0dGVyX2VwaTY0KF9fYWRkciwgX19pbmRleCwgX192MSwgX19zY2FsZSkgX19leHRlbnNpb25fXyAoeyBcCi0gIF9fYnVpbHRpbl9pYTMyX3NjYXR0ZXJzaXYyZGkgKF9fYWRkciwgKF9fbW1hc2s4KSAweEZGLCAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAoX192NHNpKSBfX2luZGV4LCAoX192MmRpKSBfX3YxLCBfX3NjYWxlKTsgfSkKLQotI2RlZmluZSBfbW1fbWFza19pMzJzY2F0dGVyX2VwaTY0KF9fYWRkciwgX19tYXNrLCBfX2luZGV4LCBfX3YxLCBcCi0gICAgICAgICBfX3NjYWxlKSBfX2V4dGVuc2lvbl9fICh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIF9fYnVpbHRpbl9pYTMyX3NjYXR0ZXJzaXYyZGkgKF9fYWRkciwgX19tYXNrLCAoX192NHNpKSBfX2luZGV4LCBcCi0gICAgICAgIChfX3YyZGkpIF9fdjEsIF9fc2NhbGUpOyB9KQotCi0jZGVmaW5lIF9tbTI1Nl9pMzJzY2F0dGVyX3BkKF9fYWRkciwgX19pbmRleCwgX192MSwgX19zY2FsZSkgX19leHRlbnNpb25fXyAoeyBcCi0gIF9fYnVpbHRpbl9pYTMyX3NjYXR0ZXJzaXY0ZGYgKF9fYWRkciwgKF9fbW1hc2s4KSAweEZGLCAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIChfX3Y0c2kpIF9faW5kZXgsIChfX3Y0ZGYpIF9fdjEsIF9fc2NhbGUpOyB9KQotCi0jZGVmaW5lIF9tbTI1Nl9tYXNrX2kzMnNjYXR0ZXJfcGQoX19hZGRyLCBfX21hc2ssIF9faW5kZXgsIF9fdjEsIFwKLSAgICAgICAgIF9fc2NhbGUpIF9fZXh0ZW5zaW9uX18gKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgX19idWlsdGluX2lhMzJfc2NhdHRlcnNpdjRkZiAoX19hZGRyLCBfX21hc2ssIChfX3Y0c2kpIF9faW5kZXgsIFwKLSAgICAgICAgKF9fdjRkZikgX192MSwgX19zY2FsZSk7IH0pCi0KLSNkZWZpbmUgX21tMjU2X2kzMnNjYXR0ZXJfZXBpNjQoX19hZGRyLCBfX2luZGV4LCBfX3YxLCAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc2NhbGUpIF9fZXh0ZW5zaW9uX18gKHsgXAotICBfX2J1aWx0aW5faWEzMl9zY2F0dGVyc2l2NGRpIChfX2FkZHIsIChfX21tYXNrOCkgMHhGRiwgIFwKLSAgICAgICAgKF9fdjRzaSkgX19pbmRleCwgKF9fdjRkaSkgX192MSwgX19zY2FsZSk7IH0pCi0KLSNkZWZpbmUgX21tMjU2X21hc2tfaTMyc2NhdHRlcl9lcGk2NChfX2FkZHIsIF9fbWFzaywgX19pbmRleCwgX192MSwgXAotICAgICAgICAgICAgX19zY2FsZSkgX19leHRlbnNpb25fXyAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIF9fYnVpbHRpbl9pYTMyX3NjYXR0ZXJzaXY0ZGkgKF9fYWRkciwgX19tYXNrLCAoX192NHNpKSBfX2luZGV4LCAgIFwKLSAgICAgICAgKF9fdjRkaSkgX192MSwgX19zY2FsZSk7IH0pCi0KLSNkZWZpbmUgX21tX2kzMnNjYXR0ZXJfcHMoX19hZGRyLCBfX2luZGV4LCBfX3YxLCBfX3NjYWxlKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgX19idWlsdGluX2lhMzJfc2NhdHRlcnNpdjRzZiAoX19hZGRyLCAoX19tbWFzazgpIDB4RkYsICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgKF9fdjRzaSkgX19pbmRleCwgKF9fdjRzZikgX192MSwgX19zY2FsZSk7IH0pCi0KLSNkZWZpbmUgX21tX21hc2tfaTMyc2NhdHRlcl9wcyhfX2FkZHIsIF9fbWFzaywgX19pbmRleCwgX192MSwgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3NjYWxlKSBfX2V4dGVuc2lvbl9fICh7ICAgICAgICAgIFwKLSAgX19idWlsdGluX2lhMzJfc2NhdHRlcnNpdjRzZiAoX19hZGRyLCBfX21hc2ssIChfX3Y0c2kpIF9faW5kZXgsIFwKLSAgICAgICAgKF9fdjRzZikgX192MSwgX19zY2FsZSk7IH0pCi0KLSNkZWZpbmUgX21tX2kzMnNjYXR0ZXJfZXBpMzIoX19hZGRyLCBfX2luZGV4LCBfX3YxLCBfX3NjYWxlKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgX19idWlsdGluX2lhMzJfc2NhdHRlcnNpdjRzaSAoX19hZGRyLCAoX19tbWFzazgpIDB4RkYsICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIChfX3Y0c2kpIF9faW5kZXgsIChfX3Y0c2kpIF9fdjEsIF9fc2NhbGUpOyB9KQotCi0jZGVmaW5lIF9tbV9tYXNrX2kzMnNjYXR0ZXJfZXBpMzIoX19hZGRyLCBfX21hc2ssIF9faW5kZXgsIF9fdjEsIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3NjYWxlKSBfX2V4dGVuc2lvbl9fICh7ICAgICAgXAotICBfX2J1aWx0aW5faWEzMl9zY2F0dGVyc2l2NHNpIChfX2FkZHIsIF9fbWFzaywgKF9fdjRzaSkgX19pbmRleCxcCi0gICAgICAgIChfX3Y0c2kpIF9fdjEsIF9fc2NhbGUpOyB9KQotCi0jZGVmaW5lIF9tbTI1Nl9pMzJzY2F0dGVyX3BzKF9fYWRkciwgX19pbmRleCwgX192MSwgX19zY2FsZSkgX19leHRlbnNpb25fXyAoeyBcCi0gIF9fYnVpbHRpbl9pYTMyX3NjYXR0ZXJzaXY4c2YgKF9fYWRkciwgKF9fbW1hc2s4KSAweEZGLCAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIChfX3Y4c2kpIF9faW5kZXgsIChfX3Y4c2YpIF9fdjEsIF9fc2NhbGUpOyB9KQotCi0jZGVmaW5lIF9tbTI1Nl9tYXNrX2kzMnNjYXR0ZXJfcHMoX19hZGRyLCBfX21hc2ssIF9faW5kZXgsIF9fdjEsIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zY2FsZSkgX19leHRlbnNpb25fXyAoeyAgICAgXAotICBfX2J1aWx0aW5faWEzMl9zY2F0dGVyc2l2OHNmIChfX2FkZHIsIF9fbWFzaywgKF9fdjhzaSkgX19pbmRleCxcCi0gICAgICAgIChfX3Y4c2YpIF9fdjEsIF9fc2NhbGUpOyB9KQotCi0jZGVmaW5lIF9tbTI1Nl9pMzJzY2F0dGVyX2VwaTMyKF9fYWRkciwgX19pbmRleCwgX192MSwgX19zY2FsZSkgX19leHRlbnNpb25fXyAoeyBcCi0gIF9fYnVpbHRpbl9pYTMyX3NjYXR0ZXJzaXY4c2kgKF9fYWRkciwgKF9fbW1hc2s4KSAweEZGLCAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIChfX3Y4c2kpIF9faW5kZXgsIChfX3Y4c2kpIF9fdjEsIF9fc2NhbGUpOyB9KQotCi0jZGVmaW5lIF9tbTI1Nl9tYXNrX2kzMnNjYXR0ZXJfZXBpMzIoX19hZGRyLCBfX21hc2ssIF9faW5kZXgsIF9fdjEsIFwKLSAgICAgICAgICAgIF9fc2NhbGUpIF9fZXh0ZW5zaW9uX18gKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgX19idWlsdGluX2lhMzJfc2NhdHRlcnNpdjhzaSAoX19hZGRyLCBfX21hc2ssIChfX3Y4c2kpIF9faW5kZXgsICAgIFwKLSAgICAgICAgKF9fdjhzaSkgX192MSwgX19zY2FsZSk7IH0pCi0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWFza19zcXJ0X3BkIChfX20xMjhkIF9fVywgX19tbWFzazggX19VLCBfX20xMjhkIF9fQSkgewotICByZXR1cm4gKF9fbTEyOGQpIF9fYnVpbHRpbl9pYTMyX3NxcnRwZDEyOF9tYXNrICgoX192MmRmKSBfX0EsCi0gICAgICAgICAgICAgIChfX3YyZGYpIF9fVywKLSAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2t6X3NxcnRfcGQgKF9fbW1hc2s4IF9fVSwgX19tMTI4ZCBfX0EpIHsKLSAgcmV0dXJuIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl9zcXJ0cGQxMjhfbWFzayAoKF9fdjJkZikgX19BLAotICAgICAgICAgICAgICAoX192MmRmKQotICAgICAgICAgICAgICBfbW1fc2V0emVyb19wZCAoKSwKLSAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X21hc2tfc3FydF9wZCAoX19tMjU2ZCBfX1csIF9fbW1hc2s4IF9fVSwgX19tMjU2ZCBfX0EpIHsKLSAgcmV0dXJuIChfX20yNTZkKSBfX2J1aWx0aW5faWEzMl9zcXJ0cGQyNTZfbWFzayAoKF9fdjRkZikgX19BLAotICAgICAgICAgICAgICAoX192NGRmKSBfX1csCi0gICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXNrel9zcXJ0X3BkIChfX21tYXNrOCBfX1UsIF9fbTI1NmQgX19BKSB7Ci0gIHJldHVybiAoX19tMjU2ZCkgX19idWlsdGluX2lhMzJfc3FydHBkMjU2X21hc2sgKChfX3Y0ZGYpIF9fQSwKLSAgICAgICAgICAgICAgKF9fdjRkZikKLSAgICAgICAgICAgICAgX21tMjU2X3NldHplcm9fcGQgKCksCi0gICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2tfc3FydF9wcyAoX19tMTI4IF9fVywgX19tbWFzazggX19VLCBfX20xMjggX19BKSB7Ci0gIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl9zcXJ0cHMxMjhfbWFzayAoKF9fdjRzZikgX19BLAotICAgICAgICAgICAgIChfX3Y0c2YpIF9fVywKLSAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tYXNrel9zcXJ0X3BzIChfX21tYXNrOCBfX1UsIF9fbTEyOCBfX0EpIHsKLSAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX3NxcnRwczEyOF9tYXNrICgoX192NHNmKSBfX0EsCi0gICAgICAgICAgICAgKF9fdjRzZikKLSAgICAgICAgICAgICBfbW1fc2V0emVyb19wcyAoKSwKLSAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXNrX3NxcnRfcHMgKF9fbTI1NiBfX1csIF9fbW1hc2s4IF9fVSwgX19tMjU2IF9fQSkgewotICByZXR1cm4gKF9fbTI1NikgX19idWlsdGluX2lhMzJfc3FydHBzMjU2X21hc2sgKChfX3Y4c2YpIF9fQSwKLSAgICAgICAgICAgICAoX192OHNmKSBfX1csCi0gICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfbWFza3pfc3FydF9wcyAoX19tbWFzazggX19VLCBfX20yNTYgX19BKSB7Ci0gIHJldHVybiAoX19tMjU2KSBfX2J1aWx0aW5faWEzMl9zcXJ0cHMyNTZfbWFzayAoKF9fdjhzZikgX19BLAotICAgICAgICAgICAgIChfX3Y4c2YpCi0gICAgICAgICAgICAgX21tMjU2X3NldHplcm9fcHMgKCksCi0gICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2tfc3ViX3BkIChfX20xMjhkIF9fVywgX19tbWFzazggX19VLCBfX20xMjhkIF9fQSwgX19tMTI4ZCBfX0IpIHsKLSAgcmV0dXJuIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl9zdWJwZDEyOF9tYXNrICgoX192MmRmKSBfX0EsCi0gICAgICAgICAgICAgKF9fdjJkZikgX19CLAotICAgICAgICAgICAgIChfX3YyZGYpIF9fVywKLSAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWFza3pfc3ViX3BkIChfX21tYXNrOCBfX1UsIF9fbTEyOGQgX19BLCBfX20xMjhkIF9fQikgewotICByZXR1cm4gKF9fbTEyOGQpIF9fYnVpbHRpbl9pYTMyX3N1YnBkMTI4X21hc2sgKChfX3YyZGYpIF9fQSwKLSAgICAgICAgICAgICAoX192MmRmKSBfX0IsCi0gICAgICAgICAgICAgKF9fdjJkZikKLSAgICAgICAgICAgICBfbW1fc2V0emVyb19wZCAoKSwKLSAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfbWFza19zdWJfcGQgKF9fbTI1NmQgX19XLCBfX21tYXNrOCBfX1UsIF9fbTI1NmQgX19BLAotICAgICAgICBfX20yNTZkIF9fQikgewotICByZXR1cm4gKF9fbTI1NmQpIF9fYnVpbHRpbl9pYTMyX3N1YnBkMjU2X21hc2sgKChfX3Y0ZGYpIF9fQSwKLSAgICAgICAgICAgICAoX192NGRmKSBfX0IsCi0gICAgICAgICAgICAgKF9fdjRkZikgX19XLAotICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXNrel9zdWJfcGQgKF9fbW1hc2s4IF9fVSwgX19tMjU2ZCBfX0EsIF9fbTI1NmQgX19CKSB7Ci0gIHJldHVybiAoX19tMjU2ZCkgX19idWlsdGluX2lhMzJfc3VicGQyNTZfbWFzayAoKF9fdjRkZikgX19BLAotICAgICAgICAgICAgIChfX3Y0ZGYpIF9fQiwKLSAgICAgICAgICAgICAoX192NGRmKQotICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3BkICgpLAotICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2tfc3ViX3BzIChfX20xMjggX19XLCBfX21tYXNrMTYgX19VLCBfX20xMjggX19BLCBfX20xMjggX19CKSB7Ci0gIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl9zdWJwczEyOF9tYXNrICgoX192NHNmKSBfX0EsCi0gICAgICAgICAgICAoX192NHNmKSBfX0IsCi0gICAgICAgICAgICAoX192NHNmKSBfX1csCi0gICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tYXNrel9zdWJfcHMgKF9fbW1hc2sxNiBfX1UsIF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IpIHsKLSAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX3N1YnBzMTI4X21hc2sgKChfX3Y0c2YpIF9fQSwKLSAgICAgICAgICAgIChfX3Y0c2YpIF9fQiwKLSAgICAgICAgICAgIChfX3Y0c2YpCi0gICAgICAgICAgICBfbW1fc2V0emVyb19wcyAoKSwKLSAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X21hc2tfc3ViX3BzIChfX20yNTYgX19XLCBfX21tYXNrMTYgX19VLCBfX20yNTYgX19BLCBfX20yNTYgX19CKSB7Ci0gIHJldHVybiAoX19tMjU2KSBfX2J1aWx0aW5faWEzMl9zdWJwczI1Nl9tYXNrICgoX192OHNmKSBfX0EsCi0gICAgICAgICAgICAoX192OHNmKSBfX0IsCi0gICAgICAgICAgICAoX192OHNmKSBfX1csCi0gICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXNrel9zdWJfcHMgKF9fbW1hc2sxNiBfX1UsIF9fbTI1NiBfX0EsIF9fbTI1NiBfX0IpIHsKLSAgcmV0dXJuIChfX20yNTYpIF9fYnVpbHRpbl9pYTMyX3N1YnBzMjU2X21hc2sgKChfX3Y4c2YpIF9fQSwKLSAgICAgICAgICAgIChfX3Y4c2YpIF9fQiwKLSAgICAgICAgICAgIChfX3Y4c2YpCi0gICAgICAgICAgICBfbW0yNTZfc2V0emVyb19wcyAoKSwKLSAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tYXNrMl9wZXJtdXRleDJ2YXJfZXBpMzIgKF9fbTEyOGkgX19BLCBfX20xMjhpIF9fSSwgX19tbWFzazggX19VLAotICAgICAgICAgICAgX19tMTI4aSBfX0IpIHsKLSAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl92cGVybWkydmFyZDEyOF9tYXNrICgoX192NHNpKSBfX0EsCi0gICAgICAgICAgICAgICAgICAgKF9fdjRzaSkgX19JCi0gICAgICAgICAgICAgICAgICAgLyogaWR4ICovICwKLSAgICAgICAgICAgICAgICAgICAoX192NHNpKSBfX0IsCi0gICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X21hc2syX3Blcm11dGV4MnZhcl9lcGkzMiAoX19tMjU2aSBfX0EsIF9fbTI1NmkgX19JLAotICAgICAgICAgX19tbWFzazggX19VLCBfX20yNTZpIF9fQikgewotICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3ZwZXJtaTJ2YXJkMjU2X21hc2sgKChfX3Y4c2kpIF9fQSwKLSAgICAgICAgICAgICAgICAgICAoX192OHNpKSBfX0kKLSAgICAgICAgICAgICAgICAgICAvKiBpZHggKi8gLAotICAgICAgICAgICAgICAgICAgIChfX3Y4c2kpIF9fQiwKLSAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWFzazJfcGVybXV0ZXgydmFyX3BkIChfX20xMjhkIF9fQSwgX19tMTI4aSBfX0ksIF9fbW1hc2s4IF9fVSwKLSAgICAgICAgIF9fbTEyOGQgX19CKSB7Ci0gIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfdnBlcm1pMnZhcnBkMTI4X21hc2sgKChfX3YyZGYpIF9fQSwKLSAgICAgICAgICAgICAgKF9fdjJkaSkgX19JCi0gICAgICAgICAgICAgIC8qIGlkeCAqLyAsCi0gICAgICAgICAgICAgIChfX3YyZGYpIF9fQiwKLSAgICAgICAgICAgICAgKF9fbW1hc2s4KQotICAgICAgICAgICAgICBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X21hc2syX3Blcm11dGV4MnZhcl9wZCAoX19tMjU2ZCBfX0EsIF9fbTI1NmkgX19JLCBfX21tYXNrOCBfX1UsCi0gICAgICAgICAgICBfX20yNTZkIF9fQikgewotICByZXR1cm4gKF9fbTI1NmQpIF9fYnVpbHRpbl9pYTMyX3ZwZXJtaTJ2YXJwZDI1Nl9tYXNrICgoX192NGRmKSBfX0EsCi0gICAgICAgICAgICAgIChfX3Y0ZGkpIF9fSQotICAgICAgICAgICAgICAvKiBpZHggKi8gLAotICAgICAgICAgICAgICAoX192NGRmKSBfX0IsCi0gICAgICAgICAgICAgIChfX21tYXNrOCkKLSAgICAgICAgICAgICAgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2syX3Blcm11dGV4MnZhcl9wcyAoX19tMTI4IF9fQSwgX19tMTI4aSBfX0ksIF9fbW1hc2s4IF9fVSwKLSAgICAgICAgIF9fbTEyOCBfX0IpIHsKLSAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX3ZwZXJtaTJ2YXJwczEyOF9tYXNrICgoX192NHNmKSBfX0EsCi0gICAgICAgICAgICAgICAgICAgKF9fdjRzaSkgX19JCi0gICAgICAgICAgICAgICAgICAgLyogaWR4ICovICwKLSAgICAgICAgICAgICAgICAgICAoX192NHNmKSBfX0IsCi0gICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfbWFzazJfcGVybXV0ZXgydmFyX3BzIChfX20yNTYgX19BLCBfX20yNTZpIF9fSSwgX19tbWFzazggX19VLAotICAgICAgICAgICAgX19tMjU2IF9fQikgewotICByZXR1cm4gKF9fbTI1NikgX19idWlsdGluX2lhMzJfdnBlcm1pMnZhcnBzMjU2X21hc2sgKChfX3Y4c2YpIF9fQSwKLSAgICAgICAgICAgICAgICAgICAoX192OHNpKSBfX0kKLSAgICAgICAgICAgICAgICAgICAvKiBpZHggKi8gLAotICAgICAgICAgICAgICAgICAgIChfX3Y4c2YpIF9fQiwKLSAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWFzazJfcGVybXV0ZXgydmFyX2VwaTY0IChfX20xMjhpIF9fQSwgX19tMTI4aSBfX0ksIF9fbW1hc2s4IF9fVSwKLSAgICAgICAgICAgIF9fbTEyOGkgX19CKSB7Ci0gIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfdnBlcm1pMnZhcnExMjhfbWFzayAoKF9fdjJkaSkgX19BLAotICAgICAgICAgICAgICAgICAgIChfX3YyZGkpIF9fSQotICAgICAgICAgICAgICAgICAgIC8qIGlkeCAqLyAsCi0gICAgICAgICAgICAgICAgICAgKF9fdjJkaSkgX19CLAotICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXNrMl9wZXJtdXRleDJ2YXJfZXBpNjQgKF9fbTI1NmkgX19BLCBfX20yNTZpIF9fSSwKLSAgICAgICAgIF9fbW1hc2s4IF9fVSwgX19tMjU2aSBfX0IpIHsKLSAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl92cGVybWkydmFycTI1Nl9tYXNrICgoX192NGRpKSBfX0EsCi0gICAgICAgICAgICAgICAgICAgKF9fdjRkaSkgX19JCi0gICAgICAgICAgICAgICAgICAgLyogaWR4ICovICwKLSAgICAgICAgICAgICAgICAgICAoX192NGRpKSBfX0IsCi0gICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX3Blcm11dGV4MnZhcl9lcGkzMiAoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19JLCBfX20xMjhpIF9fQikgewotICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3ZwZXJtdDJ2YXJkMTI4X21hc2sgKChfX3Y0c2kpIF9fSQotICAgICAgICAgICAgICAgICAgIC8qIGlkeCAqLyAsCi0gICAgICAgICAgICAgICAgICAgKF9fdjRzaSkgX19BLAotICAgICAgICAgICAgICAgICAgIChfX3Y0c2kpIF9fQiwKLSAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tYXNrX3Blcm11dGV4MnZhcl9lcGkzMiAoX19tMTI4aSBfX0EsIF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0ksCi0gICAgICAgICAgIF9fbTEyOGkgX19CKSB7Ci0gIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfdnBlcm10MnZhcmQxMjhfbWFzayAoKF9fdjRzaSkgX19JCi0gICAgICAgICAgICAgICAgICAgLyogaWR4ICovICwKLSAgICAgICAgICAgICAgICAgICAoX192NHNpKSBfX0EsCi0gICAgICAgICAgICAgICAgICAgKF9fdjRzaSkgX19CLAotICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tYXNrel9wZXJtdXRleDJ2YXJfZXBpMzIgKF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19JLAotICAgICAgICAgICAgX19tMTI4aSBfX0IpIHsKLSAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl92cGVybXQydmFyZDEyOF9tYXNreiAoKF9fdjRzaSkgX19JCi0gICAgICAgICAgICAgIC8qIGlkeCAqLyAsCi0gICAgICAgICAgICAgIChfX3Y0c2kpIF9fQSwKLSAgICAgICAgICAgICAgKF9fdjRzaSkgX19CLAotICAgICAgICAgICAgICAoX19tbWFzazgpCi0gICAgICAgICAgICAgIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfcGVybXV0ZXgydmFyX2VwaTMyIChfX20yNTZpIF9fQSwgX19tMjU2aSBfX0ksIF9fbTI1NmkgX19CKSB7Ci0gIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfdnBlcm10MnZhcmQyNTZfbWFzayAoKF9fdjhzaSkgX19JCi0gICAgICAgICAgICAgICAgICAgLyogaWR4ICovICwKLSAgICAgICAgICAgICAgICAgICAoX192OHNpKSBfX0EsCi0gICAgICAgICAgICAgICAgICAgKF9fdjhzaSkgX19CLAotICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X21hc2tfcGVybXV0ZXgydmFyX2VwaTMyIChfX20yNTZpIF9fQSwgX19tbWFzazggX19VLCBfX20yNTZpIF9fSSwKLSAgICAgICAgX19tMjU2aSBfX0IpIHsKLSAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl92cGVybXQydmFyZDI1Nl9tYXNrICgoX192OHNpKSBfX0kKLSAgICAgICAgICAgICAgICAgICAvKiBpZHggKi8gLAotICAgICAgICAgICAgICAgICAgIChfX3Y4c2kpIF9fQSwKLSAgICAgICAgICAgICAgICAgICAoX192OHNpKSBfX0IsCi0gICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X21hc2t6X3Blcm11dGV4MnZhcl9lcGkzMiAoX19tbWFzazggX19VLCBfX20yNTZpIF9fQSwKLSAgICAgICAgIF9fbTI1NmkgX19JLCBfX20yNTZpIF9fQikgewotICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3ZwZXJtdDJ2YXJkMjU2X21hc2t6ICgoX192OHNpKSBfX0kKLSAgICAgICAgICAgICAgLyogaWR4ICovICwKLSAgICAgICAgICAgICAgKF9fdjhzaSkgX19BLAotICAgICAgICAgICAgICAoX192OHNpKSBfX0IsCi0gICAgICAgICAgICAgIChfX21tYXNrOCkKLSAgICAgICAgICAgICAgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9wZXJtdXRleDJ2YXJfcGQgKF9fbTEyOGQgX19BLCBfX20xMjhpIF9fSSwgX19tMTI4ZCBfX0IpIHsKLSAgcmV0dXJuIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl92cGVybXQydmFycGQxMjhfbWFzayAoKF9fdjJkaSkgX19JCi0gICAgICAgICAgICAgIC8qIGlkeCAqLyAsCi0gICAgICAgICAgICAgIChfX3YyZGYpIF9fQSwKLSAgICAgICAgICAgICAgKF9fdjJkZikgX19CLAotICAgICAgICAgICAgICAoX19tbWFzazgpIC0KLSAgICAgICAgICAgICAgMSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWFza19wZXJtdXRleDJ2YXJfcGQgKF9fbTEyOGQgX19BLCBfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19JLAotICAgICAgICBfX20xMjhkIF9fQikgewotICByZXR1cm4gKF9fbTEyOGQpIF9fYnVpbHRpbl9pYTMyX3ZwZXJtdDJ2YXJwZDEyOF9tYXNrICgoX192MmRpKSBfX0kKLSAgICAgICAgICAgICAgLyogaWR4ICovICwKLSAgICAgICAgICAgICAgKF9fdjJkZikgX19BLAotICAgICAgICAgICAgICAoX192MmRmKSBfX0IsCi0gICAgICAgICAgICAgIChfX21tYXNrOCkKLSAgICAgICAgICAgICAgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tYXNrel9wZXJtdXRleDJ2YXJfcGQgKF9fbW1hc2s4IF9fVSwgX19tMTI4ZCBfX0EsIF9fbTEyOGkgX19JLAotICAgICAgICAgX19tMTI4ZCBfX0IpIHsKLSAgcmV0dXJuIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl92cGVybXQydmFycGQxMjhfbWFza3ogKChfX3YyZGkpIF9fSQotICAgICAgICAgICAgICAgLyogaWR4ICovICwKLSAgICAgICAgICAgICAgIChfX3YyZGYpIF9fQSwKLSAgICAgICAgICAgICAgIChfX3YyZGYpIF9fQiwKLSAgICAgICAgICAgICAgIChfX21tYXNrOCkKLSAgICAgICAgICAgICAgIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfcGVybXV0ZXgydmFyX3BkIChfX20yNTZkIF9fQSwgX19tMjU2aSBfX0ksIF9fbTI1NmQgX19CKSB7Ci0gIHJldHVybiAoX19tMjU2ZCkgX19idWlsdGluX2lhMzJfdnBlcm10MnZhcnBkMjU2X21hc2sgKChfX3Y0ZGkpIF9fSQotICAgICAgICAgICAgICAvKiBpZHggKi8gLAotICAgICAgICAgICAgICAoX192NGRmKSBfX0EsCi0gICAgICAgICAgICAgIChfX3Y0ZGYpIF9fQiwKLSAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtCi0gICAgICAgICAgICAgIDEpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X21hc2tfcGVybXV0ZXgydmFyX3BkIChfX20yNTZkIF9fQSwgX19tbWFzazggX19VLCBfX20yNTZpIF9fSSwKLSAgICAgICAgICAgX19tMjU2ZCBfX0IpIHsKLSAgcmV0dXJuIChfX20yNTZkKSBfX2J1aWx0aW5faWEzMl92cGVybXQydmFycGQyNTZfbWFzayAoKF9fdjRkaSkgX19JCi0gICAgICAgICAgICAgIC8qIGlkeCAqLyAsCi0gICAgICAgICAgICAgIChfX3Y0ZGYpIF9fQSwKLSAgICAgICAgICAgICAgKF9fdjRkZikgX19CLAotICAgICAgICAgICAgICAoX19tbWFzazgpCi0gICAgICAgICAgICAgIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfbWFza3pfcGVybXV0ZXgydmFyX3BkIChfX21tYXNrOCBfX1UsIF9fbTI1NmQgX19BLCBfX20yNTZpIF9fSSwKLSAgICAgICAgICAgIF9fbTI1NmQgX19CKSB7Ci0gIHJldHVybiAoX19tMjU2ZCkgX19idWlsdGluX2lhMzJfdnBlcm10MnZhcnBkMjU2X21hc2t6ICgoX192NGRpKSBfX0kKLSAgICAgICAgICAgICAgIC8qIGlkeCAqLyAsCi0gICAgICAgICAgICAgICAoX192NGRmKSBfX0EsCi0gICAgICAgICAgICAgICAoX192NGRmKSBfX0IsCi0gICAgICAgICAgICAgICAoX19tbWFzazgpCi0gICAgICAgICAgICAgICBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fcGVybXV0ZXgydmFyX3BzIChfX20xMjggX19BLCBfX20xMjhpIF9fSSwgX19tMTI4IF9fQikgewotICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfdnBlcm10MnZhcnBzMTI4X21hc2sgKChfX3Y0c2kpIF9fSQotICAgICAgICAgICAgICAgICAgIC8qIGlkeCAqLyAsCi0gICAgICAgICAgICAgICAgICAgKF9fdjRzZikgX19BLAotICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpIF9fQiwKLSAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2tfcGVybXV0ZXgydmFyX3BzIChfX20xMjggX19BLCBfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19JLAotICAgICAgICBfX20xMjggX19CKSB7Ci0gIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl92cGVybXQydmFycHMxMjhfbWFzayAoKF9fdjRzaSkgX19JCi0gICAgICAgICAgICAgICAgICAgLyogaWR4ICovICwKLSAgICAgICAgICAgICAgICAgICAoX192NHNmKSBfX0EsCi0gICAgICAgICAgICAgICAgICAgKF9fdjRzZikgX19CLAotICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2t6X3Blcm11dGV4MnZhcl9wcyAoX19tbWFzazggX19VLCBfX20xMjggX19BLCBfX20xMjhpIF9fSSwKLSAgICAgICAgIF9fbTEyOCBfX0IpIHsKLSAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX3ZwZXJtdDJ2YXJwczEyOF9tYXNreiAoKF9fdjRzaSkgX19JCi0gICAgICAgICAgICAgIC8qIGlkeCAqLyAsCi0gICAgICAgICAgICAgIChfX3Y0c2YpIF9fQSwKLSAgICAgICAgICAgICAgKF9fdjRzZikgX19CLAotICAgICAgICAgICAgICAoX19tbWFzazgpCi0gICAgICAgICAgICAgIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9wZXJtdXRleDJ2YXJfcHMgKF9fbTI1NiBfX0EsIF9fbTI1NmkgX19JLCBfX20yNTYgX19CKSB7Ci0gIHJldHVybiAoX19tMjU2KSBfX2J1aWx0aW5faWEzMl92cGVybXQydmFycHMyNTZfbWFzayAoKF9fdjhzaSkgX19JCi0gICAgICAgICAgICAgICAgICAgLyogaWR4ICovICwKLSAgICAgICAgICAgICAgICAgICAoX192OHNmKSBfX0EsCi0gICAgICAgICAgICAgICAgICAgKF9fdjhzZikgX19CLAotICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfbWFza19wZXJtdXRleDJ2YXJfcHMgKF9fbTI1NiBfX0EsIF9fbW1hc2s4IF9fVSwgX19tMjU2aSBfX0ksCi0gICAgICAgICAgIF9fbTI1NiBfX0IpIHsKLSAgcmV0dXJuIChfX20yNTYpIF9fYnVpbHRpbl9pYTMyX3ZwZXJtdDJ2YXJwczI1Nl9tYXNrICgoX192OHNpKSBfX0kKLSAgICAgICAgICAgICAgICAgICAvKiBpZHggKi8gLAotICAgICAgICAgICAgICAgICAgIChfX3Y4c2YpIF9fQSwKLSAgICAgICAgICAgICAgICAgICAoX192OHNmKSBfX0IsCi0gICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfbWFza3pfcGVybXV0ZXgydmFyX3BzIChfX21tYXNrOCBfX1UsIF9fbTI1NiBfX0EsIF9fbTI1NmkgX19JLAotICAgICAgICAgICAgX19tMjU2IF9fQikgewotICByZXR1cm4gKF9fbTI1NikgX19idWlsdGluX2lhMzJfdnBlcm10MnZhcnBzMjU2X21hc2t6ICgoX192OHNpKSBfX0kKLSAgICAgICAgICAgICAgLyogaWR4ICovICwKLSAgICAgICAgICAgICAgKF9fdjhzZikgX19BLAotICAgICAgICAgICAgICAoX192OHNmKSBfX0IsCi0gICAgICAgICAgICAgIChfX21tYXNrOCkKLSAgICAgICAgICAgICAgX19VKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9wZXJtdXRleDJ2YXJfZXBpNjQgKF9fbTEyOGkgX19BLCBfX20xMjhpIF9fSSwgX19tMTI4aSBfX0IpIHsKLSAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl92cGVybXQydmFycTEyOF9tYXNrICgoX192MmRpKSBfX0kKLSAgICAgICAgICAgICAgICAgICAvKiBpZHggKi8gLAotICAgICAgICAgICAgICAgICAgIChfX3YyZGkpIF9fQSwKLSAgICAgICAgICAgICAgICAgICAoX192MmRpKSBfX0IsCi0gICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWFza19wZXJtdXRleDJ2YXJfZXBpNjQgKF9fbTEyOGkgX19BLCBfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19JLAotICAgICAgICAgICBfX20xMjhpIF9fQikgewotICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3ZwZXJtdDJ2YXJxMTI4X21hc2sgKChfX3YyZGkpIF9fSQotICAgICAgICAgICAgICAgICAgIC8qIGlkeCAqLyAsCi0gICAgICAgICAgICAgICAgICAgKF9fdjJkaSkgX19BLAotICAgICAgICAgICAgICAgICAgIChfX3YyZGkpIF9fQiwKLSAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWFza3pfcGVybXV0ZXgydmFyX2VwaTY0IChfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fSSwKLSAgICAgICAgICAgIF9fbTEyOGkgX19CKSB7Ci0gIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfdnBlcm10MnZhcnExMjhfbWFza3ogKChfX3YyZGkpIF9fSQotICAgICAgICAgICAgICAvKiBpZHggKi8gLAotICAgICAgICAgICAgICAoX192MmRpKSBfX0EsCi0gICAgICAgICAgICAgIChfX3YyZGkpIF9fQiwKLSAgICAgICAgICAgICAgKF9fbW1hc2s4KQotICAgICAgICAgICAgICBfX1UpOwotfQotCi0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfcGVybXV0ZXgydmFyX2VwaTY0IChfX20yNTZpIF9fQSwgX19tMjU2aSBfX0ksIF9fbTI1NmkgX19CKSB7Ci0gIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfdnBlcm10MnZhcnEyNTZfbWFzayAoKF9fdjRkaSkgX19JCi0gICAgICAgICAgICAgICAgICAgLyogaWR4ICovICwKLSAgICAgICAgICAgICAgICAgICAoX192NGRpKSBfX0EsCi0gICAgICAgICAgICAgICAgICAgKF9fdjRkaSkgX19CLAotICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X21hc2tfcGVybXV0ZXgydmFyX2VwaTY0IChfX20yNTZpIF9fQSwgX19tbWFzazggX19VLCBfX20yNTZpIF9fSSwKLSAgICAgICAgX19tMjU2aSBfX0IpIHsKLSAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl92cGVybXQydmFycTI1Nl9tYXNrICgoX192NGRpKSBfX0kKLSAgICAgICAgICAgICAgICAgICAvKiBpZHggKi8gLAotICAgICAgICAgICAgICAgICAgIChfX3Y0ZGkpIF9fQSwKLSAgICAgICAgICAgICAgICAgICAoX192NGRpKSBfX0IsCi0gICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X21hc2t6X3Blcm11dGV4MnZhcl9lcGk2NCAoX19tbWFzazggX19VLCBfX20yNTZpIF9fQSwKLSAgICAgICAgIF9fbTI1NmkgX19JLCBfX20yNTZpIF9fQikgewotICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3ZwZXJtdDJ2YXJxMjU2X21hc2t6ICgoX192NGRpKSBfX0kKLSAgICAgICAgICAgICAgLyogaWR4ICovICwKLSAgICAgICAgICAgICAgKF9fdjRkaSkgX19BLAotICAgICAgICAgICAgICAoX192NGRpKSBfX0IsCi0gICAgICAgICAgICAgIChfX21tYXNrOCkKLSAgICAgICAgICAgICAgX19VKTsKLX0KLQotI3VuZGVmIF9fREVGQVVMVF9GTl9BVFRSUwotI3VuZGVmIF9fREVGQVVMVF9GTl9BVFRSU19CT1RICi0KLSNlbmRpZiAvKiBfX0FWWDUxMlZMSU5UUklOX0ggKi8KZGlmZiAtLWdpdCBhL2NsYW5nLTI1NzcxMTMvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvYXZ4aW50cmluLmggYi9jbGFuZy0yNTc3MTEzL2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL2F2eGludHJpbi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZDFjYTU0Li4wMDAwMDAwCi0tLSBhL2NsYW5nLTI1NzcxMTMvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvYXZ4aW50cmluLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMzE4ICswLDAgQEAKLS8qPT09LS0tLSBhdnhpbnRyaW4uaCAtIEFWWCBpbnRyaW5zaWNzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KLSAqCi0gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5Ci0gKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAotICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cwotICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAotICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCi0gKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgotICoKLSAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCi0gKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KLSAqCi0gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgotICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCi0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKLSAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCi0gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCi0gKiBUSEUgU09GVFdBUkUuCi0gKgotICo9PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQotICovCi0KLSNpZm5kZWYgX19JTU1JTlRSSU5fSAotI2Vycm9yICJOZXZlciB1c2UgPGF2eGludHJpbi5oPiBkaXJlY3RseTsgaW5jbHVkZSA8aW1taW50cmluLmg+IGluc3RlYWQuIgotI2VuZGlmCi0KLSNpZm5kZWYgX19BVlhJTlRSSU5fSAotI2RlZmluZSBfX0FWWElOVFJJTl9ICi0KLXR5cGVkZWYgZG91YmxlIF9fdjRkZiBfX2F0dHJpYnV0ZV9fICgoX192ZWN0b3Jfc2l6ZV9fICgzMikpKTsKLXR5cGVkZWYgZmxvYXQgX192OHNmIF9fYXR0cmlidXRlX18gKChfX3ZlY3Rvcl9zaXplX18gKDMyKSkpOwotdHlwZWRlZiBsb25nIGxvbmcgX192NGRpIF9fYXR0cmlidXRlX18gKChfX3ZlY3Rvcl9zaXplX18gKDMyKSkpOwotdHlwZWRlZiBpbnQgX192OHNpIF9fYXR0cmlidXRlX18gKChfX3ZlY3Rvcl9zaXplX18gKDMyKSkpOwotdHlwZWRlZiBzaG9ydCBfX3YxNmhpIF9fYXR0cmlidXRlX18gKChfX3ZlY3Rvcl9zaXplX18gKDMyKSkpOwotdHlwZWRlZiBjaGFyIF9fdjMycWkgX19hdHRyaWJ1dGVfXyAoKF9fdmVjdG9yX3NpemVfXyAoMzIpKSk7Ci0KLS8qIFdlIG5lZWQgYW4gZXhwbGljaXRseSBzaWduZWQgdmFyaWFudCBmb3IgY2hhci4gTm90ZSB0aGF0IHRoaXMgc2hvdWxkbid0Ci0gKiBhcHBlYXIgaW4gdGhlIGludGVyZmFjZSB0aG91Z2guICovCi10eXBlZGVmIHNpZ25lZCBjaGFyIF9fdjMycXMgX19hdHRyaWJ1dGVfXygoX192ZWN0b3Jfc2l6ZV9fKDMyKSkpOwotCi10eXBlZGVmIGZsb2F0IF9fbTI1NiBfX2F0dHJpYnV0ZV9fICgoX192ZWN0b3Jfc2l6ZV9fICgzMikpKTsKLXR5cGVkZWYgZG91YmxlIF9fbTI1NmQgX19hdHRyaWJ1dGVfXygoX192ZWN0b3Jfc2l6ZV9fKDMyKSkpOwotdHlwZWRlZiBsb25nIGxvbmcgX19tMjU2aSBfX2F0dHJpYnV0ZV9fKChfX3ZlY3Rvcl9zaXplX18oMzIpKSk7Ci0KLS8qIERlZmluZSB0aGUgZGVmYXVsdCBhdHRyaWJ1dGVzIGZvciB0aGUgZnVuY3Rpb25zIGluIHRoaXMgZmlsZS4gKi8KLSNkZWZpbmUgX19ERUZBVUxUX0ZOX0FUVFJTIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXywgX190YXJnZXRfXygiYXZ4IikpKQotCi0vKiBBcml0aG1ldGljICovCi1zdGF0aWMgX19pbmxpbmUgX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9hZGRfcGQoX19tMjU2ZCBfX2EsIF9fbTI1NmQgX19iKQotewotICByZXR1cm4gX19hK19fYjsKLX0KLQotc3RhdGljIF9faW5saW5lIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9hZGRfcHMoX19tMjU2IF9fYSwgX19tMjU2IF9fYikKLXsKLSAgcmV0dXJuIF9fYStfX2I7Ci19Ci0KLXN0YXRpYyBfX2lubGluZSBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X3N1Yl9wZChfX20yNTZkIF9fYSwgX19tMjU2ZCBfX2IpCi17Ci0gIHJldHVybiBfX2EtX19iOwotfQotCi1zdGF0aWMgX19pbmxpbmUgX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X3N1Yl9wcyhfX20yNTYgX19hLCBfX20yNTYgX19iKQotewotICByZXR1cm4gX19hLV9fYjsKLX0KLQotc3RhdGljIF9faW5saW5lIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfYWRkc3ViX3BkKF9fbTI1NmQgX19hLCBfX20yNTZkIF9fYikKLXsKLSAgcmV0dXJuIChfX20yNTZkKV9fYnVpbHRpbl9pYTMyX2FkZHN1YnBkMjU2KChfX3Y0ZGYpX19hLCAoX192NGRmKV9fYik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZSBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfYWRkc3ViX3BzKF9fbTI1NiBfX2EsIF9fbTI1NiBfX2IpCi17Ci0gIHJldHVybiAoX19tMjU2KV9fYnVpbHRpbl9pYTMyX2FkZHN1YnBzMjU2KChfX3Y4c2YpX19hLCAoX192OHNmKV9fYik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZSBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X2Rpdl9wZChfX20yNTZkIF9fYSwgX19tMjU2ZCBfX2IpCi17Ci0gIHJldHVybiBfX2EgLyBfX2I7Ci19Ci0KLXN0YXRpYyBfX2lubGluZSBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfZGl2X3BzKF9fbTI1NiBfX2EsIF9fbTI1NiBfX2IpCi17Ci0gIHJldHVybiBfX2EgLyBfX2I7Ci19Ci0KLXN0YXRpYyBfX2lubGluZSBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X21heF9wZChfX20yNTZkIF9fYSwgX19tMjU2ZCBfX2IpCi17Ci0gIHJldHVybiAoX19tMjU2ZClfX2J1aWx0aW5faWEzMl9tYXhwZDI1NigoX192NGRmKV9fYSwgKF9fdjRkZilfX2IpOwotfQotCi1zdGF0aWMgX19pbmxpbmUgX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X21heF9wcyhfX20yNTYgX19hLCBfX20yNTYgX19iKQotewotICByZXR1cm4gKF9fbTI1NilfX2J1aWx0aW5faWEzMl9tYXhwczI1NigoX192OHNmKV9fYSwgKF9fdjhzZilfX2IpOwotfQotCi1zdGF0aWMgX19pbmxpbmUgX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9taW5fcGQoX19tMjU2ZCBfX2EsIF9fbTI1NmQgX19iKQotewotICByZXR1cm4gKF9fbTI1NmQpX19idWlsdGluX2lhMzJfbWlucGQyNTYoKF9fdjRkZilfX2EsIChfX3Y0ZGYpX19iKTsKLX0KLQotc3RhdGljIF9faW5saW5lIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9taW5fcHMoX19tMjU2IF9fYSwgX19tMjU2IF9fYikKLXsKLSAgcmV0dXJuIChfX20yNTYpX19idWlsdGluX2lhMzJfbWlucHMyNTYoKF9fdjhzZilfX2EsIChfX3Y4c2YpX19iKTsKLX0KLQotc3RhdGljIF9faW5saW5lIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfbXVsX3BkKF9fbTI1NmQgX19hLCBfX20yNTZkIF9fYikKLXsKLSAgcmV0dXJuIF9fYSAqIF9fYjsKLX0KLQotc3RhdGljIF9faW5saW5lIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tdWxfcHMoX19tMjU2IF9fYSwgX19tMjU2IF9fYikKLXsKLSAgcmV0dXJuIF9fYSAqIF9fYjsKLX0KLQotc3RhdGljIF9faW5saW5lIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfc3FydF9wZChfX20yNTZkIF9fYSkKLXsKLSAgcmV0dXJuIChfX20yNTZkKV9fYnVpbHRpbl9pYTMyX3NxcnRwZDI1NigoX192NGRmKV9fYSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZSBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfc3FydF9wcyhfX20yNTYgX19hKQotewotICByZXR1cm4gKF9fbTI1NilfX2J1aWx0aW5faWEzMl9zcXJ0cHMyNTYoKF9fdjhzZilfX2EpOwotfQotCi1zdGF0aWMgX19pbmxpbmUgX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X3JzcXJ0X3BzKF9fbTI1NiBfX2EpCi17Ci0gIHJldHVybiAoX19tMjU2KV9fYnVpbHRpbl9pYTMyX3JzcXJ0cHMyNTYoKF9fdjhzZilfX2EpOwotfQotCi1zdGF0aWMgX19pbmxpbmUgX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X3JjcF9wcyhfX20yNTYgX19hKQotewotICByZXR1cm4gKF9fbTI1NilfX2J1aWx0aW5faWEzMl9yY3BwczI1NigoX192OHNmKV9fYSk7Ci19Ci0KLSNkZWZpbmUgX21tMjU2X3JvdW5kX3BkKFYsIE0pIF9fZXh0ZW5zaW9uX18gKHsgXAotICAgIChfX20yNTZkKV9fYnVpbHRpbl9pYTMyX3JvdW5kcGQyNTYoKF9fdjRkZikoX19tMjU2ZCkoViksIChNKSk7IH0pCi0KLSNkZWZpbmUgX21tMjU2X3JvdW5kX3BzKFYsIE0pIF9fZXh0ZW5zaW9uX18gKHsgXAotICAoX19tMjU2KV9fYnVpbHRpbl9pYTMyX3JvdW5kcHMyNTYoKF9fdjhzZikoX19tMjU2KShWKSwgKE0pKTsgfSkKLQotI2RlZmluZSBfbW0yNTZfY2VpbF9wZChWKSAgX21tMjU2X3JvdW5kX3BkKChWKSwgX01NX0ZST1VORF9DRUlMKQotI2RlZmluZSBfbW0yNTZfZmxvb3JfcGQoVikgX21tMjU2X3JvdW5kX3BkKChWKSwgX01NX0ZST1VORF9GTE9PUikKLSNkZWZpbmUgX21tMjU2X2NlaWxfcHMoVikgIF9tbTI1Nl9yb3VuZF9wcygoViksIF9NTV9GUk9VTkRfQ0VJTCkKLSNkZWZpbmUgX21tMjU2X2Zsb29yX3BzKFYpIF9tbTI1Nl9yb3VuZF9wcygoViksIF9NTV9GUk9VTkRfRkxPT1IpCi0KLS8qIExvZ2ljYWwgKi8KLXN0YXRpYyBfX2lubGluZSBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X2FuZF9wZChfX20yNTZkIF9fYSwgX19tMjU2ZCBfX2IpCi17Ci0gIHJldHVybiAoX19tMjU2ZCkoKF9fdjRkaSlfX2EgJiAoX192NGRpKV9fYik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZSBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfYW5kX3BzKF9fbTI1NiBfX2EsIF9fbTI1NiBfX2IpCi17Ci0gIHJldHVybiAoX19tMjU2KSgoX192OHNpKV9fYSAmIChfX3Y4c2kpX19iKTsKLX0KLQotc3RhdGljIF9faW5saW5lIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfYW5kbm90X3BkKF9fbTI1NmQgX19hLCBfX20yNTZkIF9fYikKLXsKLSAgcmV0dXJuIChfX20yNTZkKSh+KF9fdjRkaSlfX2EgJiAoX192NGRpKV9fYik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZSBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfYW5kbm90X3BzKF9fbTI1NiBfX2EsIF9fbTI1NiBfX2IpCi17Ci0gIHJldHVybiAoX19tMjU2KSh+KF9fdjhzaSlfX2EgJiAoX192OHNpKV9fYik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZSBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X29yX3BkKF9fbTI1NmQgX19hLCBfX20yNTZkIF9fYikKLXsKLSAgcmV0dXJuIChfX20yNTZkKSgoX192NGRpKV9fYSB8IChfX3Y0ZGkpX19iKTsKLX0KLQotc3RhdGljIF9faW5saW5lIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9vcl9wcyhfX20yNTYgX19hLCBfX20yNTYgX19iKQotewotICByZXR1cm4gKF9fbTI1NikoKF9fdjhzaSlfX2EgfCAoX192OHNpKV9fYik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZSBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X3hvcl9wZChfX20yNTZkIF9fYSwgX19tMjU2ZCBfX2IpCi17Ci0gIHJldHVybiAoX19tMjU2ZCkoKF9fdjRkaSlfX2EgXiAoX192NGRpKV9fYik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZSBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfeG9yX3BzKF9fbTI1NiBfX2EsIF9fbTI1NiBfX2IpCi17Ci0gIHJldHVybiAoX19tMjU2KSgoX192OHNpKV9fYSBeIChfX3Y4c2kpX19iKTsKLX0KLQotLyogSG9yaXpvbnRhbCBhcml0aG1ldGljICovCi1zdGF0aWMgX19pbmxpbmUgX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9oYWRkX3BkKF9fbTI1NmQgX19hLCBfX20yNTZkIF9fYikKLXsKLSAgcmV0dXJuIChfX20yNTZkKV9fYnVpbHRpbl9pYTMyX2hhZGRwZDI1NigoX192NGRmKV9fYSwgKF9fdjRkZilfX2IpOwotfQotCi1zdGF0aWMgX19pbmxpbmUgX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X2hhZGRfcHMoX19tMjU2IF9fYSwgX19tMjU2IF9fYikKLXsKLSAgcmV0dXJuIChfX20yNTYpX19idWlsdGluX2lhMzJfaGFkZHBzMjU2KChfX3Y4c2YpX19hLCAoX192OHNmKV9fYik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZSBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X2hzdWJfcGQoX19tMjU2ZCBfX2EsIF9fbTI1NmQgX19iKQotewotICByZXR1cm4gKF9fbTI1NmQpX19idWlsdGluX2lhMzJfaHN1YnBkMjU2KChfX3Y0ZGYpX19hLCAoX192NGRmKV9fYik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZSBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfaHN1Yl9wcyhfX20yNTYgX19hLCBfX20yNTYgX19iKQotewotICByZXR1cm4gKF9fbTI1NilfX2J1aWx0aW5faWEzMl9oc3VicHMyNTYoKF9fdjhzZilfX2EsIChfX3Y4c2YpX19iKTsKLX0KLQotLyogVmVjdG9yIHBlcm11dGF0aW9ucyAqLwotc3RhdGljIF9faW5saW5lIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fcGVybXV0ZXZhcl9wZChfX20xMjhkIF9fYSwgX19tMTI4aSBfX2MpCi17Ci0gIHJldHVybiAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl92cGVybWlsdmFycGQoKF9fdjJkZilfX2EsIChfX3YyZGkpX19jKTsKLX0KLQotc3RhdGljIF9faW5saW5lIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfcGVybXV0ZXZhcl9wZChfX20yNTZkIF9fYSwgX19tMjU2aSBfX2MpCi17Ci0gIHJldHVybiAoX19tMjU2ZClfX2J1aWx0aW5faWEzMl92cGVybWlsdmFycGQyNTYoKF9fdjRkZilfX2EsIChfX3Y0ZGkpX19jKTsKLX0KLQotc3RhdGljIF9faW5saW5lIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9wZXJtdXRldmFyX3BzKF9fbTEyOCBfX2EsIF9fbTEyOGkgX19jKQotewotICByZXR1cm4gKF9fbTEyOClfX2J1aWx0aW5faWEzMl92cGVybWlsdmFycHMoKF9fdjRzZilfX2EsIChfX3Y0c2kpX19jKTsKLX0KLQotc3RhdGljIF9faW5saW5lIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9wZXJtdXRldmFyX3BzKF9fbTI1NiBfX2EsIF9fbTI1NmkgX19jKQotewotICByZXR1cm4gKF9fbTI1NilfX2J1aWx0aW5faWEzMl92cGVybWlsdmFycHMyNTYoKF9fdjhzZilfX2EsIChfX3Y4c2kpX19jKTsKLX0KLQotI2RlZmluZSBfbW1fcGVybXV0ZV9wZChBLCBDKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgKF9fbTEyOGQpX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjJkZikoX19tMTI4ZCkoQSksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZilfbW1fc2V0emVyb19wZCgpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChDKSAmIDB4MSwgKChDKSAmIDB4MikgPj4gMSk7IH0pCi0KLSNkZWZpbmUgX21tMjU2X3Blcm11dGVfcGQoQSwgQykgX19leHRlbnNpb25fXyAoeyBcCi0gIChfX20yNTZkKV9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKChfX3Y0ZGYpKF9fbTI1NmQpKEEpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGYpX21tMjU2X3NldHplcm9fcGQoKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQykgJiAweDEsICgoQykgJiAweDIpID4+IDEsIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMiArICgoKEMpICYgMHg0KSA+PiAyKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyICsgKCgoQykgJiAweDgpID4+IDMpKTsgfSkKLQotI2RlZmluZSBfbW1fcGVybXV0ZV9wcyhBLCBDKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgKF9fbTEyOClfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192NHNmKShfX20xMjgpKEEpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZilfbW1fc2V0emVyb19wcygpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChDKSAmIDB4MywgKChDKSAmIDB4YykgPj4gMiwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEMpICYgMHgzMCkgPj4gNCwgKChDKSAmIDB4YzApID4+IDYpOyB9KQotCi0jZGVmaW5lIF9tbTI1Nl9wZXJtdXRlX3BzKEEsIEMpIF9fZXh0ZW5zaW9uX18gKHsgXAotICAoX19tMjU2KV9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKChfX3Y4c2YpKF9fbTI1NikoQSksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNmKV9tbTI1Nl9zZXR6ZXJvX3BzKCksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQykgJiAweDMsICgoQykgJiAweGMpID4+IDIsIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEMpICYgMHgzMCkgPj4gNCwgKChDKSAmIDB4YzApID4+IDYsIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0ICsgKCgoQykgJiAweDAzKSA+PiAwKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQgKyAoKChDKSAmIDB4MGMpID4+IDIpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNCArICgoKEMpICYgMHgzMCkgPj4gNCksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0ICsgKCgoQykgJiAweGMwKSA+PiA2KSk7IH0pCi0KLSNkZWZpbmUgX21tMjU2X3Blcm11dGUyZjEyOF9wZChWMSwgVjIsIE0pIF9fZXh0ZW5zaW9uX18gKHsgXAotICAoX19tMjU2ZClfX2J1aWx0aW5faWEzMl92cGVybTJmMTI4X3BkMjU2KChfX3Y0ZGYpKF9fbTI1NmQpKFYxKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGYpKF9fbTI1NmQpKFYyKSwgKE0pKTsgfSkKLQotI2RlZmluZSBfbW0yNTZfcGVybXV0ZTJmMTI4X3BzKFYxLCBWMiwgTSkgX19leHRlbnNpb25fXyAoeyBcCi0gIChfX20yNTYpX19idWlsdGluX2lhMzJfdnBlcm0yZjEyOF9wczI1NigoX192OHNmKShfX20yNTYpKFYxKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzZikoX19tMjU2KShWMiksIChNKSk7IH0pCi0KLSNkZWZpbmUgX21tMjU2X3Blcm11dGUyZjEyOF9zaTI1NihWMSwgVjIsIE0pIF9fZXh0ZW5zaW9uX18gKHsgXAotICAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl92cGVybTJmMTI4X3NpMjU2KChfX3Y4c2kpKF9fbTI1NmkpKFYxKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2kpKF9fbTI1NmkpKFYyKSwgKE0pKTsgfSkKLQotLyogVmVjdG9yIEJsZW5kICovCi0jZGVmaW5lIF9tbTI1Nl9ibGVuZF9wZChWMSwgVjIsIE0pIF9fZXh0ZW5zaW9uX18gKHsgXAotICAoX19tMjU2ZClfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192NGRmKShfX20yNTZkKShWMSksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkZikoX19tMjU2ZCkoVjIpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKE0pICYgMHgwMSkgPyA0IDogMCksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoTSkgJiAweDAyKSA/IDUgOiAxKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChNKSAmIDB4MDQpID8gNiA6IDIpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKE0pICYgMHgwOCkgPyA3IDogMykpOyB9KQotCi0jZGVmaW5lIF9tbTI1Nl9ibGVuZF9wcyhWMSwgVjIsIE0pIF9fZXh0ZW5zaW9uX18gKHsgXAotICAoX19tMjU2KV9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKChfX3Y4c2YpKF9fbTI1NikoVjEpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzZikoX19tMjU2KShWMiksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChNKSAmIDB4MDEpID8gIDggOiAwKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKE0pICYgMHgwMikgPyAgOSA6IDEpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoTSkgJiAweDA0KSA/IDEwIDogMiksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChNKSAmIDB4MDgpID8gMTEgOiAzKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKE0pICYgMHgxMCkgPyAxMiA6IDQpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoTSkgJiAweDIwKSA/IDEzIDogNSksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChNKSAmIDB4NDApID8gMTQgOiA2KSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKE0pICYgMHg4MCkgPyAxNSA6IDcpKTsgfSkKLQotc3RhdGljIF9faW5saW5lIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfYmxlbmR2X3BkKF9fbTI1NmQgX19hLCBfX20yNTZkIF9fYiwgX19tMjU2ZCBfX2MpCi17Ci0gIHJldHVybiAoX19tMjU2ZClfX2J1aWx0aW5faWEzMl9ibGVuZHZwZDI1NigKLSAgICAoX192NGRmKV9fYSwgKF9fdjRkZilfX2IsIChfX3Y0ZGYpX19jKTsKLX0KLQotc3RhdGljIF9faW5saW5lIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9ibGVuZHZfcHMoX19tMjU2IF9fYSwgX19tMjU2IF9fYiwgX19tMjU2IF9fYykKLXsKLSAgcmV0dXJuIChfX20yNTYpX19idWlsdGluX2lhMzJfYmxlbmR2cHMyNTYoCi0gICAgKF9fdjhzZilfX2EsIChfX3Y4c2YpX19iLCAoX192OHNmKV9fYyk7Ci19Ci0KLS8qIFZlY3RvciBEb3QgUHJvZHVjdCAqLwotI2RlZmluZSBfbW0yNTZfZHBfcHMoVjEsIFYyLCBNKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgKF9fbTI1NilfX2J1aWx0aW5faWEzMl9kcHBzMjU2KChfX3Y4c2YpKF9fbTI1NikoVjEpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNmKShfX20yNTYpKFYyKSwgKE0pKTsgfSkKLQotLyogVmVjdG9yIHNodWZmbGUgKi8KLSNkZWZpbmUgX21tMjU2X3NodWZmbGVfcHMoYSwgYiwgbWFzaykgX19leHRlbnNpb25fXyAoeyBcCi0gICAgICAgIChfX20yNTYpX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjhzZikoX19tMjU2KShhKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2YpKF9fbTI1NikoYiksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobWFzaykgJiAweDMsIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKG1hc2spICYgMHhjKSA+PiAyLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgobWFzaykgJiAweDMwKSA+PiA0KSArIDgsIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChtYXNrKSAmIDB4YzApID4+IDYpICsgOCwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgobWFzaykgJiAweDMpICsgNCwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKG1hc2spICYgMHhjKSA+PiAyKSArIDQsIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChtYXNrKSAmIDB4MzApID4+IDQpICsgMTIsIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChtYXNrKSAmIDB4YzApID4+IDYpICsgMTIpOyB9KQotCi0jZGVmaW5lIF9tbTI1Nl9zaHVmZmxlX3BkKGEsIGIsIG1hc2spIF9fZXh0ZW5zaW9uX18gKHsgXAotICAgICAgICAoX19tMjU2ZClfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192NGRmKShfX20yNTZkKShhKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRmKShfX20yNTZkKShiKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobWFzaykgJiAweDEsIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgobWFzaykgJiAweDIpID4+IDEpICsgNCwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChtYXNrKSAmIDB4NCkgPj4gMikgKyAyLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKG1hc2spICYgMHg4KSA+PiAzKSArIDYpOyB9KQotCi0vKiBDb21wYXJlICovCi0jZGVmaW5lIF9DTVBfRVFfT1EgICAgMHgwMCAvKiBFcXVhbCAob3JkZXJlZCwgbm9uLXNpZ25hbGluZykgICovCi0jZGVmaW5lIF9DTVBfTFRfT1MgICAgMHgwMSAvKiBMZXNzLXRoYW4gKG9yZGVyZWQsIHNpZ25hbGluZykgICovCi0jZGVmaW5lIF9DTVBfTEVfT1MgICAgMHgwMiAvKiBMZXNzLXRoYW4tb3ItZXF1YWwgKG9yZGVyZWQsIHNpZ25hbGluZykgICovCi0jZGVmaW5lIF9DTVBfVU5PUkRfUSAgMHgwMyAvKiBVbm9yZGVyZWQgKG5vbi1zaWduYWxpbmcpICAqLwotI2RlZmluZSBfQ01QX05FUV9VUSAgIDB4MDQgLyogTm90LWVxdWFsICh1bm9yZGVyZWQsIG5vbi1zaWduYWxpbmcpICAqLwotI2RlZmluZSBfQ01QX05MVF9VUyAgIDB4MDUgLyogTm90LWxlc3MtdGhhbiAodW5vcmRlcmVkLCBzaWduYWxpbmcpICAqLwotI2RlZmluZSBfQ01QX05MRV9VUyAgIDB4MDYgLyogTm90LWxlc3MtdGhhbi1vci1lcXVhbCAodW5vcmRlcmVkLCBzaWduYWxpbmcpICAqLwotI2RlZmluZSBfQ01QX09SRF9RICAgIDB4MDcgLyogT3JkZXJlZCAobm9uc2lnbmFsaW5nKSAgICovCi0jZGVmaW5lIF9DTVBfRVFfVVEgICAgMHgwOCAvKiBFcXVhbCAodW5vcmRlcmVkLCBub24tc2lnbmFsaW5nKSAgKi8KLSNkZWZpbmUgX0NNUF9OR0VfVVMgICAweDA5IC8qIE5vdC1ncmVhdGVyLXRoYW4tb3ItZXF1YWwgKHVub3JkLCBzaWduYWxpbmcpICAqLwotI2RlZmluZSBfQ01QX05HVF9VUyAgIDB4MGEgLyogTm90LWdyZWF0ZXItdGhhbiAodW5vcmRlcmVkLCBzaWduYWxpbmcpICAqLwotI2RlZmluZSBfQ01QX0ZBTFNFX09RIDB4MGIgLyogRmFsc2UgKG9yZGVyZWQsIG5vbi1zaWduYWxpbmcpICAqLwotI2RlZmluZSBfQ01QX05FUV9PUSAgIDB4MGMgLyogTm90LWVxdWFsIChvcmRlcmVkLCBub24tc2lnbmFsaW5nKSAgKi8KLSNkZWZpbmUgX0NNUF9HRV9PUyAgICAweDBkIC8qIEdyZWF0ZXItdGhhbi1vci1lcXVhbCAob3JkZXJlZCwgc2lnbmFsaW5nKSAgKi8KLSNkZWZpbmUgX0NNUF9HVF9PUyAgICAweDBlIC8qIEdyZWF0ZXItdGhhbiAob3JkZXJlZCwgc2lnbmFsaW5nKSAgKi8KLSNkZWZpbmUgX0NNUF9UUlVFX1VRICAweDBmIC8qIFRydWUgKHVub3JkZXJlZCwgbm9uLXNpZ25hbGluZykgICovCi0jZGVmaW5lIF9DTVBfRVFfT1MgICAgMHgxMCAvKiBFcXVhbCAob3JkZXJlZCwgc2lnbmFsaW5nKSAgKi8KLSNkZWZpbmUgX0NNUF9MVF9PUSAgICAweDExIC8qIExlc3MtdGhhbiAob3JkZXJlZCwgbm9uLXNpZ25hbGluZykgICovCi0jZGVmaW5lIF9DTVBfTEVfT1EgICAgMHgxMiAvKiBMZXNzLXRoYW4tb3ItZXF1YWwgKG9yZGVyZWQsIG5vbi1zaWduYWxpbmcpICAqLwotI2RlZmluZSBfQ01QX1VOT1JEX1MgIDB4MTMgLyogVW5vcmRlcmVkIChzaWduYWxpbmcpICAqLwotI2RlZmluZSBfQ01QX05FUV9VUyAgIDB4MTQgLyogTm90LWVxdWFsICh1bm9yZGVyZWQsIHNpZ25hbGluZykgICovCi0jZGVmaW5lIF9DTVBfTkxUX1VRICAgMHgxNSAvKiBOb3QtbGVzcy10aGFuICh1bm9yZGVyZWQsIG5vbi1zaWduYWxpbmcpICAqLwotI2RlZmluZSBfQ01QX05MRV9VUSAgIDB4MTYgLyogTm90LWxlc3MtdGhhbi1vci1lcXVhbCAodW5vcmQsIG5vbi1zaWduYWxpbmcpICAqLwotI2RlZmluZSBfQ01QX09SRF9TICAgIDB4MTcgLyogT3JkZXJlZCAoc2lnbmFsaW5nKSAgKi8KLSNkZWZpbmUgX0NNUF9FUV9VUyAgICAweDE4IC8qIEVxdWFsICh1bm9yZGVyZWQsIHNpZ25hbGluZykgICovCi0jZGVmaW5lIF9DTVBfTkdFX1VRICAgMHgxOSAvKiBOb3QtZ3JlYXRlci10aGFuLW9yLWVxdWFsICh1bm9yZCwgbm9uLXNpZ24pICAqLwotI2RlZmluZSBfQ01QX05HVF9VUSAgIDB4MWEgLyogTm90LWdyZWF0ZXItdGhhbiAodW5vcmRlcmVkLCBub24tc2lnbmFsaW5nKSAgKi8KLSNkZWZpbmUgX0NNUF9GQUxTRV9PUyAweDFiIC8qIEZhbHNlIChvcmRlcmVkLCBzaWduYWxpbmcpICAqLwotI2RlZmluZSBfQ01QX05FUV9PUyAgIDB4MWMgLyogTm90LWVxdWFsIChvcmRlcmVkLCBzaWduYWxpbmcpICAqLwotI2RlZmluZSBfQ01QX0dFX09RICAgIDB4MWQgLyogR3JlYXRlci10aGFuLW9yLWVxdWFsIChvcmRlcmVkLCBub24tc2lnbmFsaW5nKSAgKi8KLSNkZWZpbmUgX0NNUF9HVF9PUSAgICAweDFlIC8qIEdyZWF0ZXItdGhhbiAob3JkZXJlZCwgbm9uLXNpZ25hbGluZykgICovCi0jZGVmaW5lIF9DTVBfVFJVRV9VUyAgMHgxZiAvKiBUcnVlICh1bm9yZGVyZWQsIHNpZ25hbGluZykgICovCi0KLSNkZWZpbmUgX21tX2NtcF9wZChhLCBiLCBjKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgKF9fbTEyOGQpX19idWlsdGluX2lhMzJfY21wcGQoKF9fdjJkZikoX19tMTI4ZCkoYSksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikoX19tMTI4ZCkoYiksIChjKSk7IH0pCi0KLSNkZWZpbmUgX21tX2NtcF9wcyhhLCBiLCBjKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgKF9fbTEyOClfX2J1aWx0aW5faWEzMl9jbXBwcygoX192NHNmKShfX20xMjgpKGEpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikoX19tMTI4KShiKSwgKGMpKTsgfSkKLQotI2RlZmluZSBfbW0yNTZfY21wX3BkKGEsIGIsIGMpIF9fZXh0ZW5zaW9uX18gKHsgXAotICAoX19tMjU2ZClfX2J1aWx0aW5faWEzMl9jbXBwZDI1NigoX192NGRmKShfX20yNTZkKShhKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRmKShfX20yNTZkKShiKSwgKGMpKTsgfSkKLQotI2RlZmluZSBfbW0yNTZfY21wX3BzKGEsIGIsIGMpIF9fZXh0ZW5zaW9uX18gKHsgXAotICAoX19tMjU2KV9fYnVpbHRpbl9pYTMyX2NtcHBzMjU2KChfX3Y4c2YpKF9fbTI1NikoYSksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNmKShfX20yNTYpKGIpLCAoYykpOyB9KQotCi0jZGVmaW5lIF9tbV9jbXBfc2QoYSwgYiwgYykgX19leHRlbnNpb25fXyAoeyBcCi0gIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX2NtcHNkKChfX3YyZGYpKF9fbTEyOGQpKGEpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpKF9fbTEyOGQpKGIpLCAoYykpOyB9KQotCi0jZGVmaW5lIF9tbV9jbXBfc3MoYSwgYiwgYykgX19leHRlbnNpb25fXyAoeyBcCi0gIChfX20xMjgpX19idWlsdGluX2lhMzJfY21wc3MoKF9fdjRzZikoX19tMTI4KShhKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpKF9fbTEyOCkoYiksIChjKSk7IH0pCi0KLXN0YXRpYyBfX2lubGluZSBpbnQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfZXh0cmFjdF9lcGkzMihfX20yNTZpIF9fYSwgY29uc3QgaW50IF9faW1tKQotewotICBfX3Y4c2kgX19iID0gKF9fdjhzaSlfX2E7Ci0gIHJldHVybiBfX2JbX19pbW0gJiA3XTsKLX0KLQotc3RhdGljIF9faW5saW5lIGludCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9leHRyYWN0X2VwaTE2KF9fbTI1NmkgX19hLCBjb25zdCBpbnQgX19pbW0pCi17Ci0gIF9fdjE2aGkgX19iID0gKF9fdjE2aGkpX19hOwotICByZXR1cm4gX19iW19faW1tICYgMTVdOwotfQotCi1zdGF0aWMgX19pbmxpbmUgaW50IF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X2V4dHJhY3RfZXBpOChfX20yNTZpIF9fYSwgY29uc3QgaW50IF9faW1tKQotewotICBfX3YzMnFpIF9fYiA9IChfX3YzMnFpKV9fYTsKLSAgcmV0dXJuIF9fYltfX2ltbSAmIDMxXTsKLX0KLQotI2lmZGVmIF9feDg2XzY0X18KLXN0YXRpYyBfX2lubGluZSBsb25nIGxvbmcgIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X2V4dHJhY3RfZXBpNjQoX19tMjU2aSBfX2EsIGNvbnN0IGludCBfX2ltbSkKLXsKLSAgX192NGRpIF9fYiA9IChfX3Y0ZGkpX19hOwotICByZXR1cm4gX19iW19faW1tICYgM107Ci19Ci0jZW5kaWYKLQotc3RhdGljIF9faW5saW5lIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfaW5zZXJ0X2VwaTMyKF9fbTI1NmkgX19hLCBpbnQgX19iLCBpbnQgY29uc3QgX19pbW0pCi17Ci0gIF9fdjhzaSBfX2MgPSAoX192OHNpKV9fYTsKLSAgX19jW19faW1tICYgN10gPSBfX2I7Ci0gIHJldHVybiAoX19tMjU2aSlfX2M7Ci19Ci0KLXN0YXRpYyBfX2lubGluZSBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X2luc2VydF9lcGkxNihfX20yNTZpIF9fYSwgaW50IF9fYiwgaW50IGNvbnN0IF9faW1tKQotewotICBfX3YxNmhpIF9fYyA9IChfX3YxNmhpKV9fYTsKLSAgX19jW19faW1tICYgMTVdID0gX19iOwotICByZXR1cm4gKF9fbTI1NmkpX19jOwotfQotCi1zdGF0aWMgX19pbmxpbmUgX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9pbnNlcnRfZXBpOChfX20yNTZpIF9fYSwgaW50IF9fYiwgaW50IGNvbnN0IF9faW1tKQotewotICBfX3YzMnFpIF9fYyA9IChfX3YzMnFpKV9fYTsKLSAgX19jW19faW1tICYgMzFdID0gX19iOwotICByZXR1cm4gKF9fbTI1NmkpX19jOwotfQotCi0jaWZkZWYgX194ODZfNjRfXwotc3RhdGljIF9faW5saW5lIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfaW5zZXJ0X2VwaTY0KF9fbTI1NmkgX19hLCBsb25nIGxvbmcgX19iLCBpbnQgY29uc3QgX19pbW0pCi17Ci0gIF9fdjRkaSBfX2MgPSAoX192NGRpKV9fYTsKLSAgX19jW19faW1tICYgM10gPSBfX2I7Ci0gIHJldHVybiAoX19tMjU2aSlfX2M7Ci19Ci0jZW5kaWYKLQotLyogQ29udmVyc2lvbiAqLwotc3RhdGljIF9faW5saW5lIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfY3Z0ZXBpMzJfcGQoX19tMTI4aSBfX2EpCi17Ci0gIHJldHVybiAoX19tMjU2ZClfX2J1aWx0aW5faWEzMl9jdnRkcTJwZDI1NigoX192NHNpKSBfX2EpOwotfQotCi1zdGF0aWMgX19pbmxpbmUgX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X2N2dGVwaTMyX3BzKF9fbTI1NmkgX19hKQotewotICByZXR1cm4gKF9fbTI1NilfX2J1aWx0aW5faWEzMl9jdnRkcTJwczI1NigoX192OHNpKSBfX2EpOwotfQotCi1zdGF0aWMgX19pbmxpbmUgX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X2N2dHBkX3BzKF9fbTI1NmQgX19hKQotewotICByZXR1cm4gKF9fbTEyOClfX2J1aWx0aW5faWEzMl9jdnRwZDJwczI1NigoX192NGRmKSBfX2EpOwotfQotCi1zdGF0aWMgX19pbmxpbmUgX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9jdnRwc19lcGkzMihfX20yNTYgX19hKQotewotICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfY3Z0cHMyZHEyNTYoKF9fdjhzZikgX19hKTsKLX0KLQotc3RhdGljIF9faW5saW5lIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfY3Z0cHNfcGQoX19tMTI4IF9fYSkKLXsKLSAgcmV0dXJuIChfX20yNTZkKV9fYnVpbHRpbl9pYTMyX2N2dHBzMnBkMjU2KChfX3Y0c2YpIF9fYSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZSBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X2N2dHRwZF9lcGkzMihfX20yNTZkIF9fYSkKLXsKLSAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX2N2dHRwZDJkcTI1NigoX192NGRmKSBfX2EpOwotfQotCi1zdGF0aWMgX19pbmxpbmUgX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9jdnRwZF9lcGkzMihfX20yNTZkIF9fYSkKLXsKLSAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX2N2dHBkMmRxMjU2KChfX3Y0ZGYpIF9fYSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZSBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X2N2dHRwc19lcGkzMihfX20yNTYgX19hKQotewotICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfY3Z0dHBzMmRxMjU2KChfX3Y4c2YpIF9fYSk7Ci19Ci0KLS8qIFZlY3RvciByZXBsaWNhdGUgKi8KLXN0YXRpYyBfX2lubGluZSBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfbW92ZWhkdXBfcHMoX19tMjU2IF9fYSkKLXsKLSAgcmV0dXJuIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fYSwgX19hLCAxLCAxLCAzLCAzLCA1LCA1LCA3LCA3KTsKLX0KLQotc3RhdGljIF9faW5saW5lIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tb3ZlbGR1cF9wcyhfX20yNTYgX19hKQotewotICByZXR1cm4gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19hLCBfX2EsIDAsIDAsIDIsIDIsIDQsIDQsIDYsIDYpOwotfQotCi1zdGF0aWMgX19pbmxpbmUgX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tb3ZlZHVwX3BkKF9fbTI1NmQgX19hKQotewotICByZXR1cm4gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19hLCBfX2EsIDAsIDAsIDIsIDIpOwotfQotCi0vKiBVbnBhY2sgYW5kIEludGVybGVhdmUgKi8KLXN0YXRpYyBfX2lubGluZSBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X3VucGFja2hpX3BkKF9fbTI1NmQgX19hLCBfX20yNTZkIF9fYikKLXsKLSAgcmV0dXJuIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fYSwgX19iLCAxLCA1LCAxKzIsIDUrMik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZSBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X3VucGFja2xvX3BkKF9fbTI1NmQgX19hLCBfX20yNTZkIF9fYikKLXsKLSAgcmV0dXJuIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fYSwgX19iLCAwLCA0LCAwKzIsIDQrMik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZSBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfdW5wYWNraGlfcHMoX19tMjU2IF9fYSwgX19tMjU2IF9fYikKLXsKLSAgcmV0dXJuIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fYSwgX19iLCAyLCAxMCwgMisxLCAxMCsxLCA2LCAxNCwgNisxLCAxNCsxKTsKLX0KLQotc3RhdGljIF9faW5saW5lIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl91bnBhY2tsb19wcyhfX20yNTYgX19hLCBfX20yNTYgX19iKQotewotICByZXR1cm4gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19hLCBfX2IsIDAsIDgsIDArMSwgOCsxLCA0LCAxMiwgNCsxLCAxMisxKTsKLX0KLQotLyogQml0IFRlc3QgKi8KLXN0YXRpYyBfX2lubGluZSBpbnQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fdGVzdHpfcGQoX19tMTI4ZCBfX2EsIF9fbTEyOGQgX19iKQotewotICByZXR1cm4gX19idWlsdGluX2lhMzJfdnRlc3R6cGQoKF9fdjJkZilfX2EsIChfX3YyZGYpX19iKTsKLX0KLQotc3RhdGljIF9faW5saW5lIGludCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV90ZXN0Y19wZChfX20xMjhkIF9fYSwgX19tMTI4ZCBfX2IpCi17Ci0gIHJldHVybiBfX2J1aWx0aW5faWEzMl92dGVzdGNwZCgoX192MmRmKV9fYSwgKF9fdjJkZilfX2IpOwotfQotCi1zdGF0aWMgX19pbmxpbmUgaW50IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX3Rlc3RuemNfcGQoX19tMTI4ZCBfX2EsIF9fbTEyOGQgX19iKQotewotICByZXR1cm4gX19idWlsdGluX2lhMzJfdnRlc3RuemNwZCgoX192MmRmKV9fYSwgKF9fdjJkZilfX2IpOwotfQotCi1zdGF0aWMgX19pbmxpbmUgaW50IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX3Rlc3R6X3BzKF9fbTEyOCBfX2EsIF9fbTEyOCBfX2IpCi17Ci0gIHJldHVybiBfX2J1aWx0aW5faWEzMl92dGVzdHpwcygoX192NHNmKV9fYSwgKF9fdjRzZilfX2IpOwotfQotCi1zdGF0aWMgX19pbmxpbmUgaW50IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX3Rlc3RjX3BzKF9fbTEyOCBfX2EsIF9fbTEyOCBfX2IpCi17Ci0gIHJldHVybiBfX2J1aWx0aW5faWEzMl92dGVzdGNwcygoX192NHNmKV9fYSwgKF9fdjRzZilfX2IpOwotfQotCi1zdGF0aWMgX19pbmxpbmUgaW50IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX3Rlc3RuemNfcHMoX19tMTI4IF9fYSwgX19tMTI4IF9fYikKLXsKLSAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3Z0ZXN0bnpjcHMoKF9fdjRzZilfX2EsIChfX3Y0c2YpX19iKTsKLX0KLQotc3RhdGljIF9faW5saW5lIGludCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl90ZXN0el9wZChfX20yNTZkIF9fYSwgX19tMjU2ZCBfX2IpCi17Ci0gIHJldHVybiBfX2J1aWx0aW5faWEzMl92dGVzdHpwZDI1NigoX192NGRmKV9fYSwgKF9fdjRkZilfX2IpOwotfQotCi1zdGF0aWMgX19pbmxpbmUgaW50IF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X3Rlc3RjX3BkKF9fbTI1NmQgX19hLCBfX20yNTZkIF9fYikKLXsKLSAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3Z0ZXN0Y3BkMjU2KChfX3Y0ZGYpX19hLCAoX192NGRmKV9fYik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZSBpbnQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfdGVzdG56Y19wZChfX20yNTZkIF9fYSwgX19tMjU2ZCBfX2IpCi17Ci0gIHJldHVybiBfX2J1aWx0aW5faWEzMl92dGVzdG56Y3BkMjU2KChfX3Y0ZGYpX19hLCAoX192NGRmKV9fYik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZSBpbnQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfdGVzdHpfcHMoX19tMjU2IF9fYSwgX19tMjU2IF9fYikKLXsKLSAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3Z0ZXN0enBzMjU2KChfX3Y4c2YpX19hLCAoX192OHNmKV9fYik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZSBpbnQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfdGVzdGNfcHMoX19tMjU2IF9fYSwgX19tMjU2IF9fYikKLXsKLSAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3Z0ZXN0Y3BzMjU2KChfX3Y4c2YpX19hLCAoX192OHNmKV9fYik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZSBpbnQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfdGVzdG56Y19wcyhfX20yNTYgX19hLCBfX20yNTYgX19iKQotewotICByZXR1cm4gX19idWlsdGluX2lhMzJfdnRlc3RuemNwczI1NigoX192OHNmKV9fYSwgKF9fdjhzZilfX2IpOwotfQotCi1zdGF0aWMgX19pbmxpbmUgaW50IF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X3Rlc3R6X3NpMjU2KF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikKLXsKLSAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3B0ZXN0ejI1NigoX192NGRpKV9fYSwgKF9fdjRkaSlfX2IpOwotfQotCi1zdGF0aWMgX19pbmxpbmUgaW50IF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X3Rlc3RjX3NpMjU2KF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikKLXsKLSAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3B0ZXN0YzI1NigoX192NGRpKV9fYSwgKF9fdjRkaSlfX2IpOwotfQotCi1zdGF0aWMgX19pbmxpbmUgaW50IF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X3Rlc3RuemNfc2kyNTYoX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKQotewotICByZXR1cm4gX19idWlsdGluX2lhMzJfcHRlc3RuemMyNTYoKF9fdjRkaSlfX2EsIChfX3Y0ZGkpX19iKTsKLX0KLQotLyogVmVjdG9yIGV4dHJhY3Qgc2lnbiBtYXNrICovCi1zdGF0aWMgX19pbmxpbmUgaW50IF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X21vdmVtYXNrX3BkKF9fbTI1NmQgX19hKQotewotICByZXR1cm4gX19idWlsdGluX2lhMzJfbW92bXNrcGQyNTYoKF9fdjRkZilfX2EpOwotfQotCi1zdGF0aWMgX19pbmxpbmUgaW50IF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X21vdmVtYXNrX3BzKF9fbTI1NiBfX2EpCi17Ci0gIHJldHVybiBfX2J1aWx0aW5faWEzMl9tb3Ztc2twczI1NigoX192OHNmKV9fYSk7Ci19Ci0KLS8qIFZlY3RvciBfX3plcm8gKi8KLXN0YXRpYyBfX2lubGluZSB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X3plcm9hbGwodm9pZCkKLXsKLSAgX19idWlsdGluX2lhMzJfdnplcm9hbGwoKTsKLX0KLQotc3RhdGljIF9faW5saW5lIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfemVyb3VwcGVyKHZvaWQpCi17Ci0gIF9fYnVpbHRpbl9pYTMyX3Z6ZXJvdXBwZXIoKTsKLX0KLQotLyogVmVjdG9yIGxvYWQgd2l0aCBicm9hZGNhc3QgKi8KLXN0YXRpYyBfX2lubGluZSBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fYnJvYWRjYXN0X3NzKGZsb2F0IGNvbnN0ICpfX2EpCi17Ci0gIGZsb2F0IF9fZiA9ICpfX2E7Ci0gIHJldHVybiAoX19tMTI4KShfX3Y0c2YpeyBfX2YsIF9fZiwgX19mLCBfX2YgfTsKLX0KLQotc3RhdGljIF9faW5saW5lIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfYnJvYWRjYXN0X3NkKGRvdWJsZSBjb25zdCAqX19hKQotewotICBkb3VibGUgX19kID0gKl9fYTsKLSAgcmV0dXJuIChfX20yNTZkKShfX3Y0ZGYpeyBfX2QsIF9fZCwgX19kLCBfX2QgfTsKLX0KLQotc3RhdGljIF9faW5saW5lIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9icm9hZGNhc3Rfc3MoZmxvYXQgY29uc3QgKl9fYSkKLXsKLSAgZmxvYXQgX19mID0gKl9fYTsKLSAgcmV0dXJuIChfX20yNTYpKF9fdjhzZil7IF9fZiwgX19mLCBfX2YsIF9fZiwgX19mLCBfX2YsIF9fZiwgX19mIH07Ci19Ci0KLXN0YXRpYyBfX2lubGluZSBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X2Jyb2FkY2FzdF9wZChfX20xMjhkIGNvbnN0ICpfX2EpCi17Ci0gIHJldHVybiAoX19tMjU2ZClfX2J1aWx0aW5faWEzMl92YnJvYWRjYXN0ZjEyOF9wZDI1NihfX2EpOwotfQotCi1zdGF0aWMgX19pbmxpbmUgX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X2Jyb2FkY2FzdF9wcyhfX20xMjggY29uc3QgKl9fYSkKLXsKLSAgcmV0dXJuIChfX20yNTYpX19idWlsdGluX2lhMzJfdmJyb2FkY2FzdGYxMjhfcHMyNTYoX19hKTsKLX0KLQotLyogU0lNRCBsb2FkIG9wcyAqLwotc3RhdGljIF9faW5saW5lIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfbG9hZF9wZChkb3VibGUgY29uc3QgKl9fcCkKLXsKLSAgcmV0dXJuICooX19tMjU2ZCAqKV9fcDsKLX0KLQotc3RhdGljIF9faW5saW5lIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9sb2FkX3BzKGZsb2F0IGNvbnN0ICpfX3ApCi17Ci0gIHJldHVybiAqKF9fbTI1NiAqKV9fcDsKLX0KLQotc3RhdGljIF9faW5saW5lIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfbG9hZHVfcGQoZG91YmxlIGNvbnN0ICpfX3ApCi17Ci0gIHN0cnVjdCBfX2xvYWR1X3BkIHsKLSAgICBfX20yNTZkIF9fdjsKLSAgfSBfX2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9fLCBfX21heV9hbGlhc19fKSk7Ci0gIHJldHVybiAoKHN0cnVjdCBfX2xvYWR1X3BkKilfX3ApLT5fX3Y7Ci19Ci0KLXN0YXRpYyBfX2lubGluZSBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfbG9hZHVfcHMoZmxvYXQgY29uc3QgKl9fcCkKLXsKLSAgc3RydWN0IF9fbG9hZHVfcHMgewotICAgIF9fbTI1NiBfX3Y7Ci0gIH0gX19hdHRyaWJ1dGVfXygoX19wYWNrZWRfXywgX19tYXlfYWxpYXNfXykpOwotICByZXR1cm4gKChzdHJ1Y3QgX19sb2FkdV9wcyopX19wKS0+X192OwotfQotCi1zdGF0aWMgX19pbmxpbmUgX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9sb2FkX3NpMjU2KF9fbTI1NmkgY29uc3QgKl9fcCkKLXsKLSAgcmV0dXJuICpfX3A7Ci19Ci0KLXN0YXRpYyBfX2lubGluZSBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X2xvYWR1X3NpMjU2KF9fbTI1NmkgY29uc3QgKl9fcCkKLXsKLSAgc3RydWN0IF9fbG9hZHVfc2kyNTYgewotICAgIF9fbTI1NmkgX192OwotICB9IF9fYXR0cmlidXRlX18oKF9fcGFja2VkX18sIF9fbWF5X2FsaWFzX18pKTsKLSAgcmV0dXJuICgoc3RydWN0IF9fbG9hZHVfc2kyNTYqKV9fcCktPl9fdjsKLX0KLQotc3RhdGljIF9faW5saW5lIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfbGRkcXVfc2kyNTYoX19tMjU2aSBjb25zdCAqX19wKQotewotICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfbGRkcXUyNTYoKGNoYXIgY29uc3QgKilfX3ApOwotfQotCi0vKiBTSU1EIHN0b3JlIG9wcyAqLwotc3RhdGljIF9faW5saW5lIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfc3RvcmVfcGQoZG91YmxlICpfX3AsIF9fbTI1NmQgX19hKQotewotICAqKF9fbTI1NmQgKilfX3AgPSBfX2E7Ci19Ci0KLXN0YXRpYyBfX2lubGluZSB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X3N0b3JlX3BzKGZsb2F0ICpfX3AsIF9fbTI1NiBfX2EpCi17Ci0gICooX19tMjU2ICopX19wID0gX19hOwotfQotCi1zdGF0aWMgX19pbmxpbmUgdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9zdG9yZXVfcGQoZG91YmxlICpfX3AsIF9fbTI1NmQgX19hKQotewotICBfX2J1aWx0aW5faWEzMl9zdG9yZXVwZDI1NihfX3AsIChfX3Y0ZGYpX19hKTsKLX0KLQotc3RhdGljIF9faW5saW5lIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfc3RvcmV1X3BzKGZsb2F0ICpfX3AsIF9fbTI1NiBfX2EpCi17Ci0gIF9fYnVpbHRpbl9pYTMyX3N0b3JldXBzMjU2KF9fcCwgKF9fdjhzZilfX2EpOwotfQotCi1zdGF0aWMgX19pbmxpbmUgdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9zdG9yZV9zaTI1NihfX20yNTZpICpfX3AsIF9fbTI1NmkgX19hKQotewotICAqX19wID0gX19hOwotfQotCi1zdGF0aWMgX19pbmxpbmUgdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9zdG9yZXVfc2kyNTYoX19tMjU2aSAqX19wLCBfX20yNTZpIF9fYSkKLXsKLSAgX19idWlsdGluX2lhMzJfc3RvcmVkcXUyNTYoKGNoYXIgKilfX3AsIChfX3YzMnFpKV9fYSk7Ci19Ci0KLS8qIENvbmRpdGlvbmFsIGxvYWQgb3BzICovCi1zdGF0aWMgX19pbmxpbmUgX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tYXNrbG9hZF9wZChkb3VibGUgY29uc3QgKl9fcCwgX19tMTI4aSBfX20pCi17Ci0gIHJldHVybiAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9tYXNrbG9hZHBkKChjb25zdCBfX3YyZGYgKilfX3AsIChfX3YyZGkpX19tKTsKLX0KLQotc3RhdGljIF9faW5saW5lIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfbWFza2xvYWRfcGQoZG91YmxlIGNvbnN0ICpfX3AsIF9fbTI1NmkgX19tKQotewotICByZXR1cm4gKF9fbTI1NmQpX19idWlsdGluX2lhMzJfbWFza2xvYWRwZDI1NigoY29uc3QgX192NGRmICopX19wLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRpKV9fbSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZSBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWFza2xvYWRfcHMoZmxvYXQgY29uc3QgKl9fcCwgX19tMTI4aSBfX20pCi17Ci0gIHJldHVybiAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX21hc2tsb2FkcHMoKGNvbnN0IF9fdjRzZiAqKV9fcCwgKF9fdjRzaSlfX20pOwotfQotCi1zdGF0aWMgX19pbmxpbmUgX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X21hc2tsb2FkX3BzKGZsb2F0IGNvbnN0ICpfX3AsIF9fbTI1NmkgX19tKQotewotICByZXR1cm4gKF9fbTI1NilfX2J1aWx0aW5faWEzMl9tYXNrbG9hZHBzMjU2KChjb25zdCBfX3Y4c2YgKilfX3AsIChfX3Y4c2kpX19tKTsKLX0KLQotLyogQ29uZGl0aW9uYWwgc3RvcmUgb3BzICovCi1zdGF0aWMgX19pbmxpbmUgdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXNrc3RvcmVfcHMoZmxvYXQgKl9fcCwgX19tMjU2aSBfX20sIF9fbTI1NiBfX2EpCi17Ci0gIF9fYnVpbHRpbl9pYTMyX21hc2tzdG9yZXBzMjU2KChfX3Y4c2YgKilfX3AsIChfX3Y4c2kpX19tLCAoX192OHNmKV9fYSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZSB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hc2tzdG9yZV9wZChkb3VibGUgKl9fcCwgX19tMTI4aSBfX20sIF9fbTEyOGQgX19hKQotewotICBfX2J1aWx0aW5faWEzMl9tYXNrc3RvcmVwZCgoX192MmRmICopX19wLCAoX192MmRpKV9fbSwgKF9fdjJkZilfX2EpOwotfQotCi1zdGF0aWMgX19pbmxpbmUgdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tYXNrc3RvcmVfcGQoZG91YmxlICpfX3AsIF9fbTI1NmkgX19tLCBfX20yNTZkIF9fYSkKLXsKLSAgX19idWlsdGluX2lhMzJfbWFza3N0b3JlcGQyNTYoKF9fdjRkZiAqKV9fcCwgKF9fdjRkaSlfX20sIChfX3Y0ZGYpX19hKTsKLX0KLQotc3RhdGljIF9faW5saW5lIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWFza3N0b3JlX3BzKGZsb2F0ICpfX3AsIF9fbTEyOGkgX19tLCBfX20xMjggX19hKQotewotICBfX2J1aWx0aW5faWEzMl9tYXNrc3RvcmVwcygoX192NHNmICopX19wLCAoX192NHNpKV9fbSwgKF9fdjRzZilfX2EpOwotfQotCi0vKiBDYWNoZWFiaWxpdHkgc3VwcG9ydCBvcHMgKi8KLXN0YXRpYyBfX2lubGluZSB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X3N0cmVhbV9zaTI1NihfX20yNTZpICpfX2EsIF9fbTI1NmkgX19iKQotewotICBfX2J1aWx0aW5faWEzMl9tb3ZudGRxMjU2KChfX3Y0ZGkgKilfX2EsIChfX3Y0ZGkpX19iKTsKLX0KLQotc3RhdGljIF9faW5saW5lIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfc3RyZWFtX3BkKGRvdWJsZSAqX19hLCBfX20yNTZkIF9fYikKLXsKLSAgX19idWlsdGluX2lhMzJfbW92bnRwZDI1NihfX2EsIChfX3Y0ZGYpX19iKTsKLX0KLQotc3RhdGljIF9faW5saW5lIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfc3RyZWFtX3BzKGZsb2F0ICpfX3AsIF9fbTI1NiBfX2EpCi17Ci0gIF9fYnVpbHRpbl9pYTMyX21vdm50cHMyNTYoX19wLCAoX192OHNmKV9fYSk7Ci19Ci0KLS8qIENyZWF0ZSB2ZWN0b3JzICovCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X3VuZGVmaW5lZF9wZCgpCi17Ci0gIHJldHVybiAoX19tMjU2ZClfX2J1aWx0aW5faWEzMl91bmRlZjI1NigpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfdW5kZWZpbmVkX3BzKCkKLXsKLSAgcmV0dXJuIChfX20yNTYpX19idWlsdGluX2lhMzJfdW5kZWYyNTYoKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl91bmRlZmluZWRfc2kyNTYoKQotewotICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfdW5kZWYyNTYoKTsKLX0KLQotc3RhdGljIF9faW5saW5lIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfc2V0X3BkKGRvdWJsZSBfX2EsIGRvdWJsZSBfX2IsIGRvdWJsZSBfX2MsIGRvdWJsZSBfX2QpCi17Ci0gIHJldHVybiAoX19tMjU2ZCl7IF9fZCwgX19jLCBfX2IsIF9fYSB9OwotfQotCi1zdGF0aWMgX19pbmxpbmUgX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X3NldF9wcyhmbG9hdCBfX2EsIGZsb2F0IF9fYiwgZmxvYXQgX19jLCBmbG9hdCBfX2QsCi0gICAgICAgICAgICAgIGZsb2F0IF9fZSwgZmxvYXQgX19mLCBmbG9hdCBfX2csIGZsb2F0IF9faCkKLXsKLSAgcmV0dXJuIChfX20yNTYpeyBfX2gsIF9fZywgX19mLCBfX2UsIF9fZCwgX19jLCBfX2IsIF9fYSB9OwotfQotCi1zdGF0aWMgX19pbmxpbmUgX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9zZXRfZXBpMzIoaW50IF9faTAsIGludCBfX2kxLCBpbnQgX19pMiwgaW50IF9faTMsCi0gICAgICAgICAgICAgICAgIGludCBfX2k0LCBpbnQgX19pNSwgaW50IF9faTYsIGludCBfX2k3KQotewotICByZXR1cm4gKF9fbTI1NmkpKF9fdjhzaSl7IF9faTcsIF9faTYsIF9faTUsIF9faTQsIF9faTMsIF9faTIsIF9faTEsIF9faTAgfTsKLX0KLQotc3RhdGljIF9faW5saW5lIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfc2V0X2VwaTE2KHNob3J0IF9fdzE1LCBzaG9ydCBfX3cxNCwgc2hvcnQgX193MTMsIHNob3J0IF9fdzEyLAotICAgICAgICAgICAgICAgICBzaG9ydCBfX3cxMSwgc2hvcnQgX193MTAsIHNob3J0IF9fdzA5LCBzaG9ydCBfX3cwOCwKLSAgICAgICAgICAgICAgICAgc2hvcnQgX193MDcsIHNob3J0IF9fdzA2LCBzaG9ydCBfX3cwNSwgc2hvcnQgX193MDQsCi0gICAgICAgICAgICAgICAgIHNob3J0IF9fdzAzLCBzaG9ydCBfX3cwMiwgc2hvcnQgX193MDEsIHNob3J0IF9fdzAwKQotewotICByZXR1cm4gKF9fbTI1NmkpKF9fdjE2aGkpeyBfX3cwMCwgX193MDEsIF9fdzAyLCBfX3cwMywgX193MDQsIF9fdzA1LCBfX3cwNiwKLSAgICBfX3cwNywgX193MDgsIF9fdzA5LCBfX3cxMCwgX193MTEsIF9fdzEyLCBfX3cxMywgX193MTQsIF9fdzE1IH07Ci19Ci0KLXN0YXRpYyBfX2lubGluZSBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X3NldF9lcGk4KGNoYXIgX19iMzEsIGNoYXIgX19iMzAsIGNoYXIgX19iMjksIGNoYXIgX19iMjgsCi0gICAgICAgICAgICAgICAgY2hhciBfX2IyNywgY2hhciBfX2IyNiwgY2hhciBfX2IyNSwgY2hhciBfX2IyNCwKLSAgICAgICAgICAgICAgICBjaGFyIF9fYjIzLCBjaGFyIF9fYjIyLCBjaGFyIF9fYjIxLCBjaGFyIF9fYjIwLAotICAgICAgICAgICAgICAgIGNoYXIgX19iMTksIGNoYXIgX19iMTgsIGNoYXIgX19iMTcsIGNoYXIgX19iMTYsCi0gICAgICAgICAgICAgICAgY2hhciBfX2IxNSwgY2hhciBfX2IxNCwgY2hhciBfX2IxMywgY2hhciBfX2IxMiwKLSAgICAgICAgICAgICAgICBjaGFyIF9fYjExLCBjaGFyIF9fYjEwLCBjaGFyIF9fYjA5LCBjaGFyIF9fYjA4LAotICAgICAgICAgICAgICAgIGNoYXIgX19iMDcsIGNoYXIgX19iMDYsIGNoYXIgX19iMDUsIGNoYXIgX19iMDQsCi0gICAgICAgICAgICAgICAgY2hhciBfX2IwMywgY2hhciBfX2IwMiwgY2hhciBfX2IwMSwgY2hhciBfX2IwMCkKLXsKLSAgcmV0dXJuIChfX20yNTZpKShfX3YzMnFpKXsKLSAgICBfX2IwMCwgX19iMDEsIF9fYjAyLCBfX2IwMywgX19iMDQsIF9fYjA1LCBfX2IwNiwgX19iMDcsCi0gICAgX19iMDgsIF9fYjA5LCBfX2IxMCwgX19iMTEsIF9fYjEyLCBfX2IxMywgX19iMTQsIF9fYjE1LAotICAgIF9fYjE2LCBfX2IxNywgX19iMTgsIF9fYjE5LCBfX2IyMCwgX19iMjEsIF9fYjIyLCBfX2IyMywKLSAgICBfX2IyNCwgX19iMjUsIF9fYjI2LCBfX2IyNywgX19iMjgsIF9fYjI5LCBfX2IzMCwgX19iMzEKLSAgfTsKLX0KLQotc3RhdGljIF9faW5saW5lIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfc2V0X2VwaTY0eChsb25nIGxvbmcgX19hLCBsb25nIGxvbmcgX19iLCBsb25nIGxvbmcgX19jLCBsb25nIGxvbmcgX19kKQotewotICByZXR1cm4gKF9fbTI1NmkpKF9fdjRkaSl7IF9fZCwgX19jLCBfX2IsIF9fYSB9OwotfQotCi0vKiBDcmVhdGUgdmVjdG9ycyB3aXRoIGVsZW1lbnRzIGluIHJldmVyc2Ugb3JkZXIgKi8KLXN0YXRpYyBfX2lubGluZSBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X3NldHJfcGQoZG91YmxlIF9fYSwgZG91YmxlIF9fYiwgZG91YmxlIF9fYywgZG91YmxlIF9fZCkKLXsKLSAgcmV0dXJuIChfX20yNTZkKXsgX19hLCBfX2IsIF9fYywgX19kIH07Ci19Ci0KLXN0YXRpYyBfX2lubGluZSBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfc2V0cl9wcyhmbG9hdCBfX2EsIGZsb2F0IF9fYiwgZmxvYXQgX19jLCBmbG9hdCBfX2QsCi0gICAgICAgICAgICAgICBmbG9hdCBfX2UsIGZsb2F0IF9fZiwgZmxvYXQgX19nLCBmbG9hdCBfX2gpCi17Ci0gIHJldHVybiAoX19tMjU2KXsgX19hLCBfX2IsIF9fYywgX19kLCBfX2UsIF9fZiwgX19nLCBfX2ggfTsKLX0KLQotc3RhdGljIF9faW5saW5lIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfc2V0cl9lcGkzMihpbnQgX19pMCwgaW50IF9faTEsIGludCBfX2kyLCBpbnQgX19pMywKLSAgICAgICAgICAgICAgICAgIGludCBfX2k0LCBpbnQgX19pNSwgaW50IF9faTYsIGludCBfX2k3KQotewotICByZXR1cm4gKF9fbTI1NmkpKF9fdjhzaSl7IF9faTAsIF9faTEsIF9faTIsIF9faTMsIF9faTQsIF9faTUsIF9faTYsIF9faTcgfTsKLX0KLQotc3RhdGljIF9faW5saW5lIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfc2V0cl9lcGkxNihzaG9ydCBfX3cxNSwgc2hvcnQgX193MTQsIHNob3J0IF9fdzEzLCBzaG9ydCBfX3cxMiwKLSAgICAgICBzaG9ydCBfX3cxMSwgc2hvcnQgX193MTAsIHNob3J0IF9fdzA5LCBzaG9ydCBfX3cwOCwKLSAgICAgICBzaG9ydCBfX3cwNywgc2hvcnQgX193MDYsIHNob3J0IF9fdzA1LCBzaG9ydCBfX3cwNCwKLSAgICAgICBzaG9ydCBfX3cwMywgc2hvcnQgX193MDIsIHNob3J0IF9fdzAxLCBzaG9ydCBfX3cwMCkKLXsKLSAgcmV0dXJuIChfX20yNTZpKShfX3YxNmhpKXsgX193MTUsIF9fdzE0LCBfX3cxMywgX193MTIsIF9fdzExLCBfX3cxMCwgX193MDksCi0gICAgX193MDgsIF9fdzA3LCBfX3cwNiwgX193MDUsIF9fdzA0LCBfX3cwMywgX193MDIsIF9fdzAxLCBfX3cwMCB9OwotfQotCi1zdGF0aWMgX19pbmxpbmUgX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9zZXRyX2VwaTgoY2hhciBfX2IzMSwgY2hhciBfX2IzMCwgY2hhciBfX2IyOSwgY2hhciBfX2IyOCwKLSAgICAgICAgICAgICAgICAgY2hhciBfX2IyNywgY2hhciBfX2IyNiwgY2hhciBfX2IyNSwgY2hhciBfX2IyNCwKLSAgICAgICAgICAgICAgICAgY2hhciBfX2IyMywgY2hhciBfX2IyMiwgY2hhciBfX2IyMSwgY2hhciBfX2IyMCwKLSAgICAgICAgICAgICAgICAgY2hhciBfX2IxOSwgY2hhciBfX2IxOCwgY2hhciBfX2IxNywgY2hhciBfX2IxNiwKLSAgICAgICAgICAgICAgICAgY2hhciBfX2IxNSwgY2hhciBfX2IxNCwgY2hhciBfX2IxMywgY2hhciBfX2IxMiwKLSAgICAgICAgICAgICAgICAgY2hhciBfX2IxMSwgY2hhciBfX2IxMCwgY2hhciBfX2IwOSwgY2hhciBfX2IwOCwKLSAgICAgICAgICAgICAgICAgY2hhciBfX2IwNywgY2hhciBfX2IwNiwgY2hhciBfX2IwNSwgY2hhciBfX2IwNCwKLSAgICAgICAgICAgICAgICAgY2hhciBfX2IwMywgY2hhciBfX2IwMiwgY2hhciBfX2IwMSwgY2hhciBfX2IwMCkKLXsKLSAgcmV0dXJuIChfX20yNTZpKShfX3YzMnFpKXsKLSAgICBfX2IzMSwgX19iMzAsIF9fYjI5LCBfX2IyOCwgX19iMjcsIF9fYjI2LCBfX2IyNSwgX19iMjQsCi0gICAgX19iMjMsIF9fYjIyLCBfX2IyMSwgX19iMjAsIF9fYjE5LCBfX2IxOCwgX19iMTcsIF9fYjE2LAotICAgIF9fYjE1LCBfX2IxNCwgX19iMTMsIF9fYjEyLCBfX2IxMSwgX19iMTAsIF9fYjA5LCBfX2IwOCwKLSAgICBfX2IwNywgX19iMDYsIF9fYjA1LCBfX2IwNCwgX19iMDMsIF9fYjAyLCBfX2IwMSwgX19iMDAgfTsKLX0KLQotc3RhdGljIF9faW5saW5lIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfc2V0cl9lcGk2NHgobG9uZyBsb25nIF9fYSwgbG9uZyBsb25nIF9fYiwgbG9uZyBsb25nIF9fYywgbG9uZyBsb25nIF9fZCkKLXsKLSAgcmV0dXJuIChfX20yNTZpKShfX3Y0ZGkpeyBfX2EsIF9fYiwgX19jLCBfX2QgfTsKLX0KLQotLyogQ3JlYXRlIHZlY3RvcnMgd2l0aCByZXBlYXRlZCBlbGVtZW50cyAqLwotc3RhdGljIF9faW5saW5lIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfc2V0MV9wZChkb3VibGUgX193KQotewotICByZXR1cm4gKF9fbTI1NmQpeyBfX3csIF9fdywgX193LCBfX3cgfTsKLX0KLQotc3RhdGljIF9faW5saW5lIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9zZXQxX3BzKGZsb2F0IF9fdykKLXsKLSAgcmV0dXJuIChfX20yNTYpeyBfX3csIF9fdywgX193LCBfX3csIF9fdywgX193LCBfX3csIF9fdyB9OwotfQotCi1zdGF0aWMgX19pbmxpbmUgX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9zZXQxX2VwaTMyKGludCBfX2kpCi17Ci0gIHJldHVybiAoX19tMjU2aSkoX192OHNpKXsgX19pLCBfX2ksIF9faSwgX19pLCBfX2ksIF9faSwgX19pLCBfX2kgfTsKLX0KLQotc3RhdGljIF9faW5saW5lIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfc2V0MV9lcGkxNihzaG9ydCBfX3cpCi17Ci0gIHJldHVybiAoX19tMjU2aSkoX192MTZoaSl7IF9fdywgX193LCBfX3csIF9fdywgX193LCBfX3csIF9fdywgX193LCBfX3csIF9fdywKLSAgICBfX3csIF9fdywgX193LCBfX3csIF9fdywgX193IH07Ci19Ci0KLXN0YXRpYyBfX2lubGluZSBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X3NldDFfZXBpOChjaGFyIF9fYikKLXsKLSAgcmV0dXJuIChfX20yNTZpKShfX3YzMnFpKXsgX19iLCBfX2IsIF9fYiwgX19iLCBfX2IsIF9fYiwgX19iLCBfX2IsIF9fYiwgX19iLAotICAgIF9fYiwgX19iLCBfX2IsIF9fYiwgX19iLCBfX2IsIF9fYiwgX19iLCBfX2IsIF9fYiwgX19iLCBfX2IsIF9fYiwgX19iLCBfX2IsCi0gICAgX19iLCBfX2IsIF9fYiwgX19iLCBfX2IsIF9fYiwgX19iIH07Ci19Ci0KLXN0YXRpYyBfX2lubGluZSBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X3NldDFfZXBpNjR4KGxvbmcgbG9uZyBfX3EpCi17Ci0gIHJldHVybiAoX19tMjU2aSkoX192NGRpKXsgX19xLCBfX3EsIF9fcSwgX19xIH07Ci19Ci0KLS8qIENyZWF0ZSBfX3plcm9lZCB2ZWN0b3JzICovCi1zdGF0aWMgX19pbmxpbmUgX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9zZXR6ZXJvX3BkKHZvaWQpCi17Ci0gIHJldHVybiAoX19tMjU2ZCl7IDAsIDAsIDAsIDAgfTsKLX0KLQotc3RhdGljIF9faW5saW5lIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9zZXR6ZXJvX3BzKHZvaWQpCi17Ci0gIHJldHVybiAoX19tMjU2KXsgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCB9OwotfQotCi1zdGF0aWMgX19pbmxpbmUgX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9zZXR6ZXJvX3NpMjU2KHZvaWQpCi17Ci0gIHJldHVybiAoX19tMjU2aSl7IDBMTCwgMExMLCAwTEwsIDBMTCB9OwotfQotCi0vKiBDYXN0IGJldHdlZW4gdmVjdG9yIHR5cGVzICovCi1zdGF0aWMgX19pbmxpbmUgX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X2Nhc3RwZF9wcyhfX20yNTZkIF9fYSkKLXsKLSAgcmV0dXJuIChfX20yNTYpX19hOwotfQotCi1zdGF0aWMgX19pbmxpbmUgX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9jYXN0cGRfc2kyNTYoX19tMjU2ZCBfX2EpCi17Ci0gIHJldHVybiAoX19tMjU2aSlfX2E7Ci19Ci0KLXN0YXRpYyBfX2lubGluZSBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X2Nhc3Rwc19wZChfX20yNTYgX19hKQotewotICByZXR1cm4gKF9fbTI1NmQpX19hOwotfQotCi1zdGF0aWMgX19pbmxpbmUgX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9jYXN0cHNfc2kyNTYoX19tMjU2IF9fYSkKLXsKLSAgcmV0dXJuIChfX20yNTZpKV9fYTsKLX0KLQotc3RhdGljIF9faW5saW5lIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9jYXN0c2kyNTZfcHMoX19tMjU2aSBfX2EpCi17Ci0gIHJldHVybiAoX19tMjU2KV9fYTsKLX0KLQotc3RhdGljIF9faW5saW5lIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfY2FzdHNpMjU2X3BkKF9fbTI1NmkgX19hKQotewotICByZXR1cm4gKF9fbTI1NmQpX19hOwotfQotCi1zdGF0aWMgX19pbmxpbmUgX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9jYXN0cGQyNTZfcGQxMjgoX19tMjU2ZCBfX2EpCi17Ci0gIHJldHVybiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX2EsIF9fYSwgMCwgMSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZSBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfY2FzdHBzMjU2X3BzMTI4KF9fbTI1NiBfX2EpCi17Ci0gIHJldHVybiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX2EsIF9fYSwgMCwgMSwgMiwgMyk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZSBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X2Nhc3RzaTI1Nl9zaTEyOChfX20yNTZpIF9fYSkKLXsKLSAgcmV0dXJuIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fYSwgX19hLCAwLCAxKTsKLX0KLQotc3RhdGljIF9faW5saW5lIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfY2FzdHBkMTI4X3BkMjU2KF9fbTEyOGQgX19hKQotewotICByZXR1cm4gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19hLCBfX2EsIDAsIDEsIC0xLCAtMSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZSBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfY2FzdHBzMTI4X3BzMjU2KF9fbTEyOCBfX2EpCi17Ci0gIHJldHVybiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX2EsIF9fYSwgMCwgMSwgMiwgMywgLTEsIC0xLCAtMSwgLTEpOwotfQotCi1zdGF0aWMgX19pbmxpbmUgX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9jYXN0c2kxMjhfc2kyNTYoX19tMTI4aSBfX2EpCi17Ci0gIHJldHVybiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX2EsIF9fYSwgMCwgMSwgLTEsIC0xKTsKLX0KLQotLyoKLSAgIFZlY3RvciBpbnNlcnQuCi0gICBXZSB1c2UgbWFjcm9zIHJhdGhlciB0aGFuIGlubGluZXMgYmVjYXVzZSB3ZSBvbmx5IHdhbnQgdG8gYWNjZXB0Ci0gICBpbnZvY2F0aW9ucyB3aGVyZSB0aGUgaW1tZWRpYXRlIE0gaXMgYSBjb25zdGFudCBleHByZXNzaW9uLgotKi8KLSNkZWZpbmUgX21tMjU2X2luc2VydGYxMjhfcHMoVjEsIFYyLCBNKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgKF9fbTI1NilfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvciggXAotICAgIChfX3Y4c2YpKF9fbTI1NikoVjEpLCBcCi0gICAgKF9fdjhzZilfbW0yNTZfY2FzdHBzMTI4X3BzMjU2KChfX20xMjgpKFYyKSksIFwKLSAgICAoKChNKSAmIDEpID8gIDAgOiAgOCksIFwKLSAgICAoKChNKSAmIDEpID8gIDEgOiAgOSksIFwKLSAgICAoKChNKSAmIDEpID8gIDIgOiAxMCksIFwKLSAgICAoKChNKSAmIDEpID8gIDMgOiAxMSksIFwKLSAgICAoKChNKSAmIDEpID8gIDggOiAgNCksIFwKLSAgICAoKChNKSAmIDEpID8gIDkgOiAgNSksIFwKLSAgICAoKChNKSAmIDEpID8gMTAgOiAgNiksIFwKLSAgICAoKChNKSAmIDEpID8gMTEgOiAgNykgKTt9KQotCi0jZGVmaW5lIF9tbTI1Nl9pbnNlcnRmMTI4X3BkKFYxLCBWMiwgTSkgX19leHRlbnNpb25fXyAoeyBcCi0gIChfX20yNTZkKV9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKCBcCi0gICAgKF9fdjRkZikoX19tMjU2ZCkoVjEpLCBcCi0gICAgKF9fdjRkZilfbW0yNTZfY2FzdHBkMTI4X3BkMjU2KChfX20xMjhkKShWMikpLCBcCi0gICAgKCgoTSkgJiAxKSA/IDAgOiA0KSwgXAotICAgICgoKE0pICYgMSkgPyAxIDogNSksIFwKLSAgICAoKChNKSAmIDEpID8gNCA6IDIpLCBcCi0gICAgKCgoTSkgJiAxKSA/IDUgOiAzKSApO30pCi0KLSNkZWZpbmUgX21tMjU2X2luc2VydGYxMjhfc2kyNTYoVjEsIFYyLCBNKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgKF9fbTI1NmkpX19idWlsdGluX3NodWZmbGV2ZWN0b3IoIFwKLSAgICAoX192NGRpKShfX20yNTZpKShWMSksIFwKLSAgICAoX192NGRpKV9tbTI1Nl9jYXN0c2kxMjhfc2kyNTYoKF9fbTEyOGkpKFYyKSksIFwKLSAgICAoKChNKSAmIDEpID8gMCA6IDQpLCBcCi0gICAgKCgoTSkgJiAxKSA/IDEgOiA1KSwgXAotICAgICgoKE0pICYgMSkgPyA0IDogMiksIFwKLSAgICAoKChNKSAmIDEpID8gNSA6IDMpICk7fSkKLQotLyoKLSAgIFZlY3RvciBleHRyYWN0LgotICAgV2UgdXNlIG1hY3JvcyByYXRoZXIgdGhhbiBpbmxpbmVzIGJlY2F1c2Ugd2Ugb25seSB3YW50IHRvIGFjY2VwdAotICAgaW52b2NhdGlvbnMgd2hlcmUgdGhlIGltbWVkaWF0ZSBNIGlzIGEgY29uc3RhbnQgZXhwcmVzc2lvbi4KLSovCi0jZGVmaW5lIF9tbTI1Nl9leHRyYWN0ZjEyOF9wcyhWLCBNKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgKF9fbTEyOClfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvciggXAotICAgIChfX3Y4c2YpKF9fbTI1NikoViksIFwKLSAgICAoX192OHNmKShfbW0yNTZfc2V0emVyb19wcygpKSwgXAotICAgICgoKE0pICYgMSkgPyA0IDogMCksIFwKLSAgICAoKChNKSAmIDEpID8gNSA6IDEpLCBcCi0gICAgKCgoTSkgJiAxKSA/IDYgOiAyKSwgXAotICAgICgoKE0pICYgMSkgPyA3IDogMykgKTt9KQotCi0jZGVmaW5lIF9tbTI1Nl9leHRyYWN0ZjEyOF9wZChWLCBNKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgKF9fbTEyOGQpX19idWlsdGluX3NodWZmbGV2ZWN0b3IoIFwKLSAgICAoX192NGRmKShfX20yNTZkKShWKSwgXAotICAgIChfX3Y0ZGYpKF9tbTI1Nl9zZXR6ZXJvX3BkKCkpLCBcCi0gICAgKCgoTSkgJiAxKSA/IDIgOiAwKSwgXAotICAgICgoKE0pICYgMSkgPyAzIDogMSkgKTt9KQotCi0jZGVmaW5lIF9tbTI1Nl9leHRyYWN0ZjEyOF9zaTI1NihWLCBNKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgKF9fbTEyOGkpX19idWlsdGluX3NodWZmbGV2ZWN0b3IoIFwKLSAgICAoX192NGRpKShfX20yNTZpKShWKSwgXAotICAgIChfX3Y0ZGkpKF9tbTI1Nl9zZXR6ZXJvX3NpMjU2KCkpLCBcCi0gICAgKCgoTSkgJiAxKSA/IDIgOiAwKSwgXAotICAgICgoKE0pICYgMSkgPyAzIDogMSkgKTt9KQotCi0vKiBTSU1EIGxvYWQgb3BzICh1bmFsaWduZWQpICovCi1zdGF0aWMgX19pbmxpbmUgX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X2xvYWR1Ml9tMTI4KGZsb2F0IGNvbnN0ICpfX2FkZHJfaGksIGZsb2F0IGNvbnN0ICpfX2FkZHJfbG8pCi17Ci0gIHN0cnVjdCBfX2xvYWR1X3BzIHsKLSAgICBfX20xMjggX192OwotICB9IF9fYXR0cmlidXRlX18oKF9fcGFja2VkX18sIF9fbWF5X2FsaWFzX18pKTsKLQotICBfX20yNTYgX192MjU2ID0gX21tMjU2X2Nhc3RwczEyOF9wczI1NigoKHN0cnVjdCBfX2xvYWR1X3BzKilfX2FkZHJfbG8pLT5fX3YpOwotICByZXR1cm4gX21tMjU2X2luc2VydGYxMjhfcHMoX192MjU2LCAoKHN0cnVjdCBfX2xvYWR1X3BzKilfX2FkZHJfaGkpLT5fX3YsIDEpOwotfQotCi1zdGF0aWMgX19pbmxpbmUgX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9sb2FkdTJfbTEyOGQoZG91YmxlIGNvbnN0ICpfX2FkZHJfaGksIGRvdWJsZSBjb25zdCAqX19hZGRyX2xvKQotewotICBzdHJ1Y3QgX19sb2FkdV9wZCB7Ci0gICAgX19tMTI4ZCBfX3Y7Ci0gIH0gX19hdHRyaWJ1dGVfXygoX19wYWNrZWRfXywgX19tYXlfYWxpYXNfXykpOwotCi0gIF9fbTI1NmQgX192MjU2ID0gX21tMjU2X2Nhc3RwZDEyOF9wZDI1NigoKHN0cnVjdCBfX2xvYWR1X3BkKilfX2FkZHJfbG8pLT5fX3YpOwotICByZXR1cm4gX21tMjU2X2luc2VydGYxMjhfcGQoX192MjU2LCAoKHN0cnVjdCBfX2xvYWR1X3BkKilfX2FkZHJfaGkpLT5fX3YsIDEpOwotfQotCi1zdGF0aWMgX19pbmxpbmUgX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9sb2FkdTJfbTEyOGkoX19tMTI4aSBjb25zdCAqX19hZGRyX2hpLCBfX20xMjhpIGNvbnN0ICpfX2FkZHJfbG8pCi17Ci0gIHN0cnVjdCBfX2xvYWR1X3NpMTI4IHsKLSAgICBfX20xMjhpIF9fdjsKLSAgfSBfX2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9fLCBfX21heV9hbGlhc19fKSk7Ci0gIF9fbTI1NmkgX192MjU2ID0gX21tMjU2X2Nhc3RzaTEyOF9zaTI1NigKLSAgICAoKHN0cnVjdCBfX2xvYWR1X3NpMTI4KilfX2FkZHJfbG8pLT5fX3YpOwotICByZXR1cm4gX21tMjU2X2luc2VydGYxMjhfc2kyNTYoX192MjU2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChzdHJ1Y3QgX19sb2FkdV9zaTEyOCopX19hZGRyX2hpKS0+X192LCAxKTsKLX0KLQotLyogU0lNRCBzdG9yZSBvcHMgKHVuYWxpZ25lZCkgKi8KLXN0YXRpYyBfX2lubGluZSB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X3N0b3JldTJfbTEyOChmbG9hdCAqX19hZGRyX2hpLCBmbG9hdCAqX19hZGRyX2xvLCBfX20yNTYgX19hKQotewotICBfX20xMjggX192MTI4OwotCi0gIF9fdjEyOCA9IF9tbTI1Nl9jYXN0cHMyNTZfcHMxMjgoX19hKTsKLSAgX19idWlsdGluX2lhMzJfc3RvcmV1cHMoX19hZGRyX2xvLCBfX3YxMjgpOwotICBfX3YxMjggPSBfbW0yNTZfZXh0cmFjdGYxMjhfcHMoX19hLCAxKTsKLSAgX19idWlsdGluX2lhMzJfc3RvcmV1cHMoX19hZGRyX2hpLCBfX3YxMjgpOwotfQotCi1zdGF0aWMgX19pbmxpbmUgdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9zdG9yZXUyX20xMjhkKGRvdWJsZSAqX19hZGRyX2hpLCBkb3VibGUgKl9fYWRkcl9sbywgX19tMjU2ZCBfX2EpCi17Ci0gIF9fbTEyOGQgX192MTI4OwotCi0gIF9fdjEyOCA9IF9tbTI1Nl9jYXN0cGQyNTZfcGQxMjgoX19hKTsKLSAgX19idWlsdGluX2lhMzJfc3RvcmV1cGQoX19hZGRyX2xvLCBfX3YxMjgpOwotICBfX3YxMjggPSBfbW0yNTZfZXh0cmFjdGYxMjhfcGQoX19hLCAxKTsKLSAgX19idWlsdGluX2lhMzJfc3RvcmV1cGQoX19hZGRyX2hpLCBfX3YxMjgpOwotfQotCi1zdGF0aWMgX19pbmxpbmUgdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9zdG9yZXUyX20xMjhpKF9fbTEyOGkgKl9fYWRkcl9oaSwgX19tMTI4aSAqX19hZGRyX2xvLCBfX20yNTZpIF9fYSkKLXsKLSAgX19tMTI4aSBfX3YxMjg7Ci0KLSAgX192MTI4ID0gX21tMjU2X2Nhc3RzaTI1Nl9zaTEyOChfX2EpOwotICBfX2J1aWx0aW5faWEzMl9zdG9yZWRxdSgoY2hhciAqKV9fYWRkcl9sbywgKF9fdjE2cWkpX192MTI4KTsKLSAgX192MTI4ID0gX21tMjU2X2V4dHJhY3RmMTI4X3NpMjU2KF9fYSwgMSk7Ci0gIF9fYnVpbHRpbl9pYTMyX3N0b3JlZHF1KChjaGFyICopX19hZGRyX2hpLCAoX192MTZxaSlfX3YxMjgpOwotfQotCi1zdGF0aWMgX19pbmxpbmUgX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X3NldF9tMTI4IChfX20xMjggX19oaSwgX19tMTI4IF9fbG8pIHsKLSAgcmV0dXJuIChfX20yNTYpIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fbG8sIF9faGksIDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcpOwotfQotCi1zdGF0aWMgX19pbmxpbmUgX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9zZXRfbTEyOGQgKF9fbTEyOGQgX19oaSwgX19tMTI4ZCBfX2xvKSB7Ci0gIHJldHVybiAoX19tMjU2ZClfbW0yNTZfc2V0X20xMjgoKF9fbTEyOClfX2hpLCAoX19tMTI4KV9fbG8pOwotfQotCi1zdGF0aWMgX19pbmxpbmUgX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9zZXRfbTEyOGkgKF9fbTEyOGkgX19oaSwgX19tMTI4aSBfX2xvKSB7Ci0gIHJldHVybiAoX19tMjU2aSlfbW0yNTZfc2V0X20xMjgoKF9fbTEyOClfX2hpLCAoX19tMTI4KV9fbG8pOwotfQotCi1zdGF0aWMgX19pbmxpbmUgX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X3NldHJfbTEyOCAoX19tMTI4IF9fbG8sIF9fbTEyOCBfX2hpKSB7Ci0gIHJldHVybiBfbW0yNTZfc2V0X20xMjgoX19oaSwgX19sbyk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZSBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X3NldHJfbTEyOGQgKF9fbTEyOGQgX19sbywgX19tMTI4ZCBfX2hpKSB7Ci0gIHJldHVybiAoX19tMjU2ZClfbW0yNTZfc2V0X20xMjgoKF9fbTEyOClfX2hpLCAoX19tMTI4KV9fbG8pOwotfQotCi1zdGF0aWMgX19pbmxpbmUgX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9zZXRyX20xMjhpIChfX20xMjhpIF9fbG8sIF9fbTEyOGkgX19oaSkgewotICByZXR1cm4gKF9fbTI1NmkpX21tMjU2X3NldF9tMTI4KChfX20xMjgpX19oaSwgKF9fbTEyOClfX2xvKTsKLX0KLQotI3VuZGVmIF9fREVGQVVMVF9GTl9BVFRSUwotCi0jZW5kaWYgLyogX19BVlhJTlRSSU5fSCAqLwpkaWZmIC0tZ2l0IGEvY2xhbmctMjU3NzExMy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9ibWkyaW50cmluLmggYi9jbGFuZy0yNTc3MTEzL2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL2JtaTJpbnRyaW4uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmRhZTgyYy4uMDAwMDAwMAotLS0gYS9jbGFuZy0yNTc3MTEzL2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL2JtaTJpbnRyaW4uaAorKysgL2Rldi9udWxsCkBAIC0xLDk1ICswLDAgQEAKLS8qPT09LS0tLSBibWkyaW50cmluLmggLSBCTUkyIGludHJpbnNpY3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KLSAqCi0gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5Ci0gKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAotICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cwotICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAotICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCi0gKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgotICoKLSAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCi0gKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KLSAqCi0gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgotICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCi0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKLSAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCi0gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCi0gKiBUSEUgU09GVFdBUkUuCi0gKgotICo9PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQotICovCi0KLSNpZiAhZGVmaW5lZCBfX1g4NklOVFJJTl9IICYmICFkZWZpbmVkIF9fSU1NSU5UUklOX0gKLSNlcnJvciAiTmV2ZXIgdXNlIDxibWkyaW50cmluLmg+IGRpcmVjdGx5OyBpbmNsdWRlIDx4ODZpbnRyaW4uaD4gaW5zdGVhZC4iCi0jZW5kaWYKLQotI2lmbmRlZiBfX0JNSTJJTlRSSU5fSAotI2RlZmluZSBfX0JNSTJJTlRSSU5fSAotCi0vKiBEZWZpbmUgdGhlIGRlZmF1bHQgYXR0cmlidXRlcyBmb3IgdGhlIGZ1bmN0aW9ucyBpbiB0aGlzIGZpbGUuICovCi0jZGVmaW5lIF9fREVGQVVMVF9GTl9BVFRSUyBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18sIF9fdGFyZ2V0X18oImJtaTIiKSkpCi0KLXN0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGludCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9iemhpX3UzMih1bnNpZ25lZCBpbnQgX19YLCB1bnNpZ25lZCBpbnQgX19ZKQotewotICByZXR1cm4gX19idWlsdGluX2lhMzJfYnpoaV9zaShfX1gsIF9fWSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGludCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9wZGVwX3UzMih1bnNpZ25lZCBpbnQgX19YLCB1bnNpZ25lZCBpbnQgX19ZKQotewotICByZXR1cm4gX19idWlsdGluX2lhMzJfcGRlcF9zaShfX1gsIF9fWSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGludCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9wZXh0X3UzMih1bnNpZ25lZCBpbnQgX19YLCB1bnNpZ25lZCBpbnQgX19ZKQotewotICByZXR1cm4gX19idWlsdGluX2lhMzJfcGV4dF9zaShfX1gsIF9fWSk7Ci19Ci0KLSNpZmRlZiAgX194ODZfNjRfXwotCi1zdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nIGxvbmcgX19ERUZBVUxUX0ZOX0FUVFJTCi1fYnpoaV91NjQodW5zaWduZWQgbG9uZyBsb25nIF9fWCwgdW5zaWduZWQgbG9uZyBsb25nIF9fWSkKLXsKLSAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX2J6aGlfZGkoX19YLCBfX1kpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nIGxvbmcgX19ERUZBVUxUX0ZOX0FUVFJTCi1fcGRlcF91NjQodW5zaWduZWQgbG9uZyBsb25nIF9fWCwgdW5zaWduZWQgbG9uZyBsb25nIF9fWSkKLXsKLSAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3BkZXBfZGkoX19YLCBfX1kpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nIGxvbmcgX19ERUZBVUxUX0ZOX0FUVFJTCi1fcGV4dF91NjQodW5zaWduZWQgbG9uZyBsb25nIF9fWCwgdW5zaWduZWQgbG9uZyBsb25nIF9fWSkKLXsKLSAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3BleHRfZGkoX19YLCBfX1kpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nIGxvbmcgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbXVseF91NjQgKHVuc2lnbmVkIGxvbmcgbG9uZyBfX1gsIHVuc2lnbmVkIGxvbmcgbG9uZyBfX1ksCi0JICAgdW5zaWduZWQgbG9uZyBsb25nICpfX1ApCi17Ci0gIHVuc2lnbmVkIF9faW50MTI4IF9fcmVzID0gKHVuc2lnbmVkIF9faW50MTI4KSBfX1ggKiBfX1k7Ci0gICpfX1AgPSAodW5zaWduZWQgbG9uZyBsb25nKSAoX19yZXMgPj4gNjQpOwotICByZXR1cm4gKHVuc2lnbmVkIGxvbmcgbG9uZykgX19yZXM7Ci19Ci0KLSNlbHNlIC8qICFfX3g4Nl82NF9fICovCi0KLXN0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGludCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tdWx4X3UzMiAodW5zaWduZWQgaW50IF9fWCwgdW5zaWduZWQgaW50IF9fWSwgdW5zaWduZWQgaW50ICpfX1ApCi17Ci0gIHVuc2lnbmVkIGxvbmcgbG9uZyBfX3JlcyA9ICh1bnNpZ25lZCBsb25nIGxvbmcpIF9fWCAqIF9fWTsKLSAgKl9fUCA9ICh1bnNpZ25lZCBpbnQpIChfX3JlcyA+PiAzMik7Ci0gIHJldHVybiAodW5zaWduZWQgaW50KSBfX3JlczsKLX0KLQotI2VuZGlmIC8qICFfX3g4Nl82NF9fICAqLwotCi0jdW5kZWYgX19ERUZBVUxUX0ZOX0FUVFJTCi0KLSNlbmRpZiAvKiBfX0JNSTJJTlRSSU5fSCAqLwpkaWZmIC0tZ2l0IGEvY2xhbmctMjU3NzExMy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9ibWlpbnRyaW4uaCBiL2NsYW5nLTI1NzcxMTMvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvYm1paW50cmluLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRhOTg3OTIuLjAwMDAwMDAKLS0tIGEvY2xhbmctMjU3NzExMy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9ibWlpbnRyaW4uaAorKysgL2Rldi9udWxsCkBAIC0xLDE1NSArMCwwIEBACi0vKj09PS0tLS0gYm1paW50cmluLmggLSBCTUkgaW50cmluc2ljcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09Ci0gKgotICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQotICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKLSAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKLSAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKLSAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcwotICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKLSAqCi0gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgotICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCi0gKgotICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKLSAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAotICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCi0gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAotICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgotICogVEhFIFNPRlRXQVJFLgotICoKLSAqPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KLSAqLwotCi0jaWYgIWRlZmluZWQgX19YODZJTlRSSU5fSCAmJiAhZGVmaW5lZCBfX0lNTUlOVFJJTl9ICi0jZXJyb3IgIk5ldmVyIHVzZSA8Ym1paW50cmluLmg+IGRpcmVjdGx5OyBpbmNsdWRlIDx4ODZpbnRyaW4uaD4gaW5zdGVhZC4iCi0jZW5kaWYKLQotI2lmbmRlZiBfX0JNSUlOVFJJTl9ICi0jZGVmaW5lIF9fQk1JSU5UUklOX0gKLQotI2RlZmluZSBfdHpjbnRfdTE2KGEpICAgICAoX190emNudF91MTYoKGEpKSkKLSNkZWZpbmUgX2FuZG5fdTMyKGEsIGIpICAgKF9fYW5kbl91MzIoKGEpLCAoYikpKQotLyogX2JleHRyX3UzMiAhPSBfX2JleHRyX3UzMiAqLwotI2RlZmluZSBfYmxzaV91MzIoYSkgICAgICAoX19ibHNpX3UzMigoYSkpKQotI2RlZmluZSBfYmxzbXNrX3UzMihhKSAgICAoX19ibHNtc2tfdTMyKChhKSkpCi0jZGVmaW5lIF9ibHNyX3UzMihhKSAgICAgIChfX2Jsc3JfdTMyKChhKSkpCi0jZGVmaW5lIF90emNudF91MzIoYSkgICAgIChfX3R6Y250X3UzMigoYSkpKQotCi0vKiBEZWZpbmUgdGhlIGRlZmF1bHQgYXR0cmlidXRlcyBmb3IgdGhlIGZ1bmN0aW9ucyBpbiB0aGlzIGZpbGUuICovCi0jZGVmaW5lIF9fREVGQVVMVF9GTl9BVFRSUyBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18sIF9fdGFyZ2V0X18oImJtaSIpKSkKLQotLyogQWxsb3cgdXNpbmcgdGhlIHR6Y250IGludHJpbnNpY3MgZXZlbiBmb3Igbm9uLUJNSSB0YXJnZXRzLiBTaW5jZSB0aGUgVFpDTlQKLSAgIGluc3RydWN0aW9uIGJlaGF2ZXMgYXMgQlNGIG9uIG5vbi1CTUkgdGFyZ2V0cywgdGhlcmUgaXMgY29kZSB0aGF0IGV4cGVjdHMKLSAgIHRvIHVzZSBpdCBhcyBhIHBvdGVudGlhbGx5IGZhc3RlciB2ZXJzaW9uIG9mIEJTRi4gKi8KLSNkZWZpbmUgX19SRUxBWEVEX0ZOX0FUVFJTIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXykpCi0KLXN0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIHNob3J0IF9fUkVMQVhFRF9GTl9BVFRSUwotX190emNudF91MTYodW5zaWduZWQgc2hvcnQgX19YKQotewotICByZXR1cm4gX19YID8gX19idWlsdGluX2N0enMoX19YKSA6IDE2OwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBpbnQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fX2FuZG5fdTMyKHVuc2lnbmVkIGludCBfX1gsIHVuc2lnbmVkIGludCBfX1kpCi17Ci0gIHJldHVybiB+X19YICYgX19ZOwotfQotCi0vKiBBTUQtc3BlY2lmaWVkLCBkb3VibGUtbGVhZGluZy11bmRlcnNjb3JlIHZlcnNpb24gb2YgQkVYVFIgKi8KLXN0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGludCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9fYmV4dHJfdTMyKHVuc2lnbmVkIGludCBfX1gsIHVuc2lnbmVkIGludCBfX1kpCi17Ci0gIHJldHVybiBfX2J1aWx0aW5faWEzMl9iZXh0cl91MzIoX19YLCBfX1kpOwotfQotCi0vKiBJbnRlbC1zcGVjaWZpZWQsIHNpbmdsZS1sZWFkaW5nLXVuZGVyc2NvcmUgdmVyc2lvbiBvZiBCRVhUUiAqLwotc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgaW50IF9fREVGQVVMVF9GTl9BVFRSUwotX2JleHRyX3UzMih1bnNpZ25lZCBpbnQgX19YLCB1bnNpZ25lZCBpbnQgX19ZLCB1bnNpZ25lZCBpbnQgX19aKQotewotICByZXR1cm4gX19idWlsdGluX2lhMzJfYmV4dHJfdTMyIChfX1gsICgoX19ZICYgMHhmZikgfCAoKF9fWiAmIDB4ZmYpIDw8IDgpKSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGludCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9fYmxzaV91MzIodW5zaWduZWQgaW50IF9fWCkKLXsKLSAgcmV0dXJuIF9fWCAmIC1fX1g7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGludCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9fYmxzbXNrX3UzMih1bnNpZ25lZCBpbnQgX19YKQotewotICByZXR1cm4gX19YIF4gKF9fWCAtIDEpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBpbnQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fX2Jsc3JfdTMyKHVuc2lnbmVkIGludCBfX1gpCi17Ci0gIHJldHVybiBfX1ggJiAoX19YIC0gMSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGludCBfX1JFTEFYRURfRk5fQVRUUlMKLV9fdHpjbnRfdTMyKHVuc2lnbmVkIGludCBfX1gpCi17Ci0gIHJldHVybiBfX1ggPyBfX2J1aWx0aW5fY3R6KF9fWCkgOiAzMjsKLX0KLQotI2lmZGVmIF9feDg2XzY0X18KLQotI2RlZmluZSBfYW5kbl91NjQoYSwgYikgICAoX19hbmRuX3U2NCgoYSksIChiKSkpCi0vKiBfYmV4dHJfdTY0ICE9IF9fYmV4dHJfdTY0ICovCi0jZGVmaW5lIF9ibHNpX3U2NChhKSAgICAgIChfX2Jsc2lfdTY0KChhKSkpCi0jZGVmaW5lIF9ibHNtc2tfdTY0KGEpICAgIChfX2Jsc21za191NjQoKGEpKSkKLSNkZWZpbmUgX2Jsc3JfdTY0KGEpICAgICAgKF9fYmxzcl91NjQoKGEpKSkKLSNkZWZpbmUgX3R6Y250X3U2NChhKSAgICAgKF9fdHpjbnRfdTY0KChhKSkpCi0KLXN0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcgbG9uZyBfX0RFRkFVTFRfRk5fQVRUUlMKLV9fYW5kbl91NjQgKHVuc2lnbmVkIGxvbmcgbG9uZyBfX1gsIHVuc2lnbmVkIGxvbmcgbG9uZyBfX1kpCi17Ci0gIHJldHVybiB+X19YICYgX19ZOwotfQotCi0vKiBBTUQtc3BlY2lmaWVkLCBkb3VibGUtbGVhZGluZy11bmRlcnNjb3JlIHZlcnNpb24gb2YgQkVYVFIgKi8KLXN0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcgbG9uZyBfX0RFRkFVTFRfRk5fQVRUUlMKLV9fYmV4dHJfdTY0KHVuc2lnbmVkIGxvbmcgbG9uZyBfX1gsIHVuc2lnbmVkIGxvbmcgbG9uZyBfX1kpCi17Ci0gIHJldHVybiBfX2J1aWx0aW5faWEzMl9iZXh0cl91NjQoX19YLCBfX1kpOwotfQotCi0vKiBJbnRlbC1zcGVjaWZpZWQsIHNpbmdsZS1sZWFkaW5nLXVuZGVyc2NvcmUgdmVyc2lvbiBvZiBCRVhUUiAqLwotc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgbG9uZyBsb25nIF9fREVGQVVMVF9GTl9BVFRSUwotX2JleHRyX3U2NCh1bnNpZ25lZCBsb25nIGxvbmcgX19YLCB1bnNpZ25lZCBpbnQgX19ZLCB1bnNpZ25lZCBpbnQgX19aKQotewotICByZXR1cm4gX19idWlsdGluX2lhMzJfYmV4dHJfdTY0IChfX1gsICgoX19ZICYgMHhmZikgfCAoKF9fWiAmIDB4ZmYpIDw8IDgpKSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcgbG9uZyBfX0RFRkFVTFRfRk5fQVRUUlMKLV9fYmxzaV91NjQodW5zaWduZWQgbG9uZyBsb25nIF9fWCkKLXsKLSAgcmV0dXJuIF9fWCAmIC1fX1g7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcgbG9uZyBfX0RFRkFVTFRfRk5fQVRUUlMKLV9fYmxzbXNrX3U2NCh1bnNpZ25lZCBsb25nIGxvbmcgX19YKQotewotICByZXR1cm4gX19YIF4gKF9fWCAtIDEpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nIGxvbmcgX19ERUZBVUxUX0ZOX0FUVFJTCi1fX2Jsc3JfdTY0KHVuc2lnbmVkIGxvbmcgbG9uZyBfX1gpCi17Ci0gIHJldHVybiBfX1ggJiAoX19YIC0gMSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcgbG9uZyBfX1JFTEFYRURfRk5fQVRUUlMKLV9fdHpjbnRfdTY0KHVuc2lnbmVkIGxvbmcgbG9uZyBfX1gpCi17Ci0gIHJldHVybiBfX1ggPyBfX2J1aWx0aW5fY3R6bGwoX19YKSA6IDY0OwotfQotCi0jZW5kaWYgLyogX194ODZfNjRfXyAqLwotCi0jdW5kZWYgX19ERUZBVUxUX0ZOX0FUVFJTCi0jdW5kZWYgX19SRUxBWEVEX0ZOX0FUVFJTCi0KLSNlbmRpZiAvKiBfX0JNSUlOVFJJTl9IICovCmRpZmYgLS1naXQgYS9jbGFuZy0yNTc3MTEzL2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL2NwdWlkLmggYi9jbGFuZy0yNTc3MTEzL2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL2NwdWlkLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVkYTAyZTAuLjAwMDAwMDAKLS0tIGEvY2xhbmctMjU3NzExMy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9jcHVpZC5oCisrKyAvZGV2L251bGwKQEAgLTEsMjA5ICswLDAgQEAKLS8qPT09LS0tLSBjcHVpZC5oIC0gWDg2IGNwdSBtb2RlbCBkZXRlY3Rpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KLSAqCi0gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5Ci0gKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAotICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cwotICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAotICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCi0gKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgotICoKLSAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCi0gKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KLSAqCi0gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgotICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCi0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKLSAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCi0gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCi0gKiBUSEUgU09GVFdBUkUuCi0gKgotICo9PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQotICovCi0KLSNpZiAhKF9feDg2XzY0X18gfHwgX19pMzg2X18pCi0jZXJyb3IgdGhpcyBoZWFkZXIgaXMgZm9yIHg4NiBvbmx5Ci0jZW5kaWYKLQotLyogUmVzcG9uc2VzIGlkZW50aWZpY2F0aW9uIHJlcXVlc3Qgd2l0aCAlZWF4IDAgKi8KLS8qIEFNRDogICAgICJBdXRoZW50aWNBTUQiICovCi0jZGVmaW5lIHNpZ25hdHVyZV9BTURfZWJ4IDB4Njg3NDc1NDEKLSNkZWZpbmUgc2lnbmF0dXJlX0FNRF9lZHggMHg2OTc0NmU2NQotI2RlZmluZSBzaWduYXR1cmVfQU1EX2VjeCAweDQ0NGQ0MTYzCi0vKiBDRU5UQVVSOiAiQ2VudGF1ckhhdWxzIiAqLwotI2RlZmluZSBzaWduYXR1cmVfQ0VOVEFVUl9lYnggMHg3NDZlNjU0MwotI2RlZmluZSBzaWduYXR1cmVfQ0VOVEFVUl9lZHggMHg0ODcyNzU2MQotI2RlZmluZSBzaWduYXR1cmVfQ0VOVEFVUl9lY3ggMHg3MzZjNzU2MQotLyogQ1lSSVg6ICAgIkN5cml4SW5zdGVhZCIgKi8KLSNkZWZpbmUgc2lnbmF0dXJlX0NZUklYX2VieCAweDY5NzI3OTQzCi0jZGVmaW5lIHNpZ25hdHVyZV9DWVJJWF9lZHggMHg3MzZlNDk3OAotI2RlZmluZSBzaWduYXR1cmVfQ1lSSVhfZWN4IDB4NjQ2MTY1NzQKLS8qIElOVEVMOiAgICJHZW51aW5lSW50ZWwiICovCi0jZGVmaW5lIHNpZ25hdHVyZV9JTlRFTF9lYnggMHg3NTZlNjU0NwotI2RlZmluZSBzaWduYXR1cmVfSU5URUxfZWR4IDB4NDk2NTZlNjkKLSNkZWZpbmUgc2lnbmF0dXJlX0lOVEVMX2VjeCAweDZjNjU3NDZlCi0vKiBUTTE6ICAgICAiVHJhbnNtZXRhQ1BVIiAqLwotI2RlZmluZSBzaWduYXR1cmVfVE0xX2VieCAweDZlNjE3MjU0Ci0jZGVmaW5lIHNpZ25hdHVyZV9UTTFfZWR4IDB4NzQ2NTZkNzMKLSNkZWZpbmUgc2lnbmF0dXJlX1RNMV9lY3ggMHg1NTUwNDM2MQotLyogVE0yOiAgICAgIkdlbnVpbmVUTXg4NiIgKi8KLSNkZWZpbmUgc2lnbmF0dXJlX1RNMl9lYnggMHg3NTZlNjU0NwotI2RlZmluZSBzaWduYXR1cmVfVE0yX2VkeCAweDU0NjU2ZTY5Ci0jZGVmaW5lIHNpZ25hdHVyZV9UTTJfZWN4IDB4MzYzODc4NGQKLS8qIE5TQzogICAgICJHZW9kZSBieSBOU0MiICovCi0jZGVmaW5lIHNpZ25hdHVyZV9OU0NfZWJ4IDB4NjQ2ZjY1NDcKLSNkZWZpbmUgc2lnbmF0dXJlX05TQ19lZHggMHg0MzUzNGUyMAotI2RlZmluZSBzaWduYXR1cmVfTlNDX2VjeCAweDc5NjIyMDY1Ci0vKiBORVhHRU46ICAiTmV4R2VuRHJpdmVuIiAqLwotI2RlZmluZSBzaWduYXR1cmVfTkVYR0VOX2VieCAweDQ3Nzg2NTRlCi0jZGVmaW5lIHNpZ25hdHVyZV9ORVhHRU5fZWR4IDB4NzI0NDZlNjUKLSNkZWZpbmUgc2lnbmF0dXJlX05FWEdFTl9lY3ggMHg2ZTY1NzY2OQotLyogUklTRTogICAgIlJpc2VSaXNlUmlzZSIgKi8KLSNkZWZpbmUgc2lnbmF0dXJlX1JJU0VfZWJ4IDB4NjU3MzY5NTIKLSNkZWZpbmUgc2lnbmF0dXJlX1JJU0VfZWR4IDB4NjU3MzY5NTIKLSNkZWZpbmUgc2lnbmF0dXJlX1JJU0VfZWN4IDB4NjU3MzY5NTIKLS8qIFNJUzogICAgICJTaVMgU2lTIFNpUyAiICovCi0jZGVmaW5lIHNpZ25hdHVyZV9TSVNfZWJ4IDB4MjA1MzY5NTMKLSNkZWZpbmUgc2lnbmF0dXJlX1NJU19lZHggMHgyMDUzNjk1MwotI2RlZmluZSBzaWduYXR1cmVfU0lTX2VjeCAweDIwNTM2OTUzCi0vKiBVTUM6ICAgICAiVU1DIFVNQyBVTUMgIiAqLwotI2RlZmluZSBzaWduYXR1cmVfVU1DX2VieCAweDIwNDM0ZDU1Ci0jZGVmaW5lIHNpZ25hdHVyZV9VTUNfZWR4IDB4MjA0MzRkNTUKLSNkZWZpbmUgc2lnbmF0dXJlX1VNQ19lY3ggMHgyMDQzNGQ1NQotLyogVklBOiAgICAgIlZJQSBWSUEgVklBICIgKi8KLSNkZWZpbmUgc2lnbmF0dXJlX1ZJQV9lYnggMHgyMDQxNDk1NgotI2RlZmluZSBzaWduYXR1cmVfVklBX2VkeCAweDIwNDE0OTU2Ci0jZGVmaW5lIHNpZ25hdHVyZV9WSUFfZWN4IDB4MjA0MTQ5NTYKLS8qIFZPUlRFWDogICJWb3J0ZXg4NiBTb0MiICovCi0jZGVmaW5lIHNpZ25hdHVyZV9WT1JURVhfZWJ4IDB4NzQ3MjZmNTYKLSNkZWZpbmUgc2lnbmF0dXJlX1ZPUlRFWF9lZHggMHgzNjM4Nzg2NQotI2RlZmluZSBzaWduYXR1cmVfVk9SVEVYX2VjeCAweDQzNmY1MzIwCi0KLS8qIEZlYXR1cmVzIGluICVlY3ggZm9yIGxldmVsIDEgKi8KLSNkZWZpbmUgYml0X1NTRTMgICAgICAgIDB4MDAwMDAwMDEKLSNkZWZpbmUgYml0X1BDTE1VTFFEUSAgIDB4MDAwMDAwMDIKLSNkZWZpbmUgYml0X0RURVM2NCAgICAgIDB4MDAwMDAwMDQKLSNkZWZpbmUgYml0X01PTklUT1IgICAgIDB4MDAwMDAwMDgKLSNkZWZpbmUgYml0X0RTQ1BMICAgICAgIDB4MDAwMDAwMTAKLSNkZWZpbmUgYml0X1ZNWCAgICAgICAgIDB4MDAwMDAwMjAKLSNkZWZpbmUgYml0X1NNWCAgICAgICAgIDB4MDAwMDAwNDAKLSNkZWZpbmUgYml0X0VJU1QgICAgICAgIDB4MDAwMDAwODAKLSNkZWZpbmUgYml0X1RNMiAgICAgICAgIDB4MDAwMDAxMDAKLSNkZWZpbmUgYml0X1NTU0UzICAgICAgIDB4MDAwMDAyMDAKLSNkZWZpbmUgYml0X0NOWFRJRCAgICAgIDB4MDAwMDA0MDAKLSNkZWZpbmUgYml0X0ZNQSAgICAgICAgIDB4MDAwMDEwMDAKLSNkZWZpbmUgYml0X0NNUFhDSEcxNkIgIDB4MDAwMDIwMDAKLSNkZWZpbmUgYml0X3hUUFIgICAgICAgIDB4MDAwMDQwMDAKLSNkZWZpbmUgYml0X1BEQ00gICAgICAgIDB4MDAwMDgwMDAKLSNkZWZpbmUgYml0X1BDSUQgICAgICAgIDB4MDAwMjAwMDAKLSNkZWZpbmUgYml0X0RDQSAgICAgICAgIDB4MDAwNDAwMDAKLSNkZWZpbmUgYml0X1NTRTQxICAgICAgIDB4MDAwODAwMDAKLSNkZWZpbmUgYml0X1NTRTQyICAgICAgIDB4MDAxMDAwMDAKLSNkZWZpbmUgYml0X3gyQVBJQyAgICAgIDB4MDAyMDAwMDAKLSNkZWZpbmUgYml0X01PVkJFICAgICAgIDB4MDA0MDAwMDAKLSNkZWZpbmUgYml0X1BPUENOVCAgICAgIDB4MDA4MDAwMDAKLSNkZWZpbmUgYml0X1RTQ0RlYWRsaW5lIDB4MDEwMDAwMDAKLSNkZWZpbmUgYml0X0FFU05JICAgICAgIDB4MDIwMDAwMDAKLSNkZWZpbmUgYml0X1hTQVZFICAgICAgIDB4MDQwMDAwMDAKLSNkZWZpbmUgYml0X09TWFNBVkUgICAgIDB4MDgwMDAwMDAKLSNkZWZpbmUgYml0X0FWWCAgICAgICAgIDB4MTAwMDAwMDAKLSNkZWZpbmUgYml0X1JEUk5EICAgICAgIDB4NDAwMDAwMDAKLQotLyogRmVhdHVyZXMgaW4gJWVkeCBmb3IgbGV2ZWwgMSAqLwotI2RlZmluZSBiaXRfRlBVICAgICAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBiaXRfVk1FICAgICAgICAgMHgwMDAwMDAwMgotI2RlZmluZSBiaXRfREUgICAgICAgICAgMHgwMDAwMDAwNAotI2RlZmluZSBiaXRfUFNFICAgICAgICAgMHgwMDAwMDAwOAotI2RlZmluZSBiaXRfVFNDICAgICAgICAgMHgwMDAwMDAxMAotI2RlZmluZSBiaXRfTVNSICAgICAgICAgMHgwMDAwMDAyMAotI2RlZmluZSBiaXRfUEFFICAgICAgICAgMHgwMDAwMDA0MAotI2RlZmluZSBiaXRfTUNFICAgICAgICAgMHgwMDAwMDA4MAotI2RlZmluZSBiaXRfQ1g4ICAgICAgICAgMHgwMDAwMDEwMAotI2RlZmluZSBiaXRfQVBJQyAgICAgICAgMHgwMDAwMDIwMAotI2RlZmluZSBiaXRfU0VQICAgICAgICAgMHgwMDAwMDgwMAotI2RlZmluZSBiaXRfTVRSUiAgICAgICAgMHgwMDAwMTAwMAotI2RlZmluZSBiaXRfUEdFICAgICAgICAgMHgwMDAwMjAwMAotI2RlZmluZSBiaXRfTUNBICAgICAgICAgMHgwMDAwNDAwMAotI2RlZmluZSBiaXRfQ01PViAgICAgICAgMHgwMDAwODAwMAotI2RlZmluZSBiaXRfUEFUICAgICAgICAgMHgwMDAxMDAwMAotI2RlZmluZSBiaXRfUFNFMzYgICAgICAgMHgwMDAyMDAwMAotI2RlZmluZSBiaXRfUFNOICAgICAgICAgMHgwMDA0MDAwMAotI2RlZmluZSBiaXRfQ0xGU0ggICAgICAgMHgwMDA4MDAwMAotI2RlZmluZSBiaXRfRFMgICAgICAgICAgMHgwMDIwMDAwMAotI2RlZmluZSBiaXRfQUNQSSAgICAgICAgMHgwMDQwMDAwMAotI2RlZmluZSBiaXRfTU1YICAgICAgICAgMHgwMDgwMDAwMAotI2RlZmluZSBiaXRfRlhTUiAgICAgICAgMHgwMTAwMDAwMAotI2RlZmluZSBiaXRfRlhTQVZFICAgICAgYml0X0ZYU1IgICAgLyogZm9yIGdjYyBjb21wYXQgKi8KLSNkZWZpbmUgYml0X1NTRSAgICAgICAgIDB4MDIwMDAwMDAKLSNkZWZpbmUgYml0X1NTRTIgICAgICAgIDB4MDQwMDAwMDAKLSNkZWZpbmUgYml0X1NTICAgICAgICAgIDB4MDgwMDAwMDAKLSNkZWZpbmUgYml0X0hUVCAgICAgICAgIDB4MTAwMDAwMDAKLSNkZWZpbmUgYml0X1RNICAgICAgICAgIDB4MjAwMDAwMDAKLSNkZWZpbmUgYml0X1BCRSAgICAgICAgIDB4ODAwMDAwMDAKLQotLyogRmVhdHVyZXMgaW4gJWVieCBmb3IgbGV2ZWwgNyBzdWItbGVhZiAwICovCi0jZGVmaW5lIGJpdF9GU0dTQkFTRSAgICAweDAwMDAwMDAxCi0jZGVmaW5lIGJpdF9TTUVQICAgICAgICAweDAwMDAwMDgwCi0jZGVmaW5lIGJpdF9FTkhfTU9WU0IgICAweDAwMDAwMjAwCi0KLSNpZiBfX2kzODZfXwotI2RlZmluZSBfX2NwdWlkKF9fbGV2ZWwsIF9fZWF4LCBfX2VieCwgX19lY3gsIF9fZWR4KSBcCi0gICAgX19hc20oImNwdWlkIiA6ICI9YSIoX19lYXgpLCAiPWIiIChfX2VieCksICI9YyIoX19lY3gpLCAiPWQiKF9fZWR4KSBcCi0gICAgICAgICAgICAgICAgICA6ICIwIihfX2xldmVsKSkKLQotI2RlZmluZSBfX2NwdWlkX2NvdW50KF9fbGV2ZWwsIF9fY291bnQsIF9fZWF4LCBfX2VieCwgX19lY3gsIF9fZWR4KSBcCi0gICAgX19hc20oImNwdWlkIiA6ICI9YSIoX19lYXgpLCAiPWIiIChfX2VieCksICI9YyIoX19lY3gpLCAiPWQiKF9fZWR4KSBcCi0gICAgICAgICAgICAgICAgICA6ICIwIihfX2xldmVsKSwgIjIiKF9fY291bnQpKQotI2Vsc2UKLS8qIHg4Ni02NCB1c2VzICVyYnggYXMgdGhlIGJhc2UgcmVnaXN0ZXIsIHNvIHByZXNlcnZlIGl0LiAqLwotI2RlZmluZSBfX2NwdWlkKF9fbGV2ZWwsIF9fZWF4LCBfX2VieCwgX19lY3gsIF9fZWR4KSBcCi0gICAgX19hc20oIiAgeGNoZ3EgICUlcmJ4LCVxMVxuIiBcCi0gICAgICAgICAgIiAgY3B1aWRcbiIgXAotICAgICAgICAgICIgIHhjaGdxICAlJXJieCwlcTEiIFwKLSAgICAgICAgOiAiPWEiKF9fZWF4KSwgIj1yIiAoX19lYngpLCAiPWMiKF9fZWN4KSwgIj1kIihfX2VkeCkgXAotICAgICAgICA6ICIwIihfX2xldmVsKSkKLQotI2RlZmluZSBfX2NwdWlkX2NvdW50KF9fbGV2ZWwsIF9fY291bnQsIF9fZWF4LCBfX2VieCwgX19lY3gsIF9fZWR4KSBcCi0gICAgX19hc20oIiAgeGNoZ3EgICUlcmJ4LCVxMVxuIiBcCi0gICAgICAgICAgIiAgY3B1aWRcbiIgXAotICAgICAgICAgICIgIHhjaGdxICAlJXJieCwlcTEiIFwKLSAgICAgICAgOiAiPWEiKF9fZWF4KSwgIj1yIiAoX19lYngpLCAiPWMiKF9fZWN4KSwgIj1kIihfX2VkeCkgXAotICAgICAgICA6ICIwIihfX2xldmVsKSwgIjIiKF9fY291bnQpKQotI2VuZGlmCi0KLXN0YXRpYyBfX2lubGluZSBpbnQgX19nZXRfY3B1aWQgKHVuc2lnbmVkIGludCBfX2xldmVsLCB1bnNpZ25lZCBpbnQgKl9fZWF4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpfX2VieCwgdW5zaWduZWQgaW50ICpfX2VjeCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqX19lZHgpIHsKLSAgICBfX2NwdWlkKF9fbGV2ZWwsICpfX2VheCwgKl9fZWJ4LCAqX19lY3gsICpfX2VkeCk7Ci0gICAgcmV0dXJuIDE7Ci19Ci0KLXN0YXRpYyBfX2lubGluZSBpbnQgX19nZXRfY3B1aWRfbWF4ICh1bnNpZ25lZCBpbnQgX19sZXZlbCwgdW5zaWduZWQgaW50ICpfX3NpZykKLXsKLSAgICB1bnNpZ25lZCBpbnQgX19lYXgsIF9fZWJ4LCBfX2VjeCwgX19lZHg7Ci0jaWYgX19pMzg2X18KLSAgICBpbnQgX19jcHVpZF9zdXBwb3J0ZWQ7Ci0KLSAgICBfX2FzbSgiICBwdXNoZmxcbiIKLSAgICAgICAgICAiICBwb3BsICAgJSVlYXhcbiIKLSAgICAgICAgICAiICBtb3ZsICAgJSVlYXgsJSVlY3hcbiIKLSAgICAgICAgICAiICB4b3JsICAgJDB4MDAyMDAwMDAsJSVlYXhcbiIKLSAgICAgICAgICAiICBwdXNobCAgJSVlYXhcbiIKLSAgICAgICAgICAiICBwb3BmbFxuIgotICAgICAgICAgICIgIHB1c2hmbFxuIgotICAgICAgICAgICIgIHBvcGwgICAlJWVheFxuIgotICAgICAgICAgICIgIG1vdmwgICAkMCwlMFxuIgotICAgICAgICAgICIgIGNtcGwgICAlJWVheCwlJWVjeFxuIgotICAgICAgICAgICIgIGplICAgICAxZlxuIgotICAgICAgICAgICIgIG1vdmwgICAkMSwlMFxuIgotICAgICAgICAgICIxOiIKLSAgICAgICAgOiAiPXIiIChfX2NwdWlkX3N1cHBvcnRlZCkgOiA6ICJlYXgiLCAiZWN4Iik7Ci0gICAgaWYgKCFfX2NwdWlkX3N1cHBvcnRlZCkKLSAgICAgICAgcmV0dXJuIDA7Ci0jZW5kaWYKLQotICAgIF9fY3B1aWQoX19sZXZlbCwgX19lYXgsIF9fZWJ4LCBfX2VjeCwgX19lZHgpOwotICAgIGlmIChfX3NpZykKLSAgICAgICAgKl9fc2lnID0gX19lYng7Ci0gICAgcmV0dXJuIF9fZWF4OwotfQpkaWZmIC0tZ2l0IGEvY2xhbmctMjU3NzExMy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9jdWRhX2J1aWx0aW5fdmFycy5oIGIvY2xhbmctMjU3NzExMy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9jdWRhX2J1aWx0aW5fdmFycy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MDEzNTZiLi4wMDAwMDAwCi0tLSBhL2NsYW5nLTI1NzcxMTMvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvY3VkYV9idWlsdGluX3ZhcnMuaAorKysgL2Rldi9udWxsCkBAIC0xLDExMCArMCwwIEBACi0vKj09PS0tLS0gY3VkYV9idWlsdGluX3ZhcnMuaCAtIENVREEgYnVpbHQtaW4gdmFyaWFibGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQotICoKLSAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKLSAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCi0gKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCi0gKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCi0gKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKLSAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Ci0gKgotICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KLSAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgotICoKLSAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCi0gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKLSAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgotICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKLSAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KLSAqIFRIRSBTT0ZUV0FSRS4KLSAqCi0gKj09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09Ci0gKi8KLQotI2lmbmRlZiBfX0NVREFfQlVJTFRJTl9WQVJTX0gKLSNkZWZpbmUgX19DVURBX0JVSUxUSU5fVkFSU19ICi0KLS8vIFRoZSBmaWxlIGltcGxlbWVudHMgYnVpbHQtaW4gQ1VEQSB2YXJpYWJsZXMgdXNpbmcgX19kZWNsc3BlYyhwcm9wZXJ0eSkuCi0vLyBodHRwczovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L3loZmswdGhkLmFzcHgKLS8vIEFsbCByZWFkIGFjY2Vzc2VzIG9mIGJ1aWx0LWluIHZhcmlhYmxlIGZpZWxkcyBnZXQgY29udmVydGVkIGludG8gY2FsbHMgdG8gYQotLy8gZ2V0dGVyIGZ1bmN0aW9uIHdoaWNoIGluIHR1cm4gd291bGQgY2FsbCBhcHByb3ByaWF0ZSBidWlsdGluIHRvIGZldGNoIHRoZQotLy8gdmFsdWUuCi0vLwotLy8gRXhhbXBsZToKLS8vICAgIGludCB4ID0gdGhyZWFkSWR4Lng7Ci0vLyBJUiBvdXRwdXQ6Ci0vLyAgJTAgPSBjYWxsIGkzMiBAbGx2bS5wdHgucmVhZC50aWQueCgpICMzCi0vLyBQVFggb3V0cHV0OgotLy8gIG1vdi51MzIgICAgICVyMiwgJXRpZC54OwotCi0jZGVmaW5lIF9fQ1VEQV9ERVZJQ0VfQlVJTFRJTihGSUVMRCwgSU5UUklOU0lDKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBfX2RlY2xzcGVjKHByb3BlcnR5KGdldCA9IF9fZmV0Y2hfYnVpbHRpbl8jI0ZJRUxEKSkgdW5zaWduZWQgaW50IEZJRUxEOyAgICAgIFwKLSAgc3RhdGljIGlubGluZSBfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBfX2F0dHJpYnV0ZV9fKChkZXZpY2UpKSB1bnNpZ25lZCBpbnQgX19mZXRjaF9idWlsdGluXyMjRklFTEQodm9pZCkgeyAgICAgXAotICAgIHJldHVybiBJTlRSSU5TSUM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgfQotCi0jaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAotI2RlZmluZSBfX0RFTEVURSA9ZGVsZXRlCi0jZWxzZQotI2RlZmluZSBfX0RFTEVURQotI2VuZGlmCi0KLS8vIE1ha2Ugc3VyZSBub2JvZHkgY2FuIGNyZWF0ZSBpbnN0YW5jZXMgb2YgdGhlIHNwZWNpYWwgdmFyaWJsZSB0eXBlcy4gIG52Y2MKLS8vIGFsc28gZGlzYWxsb3dzIHRha2luZyBhZGRyZXNzIG9mIHNwZWNpYWwgdmFyaWFibGVzLCBzbyB3ZSBkaXNhYmxlIGFkZHJlc3Mtb2YKLS8vIG9wZXJhdG9yIGFzIHdlbGwuCi0jZGVmaW5lIF9fQ1VEQV9ESVNBTExPV19CVUlMVElOVkFSX0FDQ0VTUyhUeXBlTmFtZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBfX2F0dHJpYnV0ZV9fKChkZXZpY2UpKSBUeXBlTmFtZSgpIF9fREVMRVRFOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgX19hdHRyaWJ1dGVfXygoZGV2aWNlKSkgVHlwZU5hbWUoY29uc3QgVHlwZU5hbWUgJikgX19ERUxFVEU7ICAgICAgICAgICAgICAgICBcCi0gIF9fYXR0cmlidXRlX18oKGRldmljZSkpIHZvaWQgb3BlcmF0b3I9KGNvbnN0IFR5cGVOYW1lICYpIGNvbnN0IF9fREVMRVRFOyAgICAgXAotICBfX2F0dHJpYnV0ZV9fKChkZXZpY2UpKSBUeXBlTmFtZSAqb3BlcmF0b3ImKCkgY29uc3QgX19ERUxFVEUKLQotc3RydWN0IF9fY3VkYV9idWlsdGluX3RocmVhZElkeF90IHsKLSAgX19DVURBX0RFVklDRV9CVUlMVElOKHgsX19idWlsdGluX3B0eF9yZWFkX3RpZF94KCkpOwotICBfX0NVREFfREVWSUNFX0JVSUxUSU4oeSxfX2J1aWx0aW5fcHR4X3JlYWRfdGlkX3koKSk7Ci0gIF9fQ1VEQV9ERVZJQ0VfQlVJTFRJTih6LF9fYnVpbHRpbl9wdHhfcmVhZF90aWRfeigpKTsKLXByaXZhdGU6Ci0gIF9fQ1VEQV9ESVNBTExPV19CVUlMVElOVkFSX0FDQ0VTUyhfX2N1ZGFfYnVpbHRpbl90aHJlYWRJZHhfdCk7Ci19OwotCi1zdHJ1Y3QgX19jdWRhX2J1aWx0aW5fYmxvY2tJZHhfdCB7Ci0gIF9fQ1VEQV9ERVZJQ0VfQlVJTFRJTih4LF9fYnVpbHRpbl9wdHhfcmVhZF9jdGFpZF94KCkpOwotICBfX0NVREFfREVWSUNFX0JVSUxUSU4oeSxfX2J1aWx0aW5fcHR4X3JlYWRfY3RhaWRfeSgpKTsKLSAgX19DVURBX0RFVklDRV9CVUlMVElOKHosX19idWlsdGluX3B0eF9yZWFkX2N0YWlkX3ooKSk7Ci1wcml2YXRlOgotICBfX0NVREFfRElTQUxMT1dfQlVJTFRJTlZBUl9BQ0NFU1MoX19jdWRhX2J1aWx0aW5fYmxvY2tJZHhfdCk7Ci19OwotCi1zdHJ1Y3QgX19jdWRhX2J1aWx0aW5fYmxvY2tEaW1fdCB7Ci0gIF9fQ1VEQV9ERVZJQ0VfQlVJTFRJTih4LF9fYnVpbHRpbl9wdHhfcmVhZF9udGlkX3goKSk7Ci0gIF9fQ1VEQV9ERVZJQ0VfQlVJTFRJTih5LF9fYnVpbHRpbl9wdHhfcmVhZF9udGlkX3koKSk7Ci0gIF9fQ1VEQV9ERVZJQ0VfQlVJTFRJTih6LF9fYnVpbHRpbl9wdHhfcmVhZF9udGlkX3ooKSk7Ci1wcml2YXRlOgotICBfX0NVREFfRElTQUxMT1dfQlVJTFRJTlZBUl9BQ0NFU1MoX19jdWRhX2J1aWx0aW5fYmxvY2tEaW1fdCk7Ci19OwotCi1zdHJ1Y3QgX19jdWRhX2J1aWx0aW5fZ3JpZERpbV90IHsKLSAgX19DVURBX0RFVklDRV9CVUlMVElOKHgsX19idWlsdGluX3B0eF9yZWFkX25jdGFpZF94KCkpOwotICBfX0NVREFfREVWSUNFX0JVSUxUSU4oeSxfX2J1aWx0aW5fcHR4X3JlYWRfbmN0YWlkX3koKSk7Ci0gIF9fQ1VEQV9ERVZJQ0VfQlVJTFRJTih6LF9fYnVpbHRpbl9wdHhfcmVhZF9uY3RhaWRfeigpKTsKLXByaXZhdGU6Ci0gIF9fQ1VEQV9ESVNBTExPV19CVUlMVElOVkFSX0FDQ0VTUyhfX2N1ZGFfYnVpbHRpbl9ncmlkRGltX3QpOwotfTsKLQotI2RlZmluZSBfX0NVREFfQlVJTFRJTl9WQVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgZXh0ZXJuIGNvbnN0IF9fYXR0cmlidXRlX18oKGRldmljZSkpIF9fYXR0cmlidXRlX18oKHdlYWspKQotX19DVURBX0JVSUxUSU5fVkFSIF9fY3VkYV9idWlsdGluX3RocmVhZElkeF90IHRocmVhZElkeDsKLV9fQ1VEQV9CVUlMVElOX1ZBUiBfX2N1ZGFfYnVpbHRpbl9ibG9ja0lkeF90IGJsb2NrSWR4OwotX19DVURBX0JVSUxUSU5fVkFSIF9fY3VkYV9idWlsdGluX2Jsb2NrRGltX3QgYmxvY2tEaW07Ci1fX0NVREFfQlVJTFRJTl9WQVIgX19jdWRhX2J1aWx0aW5fZ3JpZERpbV90IGdyaWREaW07Ci0KLS8vIHdhcnBTaXplIHNob3VsZCB0cmFuc2xhdGUgdG8gcmVhZCBvZiAlV0FSUF9TWiBidXQgdGhlcmUncyBjdXJyZW50bHkgbm8KLS8vIGJ1aWx0aW4gdG8gZG8gc28uIEFjY29yZGluZyB0byBQVFggdjQuMiBkb2NzICd0byBkYXRlLCBhbGwgdGFyZ2V0Ci0vLyBhcmNoaXRlY3R1cmVzIGhhdmUgYSBXQVJQX1NaIHZhbHVlIG9mIDMyJy4KLV9fYXR0cmlidXRlX18oKGRldmljZSkpIGNvbnN0IGludCB3YXJwU2l6ZSA9IDMyOwotCi0jdW5kZWYgX19DVURBX0RFVklDRV9CVUlMVElOCi0jdW5kZWYgX19DVURBX0JVSUxUSU5fVkFSCi0jdW5kZWYgX19DVURBX0RJU0FMTE9XX0JVSUxUSU5WQVJfQUNDRVNTCi0KLSNlbmRpZiAvKiBfX0NVREFfQlVJTFRJTl9WQVJTX0ggKi8KZGlmZiAtLWdpdCBhL2NsYW5nLTI1NzcxMTMvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvZW1taW50cmluLmggYi9jbGFuZy0yNTc3MTEzL2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL2VtbWludHJpbi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZmMyYzcxLi4wMDAwMDAwCi0tLSBhL2NsYW5nLTI1NzcxMTMvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvZW1taW50cmluLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNDkxICswLDAgQEAKLS8qPT09LS0tLSBlbW1pbnRyaW4uaCAtIFNTRTIgaW50cmluc2ljcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KLSAqCi0gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5Ci0gKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAotICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cwotICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAotICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCi0gKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgotICoKLSAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCi0gKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KLSAqCi0gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgotICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCi0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKLSAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCi0gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCi0gKiBUSEUgU09GVFdBUkUuCi0gKgotICo9PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQotICovCi0KLSNpZm5kZWYgX19FTU1JTlRSSU5fSAotI2RlZmluZSBfX0VNTUlOVFJJTl9ICi0KLSNpbmNsdWRlIDx4bW1pbnRyaW4uaD4KLQotdHlwZWRlZiBkb3VibGUgX19tMTI4ZCBfX2F0dHJpYnV0ZV9fKChfX3ZlY3Rvcl9zaXplX18oMTYpKSk7Ci10eXBlZGVmIGxvbmcgbG9uZyBfX20xMjhpIF9fYXR0cmlidXRlX18oKF9fdmVjdG9yX3NpemVfXygxNikpKTsKLQotLyogVHlwZSBkZWZpbmVzLiAgKi8KLXR5cGVkZWYgZG91YmxlIF9fdjJkZiBfX2F0dHJpYnV0ZV9fICgoX192ZWN0b3Jfc2l6ZV9fICgxNikpKTsKLXR5cGVkZWYgbG9uZyBsb25nIF9fdjJkaSBfX2F0dHJpYnV0ZV9fICgoX192ZWN0b3Jfc2l6ZV9fICgxNikpKTsKLXR5cGVkZWYgc2hvcnQgX192OGhpIF9fYXR0cmlidXRlX18oKF9fdmVjdG9yX3NpemVfXygxNikpKTsKLXR5cGVkZWYgY2hhciBfX3YxNnFpIF9fYXR0cmlidXRlX18oKF9fdmVjdG9yX3NpemVfXygxNikpKTsKLQotLyogV2UgbmVlZCBhbiBleHBsaWNpdGx5IHNpZ25lZCB2YXJpYW50IGZvciBjaGFyLiBOb3RlIHRoYXQgdGhpcyBzaG91bGRuJ3QKLSAqIGFwcGVhciBpbiB0aGUgaW50ZXJmYWNlIHRob3VnaC4gKi8KLXR5cGVkZWYgc2lnbmVkIGNoYXIgX192MTZxcyBfX2F0dHJpYnV0ZV9fKChfX3ZlY3Rvcl9zaXplX18oMTYpKSk7Ci0KLSNpbmNsdWRlIDxmMTZjaW50cmluLmg+Ci0KLS8qIERlZmluZSB0aGUgZGVmYXVsdCBhdHRyaWJ1dGVzIGZvciB0aGUgZnVuY3Rpb25zIGluIHRoaXMgZmlsZS4gKi8KLSNkZWZpbmUgX19ERUZBVUxUX0ZOX0FUVFJTIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXywgX190YXJnZXRfXygic3NlMiIpKSkKLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9hZGRfc2QoX19tMTI4ZCBfX2EsIF9fbTEyOGQgX19iKQotewotICBfX2FbMF0gKz0gX19iWzBdOwotICByZXR1cm4gX19hOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2FkZF9wZChfX20xMjhkIF9fYSwgX19tMTI4ZCBfX2IpCi17Ci0gIHJldHVybiBfX2EgKyBfX2I7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fc3ViX3NkKF9fbTEyOGQgX19hLCBfX20xMjhkIF9fYikKLXsKLSAgX19hWzBdIC09IF9fYlswXTsKLSAgcmV0dXJuIF9fYTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9zdWJfcGQoX19tMTI4ZCBfX2EsIF9fbTEyOGQgX19iKQotewotICByZXR1cm4gX19hIC0gX19iOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX211bF9zZChfX20xMjhkIF9fYSwgX19tMTI4ZCBfX2IpCi17Ci0gIF9fYVswXSAqPSBfX2JbMF07Ci0gIHJldHVybiBfX2E7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbXVsX3BkKF9fbTEyOGQgX19hLCBfX20xMjhkIF9fYikKLXsKLSAgcmV0dXJuIF9fYSAqIF9fYjsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9kaXZfc2QoX19tMTI4ZCBfX2EsIF9fbTEyOGQgX19iKQotewotICBfX2FbMF0gLz0gX19iWzBdOwotICByZXR1cm4gX19hOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2Rpdl9wZChfX20xMjhkIF9fYSwgX19tMTI4ZCBfX2IpCi17Ci0gIHJldHVybiBfX2EgLyBfX2I7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fc3FydF9zZChfX20xMjhkIF9fYSwgX19tMTI4ZCBfX2IpCi17Ci0gIF9fbTEyOGQgX19jID0gX19idWlsdGluX2lhMzJfc3FydHNkKF9fYik7Ci0gIHJldHVybiAoX19tMTI4ZCkgeyBfX2NbMF0sIF9fYVsxXSB9OwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX3NxcnRfcGQoX19tMTI4ZCBfX2EpCi17Ci0gIHJldHVybiBfX2J1aWx0aW5faWEzMl9zcXJ0cGQoX19hKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9taW5fc2QoX19tMTI4ZCBfX2EsIF9fbTEyOGQgX19iKQotewotICByZXR1cm4gX19idWlsdGluX2lhMzJfbWluc2QoX19hLCBfX2IpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21pbl9wZChfX20xMjhkIF9fYSwgX19tMTI4ZCBfX2IpCi17Ci0gIHJldHVybiBfX2J1aWx0aW5faWEzMl9taW5wZChfX2EsIF9fYik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWF4X3NkKF9fbTEyOGQgX19hLCBfX20xMjhkIF9fYikKLXsKLSAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX21heHNkKF9fYSwgX19iKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tYXhfcGQoX19tMTI4ZCBfX2EsIF9fbTEyOGQgX19iKQotewotICByZXR1cm4gX19idWlsdGluX2lhMzJfbWF4cGQoX19hLCBfX2IpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2FuZF9wZChfX20xMjhkIF9fYSwgX19tMTI4ZCBfX2IpCi17Ci0gIHJldHVybiAoX19tMTI4ZCkoKF9fdjRzaSlfX2EgJiAoX192NHNpKV9fYik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fYW5kbm90X3BkKF9fbTEyOGQgX19hLCBfX20xMjhkIF9fYikKLXsKLSAgcmV0dXJuIChfX20xMjhkKSh+KF9fdjRzaSlfX2EgJiAoX192NHNpKV9fYik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fb3JfcGQoX19tMTI4ZCBfX2EsIF9fbTEyOGQgX19iKQotewotICByZXR1cm4gKF9fbTEyOGQpKChfX3Y0c2kpX19hIHwgKF9fdjRzaSlfX2IpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX3hvcl9wZChfX20xMjhkIF9fYSwgX19tMTI4ZCBfX2IpCi17Ci0gIHJldHVybiAoX19tMTI4ZCkoKF9fdjRzaSlfX2EgXiAoX192NHNpKV9fYik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fY21wZXFfcGQoX19tMTI4ZCBfX2EsIF9fbTEyOGQgX19iKQotewotICByZXR1cm4gKF9fbTEyOGQpX19idWlsdGluX2lhMzJfY21wZXFwZChfX2EsIF9fYik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fY21wbHRfcGQoX19tMTI4ZCBfX2EsIF9fbTEyOGQgX19iKQotewotICByZXR1cm4gKF9fbTEyOGQpX19idWlsdGluX2lhMzJfY21wbHRwZChfX2EsIF9fYik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fY21wbGVfcGQoX19tMTI4ZCBfX2EsIF9fbTEyOGQgX19iKQotewotICByZXR1cm4gKF9fbTEyOGQpX19idWlsdGluX2lhMzJfY21wbGVwZChfX2EsIF9fYik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fY21wZ3RfcGQoX19tMTI4ZCBfX2EsIF9fbTEyOGQgX19iKQotewotICByZXR1cm4gKF9fbTEyOGQpX19idWlsdGluX2lhMzJfY21wbHRwZChfX2IsIF9fYSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fY21wZ2VfcGQoX19tMTI4ZCBfX2EsIF9fbTEyOGQgX19iKQotewotICByZXR1cm4gKF9fbTEyOGQpX19idWlsdGluX2lhMzJfY21wbGVwZChfX2IsIF9fYSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fY21wb3JkX3BkKF9fbTEyOGQgX19hLCBfX20xMjhkIF9fYikKLXsKLSAgcmV0dXJuIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX2NtcG9yZHBkKF9fYSwgX19iKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9jbXB1bm9yZF9wZChfX20xMjhkIF9fYSwgX19tMTI4ZCBfX2IpCi17Ci0gIHJldHVybiAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9jbXB1bm9yZHBkKF9fYSwgX19iKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9jbXBuZXFfcGQoX19tMTI4ZCBfX2EsIF9fbTEyOGQgX19iKQotewotICByZXR1cm4gKF9fbTEyOGQpX19idWlsdGluX2lhMzJfY21wbmVxcGQoX19hLCBfX2IpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2NtcG5sdF9wZChfX20xMjhkIF9fYSwgX19tMTI4ZCBfX2IpCi17Ci0gIHJldHVybiAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9jbXBubHRwZChfX2EsIF9fYik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fY21wbmxlX3BkKF9fbTEyOGQgX19hLCBfX20xMjhkIF9fYikKLXsKLSAgcmV0dXJuIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX2NtcG5sZXBkKF9fYSwgX19iKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9jbXBuZ3RfcGQoX19tMTI4ZCBfX2EsIF9fbTEyOGQgX19iKQotewotICByZXR1cm4gKF9fbTEyOGQpX19idWlsdGluX2lhMzJfY21wbmx0cGQoX19iLCBfX2EpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2NtcG5nZV9wZChfX20xMjhkIF9fYSwgX19tMTI4ZCBfX2IpCi17Ci0gIHJldHVybiAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9jbXBubGVwZChfX2IsIF9fYSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fY21wZXFfc2QoX19tMTI4ZCBfX2EsIF9fbTEyOGQgX19iKQotewotICByZXR1cm4gKF9fbTEyOGQpX19idWlsdGluX2lhMzJfY21wZXFzZChfX2EsIF9fYik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fY21wbHRfc2QoX19tMTI4ZCBfX2EsIF9fbTEyOGQgX19iKQotewotICByZXR1cm4gKF9fbTEyOGQpX19idWlsdGluX2lhMzJfY21wbHRzZChfX2EsIF9fYik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fY21wbGVfc2QoX19tMTI4ZCBfX2EsIF9fbTEyOGQgX19iKQotewotICByZXR1cm4gKF9fbTEyOGQpX19idWlsdGluX2lhMzJfY21wbGVzZChfX2EsIF9fYik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fY21wZ3Rfc2QoX19tMTI4ZCBfX2EsIF9fbTEyOGQgX19iKQotewotICBfX20xMjhkIF9fYyA9IF9fYnVpbHRpbl9pYTMyX2NtcGx0c2QoX19iLCBfX2EpOwotICByZXR1cm4gKF9fbTEyOGQpIHsgX19jWzBdLCBfX2FbMV0gfTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9jbXBnZV9zZChfX20xMjhkIF9fYSwgX19tMTI4ZCBfX2IpCi17Ci0gIF9fbTEyOGQgX19jID0gX19idWlsdGluX2lhMzJfY21wbGVzZChfX2IsIF9fYSk7Ci0gIHJldHVybiAoX19tMTI4ZCkgeyBfX2NbMF0sIF9fYVsxXSB9OwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2NtcG9yZF9zZChfX20xMjhkIF9fYSwgX19tMTI4ZCBfX2IpCi17Ci0gIHJldHVybiAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9jbXBvcmRzZChfX2EsIF9fYik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fY21wdW5vcmRfc2QoX19tMTI4ZCBfX2EsIF9fbTEyOGQgX19iKQotewotICByZXR1cm4gKF9fbTEyOGQpX19idWlsdGluX2lhMzJfY21wdW5vcmRzZChfX2EsIF9fYik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fY21wbmVxX3NkKF9fbTEyOGQgX19hLCBfX20xMjhkIF9fYikKLXsKLSAgcmV0dXJuIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX2NtcG5lcXNkKF9fYSwgX19iKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9jbXBubHRfc2QoX19tMTI4ZCBfX2EsIF9fbTEyOGQgX19iKQotewotICByZXR1cm4gKF9fbTEyOGQpX19idWlsdGluX2lhMzJfY21wbmx0c2QoX19hLCBfX2IpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2NtcG5sZV9zZChfX20xMjhkIF9fYSwgX19tMTI4ZCBfX2IpCi17Ci0gIHJldHVybiAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9jbXBubGVzZChfX2EsIF9fYik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fY21wbmd0X3NkKF9fbTEyOGQgX19hLCBfX20xMjhkIF9fYikKLXsKLSAgX19tMTI4ZCBfX2MgPSBfX2J1aWx0aW5faWEzMl9jbXBubHRzZChfX2IsIF9fYSk7Ci0gIHJldHVybiAoX19tMTI4ZCkgeyBfX2NbMF0sIF9fYVsxXSB9OwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2NtcG5nZV9zZChfX20xMjhkIF9fYSwgX19tMTI4ZCBfX2IpCi17Ci0gIF9fbTEyOGQgX19jID0gX19idWlsdGluX2lhMzJfY21wbmxlc2QoX19iLCBfX2EpOwotICByZXR1cm4gKF9fbTEyOGQpIHsgX19jWzBdLCBfX2FbMV0gfTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gaW50IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2NvbWllcV9zZChfX20xMjhkIF9fYSwgX19tMTI4ZCBfX2IpCi17Ci0gIHJldHVybiBfX2J1aWx0aW5faWEzMl9jb21pc2RlcShfX2EsIF9fYik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIGludCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9jb21pbHRfc2QoX19tMTI4ZCBfX2EsIF9fbTEyOGQgX19iKQotewotICByZXR1cm4gX19idWlsdGluX2lhMzJfY29taXNkbHQoX19hLCBfX2IpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBpbnQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fY29taWxlX3NkKF9fbTEyOGQgX19hLCBfX20xMjhkIF9fYikKLXsKLSAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX2NvbWlzZGxlKF9fYSwgX19iKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gaW50IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2NvbWlndF9zZChfX20xMjhkIF9fYSwgX19tMTI4ZCBfX2IpCi17Ci0gIHJldHVybiBfX2J1aWx0aW5faWEzMl9jb21pc2RndChfX2EsIF9fYik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIGludCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9jb21pZ2Vfc2QoX19tMTI4ZCBfX2EsIF9fbTEyOGQgX19iKQotewotICByZXR1cm4gX19idWlsdGluX2lhMzJfY29taXNkZ2UoX19hLCBfX2IpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBpbnQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fY29taW5lcV9zZChfX20xMjhkIF9fYSwgX19tMTI4ZCBfX2IpCi17Ci0gIHJldHVybiBfX2J1aWx0aW5faWEzMl9jb21pc2RuZXEoX19hLCBfX2IpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBpbnQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fdWNvbWllcV9zZChfX20xMjhkIF9fYSwgX19tMTI4ZCBfX2IpCi17Ci0gIHJldHVybiBfX2J1aWx0aW5faWEzMl91Y29taXNkZXEoX19hLCBfX2IpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBpbnQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fdWNvbWlsdF9zZChfX20xMjhkIF9fYSwgX19tMTI4ZCBfX2IpCi17Ci0gIHJldHVybiBfX2J1aWx0aW5faWEzMl91Y29taXNkbHQoX19hLCBfX2IpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBpbnQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fdWNvbWlsZV9zZChfX20xMjhkIF9fYSwgX19tMTI4ZCBfX2IpCi17Ci0gIHJldHVybiBfX2J1aWx0aW5faWEzMl91Y29taXNkbGUoX19hLCBfX2IpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBpbnQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fdWNvbWlndF9zZChfX20xMjhkIF9fYSwgX19tMTI4ZCBfX2IpCi17Ci0gIHJldHVybiBfX2J1aWx0aW5faWEzMl91Y29taXNkZ3QoX19hLCBfX2IpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBpbnQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fdWNvbWlnZV9zZChfX20xMjhkIF9fYSwgX19tMTI4ZCBfX2IpCi17Ci0gIHJldHVybiBfX2J1aWx0aW5faWEzMl91Y29taXNkZ2UoX19hLCBfX2IpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBpbnQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fdWNvbWluZXFfc2QoX19tMTI4ZCBfX2EsIF9fbTEyOGQgX19iKQotewotICByZXR1cm4gX19idWlsdGluX2lhMzJfdWNvbWlzZG5lcShfX2EsIF9fYik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9jdnRwZF9wcyhfX20xMjhkIF9fYSkKLXsKLSAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX2N2dHBkMnBzKF9fYSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fY3Z0cHNfcGQoX19tMTI4IF9fYSkKLXsKLSAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX2N2dHBzMnBkKF9fYSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fY3Z0ZXBpMzJfcGQoX19tMTI4aSBfX2EpCi17Ci0gIHJldHVybiBfX2J1aWx0aW5faWEzMl9jdnRkcTJwZCgoX192NHNpKV9fYSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fY3Z0cGRfZXBpMzIoX19tMTI4ZCBfX2EpCi17Ci0gIHJldHVybiBfX2J1aWx0aW5faWEzMl9jdnRwZDJkcShfX2EpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBpbnQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fY3Z0c2Rfc2kzMihfX20xMjhkIF9fYSkKLXsKLSAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX2N2dHNkMnNpKF9fYSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9jdnRzZF9zcyhfX20xMjggX19hLCBfX20xMjhkIF9fYikKLXsKLSAgX19hWzBdID0gX19iWzBdOwotICByZXR1cm4gX19hOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2N2dHNpMzJfc2QoX19tMTI4ZCBfX2EsIGludCBfX2IpCi17Ci0gIF9fYVswXSA9IF9fYjsKLSAgcmV0dXJuIF9fYTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9jdnRzc19zZChfX20xMjhkIF9fYSwgX19tMTI4IF9fYikKLXsKLSAgX19hWzBdID0gX19iWzBdOwotICByZXR1cm4gX19hOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2N2dHRwZF9lcGkzMihfX20xMjhkIF9fYSkKLXsKLSAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX2N2dHRwZDJkcShfX2EpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBpbnQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fY3Z0dHNkX3NpMzIoX19tMTI4ZCBfX2EpCi17Ci0gIHJldHVybiBfX2FbMF07Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2N2dHBkX3BpMzIoX19tMTI4ZCBfX2EpCi17Ci0gIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfY3Z0cGQycGkoX19hKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fY3Z0dHBkX3BpMzIoX19tMTI4ZCBfX2EpCi17Ci0gIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfY3Z0dHBkMnBpKF9fYSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fY3Z0cGkzMl9wZChfX202NCBfX2EpCi17Ci0gIHJldHVybiBfX2J1aWx0aW5faWEzMl9jdnRwaTJwZCgoX192MnNpKV9fYSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIGRvdWJsZSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9jdnRzZF9mNjQoX19tMTI4ZCBfX2EpCi17Ci0gIHJldHVybiBfX2FbMF07Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbG9hZF9wZChkb3VibGUgY29uc3QgKl9fZHApCi17Ci0gIHJldHVybiAqKF9fbTEyOGQqKV9fZHA7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbG9hZDFfcGQoZG91YmxlIGNvbnN0ICpfX2RwKQotewotICBzdHJ1Y3QgX19tbV9sb2FkMV9wZF9zdHJ1Y3QgewotICAgIGRvdWJsZSBfX3U7Ci0gIH0gX19hdHRyaWJ1dGVfXygoX19wYWNrZWRfXywgX19tYXlfYWxpYXNfXykpOwotICBkb3VibGUgX191ID0gKChzdHJ1Y3QgX19tbV9sb2FkMV9wZF9zdHJ1Y3QqKV9fZHApLT5fX3U7Ci0gIHJldHVybiAoX19tMTI4ZCl7IF9fdSwgX191IH07Ci19Ci0KLSNkZWZpbmUgICAgICAgIF9tbV9sb2FkX3BkMShkcCkgICAgICAgIF9tbV9sb2FkMV9wZChkcCkKLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9sb2Fkcl9wZChkb3VibGUgY29uc3QgKl9fZHApCi17Ci0gIF9fbTEyOGQgX191ID0gKihfX20xMjhkKilfX2RwOwotICByZXR1cm4gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX191LCBfX3UsIDEsIDApOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2xvYWR1X3BkKGRvdWJsZSBjb25zdCAqX19kcCkKLXsKLSAgc3RydWN0IF9fbG9hZHVfcGQgewotICAgIF9fbTEyOGQgX192OwotICB9IF9fYXR0cmlidXRlX18oKF9fcGFja2VkX18sIF9fbWF5X2FsaWFzX18pKTsKLSAgcmV0dXJuICgoc3RydWN0IF9fbG9hZHVfcGQqKV9fZHApLT5fX3Y7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbG9hZF9zZChkb3VibGUgY29uc3QgKl9fZHApCi17Ci0gIHN0cnVjdCBfX21tX2xvYWRfc2Rfc3RydWN0IHsKLSAgICBkb3VibGUgX191OwotICB9IF9fYXR0cmlidXRlX18oKF9fcGFja2VkX18sIF9fbWF5X2FsaWFzX18pKTsKLSAgZG91YmxlIF9fdSA9ICgoc3RydWN0IF9fbW1fbG9hZF9zZF9zdHJ1Y3QqKV9fZHApLT5fX3U7Ci0gIHJldHVybiAoX19tMTI4ZCl7IF9fdSwgMCB9OwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2xvYWRoX3BkKF9fbTEyOGQgX19hLCBkb3VibGUgY29uc3QgKl9fZHApCi17Ci0gIHN0cnVjdCBfX21tX2xvYWRoX3BkX3N0cnVjdCB7Ci0gICAgZG91YmxlIF9fdTsKLSAgfSBfX2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9fLCBfX21heV9hbGlhc19fKSk7Ci0gIGRvdWJsZSBfX3UgPSAoKHN0cnVjdCBfX21tX2xvYWRoX3BkX3N0cnVjdCopX19kcCktPl9fdTsKLSAgcmV0dXJuIChfX20xMjhkKXsgX19hWzBdLCBfX3UgfTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9sb2FkbF9wZChfX20xMjhkIF9fYSwgZG91YmxlIGNvbnN0ICpfX2RwKQotewotICBzdHJ1Y3QgX19tbV9sb2FkbF9wZF9zdHJ1Y3QgewotICAgIGRvdWJsZSBfX3U7Ci0gIH0gX19hdHRyaWJ1dGVfXygoX19wYWNrZWRfXywgX19tYXlfYWxpYXNfXykpOwotICBkb3VibGUgX191ID0gKChzdHJ1Y3QgX19tbV9sb2FkbF9wZF9zdHJ1Y3QqKV9fZHApLT5fX3U7Ci0gIHJldHVybiAoX19tMTI4ZCl7IF9fdSwgX19hWzFdIH07Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fdW5kZWZpbmVkX3BkKCkKLXsKLSAgcmV0dXJuIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX3VuZGVmMTI4KCk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fc2V0X3NkKGRvdWJsZSBfX3cpCi17Ci0gIHJldHVybiAoX19tMTI4ZCl7IF9fdywgMCB9OwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX3NldDFfcGQoZG91YmxlIF9fdykKLXsKLSAgcmV0dXJuIChfX20xMjhkKXsgX193LCBfX3cgfTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9zZXRfcGQoZG91YmxlIF9fdywgZG91YmxlIF9feCkKLXsKLSAgcmV0dXJuIChfX20xMjhkKXsgX194LCBfX3cgfTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9zZXRyX3BkKGRvdWJsZSBfX3csIGRvdWJsZSBfX3gpCi17Ci0gIHJldHVybiAoX19tMTI4ZCl7IF9fdywgX194IH07Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fc2V0emVyb19wZCh2b2lkKQotewotICByZXR1cm4gKF9fbTEyOGQpeyAwLCAwIH07Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbW92ZV9zZChfX20xMjhkIF9fYSwgX19tMTI4ZCBfX2IpCi17Ci0gIHJldHVybiAoX19tMTI4ZCl7IF9fYlswXSwgX19hWzFdIH07Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fc3RvcmVfc2QoZG91YmxlICpfX2RwLCBfX20xMjhkIF9fYSkKLXsKLSAgc3RydWN0IF9fbW1fc3RvcmVfc2Rfc3RydWN0IHsKLSAgICBkb3VibGUgX191OwotICB9IF9fYXR0cmlidXRlX18oKF9fcGFja2VkX18sIF9fbWF5X2FsaWFzX18pKTsKLSAgKChzdHJ1Y3QgX19tbV9zdG9yZV9zZF9zdHJ1Y3QqKV9fZHApLT5fX3UgPSBfX2FbMF07Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fc3RvcmUxX3BkKGRvdWJsZSAqX19kcCwgX19tMTI4ZCBfX2EpCi17Ci0gIHN0cnVjdCBfX21tX3N0b3JlMV9wZF9zdHJ1Y3QgewotICAgIGRvdWJsZSBfX3VbMl07Ci0gIH0gX19hdHRyaWJ1dGVfXygoX19wYWNrZWRfXywgX19tYXlfYWxpYXNfXykpOwotICAoKHN0cnVjdCBfX21tX3N0b3JlMV9wZF9zdHJ1Y3QqKV9fZHApLT5fX3VbMF0gPSBfX2FbMF07Ci0gICgoc3RydWN0IF9fbW1fc3RvcmUxX3BkX3N0cnVjdCopX19kcCktPl9fdVsxXSA9IF9fYVswXTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9zdG9yZV9wZChkb3VibGUgKl9fZHAsIF9fbTEyOGQgX19hKQotewotICAqKF9fbTEyOGQgKilfX2RwID0gX19hOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX3N0b3JldV9wZChkb3VibGUgKl9fZHAsIF9fbTEyOGQgX19hKQotewotICBfX2J1aWx0aW5faWEzMl9zdG9yZXVwZChfX2RwLCBfX2EpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX3N0b3Jlcl9wZChkb3VibGUgKl9fZHAsIF9fbTEyOGQgX19hKQotewotICBfX2EgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX2EsIF9fYSwgMSwgMCk7Ci0gICooX19tMTI4ZCAqKV9fZHAgPSBfX2E7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fc3RvcmVoX3BkKGRvdWJsZSAqX19kcCwgX19tMTI4ZCBfX2EpCi17Ci0gIHN0cnVjdCBfX21tX3N0b3JlaF9wZF9zdHJ1Y3QgewotICAgIGRvdWJsZSBfX3U7Ci0gIH0gX19hdHRyaWJ1dGVfXygoX19wYWNrZWRfXywgX19tYXlfYWxpYXNfXykpOwotICAoKHN0cnVjdCBfX21tX3N0b3JlaF9wZF9zdHJ1Y3QqKV9fZHApLT5fX3UgPSBfX2FbMV07Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fc3RvcmVsX3BkKGRvdWJsZSAqX19kcCwgX19tMTI4ZCBfX2EpCi17Ci0gIHN0cnVjdCBfX21tX3N0b3JlaF9wZF9zdHJ1Y3QgewotICAgIGRvdWJsZSBfX3U7Ci0gIH0gX19hdHRyaWJ1dGVfXygoX19wYWNrZWRfXywgX19tYXlfYWxpYXNfXykpOwotICAoKHN0cnVjdCBfX21tX3N0b3JlaF9wZF9zdHJ1Y3QqKV9fZHApLT5fX3UgPSBfX2FbMF07Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fYWRkX2VwaTgoX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKQotewotICByZXR1cm4gKF9fbTEyOGkpKChfX3YxNnFpKV9fYSArIChfX3YxNnFpKV9fYik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fYWRkX2VwaTE2KF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikKLXsKLSAgcmV0dXJuIChfX20xMjhpKSgoX192OGhpKV9fYSArIChfX3Y4aGkpX19iKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9hZGRfZXBpMzIoX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKQotewotICByZXR1cm4gKF9fbTEyOGkpKChfX3Y0c2kpX19hICsgKF9fdjRzaSlfX2IpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9hZGRfc2k2NChfX202NCBfX2EsIF9fbTY0IF9fYikKLXsKLSAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9wYWRkcShfX2EsIF9fYik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fYWRkX2VwaTY0KF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikKLXsKLSAgcmV0dXJuIF9fYSArIF9fYjsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9hZGRzX2VwaTgoX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKQotewotICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfcGFkZHNiMTI4KChfX3YxNnFpKV9fYSwgKF9fdjE2cWkpX19iKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9hZGRzX2VwaTE2KF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikKLXsKLSAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3BhZGRzdzEyOCgoX192OGhpKV9fYSwgKF9fdjhoaSlfX2IpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2FkZHNfZXB1OChfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpCi17Ci0gIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9wYWRkdXNiMTI4KChfX3YxNnFpKV9fYSwgKF9fdjE2cWkpX19iKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9hZGRzX2VwdTE2KF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikKLXsKLSAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3BhZGR1c3cxMjgoKF9fdjhoaSlfX2EsIChfX3Y4aGkpX19iKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9hdmdfZXB1OChfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpCi17Ci0gIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9wYXZnYjEyOCgoX192MTZxaSlfX2EsIChfX3YxNnFpKV9fYik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fYXZnX2VwdTE2KF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikKLXsKLSAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3Bhdmd3MTI4KChfX3Y4aGkpX19hLCAoX192OGhpKV9fYik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWFkZF9lcGkxNihfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpCi17Ci0gIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9wbWFkZHdkMTI4KChfX3Y4aGkpX19hLCAoX192OGhpKV9fYik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWF4X2VwaTE2KF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikKLXsKLSAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3BtYXhzdzEyOCgoX192OGhpKV9fYSwgKF9fdjhoaSlfX2IpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21heF9lcHU4KF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikKLXsKLSAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3BtYXh1YjEyOCgoX192MTZxaSlfX2EsIChfX3YxNnFpKV9fYik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWluX2VwaTE2KF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikKLXsKLSAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3BtaW5zdzEyOCgoX192OGhpKV9fYSwgKF9fdjhoaSlfX2IpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21pbl9lcHU4KF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikKLXsKLSAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3BtaW51YjEyOCgoX192MTZxaSlfX2EsIChfX3YxNnFpKV9fYik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbXVsaGlfZXBpMTYoX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKQotewotICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfcG11bGh3MTI4KChfX3Y4aGkpX19hLCAoX192OGhpKV9fYik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbXVsaGlfZXB1MTYoX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKQotewotICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfcG11bGh1dzEyOCgoX192OGhpKV9fYSwgKF9fdjhoaSlfX2IpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX211bGxvX2VwaTE2KF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikKLXsKLSAgcmV0dXJuIChfX20xMjhpKSgoX192OGhpKV9fYSAqIChfX3Y4aGkpX19iKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbXVsX3N1MzIoX19tNjQgX19hLCBfX202NCBfX2IpCi17Ci0gIHJldHVybiBfX2J1aWx0aW5faWEzMl9wbXVsdWRxKChfX3Yyc2kpX19hLCAoX192MnNpKV9fYik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbXVsX2VwdTMyKF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikKLXsKLSAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3BtdWx1ZHExMjgoKF9fdjRzaSlfX2EsIChfX3Y0c2kpX19iKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9zYWRfZXB1OChfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpCi17Ci0gIHJldHVybiBfX2J1aWx0aW5faWEzMl9wc2FkYncxMjgoKF9fdjE2cWkpX19hLCAoX192MTZxaSlfX2IpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX3N1Yl9lcGk4KF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikKLXsKLSAgcmV0dXJuIChfX20xMjhpKSgoX192MTZxaSlfX2EgLSAoX192MTZxaSlfX2IpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX3N1Yl9lcGkxNihfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpCi17Ci0gIHJldHVybiAoX19tMTI4aSkoKF9fdjhoaSlfX2EgLSAoX192OGhpKV9fYik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fc3ViX2VwaTMyKF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikKLXsKLSAgcmV0dXJuIChfX20xMjhpKSgoX192NHNpKV9fYSAtIChfX3Y0c2kpX19iKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fc3ViX3NpNjQoX19tNjQgX19hLCBfX202NCBfX2IpCi17Ci0gIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfcHN1YnEoX19hLCBfX2IpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX3N1Yl9lcGk2NChfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpCi17Ci0gIHJldHVybiBfX2EgLSBfX2I7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fc3Vic19lcGk4KF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikKLXsKLSAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3BzdWJzYjEyOCgoX192MTZxaSlfX2EsIChfX3YxNnFpKV9fYik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fc3Vic19lcGkxNihfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpCi17Ci0gIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9wc3Vic3cxMjgoKF9fdjhoaSlfX2EsIChfX3Y4aGkpX19iKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9zdWJzX2VwdTgoX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKQotewotICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfcHN1YnVzYjEyOCgoX192MTZxaSlfX2EsIChfX3YxNnFpKV9fYik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fc3Vic19lcHUxNihfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpCi17Ci0gIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9wc3VidXN3MTI4KChfX3Y4aGkpX19hLCAoX192OGhpKV9fYik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fYW5kX3NpMTI4KF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikKLXsKLSAgcmV0dXJuIF9fYSAmIF9fYjsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9hbmRub3Rfc2kxMjgoX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKQotewotICByZXR1cm4gfl9fYSAmIF9fYjsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9vcl9zaTEyOChfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpCi17Ci0gIHJldHVybiBfX2EgfCBfX2I7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1feG9yX3NpMTI4KF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikKLXsKLSAgcmV0dXJuIF9fYSBeIF9fYjsKLX0KLQotI2RlZmluZSBfbW1fc2xsaV9zaTEyOChhLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAoX19tMTI4aSlfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192MTZxaSlfbW1fc2V0emVyb19zaTEyOCgpLCAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZxaSkoX19tMTI4aSkoYSksICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGltbSkmMHhGMCkgPyAwIDogMTYgLSAoKGltbSkmMHhGKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGltbSkmMHhGMCkgPyAwIDogMTcgLSAoKGltbSkmMHhGKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGltbSkmMHhGMCkgPyAwIDogMTggLSAoKGltbSkmMHhGKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGltbSkmMHhGMCkgPyAwIDogMTkgLSAoKGltbSkmMHhGKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGltbSkmMHhGMCkgPyAwIDogMjAgLSAoKGltbSkmMHhGKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGltbSkmMHhGMCkgPyAwIDogMjEgLSAoKGltbSkmMHhGKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGltbSkmMHhGMCkgPyAwIDogMjIgLSAoKGltbSkmMHhGKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGltbSkmMHhGMCkgPyAwIDogMjMgLSAoKGltbSkmMHhGKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGltbSkmMHhGMCkgPyAwIDogMjQgLSAoKGltbSkmMHhGKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGltbSkmMHhGMCkgPyAwIDogMjUgLSAoKGltbSkmMHhGKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGltbSkmMHhGMCkgPyAwIDogMjYgLSAoKGltbSkmMHhGKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGltbSkmMHhGMCkgPyAwIDogMjcgLSAoKGltbSkmMHhGKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGltbSkmMHhGMCkgPyAwIDogMjggLSAoKGltbSkmMHhGKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGltbSkmMHhGMCkgPyAwIDogMjkgLSAoKGltbSkmMHhGKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGltbSkmMHhGMCkgPyAwIDogMzAgLSAoKGltbSkmMHhGKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGltbSkmMHhGMCkgPyAwIDogMzEgLSAoKGltbSkmMHhGKSk7IH0pCi0KLSNkZWZpbmUgX21tX2JzbGxpX3NpMTI4KGEsIGltbSkgXAotICBfbW1fc2xsaV9zaTEyOCgoYSksIChpbW0pKQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX3NsbGlfZXBpMTYoX19tMTI4aSBfX2EsIGludCBfX2NvdW50KQotewotICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfcHNsbHdpMTI4KChfX3Y4aGkpX19hLCBfX2NvdW50KTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9zbGxfZXBpMTYoX19tMTI4aSBfX2EsIF9fbTEyOGkgX19jb3VudCkKLXsKLSAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3BzbGx3MTI4KChfX3Y4aGkpX19hLCAoX192OGhpKV9fY291bnQpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX3NsbGlfZXBpMzIoX19tMTI4aSBfX2EsIGludCBfX2NvdW50KQotewotICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfcHNsbGRpMTI4KChfX3Y0c2kpX19hLCBfX2NvdW50KTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9zbGxfZXBpMzIoX19tMTI4aSBfX2EsIF9fbTEyOGkgX19jb3VudCkKLXsKLSAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3BzbGxkMTI4KChfX3Y0c2kpX19hLCAoX192NHNpKV9fY291bnQpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX3NsbGlfZXBpNjQoX19tMTI4aSBfX2EsIGludCBfX2NvdW50KQotewotICByZXR1cm4gX19idWlsdGluX2lhMzJfcHNsbHFpMTI4KF9fYSwgX19jb3VudCk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fc2xsX2VwaTY0KF9fbTEyOGkgX19hLCBfX20xMjhpIF9fY291bnQpCi17Ci0gIHJldHVybiBfX2J1aWx0aW5faWEzMl9wc2xscTEyOChfX2EsIF9fY291bnQpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX3NyYWlfZXBpMTYoX19tMTI4aSBfX2EsIGludCBfX2NvdW50KQotewotICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfcHNyYXdpMTI4KChfX3Y4aGkpX19hLCBfX2NvdW50KTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9zcmFfZXBpMTYoX19tMTI4aSBfX2EsIF9fbTEyOGkgX19jb3VudCkKLXsKLSAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3BzcmF3MTI4KChfX3Y4aGkpX19hLCAoX192OGhpKV9fY291bnQpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX3NyYWlfZXBpMzIoX19tMTI4aSBfX2EsIGludCBfX2NvdW50KQotewotICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfcHNyYWRpMTI4KChfX3Y0c2kpX19hLCBfX2NvdW50KTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9zcmFfZXBpMzIoX19tMTI4aSBfX2EsIF9fbTEyOGkgX19jb3VudCkKLXsKLSAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3BzcmFkMTI4KChfX3Y0c2kpX19hLCAoX192NHNpKV9fY291bnQpOwotfQotCi0jZGVmaW5lIF9tbV9zcmxpX3NpMTI4KGEsIGltbSkgX19leHRlbnNpb25fXyAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAoX19tMTI4aSlfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192MTZxaSkoX19tMTI4aSkoYSksICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2cWkpX21tX3NldHplcm9fc2kxMjgoKSwgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoaW1tKSYweEYwKSA/IDE2IDogKChpbW0pJjB4RikgKyAwLCAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGltbSkmMHhGMCkgPyAxNiA6ICgoaW1tKSYweEYpICsgMSwgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChpbW0pJjB4RjApID8gMTYgOiAoKGltbSkmMHhGKSArIDIsICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoaW1tKSYweEYwKSA/IDE2IDogKChpbW0pJjB4RikgKyAzLCAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGltbSkmMHhGMCkgPyAxNiA6ICgoaW1tKSYweEYpICsgNCwgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChpbW0pJjB4RjApID8gMTYgOiAoKGltbSkmMHhGKSArIDUsICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoaW1tKSYweEYwKSA/IDE2IDogKChpbW0pJjB4RikgKyA2LCAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGltbSkmMHhGMCkgPyAxNiA6ICgoaW1tKSYweEYpICsgNywgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChpbW0pJjB4RjApID8gMTYgOiAoKGltbSkmMHhGKSArIDgsICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoaW1tKSYweEYwKSA/IDE2IDogKChpbW0pJjB4RikgKyA5LCAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGltbSkmMHhGMCkgPyAxNiA6ICgoaW1tKSYweEYpICsgMTAsIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChpbW0pJjB4RjApID8gMTYgOiAoKGltbSkmMHhGKSArIDExLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoaW1tKSYweEYwKSA/IDE2IDogKChpbW0pJjB4RikgKyAxMiwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGltbSkmMHhGMCkgPyAxNiA6ICgoaW1tKSYweEYpICsgMTMsIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChpbW0pJjB4RjApID8gMTYgOiAoKGltbSkmMHhGKSArIDE0LCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoaW1tKSYweEYwKSA/IDE2IDogKChpbW0pJjB4RikgKyAxNSk7IH0pCi0KLSNkZWZpbmUgX21tX2JzcmxpX3NpMTI4KGEsIGltbSkgXAotICBfbW1fc3JsaV9zaTEyOCgoYSksIChpbW0pKQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX3NybGlfZXBpMTYoX19tMTI4aSBfX2EsIGludCBfX2NvdW50KQotewotICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfcHNybHdpMTI4KChfX3Y4aGkpX19hLCBfX2NvdW50KTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9zcmxfZXBpMTYoX19tMTI4aSBfX2EsIF9fbTEyOGkgX19jb3VudCkKLXsKLSAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3Bzcmx3MTI4KChfX3Y4aGkpX19hLCAoX192OGhpKV9fY291bnQpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX3NybGlfZXBpMzIoX19tMTI4aSBfX2EsIGludCBfX2NvdW50KQotewotICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfcHNybGRpMTI4KChfX3Y0c2kpX19hLCBfX2NvdW50KTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9zcmxfZXBpMzIoX19tMTI4aSBfX2EsIF9fbTEyOGkgX19jb3VudCkKLXsKLSAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3BzcmxkMTI4KChfX3Y0c2kpX19hLCAoX192NHNpKV9fY291bnQpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX3NybGlfZXBpNjQoX19tMTI4aSBfX2EsIGludCBfX2NvdW50KQotewotICByZXR1cm4gX19idWlsdGluX2lhMzJfcHNybHFpMTI4KF9fYSwgX19jb3VudCk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fc3JsX2VwaTY0KF9fbTEyOGkgX19hLCBfX20xMjhpIF9fY291bnQpCi17Ci0gIHJldHVybiBfX2J1aWx0aW5faWEzMl9wc3JscTEyOChfX2EsIF9fY291bnQpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2NtcGVxX2VwaTgoX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKQotewotICByZXR1cm4gKF9fbTEyOGkpKChfX3YxNnFpKV9fYSA9PSAoX192MTZxaSlfX2IpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2NtcGVxX2VwaTE2KF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikKLXsKLSAgcmV0dXJuIChfX20xMjhpKSgoX192OGhpKV9fYSA9PSAoX192OGhpKV9fYik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fY21wZXFfZXBpMzIoX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKQotewotICByZXR1cm4gKF9fbTEyOGkpKChfX3Y0c2kpX19hID09IChfX3Y0c2kpX19iKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9jbXBndF9lcGk4KF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikKLXsKLSAgLyogVGhpcyBmdW5jdGlvbiBhbHdheXMgcGVyZm9ybXMgYSBzaWduZWQgY29tcGFyaXNvbiwgYnV0IF9fdjE2cWkgaXMgYSBjaGFyCi0gICAgIHdoaWNoIG1heSBiZSBzaWduZWQgb3IgdW5zaWduZWQsIHNvIHVzZSBfX3YxNnFzLiAqLwotICByZXR1cm4gKF9fbTEyOGkpKChfX3YxNnFzKV9fYSA+IChfX3YxNnFzKV9fYik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fY21wZ3RfZXBpMTYoX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKQotewotICByZXR1cm4gKF9fbTEyOGkpKChfX3Y4aGkpX19hID4gKF9fdjhoaSlfX2IpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2NtcGd0X2VwaTMyKF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikKLXsKLSAgcmV0dXJuIChfX20xMjhpKSgoX192NHNpKV9fYSA+IChfX3Y0c2kpX19iKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9jbXBsdF9lcGk4KF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikKLXsKLSAgcmV0dXJuIF9tbV9jbXBndF9lcGk4KF9fYiwgX19hKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9jbXBsdF9lcGkxNihfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpCi17Ci0gIHJldHVybiBfbW1fY21wZ3RfZXBpMTYoX19iLCBfX2EpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2NtcGx0X2VwaTMyKF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikKLXsKLSAgcmV0dXJuIF9tbV9jbXBndF9lcGkzMihfX2IsIF9fYSk7Ci19Ci0KLSNpZmRlZiBfX3g4Nl82NF9fCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2N2dHNpNjRfc2QoX19tMTI4ZCBfX2EsIGxvbmcgbG9uZyBfX2IpCi17Ci0gIF9fYVswXSA9IF9fYjsKLSAgcmV0dXJuIF9fYTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gbG9uZyBsb25nIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2N2dHNkX3NpNjQoX19tMTI4ZCBfX2EpCi17Ci0gIHJldHVybiBfX2J1aWx0aW5faWEzMl9jdnRzZDJzaTY0KF9fYSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIGxvbmcgbG9uZyBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9jdnR0c2Rfc2k2NChfX20xMjhkIF9fYSkKLXsKLSAgcmV0dXJuIF9fYVswXTsKLX0KLSNlbmRpZgotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fY3Z0ZXBpMzJfcHMoX19tMTI4aSBfX2EpCi17Ci0gIHJldHVybiBfX2J1aWx0aW5faWEzMl9jdnRkcTJwcygoX192NHNpKV9fYSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fY3Z0cHNfZXBpMzIoX19tMTI4IF9fYSkKLXsKLSAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX2N2dHBzMmRxKF9fYSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fY3Z0dHBzX2VwaTMyKF9fbTEyOCBfX2EpCi17Ci0gIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9jdnR0cHMyZHEoX19hKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9jdnRzaTMyX3NpMTI4KGludCBfX2EpCi17Ci0gIHJldHVybiAoX19tMTI4aSkoX192NHNpKXsgX19hLCAwLCAwLCAwIH07Ci19Ci0KLSNpZmRlZiBfX3g4Nl82NF9fCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2N2dHNpNjRfc2kxMjgobG9uZyBsb25nIF9fYSkKLXsKLSAgcmV0dXJuIChfX20xMjhpKXsgX19hLCAwIH07Ci19Ci0jZW5kaWYKLQotc3RhdGljIF9faW5saW5lX18gaW50IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2N2dHNpMTI4X3NpMzIoX19tMTI4aSBfX2EpCi17Ci0gIF9fdjRzaSBfX2IgPSAoX192NHNpKV9fYTsKLSAgcmV0dXJuIF9fYlswXTsKLX0KLQotI2lmZGVmIF9feDg2XzY0X18KLXN0YXRpYyBfX2lubGluZV9fIGxvbmcgbG9uZyBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9jdnRzaTEyOF9zaTY0KF9fbTEyOGkgX19hKQotewotICByZXR1cm4gX19hWzBdOwotfQotI2VuZGlmCi0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbG9hZF9zaTEyOChfX20xMjhpIGNvbnN0ICpfX3ApCi17Ci0gIHJldHVybiAqX19wOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2xvYWR1X3NpMTI4KF9fbTEyOGkgY29uc3QgKl9fcCkKLXsKLSAgc3RydWN0IF9fbG9hZHVfc2kxMjggewotICAgIF9fbTEyOGkgX192OwotICB9IF9fYXR0cmlidXRlX18oKF9fcGFja2VkX18sIF9fbWF5X2FsaWFzX18pKTsKLSAgcmV0dXJuICgoc3RydWN0IF9fbG9hZHVfc2kxMjgqKV9fcCktPl9fdjsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9sb2FkbF9lcGk2NChfX20xMjhpIGNvbnN0ICpfX3ApCi17Ci0gIHN0cnVjdCBfX21tX2xvYWRsX2VwaTY0X3N0cnVjdCB7Ci0gICAgbG9uZyBsb25nIF9fdTsKLSAgfSBfX2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9fLCBfX21heV9hbGlhc19fKSk7Ci0gIHJldHVybiAoX19tMTI4aSkgeyAoKHN0cnVjdCBfX21tX2xvYWRsX2VwaTY0X3N0cnVjdCopX19wKS0+X191LCAwfTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV91bmRlZmluZWRfc2kxMjgoKQotewotICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfdW5kZWYxMjgoKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9zZXRfZXBpNjR4KGxvbmcgbG9uZyBfX3ExLCBsb25nIGxvbmcgX19xMCkKLXsKLSAgcmV0dXJuIChfX20xMjhpKXsgX19xMCwgX19xMSB9OwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX3NldF9lcGk2NChfX202NCBfX3ExLCBfX202NCBfX3EwKQotewotICByZXR1cm4gKF9fbTEyOGkpeyAobG9uZyBsb25nKV9fcTAsIChsb25nIGxvbmcpX19xMSB9OwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX3NldF9lcGkzMihpbnQgX19pMywgaW50IF9faTIsIGludCBfX2kxLCBpbnQgX19pMCkKLXsKLSAgcmV0dXJuIChfX20xMjhpKShfX3Y0c2kpeyBfX2kwLCBfX2kxLCBfX2kyLCBfX2kzfTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9zZXRfZXBpMTYoc2hvcnQgX193Nywgc2hvcnQgX193Niwgc2hvcnQgX193NSwgc2hvcnQgX193NCwgc2hvcnQgX193Mywgc2hvcnQgX193Miwgc2hvcnQgX193MSwgc2hvcnQgX193MCkKLXsKLSAgcmV0dXJuIChfX20xMjhpKShfX3Y4aGkpeyBfX3cwLCBfX3cxLCBfX3cyLCBfX3czLCBfX3c0LCBfX3c1LCBfX3c2LCBfX3c3IH07Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fc2V0X2VwaTgoY2hhciBfX2IxNSwgY2hhciBfX2IxNCwgY2hhciBfX2IxMywgY2hhciBfX2IxMiwgY2hhciBfX2IxMSwgY2hhciBfX2IxMCwgY2hhciBfX2I5LCBjaGFyIF9fYjgsIGNoYXIgX19iNywgY2hhciBfX2I2LCBjaGFyIF9fYjUsIGNoYXIgX19iNCwgY2hhciBfX2IzLCBjaGFyIF9fYjIsIGNoYXIgX19iMSwgY2hhciBfX2IwKQotewotICByZXR1cm4gKF9fbTEyOGkpKF9fdjE2cWkpeyBfX2IwLCBfX2IxLCBfX2IyLCBfX2IzLCBfX2I0LCBfX2I1LCBfX2I2LCBfX2I3LCBfX2I4LCBfX2I5LCBfX2IxMCwgX19iMTEsIF9fYjEyLCBfX2IxMywgX19iMTQsIF9fYjE1IH07Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fc2V0MV9lcGk2NHgobG9uZyBsb25nIF9fcSkKLXsKLSAgcmV0dXJuIChfX20xMjhpKXsgX19xLCBfX3EgfTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9zZXQxX2VwaTY0KF9fbTY0IF9fcSkKLXsKLSAgcmV0dXJuIChfX20xMjhpKXsgKGxvbmcgbG9uZylfX3EsIChsb25nIGxvbmcpX19xIH07Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fc2V0MV9lcGkzMihpbnQgX19pKQotewotICByZXR1cm4gKF9fbTEyOGkpKF9fdjRzaSl7IF9faSwgX19pLCBfX2ksIF9faSB9OwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX3NldDFfZXBpMTYoc2hvcnQgX193KQotewotICByZXR1cm4gKF9fbTEyOGkpKF9fdjhoaSl7IF9fdywgX193LCBfX3csIF9fdywgX193LCBfX3csIF9fdywgX193IH07Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fc2V0MV9lcGk4KGNoYXIgX19iKQotewotICByZXR1cm4gKF9fbTEyOGkpKF9fdjE2cWkpeyBfX2IsIF9fYiwgX19iLCBfX2IsIF9fYiwgX19iLCBfX2IsIF9fYiwgX19iLCBfX2IsIF9fYiwgX19iLCBfX2IsIF9fYiwgX19iLCBfX2IgfTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9zZXRyX2VwaTY0KF9fbTY0IF9fcTAsIF9fbTY0IF9fcTEpCi17Ci0gIHJldHVybiAoX19tMTI4aSl7IChsb25nIGxvbmcpX19xMCwgKGxvbmcgbG9uZylfX3ExIH07Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fc2V0cl9lcGkzMihpbnQgX19pMCwgaW50IF9faTEsIGludCBfX2kyLCBpbnQgX19pMykKLXsKLSAgcmV0dXJuIChfX20xMjhpKShfX3Y0c2kpeyBfX2kwLCBfX2kxLCBfX2kyLCBfX2kzfTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9zZXRyX2VwaTE2KHNob3J0IF9fdzAsIHNob3J0IF9fdzEsIHNob3J0IF9fdzIsIHNob3J0IF9fdzMsIHNob3J0IF9fdzQsIHNob3J0IF9fdzUsIHNob3J0IF9fdzYsIHNob3J0IF9fdzcpCi17Ci0gIHJldHVybiAoX19tMTI4aSkoX192OGhpKXsgX193MCwgX193MSwgX193MiwgX193MywgX193NCwgX193NSwgX193NiwgX193NyB9OwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX3NldHJfZXBpOChjaGFyIF9fYjAsIGNoYXIgX19iMSwgY2hhciBfX2IyLCBjaGFyIF9fYjMsIGNoYXIgX19iNCwgY2hhciBfX2I1LCBjaGFyIF9fYjYsIGNoYXIgX19iNywgY2hhciBfX2I4LCBjaGFyIF9fYjksIGNoYXIgX19iMTAsIGNoYXIgX19iMTEsIGNoYXIgX19iMTIsIGNoYXIgX19iMTMsIGNoYXIgX19iMTQsIGNoYXIgX19iMTUpCi17Ci0gIHJldHVybiAoX19tMTI4aSkoX192MTZxaSl7IF9fYjAsIF9fYjEsIF9fYjIsIF9fYjMsIF9fYjQsIF9fYjUsIF9fYjYsIF9fYjcsIF9fYjgsIF9fYjksIF9fYjEwLCBfX2IxMSwgX19iMTIsIF9fYjEzLCBfX2IxNCwgX19iMTUgfTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9zZXR6ZXJvX3NpMTI4KHZvaWQpCi17Ci0gIHJldHVybiAoX19tMTI4aSl7IDBMTCwgMExMIH07Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fc3RvcmVfc2kxMjgoX19tMTI4aSAqX19wLCBfX20xMjhpIF9fYikKLXsKLSAgKl9fcCA9IF9fYjsKLX0KLQotc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9zdG9yZXVfc2kxMjgoX19tMTI4aSAqX19wLCBfX20xMjhpIF9fYikKLXsKLSAgX19idWlsdGluX2lhMzJfc3RvcmVkcXUoKGNoYXIgKilfX3AsIChfX3YxNnFpKV9fYik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWFza21vdmV1X3NpMTI4KF9fbTEyOGkgX19kLCBfX20xMjhpIF9fbiwgY2hhciAqX19wKQotewotICBfX2J1aWx0aW5faWEzMl9tYXNrbW92ZHF1KChfX3YxNnFpKV9fZCwgKF9fdjE2cWkpX19uLCBfX3ApOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX3N0b3JlbF9lcGk2NChfX20xMjhpICpfX3AsIF9fbTEyOGkgX19hKQotewotICBzdHJ1Y3QgX19tbV9zdG9yZWxfZXBpNjRfc3RydWN0IHsKLSAgICBsb25nIGxvbmcgX191OwotICB9IF9fYXR0cmlidXRlX18oKF9fcGFja2VkX18sIF9fbWF5X2FsaWFzX18pKTsKLSAgKChzdHJ1Y3QgX19tbV9zdG9yZWxfZXBpNjRfc3RydWN0KilfX3ApLT5fX3UgPSBfX2FbMF07Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fc3RyZWFtX3BkKGRvdWJsZSAqX19wLCBfX20xMjhkIF9fYSkKLXsKLSAgX19idWlsdGluX2lhMzJfbW92bnRwZChfX3AsIF9fYSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fc3RyZWFtX3NpMTI4KF9fbTEyOGkgKl9fcCwgX19tMTI4aSBfX2EpCi17Ci0gIF9fYnVpbHRpbl9pYTMyX21vdm50ZHEoX19wLCBfX2EpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX3N0cmVhbV9zaTMyKGludCAqX19wLCBpbnQgX19hKQotewotICBfX2J1aWx0aW5faWEzMl9tb3ZudGkoX19wLCBfX2EpOwotfQotCi0jaWZkZWYgX194ODZfNjRfXwotc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9zdHJlYW1fc2k2NChsb25nIGxvbmcgKl9fcCwgbG9uZyBsb25nIF9fYSkKLXsKLSAgX19idWlsdGluX2lhMzJfbW92bnRpNjQoX19wLCBfX2EpOwotfQotI2VuZGlmCi0KLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fY2xmbHVzaCh2b2lkIGNvbnN0ICpfX3ApCi17Ci0gIF9fYnVpbHRpbl9pYTMyX2NsZmx1c2goX19wKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9sZmVuY2Uodm9pZCkKLXsKLSAgX19idWlsdGluX2lhMzJfbGZlbmNlKCk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWZlbmNlKHZvaWQpCi17Ci0gIF9fYnVpbHRpbl9pYTMyX21mZW5jZSgpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX3BhY2tzX2VwaTE2KF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikKLXsKLSAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3BhY2tzc3diMTI4KChfX3Y4aGkpX19hLCAoX192OGhpKV9fYik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fcGFja3NfZXBpMzIoX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKQotewotICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfcGFja3NzZHcxMjgoKF9fdjRzaSlfX2EsIChfX3Y0c2kpX19iKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9wYWNrdXNfZXBpMTYoX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKQotewotICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfcGFja3Vzd2IxMjgoKF9fdjhoaSlfX2EsIChfX3Y4aGkpX19iKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gaW50IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2V4dHJhY3RfZXBpMTYoX19tMTI4aSBfX2EsIGludCBfX2ltbSkKLXsKLSAgX192OGhpIF9fYiA9IChfX3Y4aGkpX19hOwotICByZXR1cm4gKHVuc2lnbmVkIHNob3J0KV9fYltfX2ltbSAmIDddOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2luc2VydF9lcGkxNihfX20xMjhpIF9fYSwgaW50IF9fYiwgaW50IF9faW1tKQotewotICBfX3Y4aGkgX19jID0gKF9fdjhoaSlfX2E7Ci0gIF9fY1tfX2ltbSAmIDddID0gX19iOwotICByZXR1cm4gKF9fbTEyOGkpX19jOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBpbnQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbW92ZW1hc2tfZXBpOChfX20xMjhpIF9fYSkKLXsKLSAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3Btb3Ztc2tiMTI4KChfX3YxNnFpKV9fYSk7Ci19Ci0KLSNkZWZpbmUgX21tX3NodWZmbGVfZXBpMzIoYSwgaW1tKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgKF9fbTEyOGkpX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjRzaSkoX19tMTI4aSkoYSksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzaSlfbW1fc2V0emVyb19zaTEyOCgpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbW0pICYgMHgzLCAoKGltbSkgJiAweGMpID4+IDIsIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChpbW0pICYgMHgzMCkgPj4gNCwgKChpbW0pICYgMHhjMCkgPj4gNik7IH0pCi0KLSNkZWZpbmUgX21tX3NodWZmbGVsb19lcGkxNihhLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAotICAoX19tMTI4aSlfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192OGhpKShfX20xMjhpKShhKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGhpKV9tbV9zZXR6ZXJvX3NpMTI4KCksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGltbSkgJiAweDMsICgoaW1tKSAmIDB4YykgPj4gMiwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGltbSkgJiAweDMwKSA+PiA0LCAoKGltbSkgJiAweGMwKSA+PiA2LCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQsIDUsIDYsIDcpOyB9KQotCi0jZGVmaW5lIF9tbV9zaHVmZmxlaGlfZXBpMTYoYSwgaW1tKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgKF9fbTEyOGkpX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjhoaSkoX19tMTI4aSkoYSksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhoaSlfbW1fc2V0emVyb19zaTEyOCgpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDEsIDIsIDMsIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNCArICgoKGltbSkgJiAweDAzKSA+PiAwKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0ICsgKCgoaW1tKSAmIDB4MGMpID4+IDIpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQgKyAoKChpbW0pICYgMHgzMCkgPj4gNCksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNCArICgoKGltbSkgJiAweGMwKSA+PiA2KSk7IH0pCi0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fdW5wYWNraGlfZXBpOChfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpCi17Ci0gIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192MTZxaSlfX2EsIChfX3YxNnFpKV9fYiwgOCwgMTYrOCwgOSwgMTYrOSwgMTAsIDE2KzEwLCAxMSwgMTYrMTEsIDEyLCAxNisxMiwgMTMsIDE2KzEzLCAxNCwgMTYrMTQsIDE1LCAxNisxNSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fdW5wYWNraGlfZXBpMTYoX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKQotewotICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjhoaSlfX2EsIChfX3Y4aGkpX19iLCA0LCA4KzQsIDUsIDgrNSwgNiwgOCs2LCA3LCA4KzcpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX3VucGFja2hpX2VwaTMyKF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikKLXsKLSAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKChfX3Y0c2kpX19hLCAoX192NHNpKV9fYiwgMiwgNCsyLCAzLCA0KzMpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX3VucGFja2hpX2VwaTY0KF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikKLXsKLSAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fYSwgX19iLCAxLCAyKzEpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX3VucGFja2xvX2VwaTgoX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKQotewotICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjE2cWkpX19hLCAoX192MTZxaSlfX2IsIDAsIDE2KzAsIDEsIDE2KzEsIDIsIDE2KzIsIDMsIDE2KzMsIDQsIDE2KzQsIDUsIDE2KzUsIDYsIDE2KzYsIDcsIDE2KzcpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX3VucGFja2xvX2VwaTE2KF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikKLXsKLSAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKChfX3Y4aGkpX19hLCAoX192OGhpKV9fYiwgMCwgOCswLCAxLCA4KzEsIDIsIDgrMiwgMywgOCszKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV91bnBhY2tsb19lcGkzMihfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpCi17Ci0gIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192NHNpKV9fYSwgKF9fdjRzaSlfX2IsIDAsIDQrMCwgMSwgNCsxKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV91bnBhY2tsb19lcGk2NChfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpCi17Ci0gIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX2EsIF9fYiwgMCwgMiswKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbW92ZXBpNjRfcGk2NChfX20xMjhpIF9fYSkKLXsKLSAgcmV0dXJuIChfX202NClfX2FbMF07Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbW92cGk2NF9lcGk2NChfX202NCBfX2EpCi17Ci0gIHJldHVybiAoX19tMTI4aSl7IChsb25nIGxvbmcpX19hLCAwIH07Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbW92ZV9lcGk2NChfX20xMjhpIF9fYSkKLXsKLSAgcmV0dXJuIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fYSwgKF9fbTEyOGkpeyAwIH0sIDAsIDIpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX3VucGFja2hpX3BkKF9fbTEyOGQgX19hLCBfX20xMjhkIF9fYikKLXsKLSAgcmV0dXJuIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fYSwgX19iLCAxLCAyKzEpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX3VucGFja2xvX3BkKF9fbTEyOGQgX19hLCBfX20xMjhkIF9fYikKLXsKLSAgcmV0dXJuIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fYSwgX19iLCAwLCAyKzApOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBpbnQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbW92ZW1hc2tfcGQoX19tMTI4ZCBfX2EpCi17Ci0gIHJldHVybiBfX2J1aWx0aW5faWEzMl9tb3Ztc2twZChfX2EpOwotfQotCi0jZGVmaW5lIF9tbV9zaHVmZmxlX3BkKGEsIGIsIGkpIF9fZXh0ZW5zaW9uX18gKHsgXAotICAoX19tMTI4ZClfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192MmRmKShfX20xMjhkKShhKSwgKF9fdjJkZikoX19tMTI4ZCkoYiksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGkpICYgMSwgKCgoaSkgJiAyKSA+PiAxKSArIDIpOyB9KQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fY2FzdHBkX3BzKF9fbTEyOGQgX19hKQotewotICByZXR1cm4gKF9fbTEyOClfX2E7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fY2FzdHBkX3NpMTI4KF9fbTEyOGQgX19hKQotewotICByZXR1cm4gKF9fbTEyOGkpX19hOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2Nhc3Rwc19wZChfX20xMjggX19hKQotewotICByZXR1cm4gKF9fbTEyOGQpX19hOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2Nhc3Rwc19zaTEyOChfX20xMjggX19hKQotewotICByZXR1cm4gKF9fbTEyOGkpX19hOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fY2FzdHNpMTI4X3BzKF9fbTEyOGkgX19hKQotewotICByZXR1cm4gKF9fbTEyOClfX2E7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fY2FzdHNpMTI4X3BkKF9fbTEyOGkgX19hKQotewotICByZXR1cm4gKF9fbTEyOGQpX19hOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX3BhdXNlKHZvaWQpCi17Ci0gIF9fYnVpbHRpbl9pYTMyX3BhdXNlKCk7Ci19Ci0KLSN1bmRlZiBfX0RFRkFVTFRfRk5fQVRUUlMKLQotI2RlZmluZSBfTU1fU0hVRkZMRTIoeCwgeSkgKCgoeCkgPDwgMSkgfCAoeSkpCi0KLSNlbmRpZiAvKiBfX0VNTUlOVFJJTl9IICovCmRpZmYgLS1naXQgYS9jbGFuZy0yNTc3MTEzL2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL2YxNmNpbnRyaW4uaCBiL2NsYW5nLTI1NzcxMTMvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvZjE2Y2ludHJpbi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNjU1ZDk4Li4wMDAwMDAwCi0tLSBhL2NsYW5nLTI1NzcxMTMvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvZjE2Y2ludHJpbi5oCisrKyAvZGV2L251bGwKQEAgLTEsNDUgKzAsMCBAQAotLyo9PT0tLS0tIGYxNmNpbnRyaW4uaCAtIEYxNkMgaW50cmluc2ljcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQotICoKLSAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKLSAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCi0gKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCi0gKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCi0gKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKLSAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Ci0gKgotICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KLSAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgotICoKLSAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCi0gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKLSAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgotICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKLSAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KLSAqIFRIRSBTT0ZUV0FSRS4KLSAqCi0gKj09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09Ci0gKi8KLQotI2lmICFkZWZpbmVkIF9fWDg2SU5UUklOX0ggJiYgIWRlZmluZWQgX19FTU1JTlRSSU5fSCAmJiAhZGVmaW5lZCBfX0lNTUlOVFJJTl9ICi0jZXJyb3IgIk5ldmVyIHVzZSA8ZjE2Y2ludHJpbi5oPiBkaXJlY3RseTsgaW5jbHVkZSA8ZW1taW50cmluLmg+IGluc3RlYWQuIgotI2VuZGlmCi0KLSNpZm5kZWYgX19GMTZDSU5UUklOX0gKLSNkZWZpbmUgX19GMTZDSU5UUklOX0gKLQotLyogRGVmaW5lIHRoZSBkZWZhdWx0IGF0dHJpYnV0ZXMgZm9yIHRoZSBmdW5jdGlvbnMgaW4gdGhpcyBmaWxlLiAqLwotI2RlZmluZSBfX0RFRkFVTFRfRk5fQVRUUlMgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fLCBfX3RhcmdldF9fKCJmMTZjIikpKQotCi0jZGVmaW5lIF9tbV9jdnRwc19waChhLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAotIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3ZjdnRwczJwaCgoX192NHNmKShfX20xMjgpKGEpLCAoaW1tKSk7IH0pCi0KLXN0YXRpYyBfX2lubGluZSBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fY3Z0cGhfcHMoX19tMTI4aSBfX2EpCi17Ci0gIHJldHVybiAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX3ZjdnRwaDJwcygoX192OGhpKV9fYSk7Ci19Ci0KLSN1bmRlZiBfX0RFRkFVTFRfRk5fQVRUUlMKLQotI2VuZGlmIC8qIF9fRjE2Q0lOVFJJTl9IICovCmRpZmYgLS1naXQgYS9jbGFuZy0yNTc3MTEzL2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL2Zsb2F0LmggYi9jbGFuZy0yNTc3MTEzL2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL2Zsb2F0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzOGNmNzYuLjAwMDAwMDAKLS0tIGEvY2xhbmctMjU3NzExMy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9mbG9hdC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTI0ICswLDAgQEAKLS8qPT09LS0tLSBmbG9hdC5oIC0gQ2hhcmFjdGVyaXN0aWNzIG9mIGZsb2F0aW5nIHBvaW50IHR5cGVzIC0tLS0tLS0tLS0tLS0tLS09PT0KLSAqCi0gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5Ci0gKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAotICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cwotICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAotICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCi0gKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgotICoKLSAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCi0gKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KLSAqCi0gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgotICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCi0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKLSAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCi0gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCi0gKiBUSEUgU09GVFdBUkUuCi0gKgotICo9PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQotICovCi0KLSNpZm5kZWYgX19GTE9BVF9ICi0jZGVmaW5lIF9fRkxPQVRfSAotCi0vKiBJZiB3ZSdyZSBvbiBNaW5HVywgZmFsbCBiYWNrIHRvIHRoZSBzeXN0ZW0ncyBmbG9hdC5oLCB3aGljaCBtaWdodCBoYXZlCi0gKiBhZGRpdGlvbmFsIGRlZmluaXRpb25zIHByb3ZpZGVkIGZvciBXaW5kb3dzLgotICogRm9yIG1vcmUgZGV0YWlscyBzZWUgaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L3kweWJ3OWZ5LmFzcHgKLSAqLwotI2lmIChkZWZpbmVkKF9fTUlOR1czMl9fKSB8fCBkZWZpbmVkKF9NU0NfVkVSKSkgJiYgX19TVERDX0hPU1RFRF9fICYmIFwKLSAgICBfX2hhc19pbmNsdWRlX25leHQoPGZsb2F0Lmg+KQotIyAgaW5jbHVkZV9uZXh0IDxmbG9hdC5oPgotCi0vKiBVbmRlZmluZSBhbnl0aGluZyB0aGF0IHdlJ2xsIGJlIHJlZGVmaW5pbmcgYmVsb3cuICovCi0jICB1bmRlZiBGTFRfRVZBTF9NRVRIT0QKLSMgIHVuZGVmIEZMVF9ST1VORFMKLSMgIHVuZGVmIEZMVF9SQURJWAotIyAgdW5kZWYgRkxUX01BTlRfRElHCi0jICB1bmRlZiBEQkxfTUFOVF9ESUcKLSMgIHVuZGVmIExEQkxfTUFOVF9ESUcKLSMgIHVuZGVmIERFQ0lNQUxfRElHCi0jICB1bmRlZiBGTFRfRElHCi0jICB1bmRlZiBEQkxfRElHCi0jICB1bmRlZiBMREJMX0RJRwotIyAgdW5kZWYgRkxUX01JTl9FWFAKLSMgIHVuZGVmIERCTF9NSU5fRVhQCi0jICB1bmRlZiBMREJMX01JTl9FWFAKLSMgIHVuZGVmIEZMVF9NSU5fMTBfRVhQCi0jICB1bmRlZiBEQkxfTUlOXzEwX0VYUAotIyAgdW5kZWYgTERCTF9NSU5fMTBfRVhQCi0jICB1bmRlZiBGTFRfTUFYX0VYUAotIyAgdW5kZWYgREJMX01BWF9FWFAKLSMgIHVuZGVmIExEQkxfTUFYX0VYUAotIyAgdW5kZWYgRkxUX01BWF8xMF9FWFAKLSMgIHVuZGVmIERCTF9NQVhfMTBfRVhQCi0jICB1bmRlZiBMREJMX01BWF8xMF9FWFAKLSMgIHVuZGVmIEZMVF9NQVgKLSMgIHVuZGVmIERCTF9NQVgKLSMgIHVuZGVmIExEQkxfTUFYCi0jICB1bmRlZiBGTFRfRVBTSUxPTgotIyAgdW5kZWYgREJMX0VQU0lMT04KLSMgIHVuZGVmIExEQkxfRVBTSUxPTgotIyAgdW5kZWYgRkxUX01JTgotIyAgdW5kZWYgREJMX01JTgotIyAgdW5kZWYgTERCTF9NSU4KLSMgIGlmIF9fU1REQ19WRVJTSU9OX18gPj0gMjAxMTEyTCB8fCAhZGVmaW5lZChfX1NUUklDVF9BTlNJX18pCi0jICAgIHVuZGVmIEZMVF9UUlVFX01JTgotIyAgICB1bmRlZiBEQkxfVFJVRV9NSU4KLSMgICAgdW5kZWYgTERCTF9UUlVFX01JTgotIyAgZW5kaWYKLSNlbmRpZgotCi0vKiBDaGFyYWN0ZXJpc3RpY3Mgb2YgZmxvYXRpbmcgcG9pbnQgdHlwZXMsIEM5OSA1LjIuNC4yLjIgKi8KLQotI2RlZmluZSBGTFRfRVZBTF9NRVRIT0QgX19GTFRfRVZBTF9NRVRIT0RfXwotI2RlZmluZSBGTFRfUk9VTkRTIChfX2J1aWx0aW5fZmx0X3JvdW5kcygpKQotI2RlZmluZSBGTFRfUkFESVggX19GTFRfUkFESVhfXwotCi0jZGVmaW5lIEZMVF9NQU5UX0RJRyBfX0ZMVF9NQU5UX0RJR19fCi0jZGVmaW5lIERCTF9NQU5UX0RJRyBfX0RCTF9NQU5UX0RJR19fCi0jZGVmaW5lIExEQkxfTUFOVF9ESUcgX19MREJMX01BTlRfRElHX18KLQotI2RlZmluZSBERUNJTUFMX0RJRyBfX0RFQ0lNQUxfRElHX18KLQotI2RlZmluZSBGTFRfRElHIF9fRkxUX0RJR19fCi0jZGVmaW5lIERCTF9ESUcgX19EQkxfRElHX18KLSNkZWZpbmUgTERCTF9ESUcgX19MREJMX0RJR19fCi0KLSNkZWZpbmUgRkxUX01JTl9FWFAgX19GTFRfTUlOX0VYUF9fCi0jZGVmaW5lIERCTF9NSU5fRVhQIF9fREJMX01JTl9FWFBfXwotI2RlZmluZSBMREJMX01JTl9FWFAgX19MREJMX01JTl9FWFBfXwotCi0jZGVmaW5lIEZMVF9NSU5fMTBfRVhQIF9fRkxUX01JTl8xMF9FWFBfXwotI2RlZmluZSBEQkxfTUlOXzEwX0VYUCBfX0RCTF9NSU5fMTBfRVhQX18KLSNkZWZpbmUgTERCTF9NSU5fMTBfRVhQIF9fTERCTF9NSU5fMTBfRVhQX18KLQotI2RlZmluZSBGTFRfTUFYX0VYUCBfX0ZMVF9NQVhfRVhQX18KLSNkZWZpbmUgREJMX01BWF9FWFAgX19EQkxfTUFYX0VYUF9fCi0jZGVmaW5lIExEQkxfTUFYX0VYUCBfX0xEQkxfTUFYX0VYUF9fCi0KLSNkZWZpbmUgRkxUX01BWF8xMF9FWFAgX19GTFRfTUFYXzEwX0VYUF9fCi0jZGVmaW5lIERCTF9NQVhfMTBfRVhQIF9fREJMX01BWF8xMF9FWFBfXwotI2RlZmluZSBMREJMX01BWF8xMF9FWFAgX19MREJMX01BWF8xMF9FWFBfXwotCi0jZGVmaW5lIEZMVF9NQVggX19GTFRfTUFYX18KLSNkZWZpbmUgREJMX01BWCBfX0RCTF9NQVhfXwotI2RlZmluZSBMREJMX01BWCBfX0xEQkxfTUFYX18KLQotI2RlZmluZSBGTFRfRVBTSUxPTiBfX0ZMVF9FUFNJTE9OX18KLSNkZWZpbmUgREJMX0VQU0lMT04gX19EQkxfRVBTSUxPTl9fCi0jZGVmaW5lIExEQkxfRVBTSUxPTiBfX0xEQkxfRVBTSUxPTl9fCi0KLSNkZWZpbmUgRkxUX01JTiBfX0ZMVF9NSU5fXwotI2RlZmluZSBEQkxfTUlOIF9fREJMX01JTl9fCi0jZGVmaW5lIExEQkxfTUlOIF9fTERCTF9NSU5fXwotCi0jaWYgX19TVERDX1ZFUlNJT05fXyA+PSAyMDExMTJMIHx8ICFkZWZpbmVkKF9fU1RSSUNUX0FOU0lfXykKLSMgIGRlZmluZSBGTFRfVFJVRV9NSU4gX19GTFRfREVOT1JNX01JTl9fCi0jICBkZWZpbmUgREJMX1RSVUVfTUlOIF9fREJMX0RFTk9STV9NSU5fXwotIyAgZGVmaW5lIExEQkxfVFJVRV9NSU4gX19MREJMX0RFTk9STV9NSU5fXwotI2VuZGlmCi0KLSNlbmRpZiAvKiBfX0ZMT0FUX0ggKi8KZGlmZiAtLWdpdCBhL2NsYW5nLTI1NzcxMTMvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvZm1hNGludHJpbi5oIGIvY2xhbmctMjU3NzExMy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9mbWE0aW50cmluLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYxMTc4ODcuLjAwMDAwMDAKLS0tIGEvY2xhbmctMjU3NzExMy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9mbWE0aW50cmluLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMzAgKzAsMCBAQAotLyo9PT0tLS0tIGZtYTRpbnRyaW4uaCAtIEZNQTQgaW50cmluc2ljcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQotICoKLSAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKLSAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCi0gKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCi0gKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCi0gKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKLSAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Ci0gKgotICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KLSAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgotICoKLSAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCi0gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKLSAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgotICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKLSAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KLSAqIFRIRSBTT0ZUV0FSRS4KLSAqCi0gKj09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09Ci0gKi8KLQotI2lmbmRlZiBfX1g4NklOVFJJTl9ICi0jZXJyb3IgIk5ldmVyIHVzZSA8Zm1hNGludHJpbi5oPiBkaXJlY3RseTsgaW5jbHVkZSA8eDg2aW50cmluLmg+IGluc3RlYWQuIgotI2VuZGlmCi0KLSNpZm5kZWYgX19GTUE0SU5UUklOX0gKLSNkZWZpbmUgX19GTUE0SU5UUklOX0gKLQotI2luY2x1ZGUgPHBtbWludHJpbi5oPgotCi0vKiBEZWZpbmUgdGhlIGRlZmF1bHQgYXR0cmlidXRlcyBmb3IgdGhlIGZ1bmN0aW9ucyBpbiB0aGlzIGZpbGUuICovCi0jZGVmaW5lIF9fREVGQVVMVF9GTl9BVFRSUyBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18sIF9fdGFyZ2V0X18oImZtYTQiKSkpCi0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tYWNjX3BzKF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IsIF9fbTEyOCBfX0MpCi17Ci0gIHJldHVybiAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX3ZmbWFkZHBzKF9fQSwgX19CLCBfX0MpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hY2NfcGQoX19tMTI4ZCBfX0EsIF9fbTEyOGQgX19CLCBfX20xMjhkIF9fQykKLXsKLSAgcmV0dXJuIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX3ZmbWFkZHBkKF9fQSwgX19CLCBfX0MpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWFjY19zcyhfX20xMjggX19BLCBfX20xMjggX19CLCBfX20xMjggX19DKQotewotICByZXR1cm4gKF9fbTEyOClfX2J1aWx0aW5faWEzMl92Zm1hZGRzcyhfX0EsIF9fQiwgX19DKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tYWNjX3NkKF9fbTEyOGQgX19BLCBfX20xMjhkIF9fQiwgX19tMTI4ZCBfX0MpCi17Ci0gIHJldHVybiAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl92Zm1hZGRzZChfX0EsIF9fQiwgX19DKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21zdWJfcHMoX19tMTI4IF9fQSwgX19tMTI4IF9fQiwgX19tMTI4IF9fQykKLXsKLSAgcmV0dXJuIChfX20xMjgpX19idWlsdGluX2lhMzJfdmZtc3VicHMoX19BLCBfX0IsIF9fQyk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbXN1Yl9wZChfX20xMjhkIF9fQSwgX19tMTI4ZCBfX0IsIF9fbTEyOGQgX19DKQotewotICByZXR1cm4gKF9fbTEyOGQpX19idWlsdGluX2lhMzJfdmZtc3VicGQoX19BLCBfX0IsIF9fQyk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tc3ViX3NzKF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IsIF9fbTEyOCBfX0MpCi17Ci0gIHJldHVybiAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX3ZmbXN1YnNzKF9fQSwgX19CLCBfX0MpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21zdWJfc2QoX19tMTI4ZCBfX0EsIF9fbTEyOGQgX19CLCBfX20xMjhkIF9fQykKLXsKLSAgcmV0dXJuIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX3ZmbXN1YnNkKF9fQSwgX19CLCBfX0MpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbm1hY2NfcHMoX19tMTI4IF9fQSwgX19tMTI4IF9fQiwgX19tMTI4IF9fQykKLXsKLSAgcmV0dXJuIChfX20xMjgpX19idWlsdGluX2lhMzJfdmZubWFkZHBzKF9fQSwgX19CLCBfX0MpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX25tYWNjX3BkKF9fbTEyOGQgX19BLCBfX20xMjhkIF9fQiwgX19tMTI4ZCBfX0MpCi17Ci0gIHJldHVybiAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl92Zm5tYWRkcGQoX19BLCBfX0IsIF9fQyk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9ubWFjY19zcyhfX20xMjggX19BLCBfX20xMjggX19CLCBfX20xMjggX19DKQotewotICByZXR1cm4gKF9fbTEyOClfX2J1aWx0aW5faWEzMl92Zm5tYWRkc3MoX19BLCBfX0IsIF9fQyk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbm1hY2Nfc2QoX19tMTI4ZCBfX0EsIF9fbTEyOGQgX19CLCBfX20xMjhkIF9fQykKLXsKLSAgcmV0dXJuIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX3Zmbm1hZGRzZChfX0EsIF9fQiwgX19DKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX25tc3ViX3BzKF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IsIF9fbTEyOCBfX0MpCi17Ci0gIHJldHVybiAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX3Zmbm1zdWJwcyhfX0EsIF9fQiwgX19DKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9ubXN1Yl9wZChfX20xMjhkIF9fQSwgX19tMTI4ZCBfX0IsIF9fbTEyOGQgX19DKQotewotICByZXR1cm4gKF9fbTEyOGQpX19idWlsdGluX2lhMzJfdmZubXN1YnBkKF9fQSwgX19CLCBfX0MpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbm1zdWJfc3MoX19tMTI4IF9fQSwgX19tMTI4IF9fQiwgX19tMTI4IF9fQykKLXsKLSAgcmV0dXJuIChfX20xMjgpX19idWlsdGluX2lhMzJfdmZubXN1YnNzKF9fQSwgX19CLCBfX0MpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX25tc3ViX3NkKF9fbTEyOGQgX19BLCBfX20xMjhkIF9fQiwgX19tMTI4ZCBfX0MpCi17Ci0gIHJldHVybiAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl92Zm5tc3Vic2QoX19BLCBfX0IsIF9fQyk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tYWRkc3ViX3BzKF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IsIF9fbTEyOCBfX0MpCi17Ci0gIHJldHVybiAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX3ZmbWFkZHN1YnBzKF9fQSwgX19CLCBfX0MpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hZGRzdWJfcGQoX19tMTI4ZCBfX0EsIF9fbTEyOGQgX19CLCBfX20xMjhkIF9fQykKLXsKLSAgcmV0dXJuIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX3ZmbWFkZHN1YnBkKF9fQSwgX19CLCBfX0MpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbXN1YmFkZF9wcyhfX20xMjggX19BLCBfX20xMjggX19CLCBfX20xMjggX19DKQotewotICByZXR1cm4gKF9fbTEyOClfX2J1aWx0aW5faWEzMl92Zm1zdWJhZGRwcyhfX0EsIF9fQiwgX19DKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tc3ViYWRkX3BkKF9fbTEyOGQgX19BLCBfX20xMjhkIF9fQiwgX19tMTI4ZCBfX0MpCi17Ci0gIHJldHVybiAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl92Zm1zdWJhZGRwZChfX0EsIF9fQiwgX19DKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X21hY2NfcHMoX19tMjU2IF9fQSwgX19tMjU2IF9fQiwgX19tMjU2IF9fQykKLXsKLSAgcmV0dXJuIChfX20yNTYpX19idWlsdGluX2lhMzJfdmZtYWRkcHMyNTYoX19BLCBfX0IsIF9fQyk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfbWFjY19wZChfX20yNTZkIF9fQSwgX19tMjU2ZCBfX0IsIF9fbTI1NmQgX19DKQotewotICByZXR1cm4gKF9fbTI1NmQpX19idWlsdGluX2lhMzJfdmZtYWRkcGQyNTYoX19BLCBfX0IsIF9fQyk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tc3ViX3BzKF9fbTI1NiBfX0EsIF9fbTI1NiBfX0IsIF9fbTI1NiBfX0MpCi17Ci0gIHJldHVybiAoX19tMjU2KV9fYnVpbHRpbl9pYTMyX3ZmbXN1YnBzMjU2KF9fQSwgX19CLCBfX0MpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X21zdWJfcGQoX19tMjU2ZCBfX0EsIF9fbTI1NmQgX19CLCBfX20yNTZkIF9fQykKLXsKLSAgcmV0dXJuIChfX20yNTZkKV9fYnVpbHRpbl9pYTMyX3ZmbXN1YnBkMjU2KF9fQSwgX19CLCBfX0MpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfbm1hY2NfcHMoX19tMjU2IF9fQSwgX19tMjU2IF9fQiwgX19tMjU2IF9fQykKLXsKLSAgcmV0dXJuIChfX20yNTYpX19idWlsdGluX2lhMzJfdmZubWFkZHBzMjU2KF9fQSwgX19CLCBfX0MpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X25tYWNjX3BkKF9fbTI1NmQgX19BLCBfX20yNTZkIF9fQiwgX19tMjU2ZCBfX0MpCi17Ci0gIHJldHVybiAoX19tMjU2ZClfX2J1aWx0aW5faWEzMl92Zm5tYWRkcGQyNTYoX19BLCBfX0IsIF9fQyk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9ubXN1Yl9wcyhfX20yNTYgX19BLCBfX20yNTYgX19CLCBfX20yNTYgX19DKQotewotICByZXR1cm4gKF9fbTI1NilfX2J1aWx0aW5faWEzMl92Zm5tc3VicHMyNTYoX19BLCBfX0IsIF9fQyk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfbm1zdWJfcGQoX19tMjU2ZCBfX0EsIF9fbTI1NmQgX19CLCBfX20yNTZkIF9fQykKLXsKLSAgcmV0dXJuIChfX20yNTZkKV9fYnVpbHRpbl9pYTMyX3Zmbm1zdWJwZDI1NihfX0EsIF9fQiwgX19DKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X21hZGRzdWJfcHMoX19tMjU2IF9fQSwgX19tMjU2IF9fQiwgX19tMjU2IF9fQykKLXsKLSAgcmV0dXJuIChfX20yNTYpX19idWlsdGluX2lhMzJfdmZtYWRkc3VicHMyNTYoX19BLCBfX0IsIF9fQyk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfbWFkZHN1Yl9wZChfX20yNTZkIF9fQSwgX19tMjU2ZCBfX0IsIF9fbTI1NmQgX19DKQotewotICByZXR1cm4gKF9fbTI1NmQpX19idWlsdGluX2lhMzJfdmZtYWRkc3VicGQyNTYoX19BLCBfX0IsIF9fQyk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9tc3ViYWRkX3BzKF9fbTI1NiBfX0EsIF9fbTI1NiBfX0IsIF9fbTI1NiBfX0MpCi17Ci0gIHJldHVybiAoX19tMjU2KV9fYnVpbHRpbl9pYTMyX3ZmbXN1YmFkZHBzMjU2KF9fQSwgX19CLCBfX0MpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X21zdWJhZGRfcGQoX19tMjU2ZCBfX0EsIF9fbTI1NmQgX19CLCBfX20yNTZkIF9fQykKLXsKLSAgcmV0dXJuIChfX20yNTZkKV9fYnVpbHRpbl9pYTMyX3ZmbXN1YmFkZHBkMjU2KF9fQSwgX19CLCBfX0MpOwotfQotCi0jdW5kZWYgX19ERUZBVUxUX0ZOX0FUVFJTCi0KLSNlbmRpZiAvKiBfX0ZNQTRJTlRSSU5fSCAqLwpkaWZmIC0tZ2l0IGEvY2xhbmctMjU3NzExMy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9mbWFpbnRyaW4uaCBiL2NsYW5nLTI1NzcxMTMvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvZm1haW50cmluLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExNGExNDMuLjAwMDAwMDAKLS0tIGEvY2xhbmctMjU3NzExMy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9mbWFpbnRyaW4uaAorKysgL2Rldi9udWxsCkBAIC0xLDIyOCArMCwwIEBACi0vKj09PS0tLS0gZm1hNGludHJpbi5oIC0gRk1BNCBpbnRyaW5zaWNzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09Ci0gKgotICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQotICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKLSAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKLSAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKLSAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcwotICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKLSAqCi0gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgotICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCi0gKgotICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKLSAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAotICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCi0gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAotICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgotICogVEhFIFNPRlRXQVJFLgotICoKLSAqPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KLSAqLwotCi0jaWZuZGVmIF9fSU1NSU5UUklOX0gKLSNlcnJvciAiTmV2ZXIgdXNlIDxmbWFpbnRyaW4uaD4gZGlyZWN0bHk7IGluY2x1ZGUgPGltbWludHJpbi5oPiBpbnN0ZWFkLiIKLSNlbmRpZgotCi0jaWZuZGVmIF9fRk1BSU5UUklOX0gKLSNkZWZpbmUgX19GTUFJTlRSSU5fSAotCi0vKiBEZWZpbmUgdGhlIGRlZmF1bHQgYXR0cmlidXRlcyBmb3IgdGhlIGZ1bmN0aW9ucyBpbiB0aGlzIGZpbGUuICovCi0jZGVmaW5lIF9fREVGQVVMVF9GTl9BVFRSUyBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18sIF9fdGFyZ2V0X18oImZtYSIpKSkKLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2ZtYWRkX3BzKF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IsIF9fbTEyOCBfX0MpCi17Ci0gIHJldHVybiAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX3ZmbWFkZHBzKF9fQSwgX19CLCBfX0MpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2ZtYWRkX3BkKF9fbTEyOGQgX19BLCBfX20xMjhkIF9fQiwgX19tMTI4ZCBfX0MpCi17Ci0gIHJldHVybiAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl92Zm1hZGRwZChfX0EsIF9fQiwgX19DKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2ZtYWRkX3NzKF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IsIF9fbTEyOCBfX0MpCi17Ci0gIHJldHVybiAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX3ZmbWFkZHNzKF9fQSwgX19CLCBfX0MpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2ZtYWRkX3NkKF9fbTEyOGQgX19BLCBfX20xMjhkIF9fQiwgX19tMTI4ZCBfX0MpCi17Ci0gIHJldHVybiAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl92Zm1hZGRzZChfX0EsIF9fQiwgX19DKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2Ztc3ViX3BzKF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IsIF9fbTEyOCBfX0MpCi17Ci0gIHJldHVybiAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX3ZmbXN1YnBzKF9fQSwgX19CLCBfX0MpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2Ztc3ViX3BkKF9fbTEyOGQgX19BLCBfX20xMjhkIF9fQiwgX19tMTI4ZCBfX0MpCi17Ci0gIHJldHVybiAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl92Zm1zdWJwZChfX0EsIF9fQiwgX19DKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2Ztc3ViX3NzKF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IsIF9fbTEyOCBfX0MpCi17Ci0gIHJldHVybiAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX3ZmbXN1YnNzKF9fQSwgX19CLCBfX0MpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2Ztc3ViX3NkKF9fbTEyOGQgX19BLCBfX20xMjhkIF9fQiwgX19tMTI4ZCBfX0MpCi17Ci0gIHJldHVybiAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl92Zm1zdWJzZChfX0EsIF9fQiwgX19DKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2ZubWFkZF9wcyhfX20xMjggX19BLCBfX20xMjggX19CLCBfX20xMjggX19DKQotewotICByZXR1cm4gKF9fbTEyOClfX2J1aWx0aW5faWEzMl92Zm5tYWRkcHMoX19BLCBfX0IsIF9fQyk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fZm5tYWRkX3BkKF9fbTEyOGQgX19BLCBfX20xMjhkIF9fQiwgX19tMTI4ZCBfX0MpCi17Ci0gIHJldHVybiAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl92Zm5tYWRkcGQoX19BLCBfX0IsIF9fQyk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9mbm1hZGRfc3MoX19tMTI4IF9fQSwgX19tMTI4IF9fQiwgX19tMTI4IF9fQykKLXsKLSAgcmV0dXJuIChfX20xMjgpX19idWlsdGluX2lhMzJfdmZubWFkZHNzKF9fQSwgX19CLCBfX0MpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2ZubWFkZF9zZChfX20xMjhkIF9fQSwgX19tMTI4ZCBfX0IsIF9fbTEyOGQgX19DKQotewotICByZXR1cm4gKF9fbTEyOGQpX19idWlsdGluX2lhMzJfdmZubWFkZHNkKF9fQSwgX19CLCBfX0MpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fZm5tc3ViX3BzKF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IsIF9fbTEyOCBfX0MpCi17Ci0gIHJldHVybiAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX3Zmbm1zdWJwcyhfX0EsIF9fQiwgX19DKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9mbm1zdWJfcGQoX19tMTI4ZCBfX0EsIF9fbTEyOGQgX19CLCBfX20xMjhkIF9fQykKLXsKLSAgcmV0dXJuIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX3Zmbm1zdWJwZChfX0EsIF9fQiwgX19DKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2ZubXN1Yl9zcyhfX20xMjggX19BLCBfX20xMjggX19CLCBfX20xMjggX19DKQotewotICByZXR1cm4gKF9fbTEyOClfX2J1aWx0aW5faWEzMl92Zm5tc3Vic3MoX19BLCBfX0IsIF9fQyk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fZm5tc3ViX3NkKF9fbTEyOGQgX19BLCBfX20xMjhkIF9fQiwgX19tMTI4ZCBfX0MpCi17Ci0gIHJldHVybiAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl92Zm5tc3Vic2QoX19BLCBfX0IsIF9fQyk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9mbWFkZHN1Yl9wcyhfX20xMjggX19BLCBfX20xMjggX19CLCBfX20xMjggX19DKQotewotICByZXR1cm4gKF9fbTEyOClfX2J1aWx0aW5faWEzMl92Zm1hZGRzdWJwcyhfX0EsIF9fQiwgX19DKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9mbWFkZHN1Yl9wZChfX20xMjhkIF9fQSwgX19tMTI4ZCBfX0IsIF9fbTEyOGQgX19DKQotewotICByZXR1cm4gKF9fbTEyOGQpX19idWlsdGluX2lhMzJfdmZtYWRkc3VicGQoX19BLCBfX0IsIF9fQyk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9mbXN1YmFkZF9wcyhfX20xMjggX19BLCBfX20xMjggX19CLCBfX20xMjggX19DKQotewotICByZXR1cm4gKF9fbTEyOClfX2J1aWx0aW5faWEzMl92Zm1zdWJhZGRwcyhfX0EsIF9fQiwgX19DKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9mbXN1YmFkZF9wZChfX20xMjhkIF9fQSwgX19tMTI4ZCBfX0IsIF9fbTEyOGQgX19DKQotewotICByZXR1cm4gKF9fbTEyOGQpX19idWlsdGluX2lhMzJfdmZtc3ViYWRkcGQoX19BLCBfX0IsIF9fQyk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9mbWFkZF9wcyhfX20yNTYgX19BLCBfX20yNTYgX19CLCBfX20yNTYgX19DKQotewotICByZXR1cm4gKF9fbTI1NilfX2J1aWx0aW5faWEzMl92Zm1hZGRwczI1NihfX0EsIF9fQiwgX19DKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9mbWFkZF9wZChfX20yNTZkIF9fQSwgX19tMjU2ZCBfX0IsIF9fbTI1NmQgX19DKQotewotICByZXR1cm4gKF9fbTI1NmQpX19idWlsdGluX2lhMzJfdmZtYWRkcGQyNTYoX19BLCBfX0IsIF9fQyk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9mbXN1Yl9wcyhfX20yNTYgX19BLCBfX20yNTYgX19CLCBfX20yNTYgX19DKQotewotICByZXR1cm4gKF9fbTI1NilfX2J1aWx0aW5faWEzMl92Zm1zdWJwczI1NihfX0EsIF9fQiwgX19DKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9mbXN1Yl9wZChfX20yNTZkIF9fQSwgX19tMjU2ZCBfX0IsIF9fbTI1NmQgX19DKQotewotICByZXR1cm4gKF9fbTI1NmQpX19idWlsdGluX2lhMzJfdmZtc3VicGQyNTYoX19BLCBfX0IsIF9fQyk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9mbm1hZGRfcHMoX19tMjU2IF9fQSwgX19tMjU2IF9fQiwgX19tMjU2IF9fQykKLXsKLSAgcmV0dXJuIChfX20yNTYpX19idWlsdGluX2lhMzJfdmZubWFkZHBzMjU2KF9fQSwgX19CLCBfX0MpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X2ZubWFkZF9wZChfX20yNTZkIF9fQSwgX19tMjU2ZCBfX0IsIF9fbTI1NmQgX19DKQotewotICByZXR1cm4gKF9fbTI1NmQpX19idWlsdGluX2lhMzJfdmZubWFkZHBkMjU2KF9fQSwgX19CLCBfX0MpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW0yNTZfZm5tc3ViX3BzKF9fbTI1NiBfX0EsIF9fbTI1NiBfX0IsIF9fbTI1NiBfX0MpCi17Ci0gIHJldHVybiAoX19tMjU2KV9fYnVpbHRpbl9pYTMyX3Zmbm1zdWJwczI1NihfX0EsIF9fQiwgX19DKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9mbm1zdWJfcGQoX19tMjU2ZCBfX0EsIF9fbTI1NmQgX19CLCBfX20yNTZkIF9fQykKLXsKLSAgcmV0dXJuIChfX20yNTZkKV9fYnVpbHRpbl9pYTMyX3Zmbm1zdWJwZDI1NihfX0EsIF9fQiwgX19DKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X2ZtYWRkc3ViX3BzKF9fbTI1NiBfX0EsIF9fbTI1NiBfX0IsIF9fbTI1NiBfX0MpCi17Ci0gIHJldHVybiAoX19tMjU2KV9fYnVpbHRpbl9pYTMyX3ZmbWFkZHN1YnBzMjU2KF9fQSwgX19CLCBfX0MpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X2ZtYWRkc3ViX3BkKF9fbTI1NmQgX19BLCBfX20yNTZkIF9fQiwgX19tMjU2ZCBfX0MpCi17Ci0gIHJldHVybiAoX19tMjU2ZClfX2J1aWx0aW5faWEzMl92Zm1hZGRzdWJwZDI1NihfX0EsIF9fQiwgX19DKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X2Ztc3ViYWRkX3BzKF9fbTI1NiBfX0EsIF9fbTI1NiBfX0IsIF9fbTI1NiBfX0MpCi17Ci0gIHJldHVybiAoX19tMjU2KV9fYnVpbHRpbl9pYTMyX3ZmbXN1YmFkZHBzMjU2KF9fQSwgX19CLCBfX0MpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X2Ztc3ViYWRkX3BkKF9fbTI1NmQgX19BLCBfX20yNTZkIF9fQiwgX19tMjU2ZCBfX0MpCi17Ci0gIHJldHVybiAoX19tMjU2ZClfX2J1aWx0aW5faWEzMl92Zm1zdWJhZGRwZDI1NihfX0EsIF9fQiwgX19DKTsKLX0KLQotI3VuZGVmIF9fREVGQVVMVF9GTl9BVFRSUwotCi0jZW5kaWYgLyogX19GTUFJTlRSSU5fSCAqLwpkaWZmIC0tZ2l0IGEvY2xhbmctMjU3NzExMy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9meHNyaW50cmluLmggYi9jbGFuZy0yNTc3MTEzL2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL2Z4c3JpbnRyaW4uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWM2MDI2YS4uMDAwMDAwMAotLS0gYS9jbGFuZy0yNTc3MTEzL2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL2Z4c3JpbnRyaW4uaAorKysgL2Rldi9udWxsCkBAIC0xLDU1ICswLDAgQEAKLS8qPT09LS0tLSBmeHNyaW50cmluLmggLSBGWFNSIGludHJpbnNpYyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KLSAqCi0gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5Ci0gKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAotICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cwotICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAotICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCi0gKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgotICoKLSAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCi0gKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KLSAqCi0gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgotICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCi0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKLSAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCi0gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCi0gKiBUSEUgU09GVFdBUkUuCi0gKgotICo9PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQotICovCi0KLSNpZm5kZWYgX19JTU1JTlRSSU5fSAotI2Vycm9yICJOZXZlciB1c2UgPGZ4c3JpbnRyaW4uaD4gZGlyZWN0bHk7IGluY2x1ZGUgPGltbWludHJpbi5oPiBpbnN0ZWFkLiIKLSNlbmRpZgotCi0jaWZuZGVmIF9fRlhTUklOVFJJTl9ICi0jZGVmaW5lIF9fRlhTUklOVFJJTl9ICi0KLSNkZWZpbmUgX19ERUZBVUxUX0ZOX0FUVFJTIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXywgIF9fdGFyZ2V0X18oImZ4c3IiKSkpCi0KLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fZnhzYXZlKHZvaWQgKl9fcCkgewotICByZXR1cm4gX19idWlsdGluX2lhMzJfZnhzYXZlKF9fcCk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fZnhzYXZlNjQodm9pZCAqX19wKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5faWEzMl9meHNhdmU2NChfX3ApOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUwotX2Z4cnN0b3Iodm9pZCAqX19wKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5faWEzMl9meHJzdG9yKF9fcCk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fZnhyc3RvcjY0KHZvaWQgKl9fcCkgewotICByZXR1cm4gX19idWlsdGluX2lhMzJfZnhyc3RvcjY0KF9fcCk7Ci19Ci0KLSN1bmRlZiBfX0RFRkFVTFRfRk5fQVRUUlMKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9jbGFuZy0yNTc3MTEzL2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL2h0bWludHJpbi5oIGIvY2xhbmctMjU3NzExMy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9odG1pbnRyaW4uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDA4OGM3Yy4uMDAwMDAwMAotLS0gYS9jbGFuZy0yNTc3MTEzL2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL2h0bWludHJpbi5oCisrKyAvZGV2L251bGwKQEAgLTEsMjI2ICswLDAgQEAKLS8qPT09LS0tLSBodG1pbnRyaW4uaCAtIFN0YW5kYXJkIGhlYWRlciBmb3IgUG93ZXJQQyBIVE0gLS0tLS0tLS0tLS0tLS0tPT09KlwKLSAqCi0gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5Ci0gKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAotICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cwotICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAotICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCi0gKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgotICoKLSAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCi0gKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KLSAqCi0gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgotICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCi0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKLSAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCi0gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCi0gKiBUSEUgU09GVFdBUkUuCi0gKgotXCo9PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09Ki8KLQotI2lmbmRlZiBfX0hUTUlOVFJJTl9ICi0jZGVmaW5lIF9fSFRNSU5UUklOX0gKLQotI2lmbmRlZiBfX0hUTV9fCi0jZXJyb3IgIkhUTSBpbnN0cnVjdGlvbiBzZXQgbm90IGVuYWJsZWQiCi0jZW5kaWYKLQotI2lmZGVmIF9fcG93ZXJwY19fCi0KLSNpbmNsdWRlIDxzdGRpbnQuaD4KLQotdHlwZWRlZiB1aW50NjRfdCB0ZXhhc3JfdDsKLXR5cGVkZWYgdWludDMyX3QgdGV4YXNydV90OwotdHlwZWRlZiB1aW50MzJfdCB0ZXhhc3JsX3Q7Ci10eXBlZGVmIHVpbnRwdHJfdCB0Zmlhcl90OwotdHlwZWRlZiB1aW50cHRyX3QgdGZoYXJfdDsKLQotI2RlZmluZSBfSFRNX1NUQVRFKENSMCkgKChDUjAgPj4gMSkgJiAweDMpCi0jZGVmaW5lIF9IVE1fTk9OVFJBTlNBQ1RJT05BTCAweDAKLSNkZWZpbmUgX0hUTV9TVVNQRU5ERUQgICAgICAgIDB4MQotI2RlZmluZSBfSFRNX1RSQU5TQUNUSU9OQUwgICAgMHgyCi0KLSNkZWZpbmUgX1RFWEFTUl9FWFRSQUNUX0JJVFMoVEVYQVNSLEJJVE5VTSxTSVpFKSBcCi0gICgoKFRFWEFTUikgPj4gKDYzLShCSVROVU0pKSkgJiAoKDE8PChTSVpFKSktMSkpCi0jZGVmaW5lIF9URVhBU1JVX0VYVFJBQ1RfQklUUyhURVhBU1IsQklUTlVNLFNJWkUpIFwKLSAgKCgoVEVYQVNSKSA+PiAoMzEtKEJJVE5VTSkpKSAmICgoMTw8KFNJWkUpKS0xKSkKLQotI2RlZmluZSBfVEVYQVNSX0ZBSUxVUkVfQ09ERShURVhBU1IpIFwKLSAgX1RFWEFTUl9FWFRSQUNUX0JJVFMoVEVYQVNSLCA3LCA4KQotI2RlZmluZSBfVEVYQVNSVV9GQUlMVVJFX0NPREUoVEVYQVNSVSkgXAotICBfVEVYQVNSVV9FWFRSQUNUX0JJVFMoVEVYQVNSVSwgNywgOCkKLQotI2RlZmluZSBfVEVYQVNSX0ZBSUxVUkVfUEVSU0lTVEVOVChURVhBU1IpIFwKLSAgX1RFWEFTUl9FWFRSQUNUX0JJVFMoVEVYQVNSLCA3LCAxKQotI2RlZmluZSBfVEVYQVNSVV9GQUlMVVJFX1BFUlNJU1RFTlQoVEVYQVNSVSkgXAotICBfVEVYQVNSVV9FWFRSQUNUX0JJVFMoVEVYQVNSVSwgNywgMSkKLQotI2RlZmluZSBfVEVYQVNSX0RJU0FMTE9XRUQoVEVYQVNSKSBcCi0gIF9URVhBU1JfRVhUUkFDVF9CSVRTKFRFWEFTUiwgOCwgMSkKLSNkZWZpbmUgX1RFWEFTUlVfRElTQUxMT1dFRChURVhBU1JVKSBcCi0gIF9URVhBU1JVX0VYVFJBQ1RfQklUUyhURVhBU1JVLCA4LCAxKQotCi0jZGVmaW5lIF9URVhBU1JfTkVTVElOR19PVkVSRkxPVyhURVhBU1IpIFwKLSAgX1RFWEFTUl9FWFRSQUNUX0JJVFMoVEVYQVNSLCA5LCAxKQotI2RlZmluZSBfVEVYQVNSVV9ORVNUSU5HX09WRVJGTE9XKFRFWEFTUlUpIFwKLSAgX1RFWEFTUlVfRVhUUkFDVF9CSVRTKFRFWEFTUlUsIDksIDEpCi0KLSNkZWZpbmUgX1RFWEFTUl9GT09UUFJJTlRfT1ZFUkZMT1coVEVYQVNSKSBcCi0gIF9URVhBU1JfRVhUUkFDVF9CSVRTKFRFWEFTUiwgMTAsIDEpCi0jZGVmaW5lIF9URVhBU1JVX0ZPT1RQUklOVF9PVkVSRkxPVyhURVhBU1JVKSBcCi0gIF9URVhBU1JVX0VYVFJBQ1RfQklUUyhURVhBU1JVLCAxMCwgMSkKLQotI2RlZmluZSBfVEVYQVNSX1NFTEZfSU5EVUNFRF9DT05GTElDVChURVhBU1IpIFwKLSAgX1RFWEFTUl9FWFRSQUNUX0JJVFMoVEVYQVNSLCAxMSwgMSkKLSNkZWZpbmUgX1RFWEFTUlVfU0VMRl9JTkRVQ0VEX0NPTkZMSUNUKFRFWEFTUlUpIFwKLSAgX1RFWEFTUlVfRVhUUkFDVF9CSVRTKFRFWEFTUlUsIDExLCAxKQotCi0jZGVmaW5lIF9URVhBU1JfTk9OX1RSQU5TQUNUSU9OQUxfQ09ORkxJQ1QoVEVYQVNSKSBcCi0gIF9URVhBU1JfRVhUUkFDVF9CSVRTKFRFWEFTUiwgMTIsIDEpCi0jZGVmaW5lIF9URVhBU1JVX05PTl9UUkFOU0FDVElPTkFMX0NPTkZMSUNUKFRFWEFTUlUpIFwKLSAgX1RFWEFTUlVfRVhUUkFDVF9CSVRTKFRFWEFTUlUsIDEyLCAxKQotCi0jZGVmaW5lIF9URVhBU1JfVFJBTlNBQ1RJT05fQ09ORkxJQ1QoVEVYQVNSKSBcCi0gIF9URVhBU1JfRVhUUkFDVF9CSVRTKFRFWEFTUiwgMTMsIDEpCi0jZGVmaW5lIF9URVhBU1JVX1RSQU5TQUNUSU9OX0NPTkZMSUNUKFRFWEFTUlUpIFwKLSAgX1RFWEFTUlVfRVhUUkFDVF9CSVRTKFRFWEFTUlUsIDEzLCAxKQotCi0jZGVmaW5lIF9URVhBU1JfVFJBTlNMQVRJT05fSU5WQUxJREFUSU9OX0NPTkZMSUNUKFRFWEFTUikgXAotICBfVEVYQVNSX0VYVFJBQ1RfQklUUyhURVhBU1IsIDE0LCAxKQotI2RlZmluZSBfVEVYQVNSVV9UUkFOU0xBVElPTl9JTlZBTElEQVRJT05fQ09ORkxJQ1QoVEVYQVNSVSkgXAotICBfVEVYQVNSVV9FWFRSQUNUX0JJVFMoVEVYQVNSVSwgMTQsIDEpCi0KLSNkZWZpbmUgX1RFWEFTUl9JTVBMRU1FTlRBSU9OX1NQRUNJRklDKFRFWEFTUikgXAotICBfVEVYQVNSX0VYVFJBQ1RfQklUUyhURVhBU1IsIDE1LCAxKQotI2RlZmluZSBfVEVYQVNSVV9JTVBMRU1FTlRBSU9OX1NQRUNJRklDKFRFWEFTUlUpIFwKLSAgX1RFWEFTUlVfRVhUUkFDVF9CSVRTKFRFWEFTUlUsIDE1LCAxKQotCi0jZGVmaW5lIF9URVhBU1JfSU5TVFJVQ1RJT05fRkVUQ0hfQ09ORkxJQ1QoVEVYQVNSKSBcCi0gIF9URVhBU1JfRVhUUkFDVF9CSVRTKFRFWEFTUiwgMTYsIDEpCi0jZGVmaW5lIF9URVhBU1JVX0lOU1RSVUNUSU9OX0ZFVENIX0NPTkZMSUNUKFRFWEFTUlUpIFwKLSAgX1RFWEFTUlVfRVhUUkFDVF9CSVRTKFRFWEFTUlUsIDE2LCAxKQotCi0jZGVmaW5lIF9URVhBU1JfQUJPUlQoVEVYQVNSKSBcCi0gIF9URVhBU1JfRVhUUkFDVF9CSVRTKFRFWEFTUiwgMzEsIDEpCi0jZGVmaW5lIF9URVhBU1JVX0FCT1JUKFRFWEFTUlUpIFwKLSAgX1RFWEFTUlVfRVhUUkFDVF9CSVRTKFRFWEFTUlUsIDMxLCAxKQotCi0KLSNkZWZpbmUgX1RFWEFTUl9TVVNQRU5ERUQoVEVYQVNSKSBcCi0gIF9URVhBU1JfRVhUUkFDVF9CSVRTKFRFWEFTUiwgMzIsIDEpCi0KLSNkZWZpbmUgX1RFWEFTUl9QUklWSUxFR0UoVEVYQVNSKSBcCi0gIF9URVhBU1JfRVhUUkFDVF9CSVRTKFRFWEFTUiwgMzUsIDIpCi0KLSNkZWZpbmUgX1RFWEFTUl9GQUlMVVJFX1NVTU1BUlkoVEVYQVNSKSBcCi0gIF9URVhBU1JfRVhUUkFDVF9CSVRTKFRFWEFTUiwgMzYsIDEpCi0KLSNkZWZpbmUgX1RFWEFTUl9URklBUl9FWEFDVChURVhBU1IpIFwKLSAgX1RFWEFTUl9FWFRSQUNUX0JJVFMoVEVYQVNSLCAzNywgMSkKLQotI2RlZmluZSBfVEVYQVNSX1JPVChURVhBU1IpIFwKLSAgX1RFWEFTUl9FWFRSQUNUX0JJVFMoVEVYQVNSLCAzOCwgMSkKLQotI2RlZmluZSBfVEVYQVNSX1RSQU5TQUNUSU9OX0xFVkVMKFRFWEFTUikgXAotICBfVEVYQVNSX0VYVFJBQ1RfQklUUyhURVhBU1IsIDYzLCAxMikKLQotI2VuZGlmIC8qIF9fcG93ZXJwYyAqLwotCi0jaWZkZWYgX19zMzkwX18KLQotLyogQ29uZGl0aW9uIGNvZGVzIGdlbmVyYXRlZCBieSB0YmVnaW4gICovCi0jZGVmaW5lIF9IVE1fVEJFR0lOX1NUQVJURUQgICAgICAgMAotI2RlZmluZSBfSFRNX1RCRUdJTl9JTkRFVEVSTUlOQVRFIDEKLSNkZWZpbmUgX0hUTV9UQkVHSU5fVFJBTlNJRU5UICAgICAyCi0jZGVmaW5lIF9IVE1fVEJFR0lOX1BFUlNJU1RFTlQgICAgMwotCi0vKiBUaGUgYWJvcnQgY29kZXMgYmVsb3cgdGhpcyB0aHJlc2hvbGQgYXJlIHJlc2VydmVkIGZvciBtYWNoaW5lIHVzZS4gICovCi0jZGVmaW5lIF9IVE1fRklSU1RfVVNFUl9BQk9SVF9DT0RFIDI1NgotCi0vKiBUaGUgdHJhbnNhY3Rpb24gZGlhZ25vc3RpYyBibG9jayBpcyBpdCBpcyBkZWZpbmVkIGluIHRoZSBQcmluY2lwbGVzCi0gICBvZiBPcGVyYXRpb24gY2hhcHRlciA1LTkxLiAgKi8KLQotc3RydWN0IF9faHRtX3RkYiB7Ci0gIHVuc2lnbmVkIGNoYXIgZm9ybWF0OyAgICAgICAgICAgICAgICAvKiAgIDAgKi8KLSAgdW5zaWduZWQgY2hhciBmbGFnczsKLSAgdW5zaWduZWQgY2hhciByZXNlcnZlZDFbNF07Ci0gIHVuc2lnbmVkIHNob3J0IG5lc3RpbmdfZGVwdGg7Ci0gIHVuc2lnbmVkIGxvbmcgbG9uZyBhYm9ydF9jb2RlOyAgICAgICAvKiAgIDggKi8KLSAgdW5zaWduZWQgbG9uZyBsb25nIGNvbmZsaWN0X3Rva2VuOyAgIC8qICAxNiAqLwotICB1bnNpZ25lZCBsb25nIGxvbmcgYXRpYTsgICAgICAgICAgICAgLyogIDI0ICovCi0gIHVuc2lnbmVkIGNoYXIgZWFpZDsgICAgICAgICAgICAgICAgICAvKiAgMzIgKi8KLSAgdW5zaWduZWQgY2hhciBkeGM7Ci0gIHVuc2lnbmVkIGNoYXIgcmVzZXJ2ZWQyWzJdOwotICB1bnNpZ25lZCBpbnQgcHJvZ3JhbV9pbnRfaWQ7Ci0gIHVuc2lnbmVkIGxvbmcgbG9uZyBleGNlcHRpb25faWQ7ICAgICAvKiAgNDAgKi8KLSAgdW5zaWduZWQgbG9uZyBsb25nIGJlYTsgICAgICAgICAgICAgIC8qICA0OCAqLwotICB1bnNpZ25lZCBjaGFyIHJlc2VydmVkM1s3Ml07ICAgICAgICAgLyogIDU2ICovCi0gIHVuc2lnbmVkIGxvbmcgbG9uZyBncHJzWzE2XTsgICAgICAgICAvKiAxMjggKi8KLX0gX19hdHRyaWJ1dGVfXygoX19wYWNrZWRfXywgX19hbGlnbmVkX18gKDgpKSk7Ci0KLQotLyogSGVscGVyIGludHJpbnNpY3MgdG8gcmV0cnkgdGJlZ2luIGluIGNhc2Ugb2YgdHJhbnNpZW50IGZhaWx1cmUuICAqLwotCi1zdGF0aWMgX19pbmxpbmUgaW50IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXykpCi1fX2J1aWx0aW5fdGJlZ2luX3JldHJ5X251bGwgKGludCByZXRyeSkKLXsKLSAgaW50IGNjLCBpID0gMDsKLQotICB3aGlsZSAoKGNjID0gX19idWlsdGluX3RiZWdpbigwKSkgPT0gX0hUTV9UQkVHSU5fVFJBTlNJRU5UCi0gICAgICAgICAmJiBpKysgPCByZXRyeSkKLSAgICBfX2J1aWx0aW5fdHhfYXNzaXN0KGkpOwotCi0gIHJldHVybiBjYzsKLX0KLQotc3RhdGljIF9faW5saW5lIGludCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18pKQotX19idWlsdGluX3RiZWdpbl9yZXRyeV90ZGIgKHZvaWQgKnRkYiwgaW50IHJldHJ5KQotewotICBpbnQgY2MsIGkgPSAwOwotCi0gIHdoaWxlICgoY2MgPSBfX2J1aWx0aW5fdGJlZ2luKHRkYikpID09IF9IVE1fVEJFR0lOX1RSQU5TSUVOVAotICAgICAgICAgJiYgaSsrIDwgcmV0cnkpCi0gICAgX19idWlsdGluX3R4X2Fzc2lzdChpKTsKLQotICByZXR1cm4gY2M7Ci19Ci0KLSNkZWZpbmUgX19idWlsdGluX3RiZWdpbl9yZXRyeSh0ZGIsIHJldHJ5KSBcCi0gIChfX2J1aWx0aW5fY29uc3RhbnRfcCh0ZGIgPT0gMCkgJiYgdGRiID09IDAgPyBcCi0gICBfX2J1aWx0aW5fdGJlZ2luX3JldHJ5X251bGwocmV0cnkpIDogXAotICAgX19idWlsdGluX3RiZWdpbl9yZXRyeV90ZGIodGRiLCByZXRyeSkpCi0KLXN0YXRpYyBfX2lubGluZSBpbnQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fKSkKLV9fYnVpbHRpbl90YmVnaW5fcmV0cnlfbm9mbG9hdF9udWxsIChpbnQgcmV0cnkpCi17Ci0gIGludCBjYywgaSA9IDA7Ci0KLSAgd2hpbGUgKChjYyA9IF9fYnVpbHRpbl90YmVnaW5fbm9mbG9hdCgwKSkgPT0gX0hUTV9UQkVHSU5fVFJBTlNJRU5UCi0gICAgICAgICAmJiBpKysgPCByZXRyeSkKLSAgICBfX2J1aWx0aW5fdHhfYXNzaXN0KGkpOwotCi0gIHJldHVybiBjYzsKLX0KLQotc3RhdGljIF9faW5saW5lIGludCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18pKQotX19idWlsdGluX3RiZWdpbl9yZXRyeV9ub2Zsb2F0X3RkYiAodm9pZCAqdGRiLCBpbnQgcmV0cnkpCi17Ci0gIGludCBjYywgaSA9IDA7Ci0KLSAgd2hpbGUgKChjYyA9IF9fYnVpbHRpbl90YmVnaW5fbm9mbG9hdCh0ZGIpKSA9PSBfSFRNX1RCRUdJTl9UUkFOU0lFTlQKLSAgICAgICAgICYmIGkrKyA8IHJldHJ5KQotICAgIF9fYnVpbHRpbl90eF9hc3Npc3QoaSk7Ci0KLSAgcmV0dXJuIGNjOwotfQotCi0jZGVmaW5lIF9fYnVpbHRpbl90YmVnaW5fcmV0cnlfbm9mbG9hdCh0ZGIsIHJldHJ5KSBcCi0gIChfX2J1aWx0aW5fY29uc3RhbnRfcCh0ZGIgPT0gMCkgJiYgdGRiID09IDAgPyBcCi0gICBfX2J1aWx0aW5fdGJlZ2luX3JldHJ5X25vZmxvYXRfbnVsbChyZXRyeSkgOiBcCi0gICBfX2J1aWx0aW5fdGJlZ2luX3JldHJ5X25vZmxvYXRfdGRiKHRkYiwgcmV0cnkpKQotCi0jZW5kaWYgLyogX19zMzkwX18gKi8KLQotI2VuZGlmIC8qIF9fSFRNSU5UUklOX0ggKi8KZGlmZiAtLWdpdCBhL2NsYW5nLTI1NzcxMTMvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvaHRteGxpbnRyaW4uaCBiL2NsYW5nLTI1NzcxMTMvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvaHRteGxpbnRyaW4uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzc1NzFlYy4uMDAwMDAwMAotLS0gYS9jbGFuZy0yNTc3MTEzL2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL2h0bXhsaW50cmluLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzNjMgKzAsMCBAQAotLyo9PT0tLS0tIGh0bXhsaW50cmluLmggLSBYTCBjb21waWxlciBIVE0gZXhlY3V0aW9uIGludHJpbnNpY3MtLS0tLS0tLS0tLS0tPT09KlwKLSAqCi0gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5Ci0gKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAotICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cwotICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAotICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCi0gKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgotICoKLSAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCi0gKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KLSAqCi0gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgotICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCi0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKLSAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCi0gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCi0gKiBUSEUgU09GVFdBUkUuCi0gKgotXCo9PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09Ki8KLQotI2lmbmRlZiBfX0hUTVhMSU5UUklOX0gKLSNkZWZpbmUgX19IVE1YTElOVFJJTl9ICi0KLSNpZm5kZWYgX19IVE1fXwotI2Vycm9yICJIVE0gaW5zdHJ1Y3Rpb24gc2V0IG5vdCBlbmFibGVkIgotI2VuZGlmCi0KLSNpbmNsdWRlIDxodG1pbnRyaW4uaD4KLQotI2lmZGVmIF9fcG93ZXJwY19fCi0KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIiB7Ci0jZW5kaWYKLQotI2RlZmluZSBfVEVYQVNSX1BUUihUTV9CVUYpIFwKLSAgKCh0ZXhhc3JfdCAqKSgoVE1fQlVGKSswKSkKLSNkZWZpbmUgX1RFWEFTUlVfUFRSKFRNX0JVRikgXAotICAoKHRleGFzcnVfdCAqKSgoVE1fQlVGKSswKSkKLSNkZWZpbmUgX1RFWEFTUkxfUFRSKFRNX0JVRikgXAotICAoKHRleGFzcmxfdCAqKSgoVE1fQlVGKSs0KSkKLSNkZWZpbmUgX1RGSUFSX1BUUihUTV9CVUYpIFwKLSAgKCh0Zmlhcl90ICopKChUTV9CVUYpKzgpKQotCi10eXBlZGVmIGNoYXIgVE1fYnVmZl90eXBlWzE2XTsKLQotLyogVGhpcyBtYWNybyBjYW4gYmUgdXNlZCB0byBkZXRlcm1pbmUgd2hldGhlciBhIHRyYW5zYWN0aW9uIHdhcyBzdWNjZXNzZnVsbHkKLSAgIHN0YXJ0ZWQgZnJvbSB0aGUgX19UTV9iZWdpbigpIGFuZCBfX1RNX3NpbXBsZV9iZWdpbigpIGludHJpbnNpYyBmdW5jdGlvbnMKLSAgIGJlbG93LiAgKi8KLSNkZWZpbmUgX0hUTV9UQkVHSU5fU1RBUlRFRCAgICAgMQotCi1leHRlcm4gX19pbmxpbmUgbG9uZwotX19hdHRyaWJ1dGVfXyAoKF9fZ251X2lubGluZV9fLCBfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQotX19UTV9zaW1wbGVfYmVnaW4gKHZvaWQpCi17Ci0gIGlmIChfX2J1aWx0aW5fZXhwZWN0IChfX2J1aWx0aW5fdGJlZ2luICgwKSwgMSkpCi0gICAgcmV0dXJuIF9IVE1fVEJFR0lOX1NUQVJURUQ7Ci0gIHJldHVybiAwOwotfQotCi1leHRlcm4gX19pbmxpbmUgbG9uZwotX19hdHRyaWJ1dGVfXyAoKF9fZ251X2lubGluZV9fLCBfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQotX19UTV9iZWdpbiAodm9pZCogY29uc3QgVE1fYnVmZikKLXsKLSAgKl9URVhBU1JMX1BUUiAoVE1fYnVmZikgPSAwOwotICBpZiAoX19idWlsdGluX2V4cGVjdCAoX19idWlsdGluX3RiZWdpbiAoMCksIDEpKQotICAgIHJldHVybiBfSFRNX1RCRUdJTl9TVEFSVEVEOwotI2lmZGVmIF9fcG93ZXJwYzY0X18KLSAgKl9URVhBU1JfUFRSIChUTV9idWZmKSA9IF9fYnVpbHRpbl9nZXRfdGV4YXNyICgpOwotI2Vsc2UKLSAgKl9URVhBU1JVX1BUUiAoVE1fYnVmZikgPSBfX2J1aWx0aW5fZ2V0X3RleGFzcnUgKCk7Ci0gICpfVEVYQVNSTF9QVFIgKFRNX2J1ZmYpID0gX19idWlsdGluX2dldF90ZXhhc3IgKCk7Ci0jZW5kaWYKLSAgKl9URklBUl9QVFIgKFRNX2J1ZmYpID0gX19idWlsdGluX2dldF90ZmlhciAoKTsKLSAgcmV0dXJuIDA7Ci19Ci0KLWV4dGVybiBfX2lubGluZSBsb25nCi1fX2F0dHJpYnV0ZV9fICgoX19nbnVfaW5saW5lX18sIF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCi1fX1RNX2VuZCAodm9pZCkKLXsKLSAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKF9fYnVpbHRpbl90ZW5kICgwKSwgMSkpCi0gICAgcmV0dXJuIDE7Ci0gIHJldHVybiAwOwotfQotCi1leHRlcm4gX19pbmxpbmUgdm9pZAotX19hdHRyaWJ1dGVfXyAoKF9fZ251X2lubGluZV9fLCBfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQotX19UTV9hYm9ydCAodm9pZCkKLXsKLSAgX19idWlsdGluX3RhYm9ydCAoMCk7Ci19Ci0KLWV4dGVybiBfX2lubGluZSB2b2lkCi1fX2F0dHJpYnV0ZV9fICgoX19nbnVfaW5saW5lX18sIF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCi1fX1RNX25hbWVkX2Fib3J0ICh1bnNpZ25lZCBjaGFyIGNvbnN0IGNvZGUpCi17Ci0gIF9fYnVpbHRpbl90YWJvcnQgKGNvZGUpOwotfQotCi1leHRlcm4gX19pbmxpbmUgdm9pZAotX19hdHRyaWJ1dGVfXyAoKF9fZ251X2lubGluZV9fLCBfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQotX19UTV9yZXN1bWUgKHZvaWQpCi17Ci0gIF9fYnVpbHRpbl90cmVzdW1lICgpOwotfQotCi1leHRlcm4gX19pbmxpbmUgdm9pZAotX19hdHRyaWJ1dGVfXyAoKF9fZ251X2lubGluZV9fLCBfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQotX19UTV9zdXNwZW5kICh2b2lkKQotewotICBfX2J1aWx0aW5fdHN1c3BlbmQgKCk7Ci19Ci0KLWV4dGVybiBfX2lubGluZSBsb25nCi1fX2F0dHJpYnV0ZV9fICgoX19nbnVfaW5saW5lX18sIF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCi1fX1RNX2lzX3VzZXJfYWJvcnQgKHZvaWQqIGNvbnN0IFRNX2J1ZmYpCi17Ci0gIHRleGFzcnVfdCB0ZXhhc3J1ID0gKl9URVhBU1JVX1BUUiAoVE1fYnVmZik7Ci0gIHJldHVybiBfVEVYQVNSVV9BQk9SVCAodGV4YXNydSk7Ci19Ci0KLWV4dGVybiBfX2lubGluZSBsb25nCi1fX2F0dHJpYnV0ZV9fICgoX19nbnVfaW5saW5lX18sIF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCi1fX1RNX2lzX25hbWVkX3VzZXJfYWJvcnQgKHZvaWQqIGNvbnN0IFRNX2J1ZmYsIHVuc2lnbmVkIGNoYXIgKmNvZGUpCi17Ci0gIHRleGFzcnVfdCB0ZXhhc3J1ID0gKl9URVhBU1JVX1BUUiAoVE1fYnVmZik7Ci0KLSAgKmNvZGUgPSBfVEVYQVNSVV9GQUlMVVJFX0NPREUgKHRleGFzcnUpOwotICByZXR1cm4gX1RFWEFTUlVfQUJPUlQgKHRleGFzcnUpOwotfQotCi1leHRlcm4gX19pbmxpbmUgbG9uZwotX19hdHRyaWJ1dGVfXyAoKF9fZ251X2lubGluZV9fLCBfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQotX19UTV9pc19pbGxlZ2FsICh2b2lkKiBjb25zdCBUTV9idWZmKQotewotICB0ZXhhc3J1X3QgdGV4YXNydSA9ICpfVEVYQVNSVV9QVFIgKFRNX2J1ZmYpOwotICByZXR1cm4gX1RFWEFTUlVfRElTQUxMT1dFRCAodGV4YXNydSk7Ci19Ci0KLWV4dGVybiBfX2lubGluZSBsb25nCi1fX2F0dHJpYnV0ZV9fICgoX19nbnVfaW5saW5lX18sIF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCi1fX1RNX2lzX2Zvb3RwcmludF9leGNlZWRlZCAodm9pZCogY29uc3QgVE1fYnVmZikKLXsKLSAgdGV4YXNydV90IHRleGFzcnUgPSAqX1RFWEFTUlVfUFRSIChUTV9idWZmKTsKLSAgcmV0dXJuIF9URVhBU1JVX0ZPT1RQUklOVF9PVkVSRkxPVyAodGV4YXNydSk7Ci19Ci0KLWV4dGVybiBfX2lubGluZSBsb25nCi1fX2F0dHJpYnV0ZV9fICgoX19nbnVfaW5saW5lX18sIF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCi1fX1RNX25lc3RpbmdfZGVwdGggKHZvaWQqIGNvbnN0IFRNX2J1ZmYpCi17Ci0gIHRleGFzcmxfdCB0ZXhhc3JsOwotCi0gIGlmIChfSFRNX1NUQVRFIChfX2J1aWx0aW5fdHRlc3QgKCkpID09IF9IVE1fTk9OVFJBTlNBQ1RJT05BTCkKLSAgICB7Ci0gICAgICB0ZXhhc3JsID0gKl9URVhBU1JMX1BUUiAoVE1fYnVmZik7Ci0gICAgICBpZiAoIV9URVhBU1JfRkFJTFVSRV9TVU1NQVJZICh0ZXhhc3JsKSkKLSAgICAgICAgdGV4YXNybCA9IDA7Ci0gICAgfQotICBlbHNlCi0gICAgdGV4YXNybCA9ICh0ZXhhc3JsX3QpIF9fYnVpbHRpbl9nZXRfdGV4YXNyICgpOwotCi0gIHJldHVybiBfVEVYQVNSX1RSQU5TQUNUSU9OX0xFVkVMICh0ZXhhc3JsKTsKLX0KLQotZXh0ZXJuIF9faW5saW5lIGxvbmcKLV9fYXR0cmlidXRlX18gKChfX2dudV9pbmxpbmVfXywgX19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKLV9fVE1faXNfbmVzdGVkX3Rvb19kZWVwKHZvaWQqIGNvbnN0IFRNX2J1ZmYpCi17Ci0gIHRleGFzcnVfdCB0ZXhhc3J1ID0gKl9URVhBU1JVX1BUUiAoVE1fYnVmZik7Ci0gIHJldHVybiBfVEVYQVNSVV9ORVNUSU5HX09WRVJGTE9XICh0ZXhhc3J1KTsKLX0KLQotZXh0ZXJuIF9faW5saW5lIGxvbmcKLV9fYXR0cmlidXRlX18gKChfX2dudV9pbmxpbmVfXywgX19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKLV9fVE1faXNfY29uZmxpY3Qodm9pZCogY29uc3QgVE1fYnVmZikKLXsKLSAgdGV4YXNydV90IHRleGFzcnUgPSAqX1RFWEFTUlVfUFRSIChUTV9idWZmKTsKLSAgLyogUmV0dXJuIFRFWEFTUiBiaXRzIDExIChTZWxmLUluZHVjZWQgQ29uZmxpY3QpIHRocm91Z2gKLSAgICAgMTQgKFRyYW5zbGF0aW9uIEludmFsaWRhdGlvbiBDb25mbGljdCkuICAqLwotICByZXR1cm4gKF9URVhBU1JVX0VYVFJBQ1RfQklUUyAodGV4YXNydSwgMTQsIDQpKSA/IDEgOiAwOwotfQotCi1leHRlcm4gX19pbmxpbmUgbG9uZwotX19hdHRyaWJ1dGVfXyAoKF9fZ251X2lubGluZV9fLCBfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQotX19UTV9pc19mYWlsdXJlX3BlcnNpc3RlbnQodm9pZCogY29uc3QgVE1fYnVmZikKLXsKLSAgdGV4YXNydV90IHRleGFzcnUgPSAqX1RFWEFTUlVfUFRSIChUTV9idWZmKTsKLSAgcmV0dXJuIF9URVhBU1JVX0ZBSUxVUkVfUEVSU0lTVEVOVCAodGV4YXNydSk7Ci19Ci0KLWV4dGVybiBfX2lubGluZSBsb25nCi1fX2F0dHJpYnV0ZV9fICgoX19nbnVfaW5saW5lX18sIF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCi1fX1RNX2ZhaWx1cmVfYWRkcmVzcyh2b2lkKiBjb25zdCBUTV9idWZmKQotewotICByZXR1cm4gKl9URklBUl9QVFIgKFRNX2J1ZmYpOwotfQotCi1leHRlcm4gX19pbmxpbmUgbG9uZyBsb25nCi1fX2F0dHJpYnV0ZV9fICgoX19nbnVfaW5saW5lX18sIF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCi1fX1RNX2ZhaWx1cmVfY29kZSh2b2lkKiBjb25zdCBUTV9idWZmKQotewotICByZXR1cm4gKl9URVhBU1JfUFRSIChUTV9idWZmKTsKLX0KLQotI2lmZGVmIF9fY3BsdXNwbHVzCi19Ci0jZW5kaWYKLQotI2VuZGlmIC8qIF9fcG93ZXJwY19fICovCi0KLSNpZmRlZiBfX3MzOTBfXwotCi0jaW5jbHVkZSA8c3RkaW50Lmg+Ci0KLS8qIFRoZXNlIGludHJpbnNpY3MgYXJlIGJlaW5nIG1hZGUgYXZhaWxhYmxlIGZvciBjb21wYXRpYmlsaXR5IHdpdGgKLSAgIHRoZSBJQk0gWEwgY29tcGlsZXIuICBGb3IgZG9jdW1lbnRhdGlvbiBwbGVhc2Ugc2VlIHRoZSAiei9PUyBYTAotICAgQy9DKysgUHJvZ3JhbW1pbmcgR3VpZGUiIHB1YmxpY2FsbHkgYXZhaWxhYmxlIG9uIHRoZSB3ZWIuICAqLwotCi1zdGF0aWMgX19pbmxpbmUgbG9uZyBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18pKQotX19UTV9zaW1wbGVfYmVnaW4gKCkKLXsKLSAgcmV0dXJuIF9fYnVpbHRpbl90YmVnaW5fbm9mbG9hdCAoMCk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZSBsb25nIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXykpCi1fX1RNX2JlZ2luICh2b2lkKiBjb25zdCB0ZGIpCi17Ci0gIHJldHVybiBfX2J1aWx0aW5fdGJlZ2luX25vZmxvYXQgKHRkYik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZSBsb25nIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXykpCi1fX1RNX2VuZCAoKQotewotICByZXR1cm4gX19idWlsdGluX3RlbmQgKCk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZSB2b2lkIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKLV9fVE1fYWJvcnQgKCkKLXsKLSAgcmV0dXJuIF9fYnVpbHRpbl90YWJvcnQgKF9IVE1fRklSU1RfVVNFUl9BQk9SVF9DT0RFKTsKLX0KLQotc3RhdGljIF9faW5saW5lIHZvaWQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fKSkKLV9fVE1fbmFtZWRfYWJvcnQgKHVuc2lnbmVkIGNoYXIgY29uc3QgY29kZSkKLXsKLSAgcmV0dXJuIF9fYnVpbHRpbl90YWJvcnQgKChpbnQpX0hUTV9GSVJTVF9VU0VSX0FCT1JUX0NPREUgKyBjb2RlKTsKLX0KLQotc3RhdGljIF9faW5saW5lIHZvaWQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fKSkKLV9fVE1fbm9uX3RyYW5zYWN0aW9uYWxfc3RvcmUgKHZvaWQqIGNvbnN0IGFkZHIsIGxvbmcgbG9uZyBjb25zdCB2YWx1ZSkKLXsKLSAgX19idWlsdGluX25vbl90eF9zdG9yZSAoKHVpbnQ2NF90KilhZGRyLCAodWludDY0X3QpdmFsdWUpOwotfQotCi1zdGF0aWMgX19pbmxpbmUgbG9uZyBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18pKQotX19UTV9uZXN0aW5nX2RlcHRoICh2b2lkKiBjb25zdCB0ZGJfcHRyKQotewotICBpbnQgZGVwdGggPSBfX2J1aWx0aW5fdHhfbmVzdGluZ19kZXB0aCAoKTsKLSAgc3RydWN0IF9faHRtX3RkYiAqdGRiID0gKHN0cnVjdCBfX2h0bV90ZGIqKXRkYl9wdHI7Ci0KLSAgaWYgKGRlcHRoICE9IDApCi0gICAgcmV0dXJuIGRlcHRoOwotCi0gIGlmICh0ZGItPmZvcm1hdCAhPSAxKQotICAgIHJldHVybiAwOwotICByZXR1cm4gdGRiLT5uZXN0aW5nX2RlcHRoOwotfQotCi0vKiBUcmFuc2FjdGlvbiBmYWlsdXJlIGRpYWdub3N0aWNzICovCi0KLXN0YXRpYyBfX2lubGluZSBsb25nIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXykpCi1fX1RNX2lzX3VzZXJfYWJvcnQgKHZvaWQqIGNvbnN0IHRkYl9wdHIpCi17Ci0gIHN0cnVjdCBfX2h0bV90ZGIgKnRkYiA9IChzdHJ1Y3QgX19odG1fdGRiKil0ZGJfcHRyOwotCi0gIGlmICh0ZGItPmZvcm1hdCAhPSAxKQotICAgIHJldHVybiAwOwotCi0gIHJldHVybiAhISh0ZGItPmFib3J0X2NvZGUgPj0gX0hUTV9GSVJTVF9VU0VSX0FCT1JUX0NPREUpOwotfQotCi1zdGF0aWMgX19pbmxpbmUgbG9uZyBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18pKQotX19UTV9pc19uYW1lZF91c2VyX2Fib3J0ICh2b2lkKiBjb25zdCB0ZGJfcHRyLCB1bnNpZ25lZCBjaGFyKiBjb2RlKQotewotICBzdHJ1Y3QgX19odG1fdGRiICp0ZGIgPSAoc3RydWN0IF9faHRtX3RkYiopdGRiX3B0cjsKLQotICBpZiAodGRiLT5mb3JtYXQgIT0gMSkKLSAgICByZXR1cm4gMDsKLQotICBpZiAodGRiLT5hYm9ydF9jb2RlID49IF9IVE1fRklSU1RfVVNFUl9BQk9SVF9DT0RFKQotICAgIHsKLSAgICAgICpjb2RlID0gdGRiLT5hYm9ydF9jb2RlIC0gX0hUTV9GSVJTVF9VU0VSX0FCT1JUX0NPREU7Ci0gICAgICByZXR1cm4gMTsKLSAgICB9Ci0gIHJldHVybiAwOwotfQotCi1zdGF0aWMgX19pbmxpbmUgbG9uZyBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18pKQotX19UTV9pc19pbGxlZ2FsICh2b2lkKiBjb25zdCB0ZGJfcHRyKQotewotICBzdHJ1Y3QgX19odG1fdGRiICp0ZGIgPSAoc3RydWN0IF9faHRtX3RkYiopdGRiX3B0cjsKLQotICByZXR1cm4gKHRkYi0+Zm9ybWF0ID09IDEKLQkgICYmICh0ZGItPmFib3J0X2NvZGUgPT0gNCAvKiB1bmZpbHRlcmVkIHByb2dyYW0gaW50ZXJydXB0aW9uICovCi0JICAgICAgfHwgdGRiLT5hYm9ydF9jb2RlID09IDExIC8qIHJlc3RyaWN0ZWQgaW5zdHJ1Y3Rpb24gKi8pKTsKLX0KLQotc3RhdGljIF9faW5saW5lIGxvbmcgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fKSkKLV9fVE1faXNfZm9vdHByaW50X2V4Y2VlZGVkICh2b2lkKiBjb25zdCB0ZGJfcHRyKQotewotICBzdHJ1Y3QgX19odG1fdGRiICp0ZGIgPSAoc3RydWN0IF9faHRtX3RkYiopdGRiX3B0cjsKLQotICByZXR1cm4gKHRkYi0+Zm9ybWF0ID09IDEKLQkgICYmICh0ZGItPmFib3J0X2NvZGUgPT0gNyAvKiBmZXRjaCBvdmVyZmxvdyAqLwotCSAgICAgIHx8IHRkYi0+YWJvcnRfY29kZSA9PSA4IC8qIHN0b3JlIG92ZXJmbG93ICovKSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZSBsb25nIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXykpCi1fX1RNX2lzX25lc3RlZF90b29fZGVlcCAodm9pZCogY29uc3QgdGRiX3B0cikKLXsKLSAgc3RydWN0IF9faHRtX3RkYiAqdGRiID0gKHN0cnVjdCBfX2h0bV90ZGIqKXRkYl9wdHI7Ci0KLSAgcmV0dXJuIHRkYi0+Zm9ybWF0ID09IDEgJiYgdGRiLT5hYm9ydF9jb2RlID09IDEzOyAvKiBkZXB0aCBleGNlZWRlZCAqLwotfQotCi1zdGF0aWMgX19pbmxpbmUgbG9uZyBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18pKQotX19UTV9pc19jb25mbGljdCAodm9pZCogY29uc3QgdGRiX3B0cikKLXsKLSAgc3RydWN0IF9faHRtX3RkYiAqdGRiID0gKHN0cnVjdCBfX2h0bV90ZGIqKXRkYl9wdHI7Ci0KLSAgcmV0dXJuICh0ZGItPmZvcm1hdCA9PSAxCi0JICAmJiAodGRiLT5hYm9ydF9jb2RlID09IDkgLyogZmV0Y2ggY29uZmxpY3QgKi8KLQkgICAgICB8fCB0ZGItPmFib3J0X2NvZGUgPT0gMTAgLyogc3RvcmUgY29uZmxpY3QgKi8pKTsKLX0KLQotc3RhdGljIF9faW5saW5lIGxvbmcgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fKSkKLV9fVE1faXNfZmFpbHVyZV9wZXJzaXN0ZW50IChsb25nIGNvbnN0IHJlc3VsdCkKLXsKLSAgcmV0dXJuIHJlc3VsdCA9PSBfSFRNX1RCRUdJTl9QRVJTSVNURU5UOwotfQotCi1zdGF0aWMgX19pbmxpbmUgbG9uZyBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18pKQotX19UTV9mYWlsdXJlX2FkZHJlc3MgKHZvaWQqIGNvbnN0IHRkYl9wdHIpCi17Ci0gIHN0cnVjdCBfX2h0bV90ZGIgKnRkYiA9IChzdHJ1Y3QgX19odG1fdGRiKil0ZGJfcHRyOwotICByZXR1cm4gdGRiLT5hdGlhOwotfQotCi1zdGF0aWMgX19pbmxpbmUgbG9uZyBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18pKQotX19UTV9mYWlsdXJlX2NvZGUgKHZvaWQqIGNvbnN0IHRkYl9wdHIpCi17Ci0gIHN0cnVjdCBfX2h0bV90ZGIgKnRkYiA9IChzdHJ1Y3QgX19odG1fdGRiKil0ZGJfcHRyOwotCi0gIHJldHVybiB0ZGItPmFib3J0X2NvZGU7Ci19Ci0KLSNlbmRpZiAvKiBfX3MzOTBfXyAqLwotCi0jZW5kaWYgLyogX19IVE1YTElOVFJJTl9IICAqLwpkaWZmIC0tZ2l0IGEvY2xhbmctMjU3NzExMy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9pYTMyaW50cmluLmggYi9jbGFuZy0yNTc3MTEzL2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL2lhMzJpbnRyaW4uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWFkZjNmMS4uMDAwMDAwMAotLS0gYS9jbGFuZy0yNTc3MTEzL2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL2lhMzJpbnRyaW4uaAorKysgL2Rldi9udWxsCkBAIC0xLDEwMSArMCwwIEBACi0vKiA9PT0tLS0tLS0tLSBpYTMyaW50cmluLmggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09Ci0gKgotICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQotICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKLSAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKLSAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKLSAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcwotICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKLSAqCi0gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgotICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCi0gKgotICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKLSAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAotICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCi0gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAotICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgotICogVEhFIFNPRlRXQVJFLgotICoKLSAqPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KLSAqLwotCi0jaWZuZGVmIF9fWDg2SU5UUklOX0gKLSNlcnJvciAiTmV2ZXIgdXNlIDxpYTMyaW50cmluLmg+IGRpcmVjdGx5OyBpbmNsdWRlIDx4ODZpbnRyaW4uaD4gaW5zdGVhZC4iCi0jZW5kaWYKLQotI2lmbmRlZiBfX0lBMzJJTlRSSU5fSAotI2RlZmluZSBfX0lBMzJJTlRSSU5fSAotCi0jaWZkZWYgX194ODZfNjRfXwotc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgbG9uZyBsb25nIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXykpCi1fX3JlYWRlZmxhZ3Modm9pZCkKLXsKLSAgdW5zaWduZWQgbG9uZyBsb25nIF9fcmVzID0gMDsKLSAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJwdXNoZlxuXHQiCi0gICAgICAgICAgICAgICAgICAgICAgICAicG9wcSAlMFxuIgotICAgICAgICAgICAgICAgICAgICAgICAgOiI9ciIoX19yZXMpCi0gICAgICAgICAgICAgICAgICAgICAgICA6Ci0gICAgICAgICAgICAgICAgICAgICAgICA6Ci0gICAgICAgICAgICAgICAgICAgICAgICk7Ci0gIHJldHVybiBfX3JlczsKLX0KLQotc3RhdGljIF9faW5saW5lX18gdm9pZCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18pKQotX193cml0ZWVmbGFncyh1bnNpZ25lZCBsb25nIGxvbmcgX19mKQotewotICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInB1c2hxICUwXG5cdCIKLSAgICAgICAgICAgICAgICAgICAgICAgICJwb3BmXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICA6Ci0gICAgICAgICAgICAgICAgICAgICAgICA6InIiKF9fZikKLSAgICAgICAgICAgICAgICAgICAgICAgIDoiZmxhZ3MiCi0gICAgICAgICAgICAgICAgICAgICAgICk7Ci19Ci0KLSNlbHNlIC8qICFfX3g4Nl82NF9fICovCi1zdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBpbnQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fKSkKLV9fcmVhZGVmbGFncyh2b2lkKQotewotICB1bnNpZ25lZCBpbnQgX19yZXMgPSAwOwotICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInB1c2hmXG5cdCIKLSAgICAgICAgICAgICAgICAgICAgICAgICJwb3BsICUwXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICA6Ij1yIihfX3JlcykKLSAgICAgICAgICAgICAgICAgICAgICAgIDoKLSAgICAgICAgICAgICAgICAgICAgICAgIDoKLSAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgcmV0dXJuIF9fcmVzOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXykpCi1fX3dyaXRlZWZsYWdzKHVuc2lnbmVkIGludCBfX2YpCi17Ci0gIF9fYXNtX18gX192b2xhdGlsZV9fICgicHVzaGwgJTBcblx0IgotICAgICAgICAgICAgICAgICAgICAgICAgInBvcGZcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIDoKLSAgICAgICAgICAgICAgICAgICAgICAgIDoiciIoX19mKQotICAgICAgICAgICAgICAgICAgICAgICAgOiJmbGFncyIKLSAgICAgICAgICAgICAgICAgICAgICAgKTsKLX0KLSNlbmRpZiAvKiAhX194ODZfNjRfXyAqLwotCi1zdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nIGxvbmcgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fKSkKLV9fcmRwbWMoaW50IF9fQSkgewotICByZXR1cm4gX19idWlsdGluX2lhMzJfcmRwbWMoX19BKTsKLX0KLQotLyogX19yZHRzYyAqLwotc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgbG9uZyBsb25nIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXykpCi1fX3JkdHNjKHZvaWQpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3JkdHNjKCk7Ci19Ci0KLS8qIF9fcmR0c2NwICovCi1zdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nIGxvbmcgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fKSkKLV9fcmR0c2NwKHVuc2lnbmVkIGludCAqX19BKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5faWEzMl9yZHRzY3AoX19BKTsKLX0KLQotI2RlZmluZSBfcmR0c2MoKSBfX3JkdHNjKCkKLQotI2VuZGlmIC8qIF9fSUEzMklOVFJJTl9IICovCmRpZmYgLS1naXQgYS9jbGFuZy0yNTc3MTEzL2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL2ltbWludHJpbi5oIGIvY2xhbmctMjU3NzExMy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9pbW1pbnRyaW4uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjNjNmQxOS4uMDAwMDAwMAotLS0gYS9jbGFuZy0yNTc3MTEzL2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL2ltbWludHJpbi5oCisrKyAvZGV2L251bGwKQEAgLTEsMTcyICswLDAgQEAKLS8qPT09LS0tLSBpbW1pbnRyaW4uaCAtIEludGVsIGludHJpbnNpY3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KLSAqCi0gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5Ci0gKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAotICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cwotICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAotICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCi0gKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgotICoKLSAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCi0gKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KLSAqCi0gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgotICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCi0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKLSAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCi0gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCi0gKiBUSEUgU09GVFdBUkUuCi0gKgotICo9PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQotICovCi0KLSNpZm5kZWYgX19JTU1JTlRSSU5fSAotI2RlZmluZSBfX0lNTUlOVFJJTl9ICi0KLSNpbmNsdWRlIDxtbWludHJpbi5oPgotCi0jaW5jbHVkZSA8eG1taW50cmluLmg+Ci0KLSNpbmNsdWRlIDxlbW1pbnRyaW4uaD4KLQotI2luY2x1ZGUgPHBtbWludHJpbi5oPgotCi0jaW5jbHVkZSA8dG1taW50cmluLmg+Ci0KLSNpbmNsdWRlIDxzbW1pbnRyaW4uaD4KLQotI2luY2x1ZGUgPHdtbWludHJpbi5oPgotCi0jaW5jbHVkZSA8YXZ4aW50cmluLmg+Ci0KLSNpbmNsdWRlIDxhdngyaW50cmluLmg+Ci0KLS8qIFRoZSAyNTYtYml0IHZlcnNpb25zIG9mIGZ1bmN0aW9ucyBpbiBmMTZjaW50cmluLmguCi0gICBJbnRlbCBkb2N1bWVudHMgdGhlc2UgYXMgYmVpbmcgaW4gaW1taW50cmluLmgsIGFuZAotICAgdGhleSBkZXBlbmQgb24gdHlwZWRlZnMgZnJvbSBhdnhpbnRyaW4uaC4gKi8KLQotI2RlZmluZSBfbW0yNTZfY3Z0cHNfcGgoYSwgaW1tKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl92Y3Z0cHMycGgyNTYoKF9fdjhzZikoX19tMjU2KShhKSwgKGltbSkpOyB9KQotCi1zdGF0aWMgX19pbmxpbmUgX19tMjU2IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXywgX190YXJnZXRfXygiZjE2YyIpKSkKLV9tbTI1Nl9jdnRwaF9wcyhfX20xMjhpIF9fYSkKLXsKLSAgcmV0dXJuIChfX20yNTYpX19idWlsdGluX2lhMzJfdmN2dHBoMnBzMjU2KChfX3Y4aGkpX19hKTsKLX0KLQotI2luY2x1ZGUgPGJtaWludHJpbi5oPgotCi0jaW5jbHVkZSA8Ym1pMmludHJpbi5oPgotCi0jaW5jbHVkZSA8bHpjbnRpbnRyaW4uaD4KLQotI2luY2x1ZGUgPGZtYWludHJpbi5oPgotCi0jaW5jbHVkZSA8YXZ4NTEyZmludHJpbi5oPgotCi0jaW5jbHVkZSA8YXZ4NTEydmxpbnRyaW4uaD4KLQotI2luY2x1ZGUgPGF2eDUxMmJ3aW50cmluLmg+Ci0KLSNpbmNsdWRlIDxhdng1MTJjZGludHJpbi5oPgotCi0jaW5jbHVkZSA8YXZ4NTEyZHFpbnRyaW4uaD4KLQotI2luY2x1ZGUgPGF2eDUxMnZsYndpbnRyaW4uaD4KLQotI2luY2x1ZGUgPGF2eDUxMnZsZHFpbnRyaW4uaD4KLQotI2luY2x1ZGUgPGF2eDUxMmVyaW50cmluLmg+Ci0KLXN0YXRpYyBfX2lubGluZV9fIGludCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18sIF9fdGFyZ2V0X18oInJkcm5kIikpKQotX3JkcmFuZDE2X3N0ZXAodW5zaWduZWQgc2hvcnQgKl9fcCkKLXsKLSAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3JkcmFuZDE2X3N0ZXAoX19wKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gaW50IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXywgX190YXJnZXRfXygicmRybmQiKSkpCi1fcmRyYW5kMzJfc3RlcCh1bnNpZ25lZCBpbnQgKl9fcCkKLXsKLSAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3JkcmFuZDMyX3N0ZXAoX19wKTsKLX0KLQotI2lmZGVmIF9feDg2XzY0X18KLXN0YXRpYyBfX2lubGluZV9fIGludCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18sIF9fdGFyZ2V0X18oInJkcm5kIikpKQotX3JkcmFuZDY0X3N0ZXAodW5zaWduZWQgbG9uZyBsb25nICpfX3ApCi17Ci0gIHJldHVybiBfX2J1aWx0aW5faWEzMl9yZHJhbmQ2NF9zdGVwKF9fcCk7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9feDg2XzY0X18KLXN0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGludCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18sIF9fdGFyZ2V0X18oImZzZ3NiYXNlIikpKQotX3JlYWRmc2Jhc2VfdTMyKHZvaWQpCi17Ci0gIHJldHVybiBfX2J1aWx0aW5faWEzMl9yZGZzYmFzZTMyKCk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18sIF9fdGFyZ2V0X18oImZzZ3NiYXNlIikpKQotX3JlYWRmc2Jhc2VfdTY0KHZvaWQpCi17Ci0gIHJldHVybiBfX2J1aWx0aW5faWEzMl9yZGZzYmFzZTY0KCk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGludCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18sIF9fdGFyZ2V0X18oImZzZ3NiYXNlIikpKQotX3JlYWRnc2Jhc2VfdTMyKHZvaWQpCi17Ci0gIHJldHVybiBfX2J1aWx0aW5faWEzMl9yZGdzYmFzZTMyKCk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18sIF9fdGFyZ2V0X18oImZzZ3NiYXNlIikpKQotX3JlYWRnc2Jhc2VfdTY0KHZvaWQpCi17Ci0gIHJldHVybiBfX2J1aWx0aW5faWEzMl9yZGdzYmFzZTY0KCk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fLCBfX3RhcmdldF9fKCJmc2dzYmFzZSIpKSkKLV93cml0ZWZzYmFzZV91MzIodW5zaWduZWQgaW50IF9fVikKLXsKLSAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3dyZnNiYXNlMzIoX19WKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gdm9pZCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18sIF9fdGFyZ2V0X18oImZzZ3NiYXNlIikpKQotX3dyaXRlZnNiYXNlX3U2NCh1bnNpZ25lZCBsb25nIGxvbmcgX19WKQotewotICByZXR1cm4gX19idWlsdGluX2lhMzJfd3Jmc2Jhc2U2NChfX1YpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXywgX190YXJnZXRfXygiZnNnc2Jhc2UiKSkpCi1fd3JpdGVnc2Jhc2VfdTMyKHVuc2lnbmVkIGludCBfX1YpCi17Ci0gIHJldHVybiBfX2J1aWx0aW5faWEzMl93cmdzYmFzZTMyKF9fVik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fLCBfX3RhcmdldF9fKCJmc2dzYmFzZSIpKSkKLV93cml0ZWdzYmFzZV91NjQodW5zaWduZWQgbG9uZyBsb25nIF9fVikKLXsKLSAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3dyZ3NiYXNlNjQoX19WKTsKLX0KLSNlbmRpZgotCi0jaW5jbHVkZSA8cnRtaW50cmluLmg+Ci0KLSNpbmNsdWRlIDx4dGVzdGludHJpbi5oPgotCi0jaW5jbHVkZSA8c2hhaW50cmluLmg+Ci0KLSNpbmNsdWRlIDxmeHNyaW50cmluLmg+Ci0KLSNpbmNsdWRlIDx4c2F2ZWludHJpbi5oPgotCi0jaW5jbHVkZSA8eHNhdmVvcHRpbnRyaW4uaD4KLQotI2luY2x1ZGUgPHhzYXZlY2ludHJpbi5oPgotCi0jaW5jbHVkZSA8eHNhdmVzaW50cmluLmg+Ci0KLS8qIFNvbWUgaW50cmluc2ljcyBpbnNpZGUgYWR4aW50cmluLmggYXJlIGF2YWlsYWJsZSBvbmx5IG9uIHByb2Nlc3NvcnMgd2l0aCBBRFgsCi0gKiB3aGVyZWFzIG90aGVycyBhcmUgYWxzbyBhdmFpbGFibGUgYXQgYWxsIHRpbWVzLiAqLwotI2luY2x1ZGUgPGFkeGludHJpbi5oPgotCi0jZW5kaWYgLyogX19JTU1JTlRSSU5fSCAqLwpkaWZmIC0tZ2l0IGEvY2xhbmctMjU3NzExMy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9pbnR0eXBlcy5oIGIvY2xhbmctMjU3NzExMy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9pbnR0eXBlcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZDU5ZDE0Li4wMDAwMDAwCi0tLSBhL2NsYW5nLTI1NzcxMTMvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvaW50dHlwZXMuaAorKysgL2Rldi9udWxsCkBAIC0xLDEwMiArMCwwIEBACi0vKj09PS0tLS0gaW50dHlwZXMuaCAtIFN0YW5kYXJkIGhlYWRlciBmb3IgaW50ZWdlciBwcmludGYgbWFjcm9zIC0tLS0tLS0tLS09PT0qXAotICoKLSAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKLSAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCi0gKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCi0gKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCi0gKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKLSAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Ci0gKgotICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KLSAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgotICoKLSAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCi0gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKLSAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgotICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKLSAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KLSAqIFRIRSBTT0ZUV0FSRS4KLSAqCi1cKj09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0qLwotCi0jaWZuZGVmIF9fQ0xBTkdfSU5UVFlQRVNfSAotI2RlZmluZSBfX0NMQU5HX0lOVFRZUEVTX0gKLQotI2luY2x1ZGVfbmV4dCA8aW50dHlwZXMuaD4KLQotI2lmIGRlZmluZWQoX01TQ19WRVIpICYmIF9NU0NfVkVSIDwgMTkwMAotLyogTVNWQyBoZWFkZXJzIGRlZmluZSBpbnQzMl90IGFzIGludCwgYnV0IFBSSXgzMiBhcyAibHgiIGluc3RlYWQgb2YgIngiLgotICogVGhpcyB0cmlnZ2VycyBmb3JtYXQgd2FybmluZ3MsIHNvIGZpeCBpdCB1cCBoZXJlLiAqLwotI3VuZGVmIFBSSWQzMgotI3VuZGVmIFBSSWRMRUFTVDMyCi0jdW5kZWYgUFJJZEZBU1QzMgotI3VuZGVmIFBSSWkzMgotI3VuZGVmIFBSSWlMRUFTVDMyCi0jdW5kZWYgUFJJaUZBU1QzMgotI3VuZGVmIFBSSW8zMgotI3VuZGVmIFBSSW9MRUFTVDMyCi0jdW5kZWYgUFJJb0ZBU1QzMgotI3VuZGVmIFBSSXUzMgotI3VuZGVmIFBSSXVMRUFTVDMyCi0jdW5kZWYgUFJJdUZBU1QzMgotI3VuZGVmIFBSSXgzMgotI3VuZGVmIFBSSXhMRUFTVDMyCi0jdW5kZWYgUFJJeEZBU1QzMgotI3VuZGVmIFBSSVgzMgotI3VuZGVmIFBSSVhMRUFTVDMyCi0jdW5kZWYgUFJJWEZBU1QzMgotCi0jdW5kZWYgU0NOZDMyCi0jdW5kZWYgU0NOZExFQVNUMzIKLSN1bmRlZiBTQ05kRkFTVDMyCi0jdW5kZWYgU0NOaTMyCi0jdW5kZWYgU0NOaUxFQVNUMzIKLSN1bmRlZiBTQ05pRkFTVDMyCi0jdW5kZWYgU0NObzMyCi0jdW5kZWYgU0NOb0xFQVNUMzIKLSN1bmRlZiBTQ05vRkFTVDMyCi0jdW5kZWYgU0NOdTMyCi0jdW5kZWYgU0NOdUxFQVNUMzIKLSN1bmRlZiBTQ051RkFTVDMyCi0jdW5kZWYgU0NOeDMyCi0jdW5kZWYgU0NOeExFQVNUMzIKLSN1bmRlZiBTQ054RkFTVDMyCi0KLSNkZWZpbmUgUFJJZDMyICJkIgotI2RlZmluZSBQUklkTEVBU1QzMiAiZCIKLSNkZWZpbmUgUFJJZEZBU1QzMiAiZCIKLSNkZWZpbmUgUFJJaTMyICJpIgotI2RlZmluZSBQUklpTEVBU1QzMiAiaSIKLSNkZWZpbmUgUFJJaUZBU1QzMiAiaSIKLSNkZWZpbmUgUFJJbzMyICJvIgotI2RlZmluZSBQUklvTEVBU1QzMiAibyIKLSNkZWZpbmUgUFJJb0ZBU1QzMiAibyIKLSNkZWZpbmUgUFJJdTMyICJ1IgotI2RlZmluZSBQUkl1TEVBU1QzMiAidSIKLSNkZWZpbmUgUFJJdUZBU1QzMiAidSIKLSNkZWZpbmUgUFJJeDMyICJ4IgotI2RlZmluZSBQUkl4TEVBU1QzMiAieCIKLSNkZWZpbmUgUFJJeEZBU1QzMiAieCIKLSNkZWZpbmUgUFJJWDMyICJYIgotI2RlZmluZSBQUklYTEVBU1QzMiAiWCIKLSNkZWZpbmUgUFJJWEZBU1QzMiAiWCIKLQotI2RlZmluZSBTQ05kMzIgImQiCi0jZGVmaW5lIFNDTmRMRUFTVDMyICJkIgotI2RlZmluZSBTQ05kRkFTVDMyICJkIgotI2RlZmluZSBTQ05pMzIgImkiCi0jZGVmaW5lIFNDTmlMRUFTVDMyICJpIgotI2RlZmluZSBTQ05pRkFTVDMyICJpIgotI2RlZmluZSBTQ05vMzIgIm8iCi0jZGVmaW5lIFNDTm9MRUFTVDMyICJvIgotI2RlZmluZSBTQ05vRkFTVDMyICJvIgotI2RlZmluZSBTQ051MzIgInUiCi0jZGVmaW5lIFNDTnVMRUFTVDMyICJ1IgotI2RlZmluZSBTQ051RkFTVDMyICJ1IgotI2RlZmluZSBTQ054MzIgIngiCi0jZGVmaW5lIFNDTnhMRUFTVDMyICJ4IgotI2RlZmluZSBTQ054RkFTVDMyICJ4IgotI2VuZGlmCi0KLSNlbmRpZiAvKiBfX0NMQU5HX0lOVFRZUEVTX0ggKi8KZGlmZiAtLWdpdCBhL2NsYW5nLTI1NzcxMTMvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvaXNvNjQ2LmggYi9jbGFuZy0yNTc3MTEzL2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL2lzbzY0Ni5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkY2ExM2M1Li4wMDAwMDAwCi0tLSBhL2NsYW5nLTI1NzcxMTMvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvaXNvNjQ2LmgKKysrIC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi0vKj09PS0tLS0gaXNvNjQ2LmggLSBTdGFuZGFyZCBoZWFkZXIgZm9yIGFsdGVybmF0ZSBzcGVsbGluZ3Mgb2Ygb3BlcmF0b3JzLS0tPT09Ci0gKgotICogQ29weXJpZ2h0IChjKSAyMDA4IEVsaSBGcmllZG1hbgotICoKLSAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKLSAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCi0gKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCi0gKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCi0gKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKLSAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Ci0gKgotICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KLSAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgotICoKLSAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCi0gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKLSAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgotICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKLSAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KLSAqIFRIRSBTT0ZUV0FSRS4KLSAqCi0gKj09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09Ci0gKi8KLQotI2lmbmRlZiBfX0lTTzY0Nl9ICi0jZGVmaW5lIF9fSVNPNjQ2X0gKLQotI2lmbmRlZiBfX2NwbHVzcGx1cwotI2RlZmluZSBhbmQgICAgJiYKLSNkZWZpbmUgYW5kX2VxICY9Ci0jZGVmaW5lIGJpdGFuZCAmCi0jZGVmaW5lIGJpdG9yICB8Ci0jZGVmaW5lIGNvbXBsICB+Ci0jZGVmaW5lIG5vdCAgICAhCi0jZGVmaW5lIG5vdF9lcSAhPQotI2RlZmluZSBvciAgICAgfHwKLSNkZWZpbmUgb3JfZXEgIHw9Ci0jZGVmaW5lIHhvciAgICBeCi0jZGVmaW5lIHhvcl9lcSBePQotI2VuZGlmCi0KLSNlbmRpZiAvKiBfX0lTTzY0Nl9IICovCmRpZmYgLS1naXQgYS9jbGFuZy0yNTc3MTEzL2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL2xpbWl0cy5oIGIvY2xhbmctMjU3NzExMy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9saW1pdHMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjA0MTg3Yy4uMDAwMDAwMAotLS0gYS9jbGFuZy0yNTc3MTEzL2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL2xpbWl0cy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTE4ICswLDAgQEAKLS8qPT09LS0tLSBsaW1pdHMuaCAtIFN0YW5kYXJkIGhlYWRlciBmb3IgaW50ZWdlciBzaXplcyAtLS0tLS0tLS0tLS0tLS0tLS0tLT09PSpcCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDA5IENocmlzIExhdHRuZXIKLSAqCi0gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5Ci0gKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAotICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cwotICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAotICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCi0gKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgotICoKLSAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCi0gKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KLSAqCi0gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgotICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCi0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKLSAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCi0gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCi0gKiBUSEUgU09GVFdBUkUuCi0gKgotXCo9PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09Ki8KLQotI2lmbmRlZiBfX0NMQU5HX0xJTUlUU19ICi0jZGVmaW5lIF9fQ0xBTkdfTElNSVRTX0gKLQotLyogVGhlIHN5c3RlbSdzIGxpbWl0cy5oIG1heSwgaW4gdHVybiwgdHJ5IHRvICNpbmNsdWRlX25leHQgR0NDJ3MgbGltaXRzLmguCi0gICBBdmVydCB0aGlzICNpbmNsdWRlX25leHQgbWFkbmVzcy4gKi8KLSNpZiBkZWZpbmVkIF9fR05VQ19fICYmICFkZWZpbmVkIF9HQ0NfTElNSVRTX0hfCi0jZGVmaW5lIF9HQ0NfTElNSVRTX0hfCi0jZW5kaWYKLQotLyogU3lzdGVtIGhlYWRlcnMgaW5jbHVkZSBhIG51bWJlciBvZiBjb25zdGFudHMgZnJvbSBQT1NJWCBpbiA8bGltaXRzLmg+LgotICAgSW5jbHVkZSBpdCBpZiB3ZSdyZSBob3N0ZWQuICovCi0jaWYgX19TVERDX0hPU1RFRF9fICYmIF9faGFzX2luY2x1ZGVfbmV4dCg8bGltaXRzLmg+KQotI2luY2x1ZGVfbmV4dCA8bGltaXRzLmg+Ci0jZW5kaWYKLQotLyogTWFueSBzeXN0ZW0gaGVhZGVycyB0cnkgdG8gImhlbHAgdXMgb3V0IiBieSBkZWZpbmluZyB0aGVzZS4gIE5vIHJlYWxseSwgd2UKLSAgIGtub3cgaG93IGJpZyBlYWNoIGRhdGF0eXBlIGlzLiAqLwotI3VuZGVmICBTQ0hBUl9NSU4KLSN1bmRlZiAgU0NIQVJfTUFYCi0jdW5kZWYgIFVDSEFSX01BWAotI3VuZGVmICBTSFJUX01JTgotI3VuZGVmICBTSFJUX01BWAotI3VuZGVmICBVU0hSVF9NQVgKLSN1bmRlZiAgSU5UX01JTgotI3VuZGVmICBJTlRfTUFYCi0jdW5kZWYgIFVJTlRfTUFYCi0jdW5kZWYgIExPTkdfTUlOCi0jdW5kZWYgIExPTkdfTUFYCi0jdW5kZWYgIFVMT05HX01BWAotCi0jdW5kZWYgIENIQVJfQklUCi0jdW5kZWYgIENIQVJfTUlOCi0jdW5kZWYgIENIQVJfTUFYCi0KLS8qIEM5MC85OSA1LjIuNC4yLjEgKi8KLSNkZWZpbmUgU0NIQVJfTUFYIF9fU0NIQVJfTUFYX18KLSNkZWZpbmUgU0hSVF9NQVggIF9fU0hSVF9NQVhfXwotI2RlZmluZSBJTlRfTUFYICAgX19JTlRfTUFYX18KLSNkZWZpbmUgTE9OR19NQVggIF9fTE9OR19NQVhfXwotCi0jZGVmaW5lIFNDSEFSX01JTiAoLV9fU0NIQVJfTUFYX18tMSkKLSNkZWZpbmUgU0hSVF9NSU4gICgtX19TSFJUX01BWF9fIC0xKQotI2RlZmluZSBJTlRfTUlOICAgKC1fX0lOVF9NQVhfXyAgLTEpCi0jZGVmaW5lIExPTkdfTUlOICAoLV9fTE9OR19NQVhfXyAtMUwpCi0KLSNkZWZpbmUgVUNIQVJfTUFYIChfX1NDSEFSX01BWF9fKjIgICsxKQotI2RlZmluZSBVU0hSVF9NQVggKF9fU0hSVF9NQVhfXyAqMiAgKzEpCi0jZGVmaW5lIFVJTlRfTUFYICAoX19JTlRfTUFYX18gICoyVSArMVUpCi0jZGVmaW5lIFVMT05HX01BWCAoX19MT05HX01BWF9fICoyVUwrMVVMKQotCi0jaWZuZGVmIE1CX0xFTl9NQVgKLSNkZWZpbmUgTUJfTEVOX01BWCAxCi0jZW5kaWYKLQotI2RlZmluZSBDSEFSX0JJVCAgX19DSEFSX0JJVF9fCi0KLSNpZmRlZiBfX0NIQVJfVU5TSUdORURfXyAgLyogLWZ1bnNpZ25lZC1jaGFyICovCi0jZGVmaW5lIENIQVJfTUlOIDAKLSNkZWZpbmUgQ0hBUl9NQVggVUNIQVJfTUFYCi0jZWxzZQotI2RlZmluZSBDSEFSX01JTiBTQ0hBUl9NSU4KLSNkZWZpbmUgQ0hBUl9NQVggX19TQ0hBUl9NQVhfXwotI2VuZGlmCi0KLS8qIEM5OSA1LjIuNC4yLjE6IEFkZGVkIGxvbmcgbG9uZy4KLSAgIEMrKzExIDE4LjMuMy4yOiBzYW1lIGNvbnRlbnRzIGFzIHRoZSBTdGFuZGFyZCBDIExpYnJhcnkgaGVhZGVyIDxsaW1pdHMuaD4uCi0gKi8KLSNpZiBfX1NURENfVkVSU0lPTl9fID49IDE5OTkwMUwgfHwgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAotCi0jdW5kZWYgIExMT05HX01JTgotI3VuZGVmICBMTE9OR19NQVgKLSN1bmRlZiAgVUxMT05HX01BWAotCi0jZGVmaW5lIExMT05HX01BWCAgX19MT05HX0xPTkdfTUFYX18KLSNkZWZpbmUgTExPTkdfTUlOICAoLV9fTE9OR19MT05HX01BWF9fLTFMTCkKLSNkZWZpbmUgVUxMT05HX01BWCAoX19MT05HX0xPTkdfTUFYX18qMlVMTCsxVUxMKQotI2VuZGlmCi0KLS8qIExPTkdfTE9OR19NSU4vTE9OR19MT05HX01BWC9VTE9OR19MT05HX01BWCBhcmUgYSBHTlUgZXh0ZW5zaW9uLiAgSXQncyB0b28gYmFkCi0gICB0aGF0IHdlIGRvbid0IGhhdmUgc29tZXRoaW5nIGxpa2UgI3ByYWdtYSBwb2lzb24gdGhhdCBjb3VsZCBiZSB1c2VkIHRvCi0gICBkZXByZWNhdGUgYSBtYWNybyAtIHRoZSBjb2RlIHNob3VsZCBqdXN0IHVzZSBMTE9OR19NQVggYW5kIGZyaWVuZHMuCi0gKi8KLSNpZiBkZWZpbmVkKF9fR05VX0xJQlJBUllfXykgPyBkZWZpbmVkKF9fVVNFX0dOVSkgOiAhZGVmaW5lZChfX1NUUklDVF9BTlNJX18pCi0KLSN1bmRlZiAgIExPTkdfTE9OR19NSU4KLSN1bmRlZiAgIExPTkdfTE9OR19NQVgKLSN1bmRlZiAgIFVMT05HX0xPTkdfTUFYCi0KLSNkZWZpbmUgTE9OR19MT05HX01BWCAgX19MT05HX0xPTkdfTUFYX18KLSNkZWZpbmUgTE9OR19MT05HX01JTiAgKC1fX0xPTkdfTE9OR19NQVhfXy0xTEwpCi0jZGVmaW5lIFVMT05HX0xPTkdfTUFYIChfX0xPTkdfTE9OR19NQVhfXyoyVUxMKzFVTEwpCi0jZW5kaWYKLQotI2VuZGlmIC8qIF9fQ0xBTkdfTElNSVRTX0ggKi8KZGlmZiAtLWdpdCBhL2NsYW5nLTI1NzcxMTMvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvbHpjbnRpbnRyaW4uaCBiL2NsYW5nLTI1NzcxMTMvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvbHpjbnRpbnRyaW4uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGMwMGU0Mi4uMDAwMDAwMAotLS0gYS9jbGFuZy0yNTc3MTEzL2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL2x6Y250aW50cmluLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2OCArMCwwIEBACi0vKj09PS0tLS0gbHpjbnRpbnRyaW4uaCAtIExaQ05UIGludHJpbnNpY3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09Ci0gKgotICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQotICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKLSAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKLSAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKLSAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcwotICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKLSAqCi0gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgotICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCi0gKgotICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKLSAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAotICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCi0gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAotICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgotICogVEhFIFNPRlRXQVJFLgotICoKLSAqPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KLSAqLwotCi0jaWYgIWRlZmluZWQgX19YODZJTlRSSU5fSCAmJiAhZGVmaW5lZCBfX0lNTUlOVFJJTl9ICi0jZXJyb3IgIk5ldmVyIHVzZSA8bHpjbnRpbnRyaW4uaD4gZGlyZWN0bHk7IGluY2x1ZGUgPHg4NmludHJpbi5oPiBpbnN0ZWFkLiIKLSNlbmRpZgotCi0jaWZuZGVmIF9fTFpDTlRJTlRSSU5fSAotI2RlZmluZSBfX0xaQ05USU5UUklOX0gKLQotLyogRGVmaW5lIHRoZSBkZWZhdWx0IGF0dHJpYnV0ZXMgZm9yIHRoZSBmdW5jdGlvbnMgaW4gdGhpcyBmaWxlLiAqLwotI2RlZmluZSBfX0RFRkFVTFRfRk5fQVRUUlMgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fLCBfX3RhcmdldF9fKCJsemNudCIpKSkKLQotc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgc2hvcnQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fX2x6Y250MTYodW5zaWduZWQgc2hvcnQgX19YKQotewotICByZXR1cm4gX19YID8gX19idWlsdGluX2NsenMoX19YKSA6IDE2OwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBpbnQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fX2x6Y250MzIodW5zaWduZWQgaW50IF9fWCkKLXsKLSAgcmV0dXJuIF9fWCA/IF9fYnVpbHRpbl9jbHooX19YKSA6IDMyOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBpbnQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbHpjbnRfdTMyKHVuc2lnbmVkIGludCBfX1gpCi17Ci0gIHJldHVybiBfX1ggPyBfX2J1aWx0aW5fY2x6KF9fWCkgOiAzMjsKLX0KLQotI2lmZGVmIF9feDg2XzY0X18KLXN0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcgbG9uZyBfX0RFRkFVTFRfRk5fQVRUUlMKLV9fbHpjbnQ2NCh1bnNpZ25lZCBsb25nIGxvbmcgX19YKQotewotICByZXR1cm4gX19YID8gX19idWlsdGluX2NsemxsKF9fWCkgOiA2NDsKLX0KLQotc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgbG9uZyBsb25nIF9fREVGQVVMVF9GTl9BVFRSUwotX2x6Y250X3U2NCh1bnNpZ25lZCBsb25nIGxvbmcgX19YKQotewotICByZXR1cm4gX19YID8gX19idWlsdGluX2NsemxsKF9fWCkgOiA2NDsKLX0KLSNlbmRpZgotCi0jdW5kZWYgX19ERUZBVUxUX0ZOX0FUVFJTCi0KLSNlbmRpZiAvKiBfX0xaQ05USU5UUklOX0ggKi8KZGlmZiAtLWdpdCBhL2NsYW5nLTI1NzcxMTMvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvbW0zZG5vdy5oIGIvY2xhbmctMjU3NzExMy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9tbTNkbm93LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNiOTNmYWYuLjAwMDAwMDAKLS0tIGEvY2xhbmctMjU3NzExMy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9tbTNkbm93LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNzEgKzAsMCBAQAotLyo9PT0tLS0tIG1tM2Rub3cuaCAtIDNETm93ISBpbnRyaW5zaWNzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQotICoKLSAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKLSAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCi0gKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCi0gKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCi0gKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKLSAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Ci0gKgotICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KLSAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgotICoKLSAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCi0gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKLSAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgotICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKLSAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KLSAqIFRIRSBTT0ZUV0FSRS4KLSAqCi0gKj09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09Ci0gKi8KLQotI2lmbmRlZiBfTU0zRE5PV19IX0lOQ0xVREVECi0jZGVmaW5lIF9NTTNETk9XX0hfSU5DTFVERUQKLQotI2luY2x1ZGUgPG1taW50cmluLmg+Ci0jaW5jbHVkZSA8cHJmY2h3aW50cmluLmg+Ci0KLXR5cGVkZWYgZmxvYXQgX192MnNmIF9fYXR0cmlidXRlX18oKF9fdmVjdG9yX3NpemVfXyg4KSkpOwotCi0vKiBEZWZpbmUgdGhlIGRlZmF1bHQgYXR0cmlidXRlcyBmb3IgdGhlIGZ1bmN0aW9ucyBpbiB0aGlzIGZpbGUuICovCi0jZGVmaW5lIF9fREVGQVVMVF9GTl9BVFRSUyBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18sIF9fdGFyZ2V0X18oIjNkbm93IikpKQotCi1zdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUwotX21fZmVtbXMoKSB7Ci0gIF9fYnVpbHRpbl9pYTMyX2ZlbW1zKCk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUwotX21fcGF2Z3VzYihfX202NCBfX20xLCBfX202NCBfX20yKSB7Ci0gIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfcGF2Z3VzYigoX192OHFpKV9fbTEsIChfX3Y4cWkpX19tMik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUwotX21fcGYyaWQoX19tNjQgX19tKSB7Ci0gIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfcGYyaWQoKF9fdjJzZilfX20pOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tX3BmYWNjKF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpIHsKLSAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9wZmFjYygoX192MnNmKV9fbTEsIChfX3Yyc2YpX19tMik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUwotX21fcGZhZGQoX19tNjQgX19tMSwgX19tNjQgX19tMikgewotICByZXR1cm4gKF9fbTY0KV9fYnVpbHRpbl9pYTMyX3BmYWRkKChfX3Yyc2YpX19tMSwgKF9fdjJzZilfX20yKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbV9wZmNtcGVxKF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpIHsKLSAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9wZmNtcGVxKChfX3Yyc2YpX19tMSwgKF9fdjJzZilfX20yKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbV9wZmNtcGdlKF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpIHsKLSAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9wZmNtcGdlKChfX3Yyc2YpX19tMSwgKF9fdjJzZilfX20yKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbV9wZmNtcGd0KF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpIHsKLSAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9wZmNtcGd0KChfX3Yyc2YpX19tMSwgKF9fdjJzZilfX20yKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbV9wZm1heChfX202NCBfX20xLCBfX202NCBfX20yKSB7Ci0gIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfcGZtYXgoKF9fdjJzZilfX20xLCAoX192MnNmKV9fbTIpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tX3BmbWluKF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpIHsKLSAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9wZm1pbigoX192MnNmKV9fbTEsIChfX3Yyc2YpX19tMik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUwotX21fcGZtdWwoX19tNjQgX19tMSwgX19tNjQgX19tMikgewotICByZXR1cm4gKF9fbTY0KV9fYnVpbHRpbl9pYTMyX3BmbXVsKChfX3Yyc2YpX19tMSwgKF9fdjJzZilfX20yKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbV9wZnJjcChfX202NCBfX20pIHsKLSAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9wZnJjcCgoX192MnNmKV9fbSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUwotX21fcGZyY3BpdDEoX19tNjQgX19tMSwgX19tNjQgX19tMikgewotICByZXR1cm4gKF9fbTY0KV9fYnVpbHRpbl9pYTMyX3BmcmNwaXQxKChfX3Yyc2YpX19tMSwgKF9fdjJzZilfX20yKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbV9wZnJjcGl0MihfX202NCBfX20xLCBfX202NCBfX20yKSB7Ci0gIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfcGZyY3BpdDIoKF9fdjJzZilfX20xLCAoX192MnNmKV9fbTIpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tX3BmcnNxcnQoX19tNjQgX19tKSB7Ci0gIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfcGZyc3FydCgoX192MnNmKV9fbSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUwotX21fcGZyc3FydGl0MShfX202NCBfX20xLCBfX202NCBfX20yKSB7Ci0gIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfcGZyc3FpdDEoKF9fdjJzZilfX20xLCAoX192MnNmKV9fbTIpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tX3Bmc3ViKF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpIHsKLSAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9wZnN1YigoX192MnNmKV9fbTEsIChfX3Yyc2YpX19tMik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUwotX21fcGZzdWJyKF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpIHsKLSAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9wZnN1YnIoKF9fdjJzZilfX20xLCAoX192MnNmKV9fbTIpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tX3BpMmZkKF9fbTY0IF9fbSkgewotICByZXR1cm4gKF9fbTY0KV9fYnVpbHRpbl9pYTMyX3BpMmZkKChfX3Yyc2kpX19tKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbV9wbXVsaHJ3KF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpIHsKLSAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9wbXVsaHJ3KChfX3Y0aGkpX19tMSwgKF9fdjRoaSlfX20yKTsKLX0KLQotLyogSGFuZGxlIHRoZSAzZG5vd2EgaW5zdHJ1Y3Rpb25zIGhlcmUuICovCi0jdW5kZWYgX19ERUZBVUxUX0ZOX0FUVFJTCi0jZGVmaW5lIF9fREVGQVVMVF9GTl9BVFRSUyBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18sIF9fdGFyZ2V0X18oIjNkbm93YSIpKSkKLQotc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbV9wZjJpdyhfX202NCBfX20pIHsKLSAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9wZjJpdygoX192MnNmKV9fbSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUwotX21fcGZuYWNjKF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpIHsKLSAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9wZm5hY2MoKF9fdjJzZilfX20xLCAoX192MnNmKV9fbTIpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tX3BmcG5hY2MoX19tNjQgX19tMSwgX19tNjQgX19tMikgewotICByZXR1cm4gKF9fbTY0KV9fYnVpbHRpbl9pYTMyX3BmcG5hY2MoKF9fdjJzZilfX20xLCAoX192MnNmKV9fbTIpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tX3BpMmZ3KF9fbTY0IF9fbSkgewotICByZXR1cm4gKF9fbTY0KV9fYnVpbHRpbl9pYTMyX3BpMmZ3KChfX3Yyc2kpX19tKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbV9wc3dhcGRzZihfX202NCBfX20pIHsKLSAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9wc3dhcGRzZigoX192MnNmKV9fbSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUwotX21fcHN3YXBkc2koX19tNjQgX19tKSB7Ci0gIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfcHN3YXBkc2koKF9fdjJzaSlfX20pOwotfQotCi0jdW5kZWYgX19ERUZBVUxUX0ZOX0FUVFJTCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvY2xhbmctMjU3NzExMy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9tbV9tYWxsb2MuaCBiL2NsYW5nLTI1NzcxMTMvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvbW1fbWFsbG9jLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMwNWFmZDMuLjAwMDAwMDAKLS0tIGEvY2xhbmctMjU3NzExMy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9tbV9tYWxsb2MuaAorKysgL2Rldi9udWxsCkBAIC0xLDc1ICswLDAgQEAKLS8qPT09LS0tLSBtbV9tYWxsb2MuaCAtIEFsbG9jYXRpbmcgYW5kIEZyZWVpbmcgQWxpZ25lZCBNZW1vcnkgQmxvY2tzIC0tLS0tLS09PT0KLSAqCi0gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5Ci0gKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAotICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cwotICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAotICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCi0gKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgotICoKLSAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCi0gKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KLSAqCi0gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgotICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCi0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKLSAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCi0gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCi0gKiBUSEUgU09GVFdBUkUuCi0gKgotICo9PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQotICovCi0KLSNpZm5kZWYgX19NTV9NQUxMT0NfSAotI2RlZmluZSBfX01NX01BTExPQ19ICi0KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLQotI2lmZGVmIF9XSU4zMgotI2luY2x1ZGUgPG1hbGxvYy5oPgotI2Vsc2UKLSNpZm5kZWYgX19jcGx1c3BsdXMKLWV4dGVybiBpbnQgcG9zaXhfbWVtYWxpZ24odm9pZCAqKl9fbWVtcHRyLCBzaXplX3QgX19hbGlnbm1lbnQsIHNpemVfdCBfX3NpemUpOwotI2Vsc2UKLS8vIFNvbWUgc3lzdGVtcyAoZS5nLiB0aG9zZSB3aXRoIEdOVSBsaWJjKSBkZWNsYXJlIHBvc2l4X21lbWFsaWduIHdpdGggYW4KLS8vIGV4Y2VwdGlvbiBzcGVjaWZpZXIuIFZpYSBhbiAiZWdyZWdpb3VzIHdvcmthcm91bmQiIGluCi0vLyBTZW1hOjpDaGVja0VxdWl2YWxlbnRFeGNlcHRpb25TcGVjLCBDbGFuZyBhY2NlcHRzIHRoZSBmb2xsb3dpbmcgYXMgYSB2YWxpZAotLy8gcmVkZWNsYXJhdGlvbiBvZiBnbGliYydzIGRlY2xhcmF0aW9uLgotZXh0ZXJuICJDIiBpbnQgcG9zaXhfbWVtYWxpZ24odm9pZCAqKl9fbWVtcHRyLCBzaXplX3QgX19hbGlnbm1lbnQsIHNpemVfdCBfX3NpemUpOwotI2VuZGlmCi0jZW5kaWYKLQotI2lmICEoZGVmaW5lZChfV0lOMzIpICYmIGRlZmluZWQoX21tX21hbGxvYykpCi1zdGF0aWMgX19pbmxpbmVfXyB2b2lkICpfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX21hbGxvY19fKSkKLV9tbV9tYWxsb2Moc2l6ZV90IF9fc2l6ZSwgc2l6ZV90IF9fYWxpZ24pCi17Ci0gIGlmIChfX2FsaWduID09IDEpIHsKLSAgICByZXR1cm4gbWFsbG9jKF9fc2l6ZSk7Ci0gIH0KLQotICBpZiAoIShfX2FsaWduICYgKF9fYWxpZ24gLSAxKSkgJiYgX19hbGlnbiA8IHNpemVvZih2b2lkICopKQotICAgIF9fYWxpZ24gPSBzaXplb2Yodm9pZCAqKTsKLQotICB2b2lkICpfX21hbGxvY2VkTWVtb3J5OwotI2lmIGRlZmluZWQoX19NSU5HVzMyX18pCi0gIF9fbWFsbG9jZWRNZW1vcnkgPSBfX21pbmd3X2FsaWduZWRfbWFsbG9jKF9fc2l6ZSwgX19hbGlnbik7Ci0jZWxpZiBkZWZpbmVkKF9XSU4zMikKLSAgX19tYWxsb2NlZE1lbW9yeSA9IF9hbGlnbmVkX21hbGxvYyhfX3NpemUsIF9fYWxpZ24pOwotI2Vsc2UKLSAgaWYgKHBvc2l4X21lbWFsaWduKCZfX21hbGxvY2VkTWVtb3J5LCBfX2FsaWduLCBfX3NpemUpKQotICAgIHJldHVybiAwOwotI2VuZGlmCi0KLSAgcmV0dXJuIF9fbWFsbG9jZWRNZW1vcnk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fKSkKLV9tbV9mcmVlKHZvaWQgKl9fcCkKLXsKLSAgZnJlZShfX3ApOwotfQotI2VuZGlmCi0KLSNlbmRpZiAvKiBfX01NX01BTExPQ19IICovCmRpZmYgLS1naXQgYS9jbGFuZy0yNTc3MTEzL2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL21taW50cmluLmggYi9jbGFuZy0yNTc3MTEzL2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL21taW50cmluLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE2MmNiMWEuLjAwMDAwMDAKLS0tIGEvY2xhbmctMjU3NzExMy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9tbWludHJpbi5oCisrKyAvZGV2L251bGwKQEAgLTEsNTAzICswLDAgQEAKLS8qPT09LS0tLSBtbWludHJpbi5oIC0gTU1YIGludHJpbnNpY3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KLSAqCi0gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5Ci0gKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAotICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cwotICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAotICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCi0gKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgotICoKLSAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCi0gKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KLSAqCi0gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgotICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCi0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKLSAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCi0gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCi0gKiBUSEUgU09GVFdBUkUuCi0gKgotICo9PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQotICovCi0KLSNpZm5kZWYgX19NTUlOVFJJTl9ICi0jZGVmaW5lIF9fTU1JTlRSSU5fSAotCi10eXBlZGVmIGxvbmcgbG9uZyBfX202NCBfX2F0dHJpYnV0ZV9fKChfX3ZlY3Rvcl9zaXplX18oOCkpKTsKLQotdHlwZWRlZiBpbnQgX192MnNpIF9fYXR0cmlidXRlX18oKF9fdmVjdG9yX3NpemVfXyg4KSkpOwotdHlwZWRlZiBzaG9ydCBfX3Y0aGkgX19hdHRyaWJ1dGVfXygoX192ZWN0b3Jfc2l6ZV9fKDgpKSk7Ci10eXBlZGVmIGNoYXIgX192OHFpIF9fYXR0cmlidXRlX18oKF9fdmVjdG9yX3NpemVfXyg4KSkpOwotCi0vKiBEZWZpbmUgdGhlIGRlZmF1bHQgYXR0cmlidXRlcyBmb3IgdGhlIGZ1bmN0aW9ucyBpbiB0aGlzIGZpbGUuICovCi0jZGVmaW5lIF9fREVGQVVMVF9GTl9BVFRSUyBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18sIF9fdGFyZ2V0X18oIm1teCIpKSkKLQotc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9lbXB0eSh2b2lkKQotewotICAgIF9fYnVpbHRpbl9pYTMyX2VtbXMoKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fY3Z0c2kzMl9zaTY0KGludCBfX2kpCi17Ci0gICAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl92ZWNfaW5pdF92MnNpKF9faSwgMCk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIGludCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9jdnRzaTY0X3NpMzIoX19tNjQgX19tKQotewotICAgIHJldHVybiBfX2J1aWx0aW5faWEzMl92ZWNfZXh0X3Yyc2koKF9fdjJzaSlfX20sIDApOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9jdnRzaTY0X202NChsb25nIGxvbmcgX19pKQotewotICAgIHJldHVybiAoX19tNjQpX19pOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBsb25nIGxvbmcgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fY3Z0bTY0X3NpNjQoX19tNjQgX19tKQotewotICAgIHJldHVybiAobG9uZyBsb25nKV9fbTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fcGFja3NfcGkxNihfX202NCBfX20xLCBfX202NCBfX20yKQotewotICAgIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfcGFja3Nzd2IoKF9fdjRoaSlfX20xLCAoX192NGhpKV9fbTIpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9wYWNrc19waTMyKF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpCi17Ci0gICAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9wYWNrc3NkdygoX192MnNpKV9fbTEsIChfX3Yyc2kpX19tMik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX3BhY2tzX3B1MTYoX19tNjQgX19tMSwgX19tNjQgX19tMikKLXsKLSAgICByZXR1cm4gKF9fbTY0KV9fYnVpbHRpbl9pYTMyX3BhY2t1c3diKChfX3Y0aGkpX19tMSwgKF9fdjRoaSlfX20yKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fdW5wYWNraGlfcGk4KF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpCi17Ci0gICAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9wdW5wY2toYncoKF9fdjhxaSlfX20xLCAoX192OHFpKV9fbTIpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV91bnBhY2toaV9waTE2KF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpCi17Ci0gICAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9wdW5wY2tod2QoKF9fdjRoaSlfX20xLCAoX192NGhpKV9fbTIpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV91bnBhY2toaV9waTMyKF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpCi17Ci0gICAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9wdW5wY2toZHEoKF9fdjJzaSlfX20xLCAoX192MnNpKV9fbTIpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV91bnBhY2tsb19waTgoX19tNjQgX19tMSwgX19tNjQgX19tMikKLXsKLSAgICByZXR1cm4gKF9fbTY0KV9fYnVpbHRpbl9pYTMyX3B1bnBja2xidygoX192OHFpKV9fbTEsIChfX3Y4cWkpX19tMik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX3VucGFja2xvX3BpMTYoX19tNjQgX19tMSwgX19tNjQgX19tMikKLXsKLSAgICByZXR1cm4gKF9fbTY0KV9fYnVpbHRpbl9pYTMyX3B1bnBja2x3ZCgoX192NGhpKV9fbTEsIChfX3Y0aGkpX19tMik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX3VucGFja2xvX3BpMzIoX19tNjQgX19tMSwgX19tNjQgX19tMikKLXsKLSAgICByZXR1cm4gKF9fbTY0KV9fYnVpbHRpbl9pYTMyX3B1bnBja2xkcSgoX192MnNpKV9fbTEsIChfX3Yyc2kpX19tMik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2FkZF9waTgoX19tNjQgX19tMSwgX19tNjQgX19tMikKLXsKLSAgICByZXR1cm4gKF9fbTY0KV9fYnVpbHRpbl9pYTMyX3BhZGRiKChfX3Y4cWkpX19tMSwgKF9fdjhxaSlfX20yKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fYWRkX3BpMTYoX19tNjQgX19tMSwgX19tNjQgX19tMikKLXsKLSAgICByZXR1cm4gKF9fbTY0KV9fYnVpbHRpbl9pYTMyX3BhZGR3KChfX3Y0aGkpX19tMSwgKF9fdjRoaSlfX20yKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fYWRkX3BpMzIoX19tNjQgX19tMSwgX19tNjQgX19tMikKLXsKLSAgICByZXR1cm4gKF9fbTY0KV9fYnVpbHRpbl9pYTMyX3BhZGRkKChfX3Yyc2kpX19tMSwgKF9fdjJzaSlfX20yKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fYWRkc19waTgoX19tNjQgX19tMSwgX19tNjQgX19tMikKLXsKLSAgICByZXR1cm4gKF9fbTY0KV9fYnVpbHRpbl9pYTMyX3BhZGRzYigoX192OHFpKV9fbTEsIChfX3Y4cWkpX19tMik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2FkZHNfcGkxNihfX202NCBfX20xLCBfX202NCBfX20yKQotewotICAgIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfcGFkZHN3KChfX3Y0aGkpX19tMSwgKF9fdjRoaSlfX20yKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fYWRkc19wdTgoX19tNjQgX19tMSwgX19tNjQgX19tMikKLXsKLSAgICByZXR1cm4gKF9fbTY0KV9fYnVpbHRpbl9pYTMyX3BhZGR1c2IoKF9fdjhxaSlfX20xLCAoX192OHFpKV9fbTIpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9hZGRzX3B1MTYoX19tNjQgX19tMSwgX19tNjQgX19tMikKLXsKLSAgICByZXR1cm4gKF9fbTY0KV9fYnVpbHRpbl9pYTMyX3BhZGR1c3coKF9fdjRoaSlfX20xLCAoX192NGhpKV9fbTIpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9zdWJfcGk4KF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpCi17Ci0gICAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9wc3ViYigoX192OHFpKV9fbTEsIChfX3Y4cWkpX19tMik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX3N1Yl9waTE2KF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpCi17Ci0gICAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9wc3VidygoX192NGhpKV9fbTEsIChfX3Y0aGkpX19tMik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX3N1Yl9waTMyKF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpCi17Ci0gICAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9wc3ViZCgoX192MnNpKV9fbTEsIChfX3Yyc2kpX19tMik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX3N1YnNfcGk4KF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpCi17Ci0gICAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9wc3Vic2IoKF9fdjhxaSlfX20xLCAoX192OHFpKV9fbTIpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9zdWJzX3BpMTYoX19tNjQgX19tMSwgX19tNjQgX19tMikKLXsKLSAgICByZXR1cm4gKF9fbTY0KV9fYnVpbHRpbl9pYTMyX3BzdWJzdygoX192NGhpKV9fbTEsIChfX3Y0aGkpX19tMik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX3N1YnNfcHU4KF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpCi17Ci0gICAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9wc3VidXNiKChfX3Y4cWkpX19tMSwgKF9fdjhxaSlfX20yKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fc3Vic19wdTE2KF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpCi17Ci0gICAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9wc3VidXN3KChfX3Y0aGkpX19tMSwgKF9fdjRoaSlfX20yKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWFkZF9waTE2KF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpCi17Ci0gICAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9wbWFkZHdkKChfX3Y0aGkpX19tMSwgKF9fdjRoaSlfX20yKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbXVsaGlfcGkxNihfX202NCBfX20xLCBfX202NCBfX20yKQotewotICAgIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfcG11bGh3KChfX3Y0aGkpX19tMSwgKF9fdjRoaSlfX20yKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbXVsbG9fcGkxNihfX202NCBfX20xLCBfX202NCBfX20yKQotewotICAgIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfcG11bGx3KChfX3Y0aGkpX19tMSwgKF9fdjRoaSlfX20yKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fc2xsX3BpMTYoX19tNjQgX19tLCBfX202NCBfX2NvdW50KQotewotICAgIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfcHNsbHcoKF9fdjRoaSlfX20sIF9fY291bnQpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9zbGxpX3BpMTYoX19tNjQgX19tLCBpbnQgX19jb3VudCkKLXsKLSAgICByZXR1cm4gKF9fbTY0KV9fYnVpbHRpbl9pYTMyX3BzbGx3aSgoX192NGhpKV9fbSwgX19jb3VudCk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX3NsbF9waTMyKF9fbTY0IF9fbSwgX19tNjQgX19jb3VudCkKLXsKLSAgICByZXR1cm4gKF9fbTY0KV9fYnVpbHRpbl9pYTMyX3BzbGxkKChfX3Yyc2kpX19tLCBfX2NvdW50KTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fc2xsaV9waTMyKF9fbTY0IF9fbSwgaW50IF9fY291bnQpCi17Ci0gICAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9wc2xsZGkoKF9fdjJzaSlfX20sIF9fY291bnQpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9zbGxfc2k2NChfX202NCBfX20sIF9fbTY0IF9fY291bnQpCi17Ci0gICAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9wc2xscShfX20sIF9fY291bnQpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9zbGxpX3NpNjQoX19tNjQgX19tLCBpbnQgX19jb3VudCkKLXsKLSAgICByZXR1cm4gKF9fbTY0KV9fYnVpbHRpbl9pYTMyX3BzbGxxaShfX20sIF9fY291bnQpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9zcmFfcGkxNihfX202NCBfX20sIF9fbTY0IF9fY291bnQpCi17Ci0gICAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9wc3JhdygoX192NGhpKV9fbSwgX19jb3VudCk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX3NyYWlfcGkxNihfX202NCBfX20sIGludCBfX2NvdW50KQotewotICAgIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfcHNyYXdpKChfX3Y0aGkpX19tLCBfX2NvdW50KTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fc3JhX3BpMzIoX19tNjQgX19tLCBfX202NCBfX2NvdW50KQotewotICAgIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfcHNyYWQoKF9fdjJzaSlfX20sIF9fY291bnQpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9zcmFpX3BpMzIoX19tNjQgX19tLCBpbnQgX19jb3VudCkKLXsKLSAgICByZXR1cm4gKF9fbTY0KV9fYnVpbHRpbl9pYTMyX3BzcmFkaSgoX192MnNpKV9fbSwgX19jb3VudCk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX3NybF9waTE2KF9fbTY0IF9fbSwgX19tNjQgX19jb3VudCkKLXsKLSAgICByZXR1cm4gKF9fbTY0KV9fYnVpbHRpbl9pYTMyX3Bzcmx3KChfX3Y0aGkpX19tLCBfX2NvdW50KTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fc3JsaV9waTE2KF9fbTY0IF9fbSwgaW50IF9fY291bnQpCi17Ci0gICAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9wc3Jsd2koKF9fdjRoaSlfX20sIF9fY291bnQpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9zcmxfcGkzMihfX202NCBfX20sIF9fbTY0IF9fY291bnQpCi17Ci0gICAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9wc3JsZCgoX192MnNpKV9fbSwgX19jb3VudCk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX3NybGlfcGkzMihfX202NCBfX20sIGludCBfX2NvdW50KQotewotICAgIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfcHNybGRpKChfX3Yyc2kpX19tLCBfX2NvdW50KTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fc3JsX3NpNjQoX19tNjQgX19tLCBfX202NCBfX2NvdW50KQotewotICAgIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfcHNybHEoX19tLCBfX2NvdW50KTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fc3JsaV9zaTY0KF9fbTY0IF9fbSwgaW50IF9fY291bnQpCi17Ci0gICAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9wc3JscWkoX19tLCBfX2NvdW50KTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fYW5kX3NpNjQoX19tNjQgX19tMSwgX19tNjQgX19tMikKLXsKLSAgICByZXR1cm4gX19idWlsdGluX2lhMzJfcGFuZChfX20xLCBfX20yKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fYW5kbm90X3NpNjQoX19tNjQgX19tMSwgX19tNjQgX19tMikKLXsKLSAgICByZXR1cm4gX19idWlsdGluX2lhMzJfcGFuZG4oX19tMSwgX19tMik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX29yX3NpNjQoX19tNjQgX19tMSwgX19tNjQgX19tMikKLXsKLSAgICByZXR1cm4gX19idWlsdGluX2lhMzJfcG9yKF9fbTEsIF9fbTIpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV94b3Jfc2k2NChfX202NCBfX20xLCBfX202NCBfX20yKQotewotICAgIHJldHVybiBfX2J1aWx0aW5faWEzMl9weG9yKF9fbTEsIF9fbTIpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9jbXBlcV9waTgoX19tNjQgX19tMSwgX19tNjQgX19tMikKLXsKLSAgICByZXR1cm4gKF9fbTY0KV9fYnVpbHRpbl9pYTMyX3BjbXBlcWIoKF9fdjhxaSlfX20xLCAoX192OHFpKV9fbTIpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9jbXBlcV9waTE2KF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpCi17Ci0gICAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9wY21wZXF3KChfX3Y0aGkpX19tMSwgKF9fdjRoaSlfX20yKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fY21wZXFfcGkzMihfX202NCBfX20xLCBfX202NCBfX20yKQotewotICAgIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfcGNtcGVxZCgoX192MnNpKV9fbTEsIChfX3Yyc2kpX19tMik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2NtcGd0X3BpOChfX202NCBfX20xLCBfX202NCBfX20yKQotewotICAgIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfcGNtcGd0YigoX192OHFpKV9fbTEsIChfX3Y4cWkpX19tMik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2NtcGd0X3BpMTYoX19tNjQgX19tMSwgX19tNjQgX19tMikKLXsKLSAgICByZXR1cm4gKF9fbTY0KV9fYnVpbHRpbl9pYTMyX3BjbXBndHcoKF9fdjRoaSlfX20xLCAoX192NGhpKV9fbTIpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9jbXBndF9waTMyKF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpCi17Ci0gICAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9wY21wZ3RkKChfX3Yyc2kpX19tMSwgKF9fdjJzaSlfX20yKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fc2V0emVyb19zaTY0KHZvaWQpCi17Ci0gICAgcmV0dXJuIChfX202NCl7IDBMTCB9OwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9zZXRfcGkzMihpbnQgX19pMSwgaW50IF9faTApCi17Ci0gICAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl92ZWNfaW5pdF92MnNpKF9faTAsIF9faTEpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9zZXRfcGkxNihzaG9ydCBfX3MzLCBzaG9ydCBfX3MyLCBzaG9ydCBfX3MxLCBzaG9ydCBfX3MwKQotewotICAgIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfdmVjX2luaXRfdjRoaShfX3MwLCBfX3MxLCBfX3MyLCBfX3MzKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fc2V0X3BpOChjaGFyIF9fYjcsIGNoYXIgX19iNiwgY2hhciBfX2I1LCBjaGFyIF9fYjQsIGNoYXIgX19iMywgY2hhciBfX2IyLAotICAgICAgICAgICAgY2hhciBfX2IxLCBjaGFyIF9fYjApCi17Ci0gICAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl92ZWNfaW5pdF92OHFpKF9fYjAsIF9fYjEsIF9fYjIsIF9fYjMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYjQsIF9fYjUsIF9fYjYsIF9fYjcpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9zZXQxX3BpMzIoaW50IF9faSkKLXsKLSAgICByZXR1cm4gX21tX3NldF9waTMyKF9faSwgX19pKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fc2V0MV9waTE2KHNob3J0IF9fdykKLXsKLSAgICByZXR1cm4gX21tX3NldF9waTE2KF9fdywgX193LCBfX3csIF9fdyk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX3NldDFfcGk4KGNoYXIgX19iKQotewotICAgIHJldHVybiBfbW1fc2V0X3BpOChfX2IsIF9fYiwgX19iLCBfX2IsIF9fYiwgX19iLCBfX2IsIF9fYik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX3NldHJfcGkzMihpbnQgX19pMCwgaW50IF9faTEpCi17Ci0gICAgcmV0dXJuIF9tbV9zZXRfcGkzMihfX2kxLCBfX2kwKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fc2V0cl9waTE2KHNob3J0IF9fdzAsIHNob3J0IF9fdzEsIHNob3J0IF9fdzIsIHNob3J0IF9fdzMpCi17Ci0gICAgcmV0dXJuIF9tbV9zZXRfcGkxNihfX3czLCBfX3cyLCBfX3cxLCBfX3cwKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fc2V0cl9waTgoY2hhciBfX2IwLCBjaGFyIF9fYjEsIGNoYXIgX19iMiwgY2hhciBfX2IzLCBjaGFyIF9fYjQsIGNoYXIgX19iNSwKLSAgICAgICAgICAgICBjaGFyIF9fYjYsIGNoYXIgX19iNykKLXsKLSAgICByZXR1cm4gX21tX3NldF9waTgoX19iNywgX19iNiwgX19iNSwgX19iNCwgX19iMywgX19iMiwgX19iMSwgX19iMCk7Ci19Ci0KLSN1bmRlZiBfX0RFRkFVTFRfRk5fQVRUUlMKLQotLyogQWxpYXNlcyBmb3IgY29tcGF0aWJpbGl0eS4gKi8KLSNkZWZpbmUgX21fZW1wdHkgX21tX2VtcHR5Ci0jZGVmaW5lIF9tX2Zyb21faW50IF9tbV9jdnRzaTMyX3NpNjQKLSNkZWZpbmUgX21fZnJvbV9pbnQ2NCBfbW1fY3Z0c2k2NF9tNjQKLSNkZWZpbmUgX21fdG9faW50IF9tbV9jdnRzaTY0X3NpMzIKLSNkZWZpbmUgX21fdG9faW50NjQgX21tX2N2dG02NF9zaTY0Ci0jZGVmaW5lIF9tX3BhY2tzc3diIF9tbV9wYWNrc19waTE2Ci0jZGVmaW5lIF9tX3BhY2tzc2R3IF9tbV9wYWNrc19waTMyCi0jZGVmaW5lIF9tX3BhY2t1c3diIF9tbV9wYWNrc19wdTE2Ci0jZGVmaW5lIF9tX3B1bnBja2hidyBfbW1fdW5wYWNraGlfcGk4Ci0jZGVmaW5lIF9tX3B1bnBja2h3ZCBfbW1fdW5wYWNraGlfcGkxNgotI2RlZmluZSBfbV9wdW5wY2toZHEgX21tX3VucGFja2hpX3BpMzIKLSNkZWZpbmUgX21fcHVucGNrbGJ3IF9tbV91bnBhY2tsb19waTgKLSNkZWZpbmUgX21fcHVucGNrbHdkIF9tbV91bnBhY2tsb19waTE2Ci0jZGVmaW5lIF9tX3B1bnBja2xkcSBfbW1fdW5wYWNrbG9fcGkzMgotI2RlZmluZSBfbV9wYWRkYiBfbW1fYWRkX3BpOAotI2RlZmluZSBfbV9wYWRkdyBfbW1fYWRkX3BpMTYKLSNkZWZpbmUgX21fcGFkZGQgX21tX2FkZF9waTMyCi0jZGVmaW5lIF9tX3BhZGRzYiBfbW1fYWRkc19waTgKLSNkZWZpbmUgX21fcGFkZHN3IF9tbV9hZGRzX3BpMTYKLSNkZWZpbmUgX21fcGFkZHVzYiBfbW1fYWRkc19wdTgKLSNkZWZpbmUgX21fcGFkZHVzdyBfbW1fYWRkc19wdTE2Ci0jZGVmaW5lIF9tX3BzdWJiIF9tbV9zdWJfcGk4Ci0jZGVmaW5lIF9tX3BzdWJ3IF9tbV9zdWJfcGkxNgotI2RlZmluZSBfbV9wc3ViZCBfbW1fc3ViX3BpMzIKLSNkZWZpbmUgX21fcHN1YnNiIF9tbV9zdWJzX3BpOAotI2RlZmluZSBfbV9wc3Vic3cgX21tX3N1YnNfcGkxNgotI2RlZmluZSBfbV9wc3VidXNiIF9tbV9zdWJzX3B1OAotI2RlZmluZSBfbV9wc3VidXN3IF9tbV9zdWJzX3B1MTYKLSNkZWZpbmUgX21fcG1hZGR3ZCBfbW1fbWFkZF9waTE2Ci0jZGVmaW5lIF9tX3BtdWxodyBfbW1fbXVsaGlfcGkxNgotI2RlZmluZSBfbV9wbXVsbHcgX21tX211bGxvX3BpMTYKLSNkZWZpbmUgX21fcHNsbHcgX21tX3NsbF9waTE2Ci0jZGVmaW5lIF9tX3BzbGx3aSBfbW1fc2xsaV9waTE2Ci0jZGVmaW5lIF9tX3BzbGxkIF9tbV9zbGxfcGkzMgotI2RlZmluZSBfbV9wc2xsZGkgX21tX3NsbGlfcGkzMgotI2RlZmluZSBfbV9wc2xscSBfbW1fc2xsX3NpNjQKLSNkZWZpbmUgX21fcHNsbHFpIF9tbV9zbGxpX3NpNjQKLSNkZWZpbmUgX21fcHNyYXcgX21tX3NyYV9waTE2Ci0jZGVmaW5lIF9tX3BzcmF3aSBfbW1fc3JhaV9waTE2Ci0jZGVmaW5lIF9tX3BzcmFkIF9tbV9zcmFfcGkzMgotI2RlZmluZSBfbV9wc3JhZGkgX21tX3NyYWlfcGkzMgotI2RlZmluZSBfbV9wc3JsdyBfbW1fc3JsX3BpMTYKLSNkZWZpbmUgX21fcHNybHdpIF9tbV9zcmxpX3BpMTYKLSNkZWZpbmUgX21fcHNybGQgX21tX3NybF9waTMyCi0jZGVmaW5lIF9tX3BzcmxkaSBfbW1fc3JsaV9waTMyCi0jZGVmaW5lIF9tX3BzcmxxIF9tbV9zcmxfc2k2NAotI2RlZmluZSBfbV9wc3JscWkgX21tX3NybGlfc2k2NAotI2RlZmluZSBfbV9wYW5kIF9tbV9hbmRfc2k2NAotI2RlZmluZSBfbV9wYW5kbiBfbW1fYW5kbm90X3NpNjQKLSNkZWZpbmUgX21fcG9yIF9tbV9vcl9zaTY0Ci0jZGVmaW5lIF9tX3B4b3IgX21tX3hvcl9zaTY0Ci0jZGVmaW5lIF9tX3BjbXBlcWIgX21tX2NtcGVxX3BpOAotI2RlZmluZSBfbV9wY21wZXF3IF9tbV9jbXBlcV9waTE2Ci0jZGVmaW5lIF9tX3BjbXBlcWQgX21tX2NtcGVxX3BpMzIKLSNkZWZpbmUgX21fcGNtcGd0YiBfbW1fY21wZ3RfcGk4Ci0jZGVmaW5lIF9tX3BjbXBndHcgX21tX2NtcGd0X3BpMTYKLSNkZWZpbmUgX21fcGNtcGd0ZCBfbW1fY21wZ3RfcGkzMgotCi0jZW5kaWYgLyogX19NTUlOVFJJTl9IICovCi0KZGlmZiAtLWdpdCBhL2NsYW5nLTI1NzcxMTMvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvbW9kdWxlLm1vZHVsZW1hcCBiL2NsYW5nLTI1NzcxMTMvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvbW9kdWxlLm1vZHVsZW1hcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjE0N2U4OS4uMDAwMDAwMAotLS0gYS9jbGFuZy0yNTc3MTEzL2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL21vZHVsZS5tb2R1bGVtYXAKKysrIC9kZXYvbnVsbApAQCAtMSwxNzEgKzAsMCBAQAotbW9kdWxlIF9CdWlsdGluX2ludHJpbnNpY3MgW3N5c3RlbV0gW2V4dGVybl9jXSB7Ci0gIGV4cGxpY2l0IG1vZHVsZSBhbHRpdmVjIHsKLSAgICByZXF1aXJlcyBhbHRpdmVjCi0gICAgaGVhZGVyICJhbHRpdmVjLmgiCi0gIH0KLQotICBleHBsaWNpdCBtb2R1bGUgYXJtIHsKLSAgICByZXF1aXJlcyBhcm0KLQotICAgIGV4cGxpY2l0IG1vZHVsZSBhY2xlIHsKLSAgICAgIGhlYWRlciAiYXJtX2FjbGUuaCIKLSAgICAgIGV4cG9ydCAqCi0gICAgfQotCi0gICAgZXhwbGljaXQgbW9kdWxlIG5lb24gewotICAgICAgcmVxdWlyZXMgbmVvbgotICAgICAgaGVhZGVyICJhcm1fbmVvbi5oIgotICAgICAgZXhwb3J0ICoKLSAgICB9Ci0gIH0KLQotICBleHBsaWNpdCBtb2R1bGUgaW50ZWwgewotICAgIHJlcXVpcmVzIHg4NgotICAgIGV4cG9ydCAqCi0KLSAgICBoZWFkZXIgImltbWludHJpbi5oIgotICAgIGhlYWRlciAieDg2aW50cmluLmgiCi0KLSAgICBleHBsaWNpdCBtb2R1bGUgbW1fbWFsbG9jIHsKLSAgICAgIGhlYWRlciAibW1fbWFsbG9jLmgiCi0gICAgICBleHBvcnQgKiAvLyBub3RlOiBmb3IgPHN0ZGxpYi5oPiBkZXBlbmRlbmN5Ci0gICAgfQotCi0gICAgZXhwbGljaXQgbW9kdWxlIGNwdWlkIHsKLSAgICAgIGhlYWRlciAiY3B1aWQuaCIKLSAgICB9Ci0KLSAgICBleHBsaWNpdCBtb2R1bGUgbW14IHsKLSAgICAgIGhlYWRlciAibW1pbnRyaW4uaCIKLSAgICB9Ci0KLSAgICBleHBsaWNpdCBtb2R1bGUgZjE2YyB7Ci0gICAgICBoZWFkZXIgImYxNmNpbnRyaW4uaCIKLSAgICB9Ci0KLSAgICBleHBsaWNpdCBtb2R1bGUgc3NlIHsKLSAgICAgIGV4cG9ydCBtbXgKLSAgICAgIGV4cG9ydCBzc2UyIC8vIG5vdGU6IGZvciBoYWNraXNoIDxlbW1pbnRyaW4uaD4gZGVwZW5kZW5jeQotICAgICAgaGVhZGVyICJ4bW1pbnRyaW4uaCIKLSAgICB9Ci0KLSAgICBleHBsaWNpdCBtb2R1bGUgc3NlMiB7Ci0gICAgICBleHBvcnQgc3NlCi0gICAgICBoZWFkZXIgImVtbWludHJpbi5oIgotICAgIH0KLQotICAgIGV4cGxpY2l0IG1vZHVsZSBzc2UzIHsKLSAgICAgIGV4cG9ydCBzc2UyCi0gICAgICBoZWFkZXIgInBtbWludHJpbi5oIgotICAgIH0KLQotICAgIGV4cGxpY2l0IG1vZHVsZSBzc3NlMyB7Ci0gICAgICBleHBvcnQgc3NlMwotICAgICAgaGVhZGVyICJ0bW1pbnRyaW4uaCIKLSAgICB9Ci0KLSAgICBleHBsaWNpdCBtb2R1bGUgc3NlNF8xIHsKLSAgICAgIGV4cG9ydCBzc3NlMwotICAgICAgaGVhZGVyICJzbW1pbnRyaW4uaCIKLSAgICB9Ci0KLSAgICBleHBsaWNpdCBtb2R1bGUgc3NlNF8yIHsKLSAgICAgIGV4cG9ydCBzc2U0XzEKLSAgICAgIGhlYWRlciAibm1taW50cmluLmgiCi0gICAgfQotCi0gICAgZXhwbGljaXQgbW9kdWxlIHNzZTRhIHsKLSAgICAgIGV4cG9ydCBzc2UzCi0gICAgICBoZWFkZXIgImFtbWludHJpbi5oIgotICAgIH0KLQotICAgIGV4cGxpY2l0IG1vZHVsZSBhdnggewotICAgICAgZXhwb3J0IHNzZTRfMgotICAgICAgaGVhZGVyICJhdnhpbnRyaW4uaCIKLSAgICB9Ci0KLSAgICBleHBsaWNpdCBtb2R1bGUgYXZ4MiB7Ci0gICAgICBleHBvcnQgYXZ4Ci0gICAgICBoZWFkZXIgImF2eDJpbnRyaW4uaCIKLSAgICB9Ci0KLSAgICBleHBsaWNpdCBtb2R1bGUgYXZ4NTEyZiB7Ci0gICAgICBleHBvcnQgYXZ4MgotICAgICAgaGVhZGVyICJhdng1MTJmaW50cmluLmgiCi0gICAgfQotCi0gICAgZXhwbGljaXQgbW9kdWxlIGF2eDUxMmVyIHsKLSAgICAgIGhlYWRlciAiYXZ4NTEyZXJpbnRyaW4uaCIKLSAgICB9Ci0KLSAgICBleHBsaWNpdCBtb2R1bGUgYm1pIHsKLSAgICAgIGhlYWRlciAiYm1paW50cmluLmgiCi0gICAgfQotCi0gICAgZXhwbGljaXQgbW9kdWxlIGJtaTIgewotICAgICAgaGVhZGVyICJibWkyaW50cmluLmgiCi0gICAgfQotCi0gICAgZXhwbGljaXQgbW9kdWxlIGZtYSB7Ci0gICAgICBoZWFkZXIgImZtYWludHJpbi5oIgotICAgIH0KLQotICAgIGV4cGxpY2l0IG1vZHVsZSBmbWE0IHsKLSAgICAgIGV4cG9ydCBzc2UzCi0gICAgICBoZWFkZXIgImZtYTRpbnRyaW4uaCIKLSAgICB9Ci0KLSAgICBleHBsaWNpdCBtb2R1bGUgbHpjbnQgewotICAgICAgaGVhZGVyICJsemNudGludHJpbi5oIgotICAgIH0KLQotICAgIGV4cGxpY2l0IG1vZHVsZSBwb3BjbnQgewotICAgICAgaGVhZGVyICJwb3BjbnRpbnRyaW4uaCIKLSAgICB9Ci0KLSAgICBleHBsaWNpdCBtb2R1bGUgbW0zZG5vdyB7Ci0gICAgICBoZWFkZXIgIm1tM2Rub3cuaCIKLSAgICB9Ci0KLSAgICBleHBsaWNpdCBtb2R1bGUgeG9wIHsKLSAgICAgIGV4cG9ydCBmbWE0Ci0gICAgICBoZWFkZXIgInhvcGludHJpbi5oIgotICAgIH0KLQotICAgIGV4cGxpY2l0IG1vZHVsZSBhZXNfcGNsbXVsIHsKLSAgICAgIGhlYWRlciAid21taW50cmluLmgiCi0gICAgICBleHBvcnQgYWVzCi0gICAgICBleHBvcnQgcGNsbXVsCi0gICAgfQotCi0gICAgZXhwbGljaXQgbW9kdWxlIGFlcyB7Ci0gICAgICBoZWFkZXIgIl9fd21taW50cmluX2Flcy5oIgotICAgIH0KLQotICAgIGV4cGxpY2l0IG1vZHVsZSBwY2xtdWwgewotICAgICAgaGVhZGVyICJfX3dtbWludHJpbl9wY2xtdWwuaCIKLSAgICB9Ci0gIH0KLQotICBleHBsaWNpdCBtb2R1bGUgc3lzdGVteiB7Ci0gICAgcmVxdWlyZXMgc3lzdGVtegotICAgIGV4cG9ydCAqCi0KLSAgICBoZWFkZXIgInMzOTBpbnRyaW4uaCIKLQotICAgIGV4cGxpY2l0IG1vZHVsZSBodG0gewotICAgICAgcmVxdWlyZXMgaHRtCi0gICAgICBoZWFkZXIgImh0bWludHJpbi5oIgotICAgICAgaGVhZGVyICJodG14bGludHJpbi5oIgotICAgIH0KLQotICAgIGV4cGxpY2l0IG1vZHVsZSB6dmVjdG9yIHsKLSAgICAgIHJlcXVpcmVzIHp2ZWN0b3IsIHZ4Ci0gICAgICBoZWFkZXIgInZlY2ludHJpbi5oIgotICAgIH0KLSAgfQotfQotCi1tb2R1bGUgX0J1aWx0aW5fc3RkZGVmX21heF9hbGlnbl90IFtzeXN0ZW1dIFtleHRlcm5fY10gewotICBoZWFkZXIgIl9fc3RkZGVmX21heF9hbGlnbl90LmgiCi19CmRpZmYgLS1naXQgYS9jbGFuZy0yNTc3MTEzL2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL25tbWludHJpbi5oIGIvY2xhbmctMjU3NzExMy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9ubW1pbnRyaW4uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTdmZWMxNS4uMDAwMDAwMAotLS0gYS9jbGFuZy0yNTc3MTEzL2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL25tbWludHJpbi5oCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotLyo9PT0tLS0tIG5tbWludHJpbi5oIC0gU1NFNCBpbnRyaW5zaWNzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQotICoKLSAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKLSAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCi0gKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCi0gKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCi0gKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKLSAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Ci0gKgotICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KLSAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgotICoKLSAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCi0gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKLSAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgotICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKLSAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KLSAqIFRIRSBTT0ZUV0FSRS4KLSAqCi0gKj09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09Ci0gKi8KLQotI2lmbmRlZiBfTk1NSU5UUklOX0gKLSNkZWZpbmUgX05NTUlOVFJJTl9ICi0KLS8qIFRvIG1hdGNoIGV4cGVjdGF0aW9ucyBvZiBnY2Mgd2UgcHV0IHRoZSBzc2U0LjIgZGVmaW5pdGlvbnMgaW50byBzbW1pbnRyaW4uaCwKLSAgIGp1c3QgaW5jbHVkZSBpdCBub3cgdGhlbi4gICovCi0jaW5jbHVkZSA8c21taW50cmluLmg+Ci0jZW5kaWYgLyogX05NTUlOVFJJTl9IICovCmRpZmYgLS1naXQgYS9jbGFuZy0yNTc3MTEzL2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL3BtbWludHJpbi5oIGIvY2xhbmctMjU3NzExMy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9wbW1pbnRyaW4uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGZmOTQwOS4uMDAwMDAwMAotLS0gYS9jbGFuZy0yNTc3MTEzL2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL3BtbWludHJpbi5oCisrKyAvZGV2L251bGwKQEAgLTEsMTE2ICswLDAgQEAKLS8qPT09LS0tLSBwbW1pbnRyaW4uaCAtIFNTRTMgaW50cmluc2ljcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KLSAqCi0gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5Ci0gKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAotICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cwotICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAotICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCi0gKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgotICoKLSAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCi0gKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KLSAqCi0gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgotICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCi0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKLSAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCi0gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCi0gKiBUSEUgU09GVFdBUkUuCi0gKgotICo9PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQotICovCi0KLSNpZm5kZWYgX19QTU1JTlRSSU5fSAotI2RlZmluZSBfX1BNTUlOVFJJTl9ICi0KLSNpbmNsdWRlIDxlbW1pbnRyaW4uaD4KLQotLyogRGVmaW5lIHRoZSBkZWZhdWx0IGF0dHJpYnV0ZXMgZm9yIHRoZSBmdW5jdGlvbnMgaW4gdGhpcyBmaWxlLiAqLwotI2RlZmluZSBfX0RFRkFVTFRfRk5fQVRUUlMgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fLCBfX3RhcmdldF9fKCJzc2UzIikpKQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2xkZHF1X3NpMTI4KF9fbTEyOGkgY29uc3QgKl9fcCkKLXsKLSAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX2xkZHF1KChjaGFyIGNvbnN0ICopX19wKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2FkZHN1Yl9wcyhfX20xMjggX19hLCBfX20xMjggX19iKQotewotICByZXR1cm4gX19idWlsdGluX2lhMzJfYWRkc3VicHMoX19hLCBfX2IpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1faGFkZF9wcyhfX20xMjggX19hLCBfX20xMjggX19iKQotewotICByZXR1cm4gX19idWlsdGluX2lhMzJfaGFkZHBzKF9fYSwgX19iKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2hzdWJfcHMoX19tMTI4IF9fYSwgX19tMTI4IF9fYikKLXsKLSAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX2hzdWJwcyhfX2EsIF9fYik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tb3ZlaGR1cF9wcyhfX20xMjggX19hKQotewotICByZXR1cm4gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19hLCBfX2EsIDEsIDEsIDMsIDMpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbW92ZWxkdXBfcHMoX19tMTI4IF9fYSkKLXsKLSAgcmV0dXJuIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fYSwgX19hLCAwLCAwLCAyLCAyKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9hZGRzdWJfcGQoX19tMTI4ZCBfX2EsIF9fbTEyOGQgX19iKQotewotICByZXR1cm4gX19idWlsdGluX2lhMzJfYWRkc3VicGQoX19hLCBfX2IpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2hhZGRfcGQoX19tMTI4ZCBfX2EsIF9fbTEyOGQgX19iKQotewotICByZXR1cm4gX19idWlsdGluX2lhMzJfaGFkZHBkKF9fYSwgX19iKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9oc3ViX3BkKF9fbTEyOGQgX19hLCBfX20xMjhkIF9fYikKLXsKLSAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX2hzdWJwZChfX2EsIF9fYik7Ci19Ci0KLSNkZWZpbmUgICAgICAgIF9tbV9sb2FkZHVwX3BkKGRwKSAgICAgICAgX21tX2xvYWQxX3BkKGRwKQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21vdmVkdXBfcGQoX19tMTI4ZCBfX2EpCi17Ci0gIHJldHVybiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX2EsIF9fYSwgMCwgMCk7Ci19Ci0KLSNkZWZpbmUgX01NX0RFTk9STUFMU19aRVJPX09OICAgKDB4MDA0MCkKLSNkZWZpbmUgX01NX0RFTk9STUFMU19aRVJPX09GRiAgKDB4MDAwMCkKLQotI2RlZmluZSBfTU1fREVOT1JNQUxTX1pFUk9fTUFTSyAoMHgwMDQwKQotCi0jZGVmaW5lIF9NTV9HRVRfREVOT1JNQUxTX1pFUk9fTU9ERSgpIChfbW1fZ2V0Y3NyKCkgJiBfTU1fREVOT1JNQUxTX1pFUk9fTUFTSykKLSNkZWZpbmUgX01NX1NFVF9ERU5PUk1BTFNfWkVST19NT0RFKHgpIChfbW1fc2V0Y3NyKChfbW1fZ2V0Y3NyKCkgJiB+X01NX0RFTk9STUFMU19aRVJPX01BU0spIHwgKHgpKSkKLQotc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tb25pdG9yKHZvaWQgY29uc3QgKl9fcCwgdW5zaWduZWQgX19leHRlbnNpb25zLCB1bnNpZ25lZCBfX2hpbnRzKQotewotICBfX2J1aWx0aW5faWEzMl9tb25pdG9yKCh2b2lkICopX19wLCBfX2V4dGVuc2lvbnMsIF9faGludHMpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX213YWl0KHVuc2lnbmVkIF9fZXh0ZW5zaW9ucywgdW5zaWduZWQgX19oaW50cykKLXsKLSAgX19idWlsdGluX2lhMzJfbXdhaXQoX19leHRlbnNpb25zLCBfX2hpbnRzKTsKLX0KLQotI3VuZGVmIF9fREVGQVVMVF9GTl9BVFRSUwotCi0jZW5kaWYgLyogX19QTU1JTlRSSU5fSCAqLwpkaWZmIC0tZ2l0IGEvY2xhbmctMjU3NzExMy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9wb3BjbnRpbnRyaW4uaCBiL2NsYW5nLTI1NzcxMTMvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvcG9wY250aW50cmluLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZmY2RhNjUuLjAwMDAwMDAKLS0tIGEvY2xhbmctMjU3NzExMy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9wb3BjbnRpbnRyaW4uaAorKysgL2Rldi9udWxsCkBAIC0xLDU4ICswLDAgQEAKLS8qPT09LS0tLSBwb3BjbnRpbnRyaW4uaCAtIFBPUENOVCBpbnRyaW5zaWNzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KLSAqCi0gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5Ci0gKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAotICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cwotICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAotICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCi0gKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgotICoKLSAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCi0gKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KLSAqCi0gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgotICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCi0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKLSAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCi0gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCi0gKiBUSEUgU09GVFdBUkUuCi0gKgotICo9PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQotICovCi0KLSNpZm5kZWYgX1BPUENOVElOVFJJTl9ICi0jZGVmaW5lIF9QT1BDTlRJTlRSSU5fSAotCi0vKiBEZWZpbmUgdGhlIGRlZmF1bHQgYXR0cmlidXRlcyBmb3IgdGhlIGZ1bmN0aW9ucyBpbiB0aGlzIGZpbGUuICovCi0jZGVmaW5lIF9fREVGQVVMVF9GTl9BVFRSUyBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18sIF9fdGFyZ2V0X18oInBvcGNudCIpKSkKLQotc3RhdGljIF9faW5saW5lX18gaW50IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX3BvcGNudF91MzIodW5zaWduZWQgaW50IF9fQSkKLXsKLSAgcmV0dXJuIF9fYnVpbHRpbl9wb3Bjb3VudChfX0EpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBpbnQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fcG9wY250MzIoaW50IF9fQSkKLXsKLSAgcmV0dXJuIF9fYnVpbHRpbl9wb3Bjb3VudChfX0EpOwotfQotCi0jaWZkZWYgX194ODZfNjRfXwotc3RhdGljIF9faW5saW5lX18gbG9uZyBsb25nIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX3BvcGNudF91NjQodW5zaWduZWQgbG9uZyBsb25nIF9fQSkKLXsKLSAgcmV0dXJuIF9fYnVpbHRpbl9wb3Bjb3VudGxsKF9fQSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIGxvbmcgbG9uZyBfX0RFRkFVTFRfRk5fQVRUUlMKLV9wb3BjbnQ2NChsb25nIGxvbmcgX19BKQotewotICByZXR1cm4gX19idWlsdGluX3BvcGNvdW50bGwoX19BKTsKLX0KLSNlbmRpZiAvKiBfX3g4Nl82NF9fICovCi0KLSN1bmRlZiBfX0RFRkFVTFRfRk5fQVRUUlMKLQotI2VuZGlmIC8qIF9QT1BDTlRJTlRSSU5fSCAqLwpkaWZmIC0tZ2l0IGEvY2xhbmctMjU3NzExMy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9wcmZjaHdpbnRyaW4uaCBiL2NsYW5nLTI1NzcxMTMvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvcHJmY2h3aW50cmluLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJhMDI4NTcuLjAwMDAwMDAKLS0tIGEvY2xhbmctMjU3NzExMy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9wcmZjaHdpbnRyaW4uaAorKysgL2Rldi9udWxsCkBAIC0xLDQ1ICswLDAgQEAKLS8qPT09LS0tLSBwcmZjaHdpbnRyaW4uaCAtIFBSRUZFVENIVyBpbnRyaW5zaWMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KLSAqCi0gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5Ci0gKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAotICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cwotICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAotICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCi0gKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgotICoKLSAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCi0gKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KLSAqCi0gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgotICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCi0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKLSAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCi0gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCi0gKiBUSEUgU09GVFdBUkUuCi0gKgotICo9PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQotICovCi0KLSNpZiAhZGVmaW5lZChfX1g4NklOVFJJTl9IKSAmJiAhZGVmaW5lZChfTU0zRE5PV19IX0lOQ0xVREVEKQotI2Vycm9yICJOZXZlciB1c2UgPHByZmNod2ludHJpbi5oPiBkaXJlY3RseTsgaW5jbHVkZSA8eDg2aW50cmluLmg+IG9yIDxtbTNkbm93Lmg+IGluc3RlYWQuIgotI2VuZGlmCi0KLSNpZm5kZWYgX19QUkZDSFdJTlRSSU5fSAotI2RlZmluZSBfX1BSRkNIV0lOVFJJTl9ICi0KLSNpZiBkZWZpbmVkKF9fUFJGQ0hXX18pIHx8IGRlZmluZWQoX18zZE5PV19fKQotc3RhdGljIF9faW5saW5lX18gdm9pZCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18pKQotX21fcHJlZmV0Y2godm9pZCAqX19QKQotewotICBfX2J1aWx0aW5fcHJlZmV0Y2ggKF9fUCwgMCwgMyAvKiBfTU1fSElOVF9UMCAqLyk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fKSkKLV9tX3ByZWZldGNodyh2b2lkICpfX1ApCi17Ci0gIF9fYnVpbHRpbl9wcmVmZXRjaCAoX19QLCAxLCAzIC8qIF9NTV9ISU5UX1QwICovKTsKLX0KLSNlbmRpZgotCi0jZW5kaWYgLyogX19QUkZDSFdJTlRSSU5fSCAqLwpkaWZmIC0tZ2l0IGEvY2xhbmctMjU3NzExMy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9yZHNlZWRpbnRyaW4uaCBiL2NsYW5nLTI1NzcxMTMvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvcmRzZWVkaW50cmluLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQyMWY0ZWEuLjAwMDAwMDAKLS0tIGEvY2xhbmctMjU3NzExMy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9yZHNlZWRpbnRyaW4uaAorKysgL2Rldi9udWxsCkBAIC0xLDU2ICswLDAgQEAKLS8qPT09LS0tLSByZHNlZWRpbnRyaW4uaCAtIFJEU0VFRCBpbnRyaW5zaWNzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KLSAqCi0gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5Ci0gKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAotICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cwotICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAotICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCi0gKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgotICoKLSAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCi0gKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KLSAqCi0gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgotICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCi0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKLSAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCi0gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCi0gKiBUSEUgU09GVFdBUkUuCi0gKgotICo9PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQotICovCi0KLSNpZm5kZWYgX19YODZJTlRSSU5fSAotI2Vycm9yICJOZXZlciB1c2UgPHJkc2VlZGludHJpbi5oPiBkaXJlY3RseTsgaW5jbHVkZSA8eDg2aW50cmluLmg+IGluc3RlYWQuIgotI2VuZGlmCi0KLSNpZm5kZWYgX19SRFNFRURJTlRSSU5fSAotI2RlZmluZSBfX1JEU0VFRElOVFJJTl9ICi0KLS8qIERlZmluZSB0aGUgZGVmYXVsdCBhdHRyaWJ1dGVzIGZvciB0aGUgZnVuY3Rpb25zIGluIHRoaXMgZmlsZS4gKi8KLSNkZWZpbmUgX19ERUZBVUxUX0ZOX0FUVFJTIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXywgX190YXJnZXRfXygicmRzZWVkIikpKQotCi1zdGF0aWMgX19pbmxpbmVfXyBpbnQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fcmRzZWVkMTZfc3RlcCh1bnNpZ25lZCBzaG9ydCAqX19wKQotewotICByZXR1cm4gX19idWlsdGluX2lhMzJfcmRzZWVkMTZfc3RlcChfX3ApOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBpbnQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fcmRzZWVkMzJfc3RlcCh1bnNpZ25lZCBpbnQgKl9fcCkKLXsKLSAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3Jkc2VlZDMyX3N0ZXAoX19wKTsKLX0KLQotI2lmZGVmIF9feDg2XzY0X18KLXN0YXRpYyBfX2lubGluZV9fIGludCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9yZHNlZWQ2NF9zdGVwKHVuc2lnbmVkIGxvbmcgbG9uZyAqX19wKQotewotICByZXR1cm4gX19idWlsdGluX2lhMzJfcmRzZWVkNjRfc3RlcChfX3ApOwotfQotI2VuZGlmCi0KLSN1bmRlZiBfX0RFRkFVTFRfRk5fQVRUUlMKLQotI2VuZGlmIC8qIF9fUkRTRUVESU5UUklOX0ggKi8KZGlmZiAtLWdpdCBhL2NsYW5nLTI1NzcxMTMvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvcnRtaW50cmluLmggYi9jbGFuZy0yNTc3MTEzL2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL3J0bWludHJpbi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNmE1OGQ3Li4wMDAwMDAwCi0tLSBhL2NsYW5nLTI1NzcxMTMvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvcnRtaW50cmluLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1OSArMCwwIEBACi0vKj09PS0tLS0gcnRtaW50cmluLmggLSBSVE0gaW50cmluc2ljcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09Ci0gKgotICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQotICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKLSAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKLSAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKLSAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcwotICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKLSAqCi0gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgotICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCi0gKgotICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKLSAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAotICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCi0gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAotICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgotICogVEhFIFNPRlRXQVJFLgotICoKLSAqPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KLSAqLwotCi0jaWZuZGVmIF9fSU1NSU5UUklOX0gKLSNlcnJvciAiTmV2ZXIgdXNlIDxydG1pbnRyaW4uaD4gZGlyZWN0bHk7IGluY2x1ZGUgPGltbWludHJpbi5oPiBpbnN0ZWFkLiIKLSNlbmRpZgotCi0jaWZuZGVmIF9fUlRNSU5UUklOX0gKLSNkZWZpbmUgX19SVE1JTlRSSU5fSAotCi0jZGVmaW5lIF9YQkVHSU5fU1RBUlRFRCAgICh+MHUpCi0jZGVmaW5lIF9YQUJPUlRfRVhQTElDSVQgICgxIDw8IDApCi0jZGVmaW5lIF9YQUJPUlRfUkVUUlkgICAgICgxIDw8IDEpCi0jZGVmaW5lIF9YQUJPUlRfQ09ORkxJQ1QgICgxIDw8IDIpCi0jZGVmaW5lIF9YQUJPUlRfQ0FQQUNJVFkgICgxIDw8IDMpCi0jZGVmaW5lIF9YQUJPUlRfREVCVUcgICAgICgxIDw8IDQpCi0jZGVmaW5lIF9YQUJPUlRfTkVTVEVEICAgICgxIDw8IDUpCi0jZGVmaW5lIF9YQUJPUlRfQ09ERSh4KSAgICgoKHgpID4+IDI0KSAmIDB4RkYpCi0KLS8qIERlZmluZSB0aGUgZGVmYXVsdCBhdHRyaWJ1dGVzIGZvciB0aGUgZnVuY3Rpb25zIGluIHRoaXMgZmlsZS4gKi8KLSNkZWZpbmUgX19ERUZBVUxUX0ZOX0FUVFJTIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXywgX190YXJnZXRfXygicnRtIikpKQotCi1zdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBpbnQgX19ERUZBVUxUX0ZOX0FUVFJTCi1feGJlZ2luKHZvaWQpCi17Ci0gIHJldHVybiBfX2J1aWx0aW5faWEzMl94YmVnaW4oKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV94ZW5kKHZvaWQpCi17Ci0gIF9fYnVpbHRpbl9pYTMyX3hlbmQoKTsKLX0KLQotI2RlZmluZSBfeGFib3J0KGltbSkgX19idWlsdGluX2lhMzJfeGFib3J0KChpbW0pKQotCi0jdW5kZWYgX19ERUZBVUxUX0ZOX0FUVFJTCi0KLSNlbmRpZiAvKiBfX1JUTUlOVFJJTl9IICovCmRpZmYgLS1naXQgYS9jbGFuZy0yNTc3MTEzL2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL3MzOTBpbnRyaW4uaCBiL2NsYW5nLTI1NzcxMTMvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvczM5MGludHJpbi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNTEyNzRjLi4wMDAwMDAwCi0tLSBhL2NsYW5nLTI1NzcxMTMvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvczM5MGludHJpbi5oCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotLyo9PT0tLS0tIHMzOTBpbnRyaW4uaCAtIFN5c3RlbVogaW50cmluc2ljcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQotICoKLSAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKLSAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCi0gKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCi0gKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCi0gKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKLSAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Ci0gKgotICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KLSAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgotICoKLSAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCi0gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKLSAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgotICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKLSAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KLSAqIFRIRSBTT0ZUV0FSRS4KLSAqCi0gKj09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09Ci0gKi8KLQotI2lmbmRlZiBfX1MzOTBJTlRSSU5fSAotI2RlZmluZSBfX1MzOTBJTlRSSU5fSAotCi0jaWZuZGVmIF9fczM5MF9fCi0jZXJyb3IgIjxzMzkwaW50cmluLmg+IGlzIGZvciBzMzkwIG9ubHkiCi0jZW5kaWYKLQotI2lmZGVmIF9fSFRNX18KLSNpbmNsdWRlIDxodG1pbnRyaW4uaD4KLSNlbmRpZgotCi0jaWZkZWYgX19WRUNfXwotI2luY2x1ZGUgPHZlY2ludHJpbi5oPgotI2VuZGlmCi0KLSNlbmRpZiAvKiBfX1MzOTBJTlRSSU5fSCovCmRpZmYgLS1naXQgYS9jbGFuZy0yNTc3MTEzL2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL3Nhbml0aXplci9hbGxvY2F0b3JfaW50ZXJmYWNlLmggYi9jbGFuZy0yNTc3MTEzL2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL3Nhbml0aXplci9hbGxvY2F0b3JfaW50ZXJmYWNlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFiMjUxZjguLjAwMDAwMDAKLS0tIGEvY2xhbmctMjU3NzExMy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9zYW5pdGl6ZXIvYWxsb2NhdG9yX2ludGVyZmFjZS5oCisrKyAvZGV2L251bGwKQEAgLTEsNjYgKzAsMCBAQAotLy89PT0tLSBhbGxvY2F0b3JfaW50ZXJmYWNlLmggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09Ly8KLS8vCi0vLyAgICAgICAgICAgICAgICAgICAgIFRoZSBMTFZNIENvbXBpbGVyIEluZnJhc3RydWN0dXJlCi0vLwotLy8gVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBVbml2ZXJzaXR5IG9mIElsbGlub2lzIE9wZW4gU291cmNlCi0vLyBMaWNlbnNlLiBTZWUgTElDRU5TRS5UWFQgZm9yIGRldGFpbHMuCi0vLwotLy89PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09Ly8KLS8vCi0vLyBQdWJsaWMgaW50ZXJmYWNlIGhlYWRlciBmb3IgYWxsb2NhdG9yIHVzZWQgaW4gc2FuaXRpemVycyAoQVNhbi9UU2FuL01TYW4pLgotLy89PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09Ly8KLSNpZm5kZWYgU0FOSVRJWkVSX0FMTE9DQVRPUl9JTlRFUkZBQ0VfSAotI2RlZmluZSBTQU5JVElaRVJfQUxMT0NBVE9SX0lOVEVSRkFDRV9ICi0KLSNpbmNsdWRlIDxzdGRkZWYuaD4KLQotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiIHsKLSNlbmRpZgotICAvKiBSZXR1cm5zIHRoZSBlc3RpbWF0ZWQgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgd2lsbCBiZSByZXNlcnZlZCBieSBhbGxvY2F0b3IKLSAgICAgZm9yIHJlcXVlc3Qgb2YgInNpemUiIGJ5dGVzLiBJZiBhbGxvY2F0b3IgY2FuJ3QgYWxsb2NhdGUgdGhhdCBtdWNoCi0gICAgIG1lbW9yeSwgcmV0dXJucyB0aGUgbWF4aW1hbCBwb3NzaWJsZSBhbGxvY2F0aW9uIHNpemUsIG90aGVyd2lzZSByZXR1cm5zCi0gICAgICJzaXplIi4gKi8KLSAgc2l6ZV90IF9fc2FuaXRpemVyX2dldF9lc3RpbWF0ZWRfYWxsb2NhdGVkX3NpemUoc2l6ZV90IHNpemUpOwotCi0gIC8qIFJldHVybnMgdHJ1ZSBpZiBwIHdhcyByZXR1cm5lZCBieSB0aGUgYWxsb2NhdG9yIGFuZAotICAgICBpcyBub3QgeWV0IGZyZWVkLiAqLwotICBpbnQgX19zYW5pdGl6ZXJfZ2V0X293bmVyc2hpcChjb25zdCB2b2xhdGlsZSB2b2lkICpwKTsKLQotICAvKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgcmVzZXJ2ZWQgZm9yIHRoZSBwb2ludGVyIHAuCi0gICAgIFJlcXVpcmVzIChnZXRfb3duZXJzaGlwKHApID09IHRydWUpIG9yIChwID09IDApLiAqLwotICBzaXplX3QgX19zYW5pdGl6ZXJfZ2V0X2FsbG9jYXRlZF9zaXplKGNvbnN0IHZvbGF0aWxlIHZvaWQgKnApOwotCi0gIC8qIE51bWJlciBvZiBieXRlcywgYWxsb2NhdGVkIGFuZCBub3QgeWV0IGZyZWVkIGJ5IHRoZSBhcHBsaWNhdGlvbi4gKi8KLSAgc2l6ZV90IF9fc2FuaXRpemVyX2dldF9jdXJyZW50X2FsbG9jYXRlZF9ieXRlcygpOwotCi0gIC8qIE51bWJlciBvZiBieXRlcywgbW1hcGVkIGJ5IHRoZSBhbGxvY2F0b3IgdG8gZnVsZmlsbCBhbGxvY2F0aW9uIHJlcXVlc3RzLgotICAgICBHZW5lcmFsbHksIGZvciByZXF1ZXN0IG9mIFggYnl0ZXMsIGFsbG9jYXRvciBjYW4gcmVzZXJ2ZSBhbmQgYWRkIHRvIGZyZWUKLSAgICAgbGlzdHMgYSBsYXJnZSBudW1iZXIgb2YgY2h1bmtzIG9mIHNpemUgWCB0byB1c2UgdGhlbSBmb3IgZnV0dXJlIHJlcXVlc3RzLgotICAgICBBbGwgdGhlc2UgY2h1bmtzIGNvdW50IHRvd2FyZCB0aGUgaGVhcCBzaXplLiBDdXJyZW50bHksIGFsbG9jYXRvciBuZXZlcgotICAgICByZWxlYXNlcyBtZW1vcnkgdG8gT1MgKGluc3RlYWQsIGl0IGp1c3QgcHV0cyBmcmVlZCBjaHVua3MgdG8gZnJlZQotICAgICBsaXN0cykuICovCi0gIHNpemVfdCBfX3Nhbml0aXplcl9nZXRfaGVhcF9zaXplKCk7Ci0KLSAgLyogTnVtYmVyIG9mIGJ5dGVzLCBtbWFwZWQgYnkgdGhlIGFsbG9jYXRvciwgd2hpY2ggY2FuIGJlIHVzZWQgdG8gZnVsZmlsbAotICAgICBhbGxvY2F0aW9uIHJlcXVlc3RzLiBXaGVuIGEgdXNlciBwcm9ncmFtIGZyZWVzIG1lbW9yeSBjaHVuaywgaXQgY2FuIGZpcnN0Ci0gICAgIGZhbGwgaW50byBxdWFyYW50aW5lIGFuZCB3aWxsIGNvdW50IHRvd2FyZCBfX3Nhbml0aXplcl9nZXRfZnJlZV9ieXRlcygpCi0gICAgIGxhdGVyLiAqLwotICBzaXplX3QgX19zYW5pdGl6ZXJfZ2V0X2ZyZWVfYnl0ZXMoKTsKLQotICAvKiBOdW1iZXIgb2YgYnl0ZXMgaW4gdW5tYXBwZWQgcGFnZXMsIHRoYXQgYXJlIHJlbGVhc2VkIHRvIE9TLiBDdXJyZW50bHksCi0gICAgIGFsd2F5cyByZXR1cm5zIDAuICovCi0gIHNpemVfdCBfX3Nhbml0aXplcl9nZXRfdW5tYXBwZWRfYnl0ZXMoKTsKLQotICAvKiBNYWxsb2MgaG9va3MgdGhhdCBtYXkgYmUgb3B0aW9uYWxseSBwcm92aWRlZCBieSB1c2VyLgotICAgICBfX3Nhbml0aXplcl9tYWxsb2NfaG9vayhwdHIsIHNpemUpIGlzIGNhbGxlZCBpbW1lZGlhdGVseSBhZnRlcgotICAgICAgIGFsbG9jYXRpb24gb2YgInNpemUiIGJ5dGVzLCB3aGljaCByZXR1cm5lZCAicHRyIi4KLSAgICAgX19zYW5pdGl6ZXJfZnJlZV9ob29rKHB0cikgaXMgY2FsbGVkIGltbWVkaWF0ZWx5IGJlZm9yZQotICAgICAgIGRlYWxsb2NhdGlvbiBvZiAicHRyIi4gKi8KLSAgdm9pZCBfX3Nhbml0aXplcl9tYWxsb2NfaG9vayhjb25zdCB2b2xhdGlsZSB2b2lkICpwdHIsIHNpemVfdCBzaXplKTsKLSAgdm9pZCBfX3Nhbml0aXplcl9mcmVlX2hvb2soY29uc3Qgdm9sYXRpbGUgdm9pZCAqcHRyKTsKLSNpZmRlZiBfX2NwbHVzcGx1cwotfSAgLy8gZXh0ZXJuICJDIgotI2VuZGlmCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvY2xhbmctMjU3NzExMy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9zYW5pdGl6ZXIvYXNhbl9pbnRlcmZhY2UuaCBiL2NsYW5nLTI1NzcxMTMvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvc2FuaXRpemVyL2FzYW5faW50ZXJmYWNlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk3YmEwY2UuLjAwMDAwMDAKLS0tIGEvY2xhbmctMjU3NzExMy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9zYW5pdGl6ZXIvYXNhbl9pbnRlcmZhY2UuaAorKysgL2Rldi9udWxsCkBAIC0xLDE1MSArMCwwIEBACi0vLz09PS0tIHNhbml0aXplci9hc2FuX2ludGVyZmFjZS5oIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSotIEMrKyAtKi09PT0vLwotLy8KLS8vICAgICAgICAgICAgICAgICAgICAgVGhlIExMVk0gQ29tcGlsZXIgSW5mcmFzdHJ1Y3R1cmUKLS8vCi0vLyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIFVuaXZlcnNpdHkgb2YgSWxsaW5vaXMgT3BlbiBTb3VyY2UKLS8vIExpY2Vuc2UuIFNlZSBMSUNFTlNFLlRYVCBmb3IgZGV0YWlscy4KLS8vCi0vLz09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0vLwotLy8KLS8vIFRoaXMgZmlsZSBpcyBhIHBhcnQgb2YgQWRkcmVzc1Nhbml0aXplci4KLS8vCi0vLyBQdWJsaWMgaW50ZXJmYWNlIGhlYWRlci4KLS8vPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PS8vCi0jaWZuZGVmIFNBTklUSVpFUl9BU0FOX0lOVEVSRkFDRV9ICi0jZGVmaW5lIFNBTklUSVpFUl9BU0FOX0lOVEVSRkFDRV9ICi0KLSNpbmNsdWRlIDxzYW5pdGl6ZXIvY29tbW9uX2ludGVyZmFjZV9kZWZzLmg+Ci0KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIiB7Ci0jZW5kaWYKLSAgLy8gTWFya3MgbWVtb3J5IHJlZ2lvbiBbYWRkciwgYWRkcitzaXplKSBhcyB1bmFkZHJlc3NhYmxlLgotICAvLyBUaGlzIG1lbW9yeSBtdXN0IGJlIHByZXZpb3VzbHkgYWxsb2NhdGVkIGJ5IHRoZSB1c2VyIHByb2dyYW0uIEFjY2Vzc2luZwotICAvLyBhZGRyZXNzZXMgaW4gdGhpcyByZWdpb24gZnJvbSBpbnN0cnVtZW50ZWQgY29kZSBpcyBmb3JiaWRkZW4gdW50aWwKLSAgLy8gdGhpcyByZWdpb24gaXMgdW5wb2lzb25lZC4gVGhpcyBmdW5jdGlvbiBpcyBub3QgZ3VhcmFudGVlZCB0byBwb2lzb24KLSAgLy8gdGhlIHdob2xlIHJlZ2lvbiAtIGl0IG1heSBwb2lzb24gb25seSBzdWJyZWdpb24gb2YgW2FkZHIsIGFkZHIrc2l6ZSkgZHVlCi0gIC8vIHRvIEFTYW4gYWxpZ25tZW50IHJlc3RyaWN0aW9ucy4KLSAgLy8gTWV0aG9kIGlzIE5PVCB0aHJlYWQtc2FmZSBpbiB0aGUgc2Vuc2UgdGhhdCBubyB0d28gdGhyZWFkcyBjYW4KLSAgLy8gKHVuKXBvaXNvbiBtZW1vcnkgaW4gdGhlIHNhbWUgbWVtb3J5IHJlZ2lvbiBzaW11bHRhbmVvdXNseS4KLSAgdm9pZCBfX2FzYW5fcG9pc29uX21lbW9yeV9yZWdpb24odm9pZCBjb25zdCB2b2xhdGlsZSAqYWRkciwgc2l6ZV90IHNpemUpOwotICAvLyBNYXJrcyBtZW1vcnkgcmVnaW9uIFthZGRyLCBhZGRyK3NpemUpIGFzIGFkZHJlc3NhYmxlLgotICAvLyBUaGlzIG1lbW9yeSBtdXN0IGJlIHByZXZpb3VzbHkgYWxsb2NhdGVkIGJ5IHRoZSB1c2VyIHByb2dyYW0uIEFjY2Vzc2luZwotICAvLyBhZGRyZXNzZXMgaW4gdGhpcyByZWdpb24gaXMgYWxsb3dlZCB1bnRpbCB0aGlzIHJlZ2lvbiBpcyBwb2lzb25lZCBhZ2Fpbi4KLSAgLy8gVGhpcyBmdW5jdGlvbiBtYXkgdW5wb2lzb24gYSBzdXBlcnJlZ2lvbiBvZiBbYWRkciwgYWRkcitzaXplKSBkdWUgdG8KLSAgLy8gQVNhbiBhbGlnbm1lbnQgcmVzdHJpY3Rpb25zLgotICAvLyBNZXRob2QgaXMgTk9UIHRocmVhZC1zYWZlIGluIHRoZSBzZW5zZSB0aGF0IG5vIHR3byB0aHJlYWRzIGNhbgotICAvLyAodW4pcG9pc29uIG1lbW9yeSBpbiB0aGUgc2FtZSBtZW1vcnkgcmVnaW9uIHNpbXVsdGFuZW91c2x5LgotICB2b2lkIF9fYXNhbl91bnBvaXNvbl9tZW1vcnlfcmVnaW9uKHZvaWQgY29uc3Qgdm9sYXRpbGUgKmFkZHIsIHNpemVfdCBzaXplKTsKLQotLy8gVXNlciBjb2RlIHNob3VsZCB1c2UgbWFjcm9zIGluc3RlYWQgb2YgZnVuY3Rpb25zLgotI2lmIF9faGFzX2ZlYXR1cmUoYWRkcmVzc19zYW5pdGl6ZXIpIHx8IGRlZmluZWQoX19TQU5JVElaRV9BRERSRVNTX18pCi0jZGVmaW5lIEFTQU5fUE9JU09OX01FTU9SWV9SRUdJT04oYWRkciwgc2l6ZSkgXAotICBfX2FzYW5fcG9pc29uX21lbW9yeV9yZWdpb24oKGFkZHIpLCAoc2l6ZSkpCi0jZGVmaW5lIEFTQU5fVU5QT0lTT05fTUVNT1JZX1JFR0lPTihhZGRyLCBzaXplKSBcCi0gIF9fYXNhbl91bnBvaXNvbl9tZW1vcnlfcmVnaW9uKChhZGRyKSwgKHNpemUpKQotI2Vsc2UKLSNkZWZpbmUgQVNBTl9QT0lTT05fTUVNT1JZX1JFR0lPTihhZGRyLCBzaXplKSBcCi0gICgodm9pZCkoYWRkciksICh2b2lkKShzaXplKSkKLSNkZWZpbmUgQVNBTl9VTlBPSVNPTl9NRU1PUllfUkVHSU9OKGFkZHIsIHNpemUpIFwKLSAgKCh2b2lkKShhZGRyKSwgKHZvaWQpKHNpemUpKQotI2VuZGlmCi0KLSAgLy8gUmV0dXJucyAxIGlmIGFkZHIgaXMgcG9pc29uZWQgKGkuZS4gMS1ieXRlIHJlYWQvd3JpdGUgYWNjZXNzIHRvIHRoaXMKLSAgLy8gYWRkcmVzcyB3aWxsIHJlc3VsdCBpbiBlcnJvciByZXBvcnQgZnJvbSBBZGRyZXNzU2FuaXRpemVyKS4KLSAgLy8gT3RoZXJ3aXNlIHJldHVybnMgMC4KLSAgaW50IF9fYXNhbl9hZGRyZXNzX2lzX3BvaXNvbmVkKHZvaWQgY29uc3Qgdm9sYXRpbGUgKmFkZHIpOwotCi0gIC8vIElmIGF0IGxlYXN0IG9uZSBieXRlIGluIFtiZWcsIGJlZytzaXplKSBpcyBwb2lzb25lZCwgcmV0dXJuIHRoZSBhZGRyZXNzCi0gIC8vIG9mIHRoZSBmaXJzdCBzdWNoIGJ5dGUuIE90aGVyd2lzZSByZXR1cm4gMC4KLSAgdm9pZCAqX19hc2FuX3JlZ2lvbl9pc19wb2lzb25lZCh2b2lkICpiZWcsIHNpemVfdCBzaXplKTsKLQotICAvLyBQcmludCB0aGUgZGVzY3JpcHRpb24gb2YgYWRkciAodXNlZnVsIHdoZW4gZGVidWdnaW5nIGluIGdkYikuCi0gIHZvaWQgX19hc2FuX2Rlc2NyaWJlX2FkZHJlc3Modm9pZCAqYWRkcik7Ci0KLSAgLy8gVXNlZnVsIGZvciBjYWxsaW5nIGZyb20gYSBkZWJ1Z2dlciB0byBnZXQgaW5mb3JtYXRpb24gYWJvdXQgYW4gQVNhbiBlcnJvci4KLSAgLy8gUmV0dXJucyAxIGlmIGFuIGVycm9yIGhhcyBiZWVuIChvciBpcyBiZWluZykgcmVwb3J0ZWQsIG90aGVyd2lzZSByZXR1cm5zIDAuCi0gIGludCBfX2FzYW5fcmVwb3J0X3ByZXNlbnQoKTsKLQotICAvLyBVc2VmdWwgZm9yIGNhbGxpbmcgZnJvbSBhIGRlYnVnZ2VyIHRvIGdldCBpbmZvcm1hdGlvbiBhYm91dCBhbiBBU2FuIGVycm9yLgotICAvLyBJZiBhbiBlcnJvciBoYXMgYmVlbiAob3IgaXMgYmVpbmcpIHJlcG9ydGVkLCB0aGUgZm9sbG93aW5nIGZ1bmN0aW9ucyByZXR1cm4KLSAgLy8gdGhlIHBjLCBicCwgc3AsIGFkZHJlc3MsIGFjY2VzcyB0eXBlICgwID0gcmVhZCwgMSA9IHdyaXRlKSwgYWNjZXNzIHNpemUgYW5kCi0gIC8vIGJ1ZyBkZXNjcmlwdGlvbiAoZS5nLiAiaGVhcC11c2UtYWZ0ZXItZnJlZSIpLiBPdGhlcndpc2UgdGhleSByZXR1cm4gMC4KLSAgdm9pZCAqX19hc2FuX2dldF9yZXBvcnRfcGMoKTsKLSAgdm9pZCAqX19hc2FuX2dldF9yZXBvcnRfYnAoKTsKLSAgdm9pZCAqX19hc2FuX2dldF9yZXBvcnRfc3AoKTsKLSAgdm9pZCAqX19hc2FuX2dldF9yZXBvcnRfYWRkcmVzcygpOwotICBpbnQgX19hc2FuX2dldF9yZXBvcnRfYWNjZXNzX3R5cGUoKTsKLSAgc2l6ZV90IF9fYXNhbl9nZXRfcmVwb3J0X2FjY2Vzc19zaXplKCk7Ci0gIGNvbnN0IGNoYXIgKl9fYXNhbl9nZXRfcmVwb3J0X2Rlc2NyaXB0aW9uKCk7Ci0KLSAgLy8gVXNlZnVsIGZvciBjYWxsaW5nIGZyb20gdGhlIGRlYnVnZ2VyIHRvIGdldCBpbmZvcm1hdGlvbiBhYm91dCBhIHBvaW50ZXIuCi0gIC8vIFJldHVybnMgdGhlIGNhdGVnb3J5IG9mIHRoZSBnaXZlbiBwb2ludGVyIGFzIGEgY29uc3RhbnQgc3RyaW5nLgotICAvLyBQb3NzaWJsZSByZXR1cm4gdmFsdWVzIGFyZSAiZ2xvYmFsIiwgInN0YWNrIiwgInN0YWNrLWZha2UiLCAiaGVhcCIsCi0gIC8vICJoZWFwLWludmFsaWQiLCAic2hhZG93LWxvdyIsICJzaGFkb3ctZ2FwIiwgInNoYWRvdy1oaWdoIiwgInVua25vd24iLgotICAvLyBJZiBnbG9iYWwgb3Igc3RhY2ssIHRyaWVzIHRvIGFsc28gcmV0dXJuIHRoZSB2YXJpYWJsZSBuYW1lLCBhZGRyZXNzIGFuZAotICAvLyBzaXplLiBJZiBoZWFwLCB0cmllcyB0byByZXR1cm4gdGhlIGNodW5rIGFkZHJlc3MgYW5kIHNpemUuICduYW1lJyBzaG91bGQKLSAgLy8gcG9pbnQgdG8gYW4gYWxsb2NhdGVkIGJ1ZmZlciBvZiBzaXplICduYW1lX3NpemUnLgotICBjb25zdCBjaGFyICpfX2FzYW5fbG9jYXRlX2FkZHJlc3Modm9pZCAqYWRkciwgY2hhciAqbmFtZSwgc2l6ZV90IG5hbWVfc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKipyZWdpb25fYWRkcmVzcywgc2l6ZV90ICpyZWdpb25fc2l6ZSk7Ci0KLSAgLy8gVXNlZnVsIGZvciBjYWxsaW5nIGZyb20gdGhlIGRlYnVnZ2VyIHRvIGdldCB0aGUgYWxsb2NhdGlvbiBzdGFjayB0cmFjZQotICAvLyBhbmQgdGhyZWFkIElEIGZvciBhIGhlYXAgYWRkcmVzcy4gU3RvcmVzIHVwIHRvICdzaXplJyBmcmFtZXMgaW50byAndHJhY2UnLAotICAvLyByZXR1cm5zIHRoZSBudW1iZXIgb2Ygc3RvcmVkIGZyYW1lcyBvciAwIG9uIGVycm9yLgotICBzaXplX3QgX19hc2FuX2dldF9hbGxvY19zdGFjayh2b2lkICphZGRyLCB2b2lkICoqdHJhY2UsIHNpemVfdCBzaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKnRocmVhZF9pZCk7Ci0KLSAgLy8gVXNlZnVsIGZvciBjYWxsaW5nIGZyb20gdGhlIGRlYnVnZ2VyIHRvIGdldCB0aGUgZnJlZSBzdGFjayB0cmFjZQotICAvLyBhbmQgdGhyZWFkIElEIGZvciBhIGhlYXAgYWRkcmVzcy4gU3RvcmVzIHVwIHRvICdzaXplJyBmcmFtZXMgaW50byAndHJhY2UnLAotICAvLyByZXR1cm5zIHRoZSBudW1iZXIgb2Ygc3RvcmVkIGZyYW1lcyBvciAwIG9uIGVycm9yLgotICBzaXplX3QgX19hc2FuX2dldF9mcmVlX3N0YWNrKHZvaWQgKmFkZHIsIHZvaWQgKip0cmFjZSwgc2l6ZV90IHNpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICp0aHJlYWRfaWQpOwotCi0gIC8vIFVzZWZ1bCBmb3IgY2FsbGluZyBmcm9tIHRoZSBkZWJ1Z2dlciB0byBnZXQgdGhlIGN1cnJlbnQgc2hhZG93IG1lbW9yeQotICAvLyBtYXBwaW5nLgotICB2b2lkIF9fYXNhbl9nZXRfc2hhZG93X21hcHBpbmcoc2l6ZV90ICpzaGFkb3dfc2NhbGUsIHNpemVfdCAqc2hhZG93X29mZnNldCk7Ci0KLSAgLy8gVGhpcyBpcyBhbiBpbnRlcm5hbCBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCB0byByZXBvcnQgYW4gZXJyb3IuCi0gIC8vIEhvd2V2ZXIgaXQgaXMgc3RpbGwgYSBwYXJ0IG9mIHRoZSBpbnRlcmZhY2UgYmVjYXVzZSB1c2VycyBtYXkgd2FudCB0bwotICAvLyBzZXQgYSBicmVha3BvaW50IG9uIHRoaXMgZnVuY3Rpb24gaW4gYSBkZWJ1Z2dlci4KLSAgdm9pZCBfX2FzYW5fcmVwb3J0X2Vycm9yKHZvaWQgKnBjLCB2b2lkICpicCwgdm9pZCAqc3AsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICphZGRyLCBpbnQgaXNfd3JpdGUsIHNpemVfdCBhY2Nlc3Nfc2l6ZSk7Ci0KLSAgLy8gRGVwcmVjYXRlZC4gQ2FsbCBfX3Nhbml0aXplcl9zZXRfZGVhdGhfY2FsbGJhY2sgaW5zdGVhZC4KLSAgdm9pZCBfX2FzYW5fc2V0X2RlYXRoX2NhbGxiYWNrKHZvaWQgKCpjYWxsYmFjaykodm9pZCkpOwotCi0gIHZvaWQgX19hc2FuX3NldF9lcnJvcl9yZXBvcnRfY2FsbGJhY2sodm9pZCAoKmNhbGxiYWNrKShjb25zdCBjaGFyKikpOwotCi0gIC8vIFVzZXIgbWF5IHByb3ZpZGUgZnVuY3Rpb24gdGhhdCB3b3VsZCBiZSBjYWxsZWQgcmlnaHQgd2hlbiBBU2FuIGRldGVjdHMKLSAgLy8gYW4gZXJyb3IuIFRoaXMgY2FuIGJlIHVzZWQgdG8gbm90aWNlIGNhc2VzIHdoZW4gQVNhbiBkZXRlY3RzIGFuIGVycm9yLCBidXQKLSAgLy8gdGhlIHByb2dyYW0gY3Jhc2hlcyBiZWZvcmUgQVNhbiByZXBvcnQgaXMgcHJpbnRlZC4KLSAgdm9pZCBfX2FzYW5fb25fZXJyb3IoKTsKLQotICAvLyBQcmludHMgYWNjdW11bGF0ZWQgc3RhdHMgdG8gc3RkZXJyLiBVc2VkIGZvciBkZWJ1Z2dpbmcuCi0gIHZvaWQgX19hc2FuX3ByaW50X2FjY3VtdWxhdGVkX3N0YXRzKCk7Ci0KLSAgLy8gVGhpcyBmdW5jdGlvbiBtYXkgYmUgb3B0aW9uYWxseSBwcm92aWRlZCBieSB1c2VyIGFuZCBzaG91bGQgcmV0dXJuCi0gIC8vIGEgc3RyaW5nIGNvbnRhaW5pbmcgQVNhbiBydW50aW1lIG9wdGlvbnMuIFNlZSBhc2FuX2ZsYWdzLmggZm9yIGRldGFpbHMuCi0gIGNvbnN0IGNoYXIqIF9fYXNhbl9kZWZhdWx0X29wdGlvbnMoKTsKLQotICAvLyBUaGUgZm9sbG93aW5nIDIgZnVuY3Rpb25zIGZhY2lsaXRhdGUgZ2FyYmFnZSBjb2xsZWN0aW9uIGluIHByZXNlbmNlIG9mCi0gIC8vIGFzYW4ncyBmYWtlIHN0YWNrLgotCi0gIC8vIFJldHVybnMgYW4gb3BhcXVlIGhhbmRsZXIgdG8gYmUgdXNlZCBsYXRlciBpbiBfX2FzYW5fYWRkcl9pc19pbl9mYWtlX3N0YWNrLgotICAvLyBSZXR1cm5zIE5VTEwgaWYgdGhlIGN1cnJlbnQgdGhyZWFkIGRvZXMgbm90IGhhdmUgYSBmYWtlIHN0YWNrLgotICB2b2lkICpfX2FzYW5fZ2V0X2N1cnJlbnRfZmFrZV9zdGFjaygpOwotCi0gIC8vIElmIGZha2Vfc3RhY2sgaXMgbm9uLU5VTEwgYW5kIGFkZHIgYmVsb25ncyB0byBhIGZha2UgZnJhbWUgaW4KLSAgLy8gZmFrZV9zdGFjaywgcmV0dXJucyB0aGUgYWRkcmVzcyBvbiByZWFsIHN0YWNrIHRoYXQgY29ycmVzcG9uZHMgdG8KLSAgLy8gdGhlIGZha2UgZnJhbWUgYW5kIHNldHMgYmVnL2VuZCB0byB0aGUgYm91bmRhcmllcyBvZiB0aGlzIGZha2UgZnJhbWUuCi0gIC8vIE90aGVyd2lzZSByZXR1cm5zIE5VTEwgYW5kIGRvZXMgbm90IHRvdWNoIGJlZy9lbmQuCi0gIC8vIElmIGJlZy9lbmQgYXJlIE5VTEwsIHRoZXkgYXJlIG5vdCB0b3VjaGVkLgotICAvLyBUaGlzIGZ1bmN0aW9uIG1heSBiZSBjYWxsZWQgZnJvbSBhIHRocmVhZCBvdGhlciB0aGFuIHRoZSBvd25lciBvZgotICAvLyBmYWtlX3N0YWNrLCBidXQgdGhlIG93bmVyIHRocmVhZCBuZWVkIHRvIGJlIGFsaXZlLgotICB2b2lkICpfX2FzYW5fYWRkcl9pc19pbl9mYWtlX3N0YWNrKHZvaWQgKmZha2Vfc3RhY2ssIHZvaWQgKmFkZHIsIHZvaWQgKipiZWcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqKmVuZCk7Ci0KLSNpZmRlZiBfX2NwbHVzcGx1cwotfSAgLy8gZXh0ZXJuICJDIgotI2VuZGlmCi0KLSNlbmRpZiAgLy8gU0FOSVRJWkVSX0FTQU5fSU5URVJGQUNFX0gKZGlmZiAtLWdpdCBhL2NsYW5nLTI1NzcxMTMvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvc2FuaXRpemVyL2NvbW1vbl9pbnRlcmZhY2VfZGVmcy5oIGIvY2xhbmctMjU3NzExMy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9zYW5pdGl6ZXIvY29tbW9uX2ludGVyZmFjZV9kZWZzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI3MzZlZDkuLjAwMDAwMDAKLS0tIGEvY2xhbmctMjU3NzExMy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9zYW5pdGl6ZXIvY29tbW9uX2ludGVyZmFjZV9kZWZzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMzUgKzAsMCBAQAotLy89PT0tLSBzYW5pdGl6ZXIvY29tbW9uX2ludGVyZmFjZV9kZWZzLmggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLSBDKysgLSotPT09Ly8KLS8vCi0vLyAgICAgICAgICAgICAgICAgICAgIFRoZSBMTFZNIENvbXBpbGVyIEluZnJhc3RydWN0dXJlCi0vLwotLy8gVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBVbml2ZXJzaXR5IG9mIElsbGlub2lzIE9wZW4gU291cmNlCi0vLyBMaWNlbnNlLiBTZWUgTElDRU5TRS5UWFQgZm9yIGRldGFpbHMuCi0vLwotLy89PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09Ly8KLS8vCi0vLyBDb21tb24gcGFydCBvZiB0aGUgcHVibGljIHNhbml0aXplciBpbnRlcmZhY2UuCi0vLz09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0vLwotCi0jaWZuZGVmIFNBTklUSVpFUl9DT01NT05fSU5URVJGQUNFX0RFRlNfSAotI2RlZmluZSBTQU5JVElaRVJfQ09NTU9OX0lOVEVSRkFDRV9ERUZTX0gKLQotI2luY2x1ZGUgPHN0ZGRlZi5oPgotI2luY2x1ZGUgPHN0ZGludC5oPgotCi0vLyBHQ0MgZG9lcyBub3QgdW5kZXJzdGFuZCBfX2hhc19mZWF0dXJlLgotI2lmICFkZWZpbmVkKF9faGFzX2ZlYXR1cmUpCi0jIGRlZmluZSBfX2hhc19mZWF0dXJlKHgpIDAKLSNlbmRpZgotCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIgewotI2VuZGlmCi0gIC8vIEFyZ3VtZW50cyBmb3IgX19zYW5pdGl6ZXJfc2FuZGJveF9vbl9ub3RpZnkoKSBiZWxvdy4KLSAgdHlwZWRlZiBzdHJ1Y3QgewotICAgIC8vIEVuYWJsZSBzYW5kYm94IHN1cHBvcnQgaW4gc2FuaXRpemVyIGNvdmVyYWdlLgotICAgIGludCBjb3ZlcmFnZV9zYW5kYm94ZWQ7Ci0gICAgLy8gRmlsZSBkZXNjcmlwdG9yIHRvIHdyaXRlIGNvdmVyYWdlIGRhdGEgdG8uIElmIC0xIGlzIHBhc3NlZCwgYSBmaWxlIHdpbGwKLSAgICAvLyBiZSBwcmUtb3BlbmVkIGJ5IF9fc2FuaXRpemVyX3NhbmRvYnhfb25fbm90aWZ5KCkuIFRoaXMgZmllbGQgaGFzIG5vCi0gICAgLy8gZWZmZWN0IGlmIGNvdmVyYWdlX3NhbmRib3hlZCA9PSAwLgotICAgIGludHB0cl90IGNvdmVyYWdlX2ZkOwotICAgIC8vIElmIG5vbi16ZXJvLCBzcGxpdCB0aGUgY292ZXJhZ2UgZGF0YSBpbnRvIHdlbGwtZm9ybWVkIGJsb2Nrcy4gVGhpcyBpcwotICAgIC8vIHVzZWZ1bCB3aGVuIGNvdmVyYWdlX2ZkIGlzIGEgc29ja2V0IGRlc2NyaXB0b3IuIEVhY2ggYmxvY2sgd2lsbCBjb250YWluCi0gICAgLy8gYSBoZWFkZXIsIGFsbG93aW5nIGRhdGEgZnJvbSBtdWx0aXBsZSBwcm9jZXNzZXMgdG8gYmUgc2VudCBvdmVyIHRoZSBzYW1lCi0gICAgLy8gc29ja2V0LgotICAgIHVuc2lnbmVkIGludCBjb3ZlcmFnZV9tYXhfYmxvY2tfc2l6ZTsKLSAgfSBfX3Nhbml0aXplcl9zYW5kYm94X2FyZ3VtZW50czsKLQotICAvLyBUZWxsIHRoZSB0b29scyB0byB3cml0ZSB0aGVpciByZXBvcnRzIHRvICJwYXRoLjxwaWQ+IiBpbnN0ZWFkIG9mIHN0ZGVyci4KLSAgdm9pZCBfX3Nhbml0aXplcl9zZXRfcmVwb3J0X3BhdGgoY29uc3QgY2hhciAqcGF0aCk7Ci0KLSAgLy8gTm90aWZ5IHRoZSB0b29scyB0aGF0IHRoZSBzYW5kYm94IGlzIGdvaW5nIHRvIGJlIHR1cm5lZCBvbi4gVGhlIHJlc2VydmVkCi0gIC8vIHBhcmFtZXRlciB3aWxsIGJlIHVzZWQgaW4gdGhlIGZ1dHVyZSB0byBob2xkIGEgc3RydWN0dXJlIHdpdGggZnVuY3Rpb25zCi0gIC8vIHRoYXQgdGhlIHRvb2xzIG1heSBjYWxsIHRvIGJ5cGFzcyB0aGUgc2FuZGJveC4KLSAgdm9pZCBfX3Nhbml0aXplcl9zYW5kYm94X29uX25vdGlmeShfX3Nhbml0aXplcl9zYW5kYm94X2FyZ3VtZW50cyAqYXJncyk7Ci0KLSAgLy8gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgdGhlIHRvb2wgd2hlbiBpdCBoYXMganVzdCBmaW5pc2hlZCByZXBvcnRpbmcKLSAgLy8gYW4gZXJyb3IuICdlcnJvcl9zdW1tYXJ5JyBpcyBhIG9uZS1saW5lIHN0cmluZyB0aGF0IHN1bW1hcml6ZXMKLSAgLy8gdGhlIGVycm9yIG1lc3NhZ2UuIFRoaXMgZnVuY3Rpb24gY2FuIGJlIG92ZXJyaWRkZW4gYnkgdGhlIGNsaWVudC4KLSAgdm9pZCBfX3Nhbml0aXplcl9yZXBvcnRfZXJyb3Jfc3VtbWFyeShjb25zdCBjaGFyICplcnJvcl9zdW1tYXJ5KTsKLQotICAvLyBTb21lIG9mIHRoZSBzYW5pdGl6ZXJzIChlLmcuIGFzYW4vdHNhbikgbWF5IG1pc3MgYnVncyB0aGF0IGhhcHBlbgotICAvLyBpbiB1bmFsaWduZWQgbG9hZHMvc3RvcmVzLiBJbiBvcmRlciB0byBmaW5kIHN1Y2ggYnVncyByZWxpYWJseSBvbmUgbmVlZHMKLSAgLy8gdG8gcmVwbGFjZSBwbGFpbiB1bmFsaWduZWQgbG9hZHMvc3RvcmVzIHdpdGggdGhlc2UgY2FsbHMuCi0gIHVpbnQxNl90IF9fc2FuaXRpemVyX3VuYWxpZ25lZF9sb2FkMTYoY29uc3Qgdm9pZCAqcCk7Ci0gIHVpbnQzMl90IF9fc2FuaXRpemVyX3VuYWxpZ25lZF9sb2FkMzIoY29uc3Qgdm9pZCAqcCk7Ci0gIHVpbnQ2NF90IF9fc2FuaXRpemVyX3VuYWxpZ25lZF9sb2FkNjQoY29uc3Qgdm9pZCAqcCk7Ci0gIHZvaWQgX19zYW5pdGl6ZXJfdW5hbGlnbmVkX3N0b3JlMTYodm9pZCAqcCwgdWludDE2X3QgeCk7Ci0gIHZvaWQgX19zYW5pdGl6ZXJfdW5hbGlnbmVkX3N0b3JlMzIodm9pZCAqcCwgdWludDMyX3QgeCk7Ci0gIHZvaWQgX19zYW5pdGl6ZXJfdW5hbGlnbmVkX3N0b3JlNjQodm9pZCAqcCwgdWludDY0X3QgeCk7Ci0KLSAgLy8gQW5ub3RhdGUgdGhlIGN1cnJlbnQgc3RhdGUgb2YgYSBjb250aWd1b3VzIGNvbnRhaW5lciwgc3VjaCBhcwotICAvLyBzdGQ6OnZlY3Rvciwgc3RkOjpzdHJpbmcgb3Igc2ltaWxhci4KLSAgLy8gQSBjb250aWd1b3VzIGNvbnRhaW5lciBpcyBhIGNvbnRhaW5lciB0aGF0IGtlZXBzIGFsbCBvZiBpdHMgZWxlbWVudHMKLSAgLy8gaW4gYSBjb250aWd1b3VzIHJlZ2lvbiBvZiBtZW1vcnkuIFRoZSBjb250YWluZXIgb3ducyB0aGUgcmVnaW9uIG9mIG1lbW9yeQotICAvLyBbYmVnLCBlbmQpOyB0aGUgbWVtb3J5IFtiZWcsIG1pZCkgaXMgdXNlZCB0byBzdG9yZSB0aGUgY3VycmVudCBlbGVtZW50cwotICAvLyBhbmQgdGhlIG1lbW9yeSBbbWlkLCBlbmQpIGlzIHJlc2VydmVkIGZvciBmdXR1cmUgZWxlbWVudHM7Ci0gIC8vIGJlZyA8PSBtaWQgPD0gZW5kLiBGb3IgZXhhbXBsZSwgaW4gInN0ZDo6dmVjdG9yPD4gdiIKLSAgLy8gICBiZWcgPSAmdlswXTsKLSAgLy8gICBlbmQgPSBiZWcgKyB2LmNhcGFjaXR5KCkgKiBzaXplb2YodlswXSk7Ci0gIC8vICAgbWlkID0gYmVnICsgdi5zaXplKCkgICAgICogc2l6ZW9mKHZbMF0pOwotICAvLwotICAvLyBUaGlzIGFubm90YXRpb24gdGVsbHMgdGhlIFNhbml0aXplciB0b29sIGFib3V0IHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZQotICAvLyBjb250YWluZXIgc28gdGhhdCB0aGUgdG9vbCBjYW4gcmVwb3J0IGVycm9ycyB3aGVuIG1lbW9yeSBmcm9tIFttaWQsIGVuZCkKLSAgLy8gaXMgYWNjZXNzZWQuIEluc2VydCB0aGlzIGFubm90YXRpb24gaW50byBtZXRob2RzIGxpa2UgcHVzaF9iYWNrL3BvcF9iYWNrLgotICAvLyBTdXBwbHkgdGhlIG9sZCBhbmQgdGhlIG5ldyB2YWx1ZXMgb2YgbWlkIChvbGRfbWlkL25ld19taWQpLgotICAvLyBJbiB0aGUgaW5pdGlhbCBzdGF0ZSBtaWQgPT0gZW5kIGFuZCBzbyBzaG91bGQgYmUgdGhlIGZpbmFsCi0gIC8vIHN0YXRlIHdoZW4gdGhlIGNvbnRhaW5lciBpcyBkZXN0cm95ZWQgb3Igd2hlbiBpdCByZWFsbG9jYXRlcyB0aGUgc3RvcmFnZS4KLSAgLy8KLSAgLy8gVXNlIHdpdGggY2F1dGlvbiBhbmQgZG9uJ3QgdXNlIGZvciBhbnl0aGluZyBvdGhlciB0aGFuIHZlY3Rvci1saWtlIGNsYXNzZXMuCi0gIC8vCi0gIC8vIEZvciBBZGRyZXNzU2FuaXRpemVyLCAnYmVnJyBzaG91bGQgYmUgOC1hbGlnbmVkIGFuZCAnZW5kJyBzaG91bGQKLSAgLy8gYmUgZWl0aGVyIDgtYWxpZ25lZCBvciBpdCBzaG91bGQgcG9pbnQgdG8gdGhlIGVuZCBvZiBhIHNlcGFyYXRlIGhlYXAtLAotICAvLyBzdGFjay0sIG9yIGdsb2JhbC0gYWxsb2NhdGVkIGJ1ZmZlci4gSS5lLiB0aGUgZm9sbG93aW5nIHdpbGwgbm90IHdvcms6Ci0gIC8vICAgaW50NjRfdCB4WzJdOyAgLy8gMTYgYnl0ZXMsIDgtYWxpZ25lZC4KLSAgLy8gICBjaGFyICpiZWcgPSAoY2hhciAqKSZ4WzBdOwotICAvLyAgIGNoYXIgKmVuZCA9IGJlZyArIDEyOyAgLy8gTm90IDggYWxpZ25lZCwgbm90IHRoZSBlbmQgb2YgdGhlIGJ1ZmZlci4KLSAgLy8gVGhpcyBob3dldmVyIHdpbGwgd29yayBmaW5lOgotICAvLyAgIGludDMyX3QgeFszXTsgIC8vIDEyIGJ5dGVzLCBidXQgOC1hbGlnbmVkIHVuZGVyIEFkZHJlc3NTYW5pdGl6ZXIuCi0gIC8vICAgY2hhciAqYmVnID0gKGNoYXIqKSZ4WzBdOwotICAvLyAgIGNoYXIgKmVuZCA9IGJlZyArIDEyOyAgLy8gTm90IDgtYWxpZ25lZCwgYnV0IGlzIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlci4KLSAgdm9pZCBfX3Nhbml0aXplcl9hbm5vdGF0ZV9jb250aWd1b3VzX2NvbnRhaW5lcihjb25zdCB2b2lkICpiZWcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqZW5kLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKm9sZF9taWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqbmV3X21pZCk7Ci0gIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgY29udGlndW91cyBjb250YWluZXIgW2JlZywgZW5kKSBpcyBwcm9wZXJseSBwb2lzb25lZAotICAvLyAoZS5nLiB3aXRoIF9fc2FuaXRpemVyX2Fubm90YXRlX2NvbnRpZ3VvdXNfY29udGFpbmVyKSwgaS5lLiBpZgotICAvLyAgLSBbYmVnLCBtaWQpIGlzIGFkZHJlc3NhYmxlLAotICAvLyAgLSBbbWlkLCBlbmQpIGlzIHVuYWRkcmVzc2FibGUuCi0gIC8vIEZ1bGwgdmVyaWZpY2F0aW9uIHJlcXVpcmVzIE8oZW5kLWJlZykgdGltZTsgdGhpcyBmdW5jdGlvbiB0cmllcyB0byBhdm9pZAotICAvLyBzdWNoIGNvbXBsZXhpdHkgYnkgdG91Y2hpbmcgb25seSBwYXJ0cyBvZiB0aGUgY29udGFpbmVyIGFyb3VuZCBiZWcvbWlkL2VuZC4KLSAgaW50IF9fc2FuaXRpemVyX3ZlcmlmeV9jb250aWd1b3VzX2NvbnRhaW5lcihjb25zdCB2b2lkICpiZWcsIGNvbnN0IHZvaWQgKm1pZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICplbmQpOwotCi0gIC8vIFNpbWlsYXIgdG8gX19zYW5pdGl6ZXJfdmVyaWZ5X2NvbnRpZ3VvdXNfY29udGFpbmVyIGJ1dCByZXR1cm5zIHRoZSBhZGRyZXNzCi0gIC8vIG9mIHRoZSBmaXJzdCBpbXByb3Blcmx5IHBvaXNvbmVkIGJ5dGUgb3RoZXJ3aXNlLiBSZXR1cm5zIG51bGwgaWYgdGhlIGFyZWEKLSAgLy8gaXMgcG9pc29uZWQgcHJvcGVybHkuCi0gIGNvbnN0IHZvaWQgKl9fc2FuaXRpemVyX2NvbnRpZ3VvdXNfY29udGFpbmVyX2ZpbmRfYmFkX2FkZHJlc3MoCi0gICAgICBjb25zdCB2b2lkICpiZWcsIGNvbnN0IHZvaWQgKm1pZCwgY29uc3Qgdm9pZCAqZW5kKTsKLQotICAvLyBQcmludCB0aGUgc3RhY2sgdHJhY2UgbGVhZGluZyB0byB0aGlzIGNhbGwuIFVzZWZ1bCBmb3IgZGVidWdnaW5nIHVzZXIgY29kZS4KLSAgdm9pZCBfX3Nhbml0aXplcl9wcmludF9zdGFja190cmFjZSgpOwotCi0gIC8vIFNldHMgdGhlIGNhbGxiYWNrIHRvIGJlIGNhbGxlZCByaWdodCBiZWZvcmUgZGVhdGggb24gZXJyb3IuCi0gIC8vIFBhc3NpbmcgMCB3aWxsIHVuc2V0IHRoZSBjYWxsYmFjay4KLSAgdm9pZCBfX3Nhbml0aXplcl9zZXRfZGVhdGhfY2FsbGJhY2sodm9pZCAoKmNhbGxiYWNrKSh2b2lkKSk7Ci0KLSAgLy8gSW50ZXJjZXB0b3IgaG9va3MuCi0gIC8vIFdoZW5ldmVyIGEgbGliYyBmdW5jdGlvbiBpbnRlcmNlcHRvciBpcyBjYWxsZWQgaXQgY2hlY2tzIGlmIHRoZQotICAvLyBjb3JyZXNwb25kaW5nIHdlYWsgaG9vayBpcyBkZWZpbmVkLCBhbmQgaXQgc28gLS0gY2FsbHMgaXQuCi0gIC8vIFRoZSBwcmltYXJ5IHVzZSBjYXNlIGlzIGRhdGEtZmxvdy1ndWlkZWQgZnV6emluZywgd2hlcmUgdGhlIGZ1enplciBuZWVkcwotICAvLyB0byBrbm93IHdoYXQgaXMgYmVpbmcgcGFzc2VkIHRvIGxpYmMgZnVuY3Rpb25zLCBlLmcuIG1lbWNtcC4KLSAgLy8gRklYTUU6IGltcGxlbWVudCBtb3JlIGhvb2tzLgotICB2b2lkIF9fc2FuaXRpemVyX3dlYWtfaG9va19tZW1jbXAodm9pZCAqY2FsbGVkX3BjLCBjb25zdCB2b2lkICpzMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKnMyLCBzaXplX3Qgbik7Ci0gIHZvaWQgX19zYW5pdGl6ZXJfd2Vha19ob29rX3N0cm5jbXAodm9pZCAqY2FsbGVkX3BjLCBjb25zdCBjaGFyICpzMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnMyLCBzaXplX3Qgbik7Ci0jaWZkZWYgX19jcGx1c3BsdXMKLX0gIC8vIGV4dGVybiAiQyIKLSNlbmRpZgotCi0jZW5kaWYgIC8vIFNBTklUSVpFUl9DT01NT05fSU5URVJGQUNFX0RFRlNfSApkaWZmIC0tZ2l0IGEvY2xhbmctMjU3NzExMy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9zYW5pdGl6ZXIvY292ZXJhZ2VfaW50ZXJmYWNlLmggYi9jbGFuZy0yNTc3MTEzL2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL3Nhbml0aXplci9jb3ZlcmFnZV9pbnRlcmZhY2UuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjkzMTExYi4uMDAwMDAwMAotLS0gYS9jbGFuZy0yNTc3MTEzL2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL3Nhbml0aXplci9jb3ZlcmFnZV9pbnRlcmZhY2UuaAorKysgL2Rldi9udWxsCkBAIC0xLDY1ICswLDAgQEAKLS8vPT09LS0gc2FuaXRpemVyL2NvdmVyYWdlX2ludGVyZmFjZS5oIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi0gQysrIC0qLT09PS8vCi0vLwotLy8gICAgICAgICAgICAgICAgICAgICBUaGUgTExWTSBDb21waWxlciBJbmZyYXN0cnVjdHVyZQotLy8KLS8vIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgVW5pdmVyc2l0eSBvZiBJbGxpbm9pcyBPcGVuIFNvdXJjZQotLy8gTGljZW5zZS4gU2VlIExJQ0VOU0UuVFhUIGZvciBkZXRhaWxzLgotLy8KLS8vPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PS8vCi0vLwotLy8gUHVibGljIGludGVyZmFjZSBmb3Igc2FuaXRpemVyIGNvdmVyYWdlLgotLy89PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09Ly8KLQotI2lmbmRlZiBTQU5JVElaRVJfQ09WRVJBR19JTlRFUkZBQ0VfSAotI2RlZmluZSBTQU5JVElaRVJfQ09WRVJBR19JTlRFUkZBQ0VfSAotCi0jaW5jbHVkZSA8c2FuaXRpemVyL2NvbW1vbl9pbnRlcmZhY2VfZGVmcy5oPgotCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIgewotI2VuZGlmCi0KLSAgLy8gSW5pdGlhbGl6ZSBjb3ZlcmFnZS4KLSAgdm9pZCBfX3Nhbml0aXplcl9jb3ZfaW5pdCgpOwotICAvLyBSZWNvcmQgYW5kIGR1bXAgY292ZXJhZ2UgaW5mby4KLSAgdm9pZCBfX3Nhbml0aXplcl9jb3ZfZHVtcCgpOwotICAvLyBPcGVuIDxuYW1lPi5zYW5jb3YucGFja2VkIGluIHRoZSBjb3ZlcmFnZSBkaXJlY3RvcnkgYW5kIHJldHVybiB0aGUgZmlsZQotICAvLyBkZXNjcmlwdG9yLiBSZXR1cm5zIC0xIG9uIGZhaWx1cmUsIG9yIGlmIGNvdmVyYWdlIGR1bXBpbmcgaXMgZGlzYWJsZWQuCi0gIC8vIFRoaXMgaXMgaW50ZW5kZWQgZm9yIHVzZSBieSBzYW5kYm94aW5nIGNvZGUuCi0gIGludHB0cl90IF9fc2FuaXRpemVyX21heWJlX29wZW5fY292X2ZpbGUoY29uc3QgY2hhciAqbmFtZSk7Ci0gIC8vIEdldCB0aGUgbnVtYmVyIG9mIHVuaXF1ZSBjb3ZlcmVkIGJsb2NrcyAob3IgZWRnZXMpLgotICAvLyBUaGlzIGNhbiBiZSB1c2VmdWwgZm9yIGNvdmVyYWdlLWRpcmVjdGVkIGluLXByb2Nlc3MgZnV6emVycy4KLSAgdWludHB0cl90IF9fc2FuaXRpemVyX2dldF90b3RhbF91bmlxdWVfY292ZXJhZ2UoKTsKLSAgLy8gR2V0IHRoZSBudW1iZXIgb2YgdW5pcXVlIGluZGlyZWN0IGNhbGxlci1jYWxsZWUgcGFpcnMuCi0gIHVpbnRwdHJfdCBfX3Nhbml0aXplcl9nZXRfdG90YWxfdW5pcXVlX2NhbGxlcl9jYWxsZWVfcGFpcnMoKTsKLQotICAvLyBSZXNldCB0aGUgYmFzaWMtYmxvY2sgKGVkZ2UpIGNvdmVyYWdlIHRvIHRoZSBpbml0aWFsIHN0YXRlLgotICAvLyBVc2VmdWwgZm9yIGluLXByb2Nlc3MgZnV6emluZyB0byBzdGFydCBjb2xsZWN0aW5nIGNvdmVyYWdlIGZyb20gc2NyYXRjaC4KLSAgLy8gRXhwZXJpbWVudGFsLCB3aWxsIGxpa2VseSBub3Qgd29yayBmb3IgbXVsdGktdGhyZWFkZWQgcHJvY2Vzcy4KLSAgdm9pZCBfX3Nhbml0aXplcl9yZXNldF9jb3ZlcmFnZSgpOwotICAvLyBTZXQgKmRhdGEgdG8gdGhlIGFycmF5IG9mIGNvdmVyZWQgUENzIGFuZCByZXR1cm4gdGhlIHNpemUgb2YgdGhhdCBhcnJheS4KLSAgLy8gU29tZSBvZiB0aGUgZW50cmllcyBpbiAqZGF0YSB3aWxsIGJlIHplcm8uCi0gIHVpbnRwdHJfdCBfX3Nhbml0aXplcl9nZXRfY292ZXJhZ2VfZ3VhcmRzKHVpbnRwdHJfdCAqKmRhdGEpOwotCi0gIC8vIFRoZSBjb3ZlcmFnZSBpbnN0cnVtZW50YXRpb24gbWF5IG9wdGlvbmFsbHkgcHJvdmlkZSBpbXByZWNpc2UgY291bnRlcnMuCi0gIC8vIFJhdGhlciB0aGFuIGV4cG9zaW5nIHRoZSBjb3VudGVyIHZhbHVlcyB0byB0aGUgdXNlciB3ZSBpbnN0ZWFkIG1hcAotICAvLyB0aGUgY291bnRlcnMgdG8gYSBiaXRzZXQuCi0gIC8vIEV2ZXJ5IGNvdW50ZXIgaXMgYXNzb2NpYXRlZCB3aXRoIDggYml0cyBpbiB0aGUgYml0c2V0LgotICAvLyBXZSBkZWZpbmUgOCB2YWx1ZSByYW5nZXM6IDEsIDIsIDMsIDQtNywgOC0xNSwgMTYtMzEsIDMyLTEyNywgMTI4KwotICAvLyBUaGUgaS10aCBiaXQgaXMgc2V0IHRvIDEgaWYgdGhlIGNvdW50ZXIgdmFsdWUgaXMgaW4gdGhlIGktdGggcmFuZ2UuCi0gIC8vIFRoaXMgY291bnRlci1iYXNlZCBjb3ZlcmFnZSBpbXBsZW1lbnRhdGlvbiBpcyAqbm90KiB0aHJlYWQtc2FmZS4KLQotICAvLyBSZXR1cm5zIHRoZSBudW1iZXIgb2YgcmVnaXN0ZXJlZCBjb3ZlcmFnZSBjb3VudGVycy4KLSAgdWludHB0cl90IF9fc2FuaXRpemVyX2dldF9udW1iZXJfb2ZfY291bnRlcnMoKTsKLSAgLy8gVXBkYXRlcyB0aGUgY291bnRlciAnYml0c2V0JywgY2xlYXJzIHRoZSBjb3VudGVycyBhbmQgcmV0dXJucyB0aGUgbnVtYmVyIG9mCi0gIC8vIG5ldyBiaXRzIGluICdiaXRzZXQnLgotICAvLyBJZiAnYml0c2V0JyBpcyBudWxscHRyLCBvbmx5IGNsZWFycyB0aGUgY291bnRlcnMuCi0gIC8vIE90aGVyd2lzZSAnYml0c2V0JyBzaG91bGQgYmUgYXQgbGVhc3QKLSAgLy8gX19zYW5pdGl6ZXJfZ2V0X251bWJlcl9vZl9jb3VudGVycyBieXRlcyBsb25nIGFuZCA4LWFsaWduZWQuCi0gIHVpbnRwdHJfdAotICBfX3Nhbml0aXplcl91cGRhdGVfY291bnRlcl9iaXRzZXRfYW5kX2NsZWFyX2NvdW50ZXJzKHVpbnQ4X3QgKmJpdHNldCk7Ci0jaWZkZWYgX19jcGx1c3BsdXMKLX0gIC8vIGV4dGVybiAiQyIKLSNlbmRpZgotCi0jZW5kaWYgIC8vIFNBTklUSVpFUl9DT1ZFUkFHX0lOVEVSRkFDRV9ICmRpZmYgLS1naXQgYS9jbGFuZy0yNTc3MTEzL2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL3Nhbml0aXplci9kZnNhbl9pbnRlcmZhY2UuaCBiL2NsYW5nLTI1NzcxMTMvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvc2FuaXRpemVyL2Rmc2FuX2ludGVyZmFjZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNTY2NmY3Li4wMDAwMDAwCi0tLSBhL2NsYW5nLTI1NzcxMTMvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvc2FuaXRpemVyL2Rmc2FuX2ludGVyZmFjZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTE2ICswLDAgQEAKLS8vPT09LS0gZGZzYW5faW50ZXJmYWNlLmggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PS8vCi0vLwotLy8gICAgICAgICAgICAgICAgICAgICBUaGUgTExWTSBDb21waWxlciBJbmZyYXN0cnVjdHVyZQotLy8KLS8vIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgVW5pdmVyc2l0eSBvZiBJbGxpbm9pcyBPcGVuIFNvdXJjZQotLy8gTGljZW5zZS4gU2VlIExJQ0VOU0UuVFhUIGZvciBkZXRhaWxzLgotLy8KLS8vPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PS8vCi0vLwotLy8gVGhpcyBmaWxlIGlzIGEgcGFydCBvZiBEYXRhRmxvd1Nhbml0aXplci4KLS8vCi0vLyBQdWJsaWMgaW50ZXJmYWNlIGhlYWRlci4KLS8vPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PS8vCi0jaWZuZGVmIERGU0FOX0lOVEVSRkFDRV9ICi0jZGVmaW5lIERGU0FOX0lOVEVSRkFDRV9ICi0KLSNpbmNsdWRlIDxzdGRkZWYuaD4KLSNpbmNsdWRlIDxzdGRpbnQuaD4KLSNpbmNsdWRlIDxzYW5pdGl6ZXIvY29tbW9uX2ludGVyZmFjZV9kZWZzLmg+Ci0KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIiB7Ci0jZW5kaWYKLQotdHlwZWRlZiB1aW50MTZfdCBkZnNhbl9sYWJlbDsKLQotLy8vIFN0b3JlcyBpbmZvcm1hdGlvbiBhc3NvY2lhdGVkIHdpdGggYSBzcGVjaWZpYyBsYWJlbCBpZGVudGlmaWVyLiAgQSBsYWJlbAotLy8vIG1heSBiZSBhIGJhc2UgbGFiZWwgY3JlYXRlZCB1c2luZyBkZnNhbl9jcmVhdGVfbGFiZWwsIHdpdGggYXNzb2NpYXRlZAotLy8vIHRleHQgZGVzY3JpcHRpb24gYW5kIHVzZXIgZGF0YSwgb3IgYW4gYXV0b21hdGljYWxseSBjcmVhdGVkIHVuaW9uIGxhYmVsLAotLy8vIHdoaWNoIHJlcHJlc2VudHMgdGhlIHVuaW9uIG9mIHR3byBsYWJlbCBpZGVudGlmaWVycyAod2hpY2ggbWF5IHRoZW1zZWx2ZXMKLS8vLyBiZSBiYXNlIG9yIHVuaW9uIGxhYmVscykuCi1zdHJ1Y3QgZGZzYW5fbGFiZWxfaW5mbyB7Ci0gIC8vIEZpZWxkcyBmb3IgdW5pb24gbGFiZWxzLCBzZXQgdG8gMCBmb3IgYmFzZSBsYWJlbHMuCi0gIGRmc2FuX2xhYmVsIGwxOwotICBkZnNhbl9sYWJlbCBsMjsKLQotICAvLyBGaWVsZHMgZm9yIGJhc2UgbGFiZWxzLgotICBjb25zdCBjaGFyICpkZXNjOwotICB2b2lkICp1c2VyZGF0YTsKLX07Ci0KLS8vLyBTaWduYXR1cmUgb2YgdGhlIGNhbGxiYWNrIGFyZ3VtZW50IHRvIGRmc2FuX3NldF93cml0ZV9jYWxsYmFjaygpLgotdHlwZWRlZiB2b2lkICgqZGZzYW5fd3JpdGVfY2FsbGJhY2tfdCkoaW50IGZkLCBjb25zdCB2b2lkICpidWYsIHNpemVfdCBjb3VudCk7Ci0KLS8vLyBDb21wdXRlcyB0aGUgdW5pb24gb2YgXGMgbDEgYW5kIFxjIGwyLCBwb3NzaWJseSBjcmVhdGluZyBhIHVuaW9uIGxhYmVsIGluCi0vLy8gdGhlIHByb2Nlc3MuCi1kZnNhbl9sYWJlbCBkZnNhbl91bmlvbihkZnNhbl9sYWJlbCBsMSwgZGZzYW5fbGFiZWwgbDIpOwotCi0vLy8gQ3JlYXRlcyBhbmQgcmV0dXJucyBhIGJhc2UgbGFiZWwgd2l0aCB0aGUgZ2l2ZW4gZGVzY3JpcHRpb24gYW5kIHVzZXIgZGF0YS4KLWRmc2FuX2xhYmVsIGRmc2FuX2NyZWF0ZV9sYWJlbChjb25zdCBjaGFyICpkZXNjLCB2b2lkICp1c2VyZGF0YSk7Ci0KLS8vLyBTZXRzIHRoZSBsYWJlbCBmb3IgZWFjaCBhZGRyZXNzIGluIFthZGRyLGFkZHIrc2l6ZSkgdG8gXGMgbGFiZWwuCi12b2lkIGRmc2FuX3NldF9sYWJlbChkZnNhbl9sYWJlbCBsYWJlbCwgdm9pZCAqYWRkciwgc2l6ZV90IHNpemUpOwotCi0vLy8gU2V0cyB0aGUgbGFiZWwgZm9yIGVhY2ggYWRkcmVzcyBpbiBbYWRkcixhZGRyK3NpemUpIHRvIHRoZSB1bmlvbiBvZiB0aGUKLS8vLyBjdXJyZW50IGxhYmVsIGZvciB0aGF0IGFkZHJlc3MgYW5kIFxjIGxhYmVsLgotdm9pZCBkZnNhbl9hZGRfbGFiZWwoZGZzYW5fbGFiZWwgbGFiZWwsIHZvaWQgKmFkZHIsIHNpemVfdCBzaXplKTsKLQotLy8vIFJldHJpZXZlcyB0aGUgbGFiZWwgYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZlbiBkYXRhLgotLy8vCi0vLy8gVGhlIHR5cGUgb2YgJ2RhdGEnIGlzIGFyYml0cmFyeS4gIFRoZSBmdW5jdGlvbiBhY2NlcHRzIGEgdmFsdWUgb2YgYW55IHR5cGUsCi0vLy8gd2hpY2ggY2FuIGJlIHRydW5jYXRlZCBvciBleHRlbmRlZCAoaW1wbGljaXRseSBvciBleHBsaWNpdGx5KSBhcyBuZWNlc3NhcnkuCi0vLy8gVGhlIHRydW5jYXRpb24vZXh0ZW5zaW9uIG9wZXJhdGlvbnMgd2lsbCBwcmVzZXJ2ZSB0aGUgbGFiZWwgb2YgdGhlIG9yaWdpbmFsCi0vLy8gdmFsdWUuCi1kZnNhbl9sYWJlbCBkZnNhbl9nZXRfbGFiZWwobG9uZyBkYXRhKTsKLQotLy8vIFJldHJpZXZlcyB0aGUgbGFiZWwgYXNzb2NpYXRlZCB3aXRoIHRoZSBkYXRhIGF0IHRoZSBnaXZlbiBhZGRyZXNzLgotZGZzYW5fbGFiZWwgZGZzYW5fcmVhZF9sYWJlbChjb25zdCB2b2lkICphZGRyLCBzaXplX3Qgc2l6ZSk7Ci0KLS8vLyBSZXRyaWV2ZXMgYSBwb2ludGVyIHRvIHRoZSBkZnNhbl9sYWJlbF9pbmZvIHN0cnVjdCBmb3IgdGhlIGdpdmVuIGxhYmVsLgotY29uc3Qgc3RydWN0IGRmc2FuX2xhYmVsX2luZm8gKmRmc2FuX2dldF9sYWJlbF9pbmZvKGRmc2FuX2xhYmVsIGxhYmVsKTsKLQotLy8vIFJldHVybnMgd2hldGhlciB0aGUgZ2l2ZW4gbGFiZWwgbGFiZWwgY29udGFpbnMgdGhlIGxhYmVsIGVsZW0uCi1pbnQgZGZzYW5faGFzX2xhYmVsKGRmc2FuX2xhYmVsIGxhYmVsLCBkZnNhbl9sYWJlbCBlbGVtKTsKLQotLy8vIElmIHRoZSBnaXZlbiBsYWJlbCBsYWJlbCBjb250YWlucyBhIGxhYmVsIHdpdGggdGhlIGRlc2NyaXB0aW9uIGRlc2MsIHJldHVybnMKLS8vLyB0aGF0IGxhYmVsLCBlbHNlIHJldHVybnMgMC4KLWRmc2FuX2xhYmVsIGRmc2FuX2hhc19sYWJlbF93aXRoX2Rlc2MoZGZzYW5fbGFiZWwgbGFiZWwsIGNvbnN0IGNoYXIgKmRlc2MpOwotCi0vLy8gUmV0dXJucyB0aGUgbnVtYmVyIG9mIGxhYmVscyBhbGxvY2F0ZWQuCi1zaXplX3QgZGZzYW5fZ2V0X2xhYmVsX2NvdW50KHZvaWQpOwotCi0vLy8gU2V0cyBhIGNhbGxiYWNrIHRvIGJlIGludm9rZWQgb24gY2FsbHMgdG8gd3JpdGUoKS4gIFRoZSBjYWxsYmFjayBpcyBpbnZva2VkCi0vLy8gYmVmb3JlIHRoZSB3cml0ZSBpcyBkb25lLiAgVGhlIHdyaXRlIGlzIG5vdCBndWFyYW50ZWVkIHRvIHN1Y2NlZWQgd2hlbiB0aGUKLS8vLyBjYWxsYmFjayBleGVjdXRlcy4gIFBhc3MgaW4gTlVMTCB0byByZW1vdmUgYW55IGNhbGxiYWNrLgotdm9pZCBkZnNhbl9zZXRfd3JpdGVfY2FsbGJhY2soZGZzYW5fd3JpdGVfY2FsbGJhY2tfdCBsYWJlbGVkX3dyaXRlX2NhbGxiYWNrKTsKLQotLy8vIFdyaXRlcyB0aGUgbGFiZWxzIGN1cnJlbnRseSB1c2VkIGJ5IHRoZSBwcm9ncmFtIHRvIHRoZSBnaXZlbiBmaWxlCi0vLy8gZGVzY3JpcHRvci4gVGhlIGxpbmVzIG9mIHRoZSBvdXRwdXQgaGF2ZSB0aGUgZm9sbG93aW5nIGZvcm1hdDoKLS8vLwotLy8vIDxsYWJlbD4gPHBhcmVudCBsYWJlbCAxPiA8cGFyZW50IGxhYmVsIDI+IDxsYWJlbCBkZXNjcmlwdGlvbiBpZiBhbnk+Ci12b2lkIGRmc2FuX2R1bXBfbGFiZWxzKGludCBmZCk7Ci0KLS8vLyBJbnRlcmNlcHRvciBob29rcy4KLS8vLyBXaGVuZXZlciBhIGRmc2FuJ3MgY3VzdG9tIGZ1bmN0aW9uIGlzIGNhbGxlZCB0aGUgY29ycmVzcG9uZGluZwotLy8vIGhvb2sgaXMgY2FsbGVkIGl0IG5vbi16ZXJvLiBUaGUgaG9va3Mgc2hvdWxkIGJlIGRlZmluZWQgYnkgdGhlIHVzZXIuCi0vLy8gVGhlIHByaW1hcnkgdXNlIGNhc2UgaXMgdGFpbnQtZ3VpZGVkIGZ1enppbmcsIHdoZXJlIHRoZSBmdXp6ZXIKLS8vLyBuZWVkcyB0byBzZWUgdGhlIHBhcmFtZXRlcnMgb2YgdGhlIGZ1bmN0aW9uIGFuZCB0aGUgbGFiZWxzLgotLy8vIEZJWE1FOiBpbXBsZW1lbnQgbW9yZSBob29rcy4KLXZvaWQgZGZzYW5fd2Vha19ob29rX21lbWNtcCh2b2lkICpjYWxsZXJfcGMsIGNvbnN0IHZvaWQgKnMxLCBjb25zdCB2b2lkICpzMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbiwgZGZzYW5fbGFiZWwgczFfbGFiZWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGZzYW5fbGFiZWwgczJfbGFiZWwsIGRmc2FuX2xhYmVsIG5fbGFiZWwpOwotdm9pZCBkZnNhbl93ZWFrX2hvb2tfc3RybmNtcCh2b2lkICpjYWxsZXJfcGMsIGNvbnN0IGNoYXIgKnMxLCBjb25zdCBjaGFyICpzMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG4sIGRmc2FuX2xhYmVsIHMxX2xhYmVsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZnNhbl9sYWJlbCBzMl9sYWJlbCwgZGZzYW5fbGFiZWwgbl9sYWJlbCk7Ci0jaWZkZWYgX19jcGx1c3BsdXMKLX0gIC8vIGV4dGVybiAiQyIKLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci12b2lkIGRmc2FuX3NldF9sYWJlbChkZnNhbl9sYWJlbCBsYWJlbCwgVCAmZGF0YSkgeyAgLy8gTk9MSU5UCi0gIGRmc2FuX3NldF9sYWJlbChsYWJlbCwgKHZvaWQgKikmZGF0YSwgc2l6ZW9mKFQpKTsKLX0KLQotI2VuZGlmCi0KLSNlbmRpZiAgLy8gREZTQU5fSU5URVJGQUNFX0gKZGlmZiAtLWdpdCBhL2NsYW5nLTI1NzcxMTMvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvc2FuaXRpemVyL2xpbnV4X3N5c2NhbGxfaG9va3MuaCBiL2NsYW5nLTI1NzcxMTMvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvc2FuaXRpemVyL2xpbnV4X3N5c2NhbGxfaG9va3MuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODk4NjdjMS4uMDAwMDAwMAotLS0gYS9jbGFuZy0yNTc3MTEzL2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL3Nhbml0aXplci9saW51eF9zeXNjYWxsX2hvb2tzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMDcwICswLDAgQEAKLS8vPT09LS0gbGludXhfc3lzY2FsbF9ob29rcy5oIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PS8vCi0vLwotLy8gICAgICAgICAgICAgICAgICAgICBUaGUgTExWTSBDb21waWxlciBJbmZyYXN0cnVjdHVyZQotLy8KLS8vIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgVW5pdmVyc2l0eSBvZiBJbGxpbm9pcyBPcGVuIFNvdXJjZQotLy8gTGljZW5zZS4gU2VlIExJQ0VOU0UuVFhUIGZvciBkZXRhaWxzLgotLy8KLS8vPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PS8vCi0vLwotLy8gVGhpcyBmaWxlIGlzIGEgcGFydCBvZiBwdWJsaWMgc2FuaXRpemVyIGludGVyZmFjZS4KLS8vCi0vLyBTeXN0ZW0gY2FsbCBoYW5kbGVycy4KLS8vCi0vLyBJbnRlcmZhY2UgbWV0aG9kcyBkZWNsYXJlZCBpbiB0aGlzIGhlYWRlciBpbXBsZW1lbnQgcHJlLSBhbmQgcG9zdC0gc3lzY2FsbAotLy8gYWN0aW9ucyBmb3IgdGhlIGFjdGl2ZSBzYW5pdGl6ZXIuCi0vLyBVc2FnZToKLS8vICAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfZ2V0Zm9vKC4uLmFyZ3MuLi4pOwotLy8gICBsb25nIHJlcyA9IHN5c2NhbGwoX19OUl9nZXRmb28sIC4uLmFyZ3MuLi4pOwotLy8gICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfZ2V0Zm9vKHJlcywgLi4uYXJncy4uLik7Ci0vLz09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0vLwotI2lmbmRlZiBTQU5JVElaRVJfTElOVVhfU1lTQ0FMTF9IT09LU19ICi0jZGVmaW5lIFNBTklUSVpFUl9MSU5VWF9TWVNDQUxMX0hPT0tTX0gKLQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV90aW1lKHRsb2MpIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF90aW1lKChsb25nKSh0bG9jKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3RpbWUocmVzLCB0bG9jKSBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3RpbWUocmVzLCAobG9uZykodGxvYykpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3N0aW1lKHRwdHIpIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zdGltZSgobG9uZykodHB0cikpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9zdGltZShyZXMsIHRwdHIpIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc3RpbWUocmVzLCAobG9uZykodHB0cikpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2dldHRpbWVvZmRheSh0diwgdHopIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9nZXR0aW1lb2ZkYXkoKGxvbmcpKHR2KSwgKGxvbmcpKHR6KSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2dldHRpbWVvZmRheShyZXMsIHR2LCB0eikgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9nZXR0aW1lb2ZkYXkocmVzLCAobG9uZykodHYpLCAobG9uZykodHopKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9zZXR0aW1lb2ZkYXkodHYsIHR6KSBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2V0dGltZW9mZGF5KChsb25nKSh0diksIChsb25nKSh0eikpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9zZXR0aW1lb2ZkYXkocmVzLCB0diwgdHopIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2V0dGltZW9mZGF5KHJlcywgKGxvbmcpKHR2KSwgKGxvbmcpKHR6KSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfYWRqdGltZXgodHhjX3ApIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9hZGp0aW1leCgobG9uZykodHhjX3ApKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfYWRqdGltZXgocmVzLCB0eGNfcCkgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9hZGp0aW1leChyZXMsIChsb25nKSh0eGNfcCkpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3RpbWVzKHRidWYpIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF90aW1lcygobG9uZykodGJ1ZikpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF90aW1lcyhyZXMsIHRidWYpIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfdGltZXMocmVzLCAobG9uZykodGJ1ZikpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2dldHRpZCgpIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZ2V0dGlkKCkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2dldHRpZChyZXMpIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZ2V0dGlkKHJlcykKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfbmFub3NsZWVwKHJxdHAsIHJtdHApIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9uYW5vc2xlZXAoKGxvbmcpKHJxdHApLCAobG9uZykocm10cCkpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9uYW5vc2xlZXAocmVzLCBycXRwLCBybXRwKSBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX25hbm9zbGVlcChyZXMsIChsb25nKShycXRwKSwgKGxvbmcpKHJtdHApKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9hbGFybShzZWNvbmRzKSBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfYWxhcm0oKGxvbmcpKHNlY29uZHMpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfYWxhcm0ocmVzLCBzZWNvbmRzKSBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2FsYXJtKHJlcywgKGxvbmcpKHNlY29uZHMpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9nZXRwaWQoKSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2dldHBpZCgpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9nZXRwaWQocmVzKSBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2dldHBpZChyZXMpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2dldHBwaWQoKSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2dldHBwaWQoKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfZ2V0cHBpZChyZXMpIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZ2V0cHBpZChyZXMpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2dldHVpZCgpIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZ2V0dWlkKCkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2dldHVpZChyZXMpIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZ2V0dWlkKHJlcykKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfZ2V0ZXVpZCgpIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZ2V0ZXVpZCgpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9nZXRldWlkKHJlcykgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9nZXRldWlkKHJlcykKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfZ2V0Z2lkKCkgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9nZXRnaWQoKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfZ2V0Z2lkKHJlcykgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9nZXRnaWQocmVzKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9nZXRlZ2lkKCkgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9nZXRlZ2lkKCkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2dldGVnaWQocmVzKSBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2dldGVnaWQocmVzKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9nZXRyZXN1aWQocnVpZCwgZXVpZCwgc3VpZCkgICAgICAgICAgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2dldHJlc3VpZCgobG9uZykocnVpZCksIChsb25nKShldWlkKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoc3VpZCkpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9nZXRyZXN1aWQocmVzLCBydWlkLCBldWlkLCBzdWlkKSAgICAgICAgICBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2dldHJlc3VpZChyZXMsIChsb25nKShydWlkKSwgKGxvbmcpKGV1aWQpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoc3VpZCkpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2dldHJlc2dpZChyZ2lkLCBlZ2lkLCBzZ2lkKSAgICAgICAgICBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZ2V0cmVzZ2lkKChsb25nKShyZ2lkKSwgKGxvbmcpKGVnaWQpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShzZ2lkKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2dldHJlc2dpZChyZXMsIHJnaWQsIGVnaWQsIHNnaWQpICAgICAgICAgIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZ2V0cmVzZ2lkKHJlcywgKGxvbmcpKHJnaWQpLCAobG9uZykoZWdpZCksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShzZ2lkKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfZ2V0cGdpZChwaWQpIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9nZXRwZ2lkKChsb25nKShwaWQpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfZ2V0cGdpZChyZXMsIHBpZCkgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9nZXRwZ2lkKHJlcywgKGxvbmcpKHBpZCkpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2dldHBncnAoKSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2dldHBncnAoKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfZ2V0cGdycChyZXMpIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZ2V0cGdycChyZXMpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2dldHNpZChwaWQpIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9nZXRzaWQoKGxvbmcpKHBpZCkpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9nZXRzaWQocmVzLCBwaWQpIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZ2V0c2lkKHJlcywgKGxvbmcpKHBpZCkpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2dldGdyb3VwcyhnaWRzZXRzaXplLCBncm91cGxpc3QpIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9nZXRncm91cHMoKGxvbmcpKGdpZHNldHNpemUpLCAobG9uZykoZ3JvdXBsaXN0KSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2dldGdyb3VwcyhyZXMsIGdpZHNldHNpemUsIGdyb3VwbGlzdCkgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9nZXRncm91cHMocmVzLCAobG9uZykoZ2lkc2V0c2l6ZSksICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoZ3JvdXBsaXN0KSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfc2V0cmVnaWQocmdpZCwgZWdpZCkgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NldHJlZ2lkKChsb25nKShyZ2lkKSwgKGxvbmcpKGVnaWQpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfc2V0cmVnaWQocmVzLCByZ2lkLCBlZ2lkKSBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NldHJlZ2lkKHJlcywgKGxvbmcpKHJnaWQpLCAobG9uZykoZWdpZCkpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3NldGdpZChnaWQpIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zZXRnaWQoKGxvbmcpKGdpZCkpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9zZXRnaWQocmVzLCBnaWQpIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2V0Z2lkKHJlcywgKGxvbmcpKGdpZCkpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3NldHJldWlkKHJ1aWQsIGV1aWQpIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zZXRyZXVpZCgobG9uZykocnVpZCksIChsb25nKShldWlkKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3NldHJldWlkKHJlcywgcnVpZCwgZXVpZCkgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zZXRyZXVpZChyZXMsIChsb25nKShydWlkKSwgKGxvbmcpKGV1aWQpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9zZXR1aWQodWlkKSBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2V0dWlkKChsb25nKSh1aWQpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfc2V0dWlkKHJlcywgdWlkKSBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NldHVpZChyZXMsIChsb25nKSh1aWQpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9zZXRyZXN1aWQocnVpZCwgZXVpZCwgc3VpZCkgICAgICAgICAgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NldHJlc3VpZCgobG9uZykocnVpZCksIChsb25nKShldWlkKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoc3VpZCkpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9zZXRyZXN1aWQocmVzLCBydWlkLCBldWlkLCBzdWlkKSAgICAgICAgICBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NldHJlc3VpZChyZXMsIChsb25nKShydWlkKSwgKGxvbmcpKGV1aWQpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoc3VpZCkpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3NldHJlc2dpZChyZ2lkLCBlZ2lkLCBzZ2lkKSAgICAgICAgICBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2V0cmVzZ2lkKChsb25nKShyZ2lkKSwgKGxvbmcpKGVnaWQpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShzZ2lkKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3NldHJlc2dpZChyZXMsIHJnaWQsIGVnaWQsIHNnaWQpICAgICAgICAgIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2V0cmVzZ2lkKHJlcywgKGxvbmcpKHJnaWQpLCAobG9uZykoZWdpZCksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShzZ2lkKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfc2V0ZnN1aWQodWlkKSBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2V0ZnN1aWQoKGxvbmcpKHVpZCkpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9zZXRmc3VpZChyZXMsIHVpZCkgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zZXRmc3VpZChyZXMsIChsb25nKSh1aWQpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9zZXRmc2dpZChnaWQpIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zZXRmc2dpZCgobG9uZykoZ2lkKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3NldGZzZ2lkKHJlcywgZ2lkKSBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NldGZzZ2lkKHJlcywgKGxvbmcpKGdpZCkpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3NldHBnaWQocGlkLCBwZ2lkKSBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2V0cGdpZCgobG9uZykocGlkKSwgKGxvbmcpKHBnaWQpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfc2V0cGdpZChyZXMsIHBpZCwgcGdpZCkgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zZXRwZ2lkKHJlcywgKGxvbmcpKHBpZCksIChsb25nKShwZ2lkKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfc2V0c2lkKCkgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zZXRzaWQoKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfc2V0c2lkKHJlcykgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zZXRzaWQocmVzKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9zZXRncm91cHMoZ2lkc2V0c2l6ZSwgZ3JvdXBsaXN0KSBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2V0Z3JvdXBzKChsb25nKShnaWRzZXRzaXplKSwgKGxvbmcpKGdyb3VwbGlzdCkpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9zZXRncm91cHMocmVzLCBnaWRzZXRzaXplLCBncm91cGxpc3QpIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2V0Z3JvdXBzKHJlcywgKGxvbmcpKGdpZHNldHNpemUpLCAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGdyb3VwbGlzdCkpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2FjY3QobmFtZSkgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2FjY3QoKGxvbmcpKG5hbWUpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfYWNjdChyZXMsIG5hbWUpIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfYWNjdChyZXMsIChsb25nKShuYW1lKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfY2FwZ2V0KGhlYWRlciwgZGF0YXB0cikgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2NhcGdldCgobG9uZykoaGVhZGVyKSwgKGxvbmcpKGRhdGFwdHIpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfY2FwZ2V0KHJlcywgaGVhZGVyLCBkYXRhcHRyKSBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2NhcGdldChyZXMsIChsb25nKShoZWFkZXIpLCAobG9uZykoZGF0YXB0cikpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2NhcHNldChoZWFkZXIsIGRhdGEpIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9jYXBzZXQoKGxvbmcpKGhlYWRlciksIChsb25nKShkYXRhKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2NhcHNldChyZXMsIGhlYWRlciwgZGF0YSkgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9jYXBzZXQocmVzLCAobG9uZykoaGVhZGVyKSwgKGxvbmcpKGRhdGEpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9wZXJzb25hbGl0eShwZXJzb25hbGl0eSkgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3BlcnNvbmFsaXR5KChsb25nKShwZXJzb25hbGl0eSkpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9wZXJzb25hbGl0eShyZXMsIHBlcnNvbmFsaXR5KSBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3BlcnNvbmFsaXR5KHJlcywgKGxvbmcpKHBlcnNvbmFsaXR5KSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfc2lncGVuZGluZyhzZXQpIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zaWdwZW5kaW5nKChsb25nKShzZXQpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfc2lncGVuZGluZyhyZXMsIHNldCkgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zaWdwZW5kaW5nKHJlcywgKGxvbmcpKHNldCkpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3NpZ3Byb2NtYXNrKGhvdywgc2V0LCBvc2V0KSAgICAgICAgICBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2lncHJvY21hc2soKGxvbmcpKGhvdyksIChsb25nKShzZXQpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKG9zZXQpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfc2lncHJvY21hc2socmVzLCBob3csIHNldCwgb3NldCkgICAgICAgICAgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zaWdwcm9jbWFzayhyZXMsIChsb25nKShob3cpLCAobG9uZykoc2V0KSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykob3NldCkpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2dldGl0aW1lcih3aGljaCwgdmFsdWUpIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9nZXRpdGltZXIoKGxvbmcpKHdoaWNoKSwgKGxvbmcpKHZhbHVlKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2dldGl0aW1lcihyZXMsIHdoaWNoLCB2YWx1ZSkgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9nZXRpdGltZXIocmVzLCAobG9uZykod2hpY2gpLCAobG9uZykodmFsdWUpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9zZXRpdGltZXIod2hpY2gsIHZhbHVlLCBvdmFsdWUpICAgICAgICBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2V0aXRpbWVyKChsb25nKSh3aGljaCksIChsb25nKSh2YWx1ZSksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKG92YWx1ZSkpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9zZXRpdGltZXIocmVzLCB3aGljaCwgdmFsdWUsIG92YWx1ZSkgICAgICAgIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2V0aXRpbWVyKHJlcywgKGxvbmcpKHdoaWNoKSwgKGxvbmcpKHZhbHVlKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKG92YWx1ZSkpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3RpbWVyX2NyZWF0ZSh3aGljaF9jbG9jaywgdGltZXJfZXZlbnRfc3BlYywgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlZF90aW1lcl9pZCkgICAgICAgICAgICAgIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF90aW1lcl9jcmVhdGUoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAobG9uZykod2hpY2hfY2xvY2spLCAobG9uZykodGltZXJfZXZlbnRfc3BlYyksIChsb25nKShjcmVhdGVkX3RpbWVyX2lkKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3RpbWVyX2NyZWF0ZSggICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHJlcywgd2hpY2hfY2xvY2ssIHRpbWVyX2V2ZW50X3NwZWMsIGNyZWF0ZWRfdGltZXJfaWQpICAgICAgICAgICAgICBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3RpbWVyX2NyZWF0ZShyZXMsIChsb25nKSh3aGljaF9jbG9jayksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSh0aW1lcl9ldmVudF9zcGVjKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGNyZWF0ZWRfdGltZXJfaWQpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV90aW1lcl9nZXR0aW1lKHRpbWVyX2lkLCBzZXR0aW5nKSBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfdGltZXJfZ2V0dGltZSgobG9uZykodGltZXJfaWQpLCAobG9uZykoc2V0dGluZykpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF90aW1lcl9nZXR0aW1lKHJlcywgdGltZXJfaWQsIHNldHRpbmcpIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfdGltZXJfZ2V0dGltZShyZXMsIChsb25nKSh0aW1lcl9pZCksICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShzZXR0aW5nKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfdGltZXJfZ2V0b3ZlcnJ1bih0aW1lcl9pZCkgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3RpbWVyX2dldG92ZXJydW4oKGxvbmcpKHRpbWVyX2lkKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3RpbWVyX2dldG92ZXJydW4ocmVzLCB0aW1lcl9pZCkgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF90aW1lcl9nZXRvdmVycnVuKHJlcywgKGxvbmcpKHRpbWVyX2lkKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfdGltZXJfc2V0dGltZSh0aW1lcl9pZCwgZmxhZ3MsIG5ld19zZXR0aW5nLCAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbGRfc2V0dGluZykgICAgICAgICAgICAgICAgICAgIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF90aW1lcl9zZXR0aW1lKChsb25nKSh0aW1lcl9pZCksIChsb25nKShmbGFncyksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShuZXdfc2V0dGluZyksICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShvbGRfc2V0dGluZykpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF90aW1lcl9zZXR0aW1lKHJlcywgdGltZXJfaWQsIGZsYWdzLCAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdfc2V0dGluZywgb2xkX3NldHRpbmcpIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfdGltZXJfc2V0dGltZSggICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICByZXMsIChsb25nKSh0aW1lcl9pZCksIChsb25nKShmbGFncyksIChsb25nKShuZXdfc2V0dGluZyksICAgICAgICAgXAotICAgICAgKGxvbmcpKG9sZF9zZXR0aW5nKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfdGltZXJfZGVsZXRlKHRpbWVyX2lkKSBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfdGltZXJfZGVsZXRlKChsb25nKSh0aW1lcl9pZCkpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF90aW1lcl9kZWxldGUocmVzLCB0aW1lcl9pZCkgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF90aW1lcl9kZWxldGUocmVzLCAobG9uZykodGltZXJfaWQpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9jbG9ja19zZXR0aW1lKHdoaWNoX2Nsb2NrLCB0cCkgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2Nsb2NrX3NldHRpbWUoKGxvbmcpKHdoaWNoX2Nsb2NrKSwgKGxvbmcpKHRwKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2Nsb2NrX3NldHRpbWUocmVzLCB3aGljaF9jbG9jaywgdHApICAgIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfY2xvY2tfc2V0dGltZShyZXMsIChsb25nKSh3aGljaF9jbG9jayksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykodHApKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9jbG9ja19nZXR0aW1lKHdoaWNoX2Nsb2NrLCB0cCkgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2Nsb2NrX2dldHRpbWUoKGxvbmcpKHdoaWNoX2Nsb2NrKSwgKGxvbmcpKHRwKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2Nsb2NrX2dldHRpbWUocmVzLCB3aGljaF9jbG9jaywgdHApICAgIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfY2xvY2tfZ2V0dGltZShyZXMsIChsb25nKSh3aGljaF9jbG9jayksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykodHApKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9jbG9ja19hZGp0aW1lKHdoaWNoX2Nsb2NrLCB0eCkgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2Nsb2NrX2FkanRpbWUoKGxvbmcpKHdoaWNoX2Nsb2NrKSwgKGxvbmcpKHR4KSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2Nsb2NrX2FkanRpbWUocmVzLCB3aGljaF9jbG9jaywgdHgpICAgIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfY2xvY2tfYWRqdGltZShyZXMsIChsb25nKSh3aGljaF9jbG9jayksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykodHgpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9jbG9ja19nZXRyZXMod2hpY2hfY2xvY2ssIHRwKSBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfY2xvY2tfZ2V0cmVzKChsb25nKSh3aGljaF9jbG9jayksIChsb25nKSh0cCkpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9jbG9ja19nZXRyZXMocmVzLCB3aGljaF9jbG9jaywgdHApICAgIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfY2xvY2tfZ2V0cmVzKHJlcywgKGxvbmcpKHdoaWNoX2Nsb2NrKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHRwKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfY2xvY2tfbmFub3NsZWVwKHdoaWNoX2Nsb2NrLCBmbGFncywgcnF0cCwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm10cCkgICAgICAgICAgICAgICAgICAgICBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfY2xvY2tfbmFub3NsZWVwKCAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIChsb25nKSh3aGljaF9jbG9jayksIChsb25nKShmbGFncyksIChsb25nKShycXRwKSwgKGxvbmcpKHJtdHApKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfY2xvY2tfbmFub3NsZWVwKHJlcywgd2hpY2hfY2xvY2ssIGZsYWdzLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnF0cCwgcm10cCkgICAgICAgICAgICAgIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfY2xvY2tfbmFub3NsZWVwKCAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgcmVzLCAobG9uZykod2hpY2hfY2xvY2spLCAobG9uZykoZmxhZ3MpLCAobG9uZykocnF0cCksIChsb25nKShybXRwKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfbmljZShpbmNyZW1lbnQpIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9uaWNlKChsb25nKShpbmNyZW1lbnQpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfbmljZShyZXMsIGluY3JlbWVudCkgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9uaWNlKHJlcywgKGxvbmcpKGluY3JlbWVudCkpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3NjaGVkX3NldHNjaGVkdWxlcihwaWQsIHBvbGljeSwgcGFyYW0pICAgICAgICAgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NjaGVkX3NldHNjaGVkdWxlcigobG9uZykocGlkKSwgKGxvbmcpKHBvbGljeSksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHBhcmFtKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3NjaGVkX3NldHNjaGVkdWxlcihyZXMsIHBpZCwgcG9saWN5LCBwYXJhbSkgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zY2hlZF9zZXRzY2hlZHVsZXIoICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICByZXMsIChsb25nKShwaWQpLCAobG9uZykocG9saWN5KSwgKGxvbmcpKHBhcmFtKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfc2NoZWRfc2V0cGFyYW0ocGlkLCBwYXJhbSkgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NjaGVkX3NldHBhcmFtKChsb25nKShwaWQpLCAobG9uZykocGFyYW0pKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfc2NoZWRfc2V0cGFyYW0ocmVzLCBwaWQsIHBhcmFtKSBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NjaGVkX3NldHBhcmFtKHJlcywgKGxvbmcpKHBpZCksIChsb25nKShwYXJhbSkpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3NjaGVkX2dldHNjaGVkdWxlcihwaWQpIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zY2hlZF9nZXRzY2hlZHVsZXIoKGxvbmcpKHBpZCkpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9zY2hlZF9nZXRzY2hlZHVsZXIocmVzLCBwaWQpIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2NoZWRfZ2V0c2NoZWR1bGVyKHJlcywgKGxvbmcpKHBpZCkpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3NjaGVkX2dldHBhcmFtKHBpZCwgcGFyYW0pIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zY2hlZF9nZXRwYXJhbSgobG9uZykocGlkKSwgKGxvbmcpKHBhcmFtKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3NjaGVkX2dldHBhcmFtKHJlcywgcGlkLCBwYXJhbSkgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zY2hlZF9nZXRwYXJhbShyZXMsIChsb25nKShwaWQpLCAobG9uZykocGFyYW0pKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9zY2hlZF9zZXRhZmZpbml0eShwaWQsIGxlbiwgdXNlcl9tYXNrX3B0cikgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NjaGVkX3NldGFmZmluaXR5KChsb25nKShwaWQpLCAobG9uZykobGVuKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSh1c2VyX21hc2tfcHRyKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3NjaGVkX3NldGFmZmluaXR5KHJlcywgcGlkLCBsZW4sIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJfbWFza19wdHIpIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2NoZWRfc2V0YWZmaW5pdHkoICAgICAgICAgICAgICAgIFwKLSAgICAgIHJlcywgKGxvbmcpKHBpZCksIChsb25nKShsZW4pLCAobG9uZykodXNlcl9tYXNrX3B0cikpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3NjaGVkX2dldGFmZmluaXR5KHBpZCwgbGVuLCB1c2VyX21hc2tfcHRyKSBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2NoZWRfZ2V0YWZmaW5pdHkoKGxvbmcpKHBpZCksIChsb25nKShsZW4pLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHVzZXJfbWFza19wdHIpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfc2NoZWRfZ2V0YWZmaW5pdHkocmVzLCBwaWQsIGxlbiwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcl9tYXNrX3B0cikgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zY2hlZF9nZXRhZmZpbml0eSggICAgICAgICAgICAgICAgXAotICAgICAgcmVzLCAobG9uZykocGlkKSwgKGxvbmcpKGxlbiksIChsb25nKSh1c2VyX21hc2tfcHRyKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfc2NoZWRfeWllbGQoKSBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2NoZWRfeWllbGQoKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfc2NoZWRfeWllbGQocmVzKSBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NjaGVkX3lpZWxkKHJlcykKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfc2NoZWRfZ2V0X3ByaW9yaXR5X21heChwb2xpY3kpIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zY2hlZF9nZXRfcHJpb3JpdHlfbWF4KChsb25nKShwb2xpY3kpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfc2NoZWRfZ2V0X3ByaW9yaXR5X21heChyZXMsIHBvbGljeSkgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zY2hlZF9nZXRfcHJpb3JpdHlfbWF4KHJlcywgKGxvbmcpKHBvbGljeSkpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3NjaGVkX2dldF9wcmlvcml0eV9taW4ocG9saWN5KSBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2NoZWRfZ2V0X3ByaW9yaXR5X21pbigobG9uZykocG9saWN5KSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3NjaGVkX2dldF9wcmlvcml0eV9taW4ocmVzLCBwb2xpY3kpIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2NoZWRfZ2V0X3ByaW9yaXR5X21pbihyZXMsIChsb25nKShwb2xpY3kpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9zY2hlZF9ycl9nZXRfaW50ZXJ2YWwocGlkLCBpbnRlcnZhbCkgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NjaGVkX3JyX2dldF9pbnRlcnZhbCgobG9uZykocGlkKSwgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoaW50ZXJ2YWwpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfc2NoZWRfcnJfZ2V0X2ludGVydmFsKHJlcywgcGlkLCBpbnRlcnZhbCkgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zY2hlZF9ycl9nZXRfaW50ZXJ2YWwocmVzLCAobG9uZykocGlkKSwgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGludGVydmFsKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfc2V0cHJpb3JpdHkod2hpY2gsIHdobywgbmljZXZhbCkgICAgICAgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NldHByaW9yaXR5KChsb25nKSh3aGljaCksIChsb25nKSh3aG8pLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKG5pY2V2YWwpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfc2V0cHJpb3JpdHkocmVzLCB3aGljaCwgd2hvLCBuaWNldmFsKSAgICAgICBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NldHByaW9yaXR5KHJlcywgKGxvbmcpKHdoaWNoKSwgKGxvbmcpKHdobyksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKG5pY2V2YWwpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9nZXRwcmlvcml0eSh3aGljaCwgd2hvKSBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZ2V0cHJpb3JpdHkoKGxvbmcpKHdoaWNoKSwgKGxvbmcpKHdobykpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9nZXRwcmlvcml0eShyZXMsIHdoaWNoLCB3aG8pIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZ2V0cHJpb3JpdHkocmVzLCAobG9uZykod2hpY2gpLCAobG9uZykod2hvKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfc2h1dGRvd24oYXJnMCwgYXJnMSkgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NodXRkb3duKChsb25nKShhcmcwKSwgKGxvbmcpKGFyZzEpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfc2h1dGRvd24ocmVzLCBhcmcwLCBhcmcxKSBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NodXRkb3duKHJlcywgKGxvbmcpKGFyZzApLCAobG9uZykoYXJnMSkpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3JlYm9vdChtYWdpYzEsIG1hZ2ljMiwgY21kLCBhcmcpICAgICAgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3JlYm9vdCgobG9uZykobWFnaWMxKSwgKGxvbmcpKG1hZ2ljMiksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGNtZCksIChsb25nKShhcmcpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfcmVib290KHJlcywgbWFnaWMxLCBtYWdpYzIsIGNtZCwgYXJnKSAgICAgIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfcmVib290KHJlcywgKGxvbmcpKG1hZ2ljMSksIChsb25nKShtYWdpYzIpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoY21kKSwgKGxvbmcpKGFyZykpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3Jlc3RhcnRfc3lzY2FsbCgpIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9yZXN0YXJ0X3N5c2NhbGwoKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfcmVzdGFydF9zeXNjYWxsKHJlcykgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9yZXN0YXJ0X3N5c2NhbGwocmVzKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9rZXhlY19sb2FkKGVudHJ5LCBucl9zZWdtZW50cywgc2VnbWVudHMsICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2tleGVjX2xvYWQoKGxvbmcpKGVudHJ5KSwgKGxvbmcpKG5yX3NlZ21lbnRzKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHNlZ21lbnRzKSwgKGxvbmcpKGZsYWdzKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2tleGVjX2xvYWQocmVzLCBlbnRyeSwgbnJfc2VnbWVudHMsIHNlZ21lbnRzLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9rZXhlY19sb2FkKHJlcywgKGxvbmcpKGVudHJ5KSwgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykobnJfc2VnbWVudHMpLCAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHNlZ21lbnRzKSwgKGxvbmcpKGZsYWdzKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfZXhpdChlcnJvcl9jb2RlKSBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZXhpdCgobG9uZykoZXJyb3JfY29kZSkpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9leGl0KHJlcywgZXJyb3JfY29kZSkgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9leGl0KHJlcywgKGxvbmcpKGVycm9yX2NvZGUpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9leGl0X2dyb3VwKGVycm9yX2NvZGUpIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9leGl0X2dyb3VwKChsb25nKShlcnJvcl9jb2RlKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2V4aXRfZ3JvdXAocmVzLCBlcnJvcl9jb2RlKSBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2V4aXRfZ3JvdXAocmVzLCAobG9uZykoZXJyb3JfY29kZSkpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3dhaXQ0KHBpZCwgc3RhdF9hZGRyLCBvcHRpb25zLCBydSkgICBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfd2FpdDQoKGxvbmcpKHBpZCksIChsb25nKShzdGF0X2FkZHIpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKG9wdGlvbnMpLCAobG9uZykocnUpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfd2FpdDQocmVzLCBwaWQsIHN0YXRfYWRkciwgb3B0aW9ucywgcnUpICAgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF93YWl0NChyZXMsIChsb25nKShwaWQpLCAobG9uZykoc3RhdF9hZGRyKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykob3B0aW9ucyksIChsb25nKShydSkpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3dhaXRpZCh3aGljaCwgcGlkLCBpbmZvcCwgb3B0aW9ucywgcnUpIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF93YWl0aWQoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgKGxvbmcpKHdoaWNoKSwgKGxvbmcpKHBpZCksIChsb25nKShpbmZvcCksIChsb25nKShvcHRpb25zKSwgKGxvbmcpKHJ1KSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3dhaXRpZChyZXMsIHdoaWNoLCBwaWQsIGluZm9wLCBvcHRpb25zLCBydSkgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF93YWl0aWQocmVzLCAobG9uZykod2hpY2gpLCAobG9uZykocGlkKSwgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoaW5mb3ApLCAobG9uZykob3B0aW9ucyksICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShydSkpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3dhaXRwaWQocGlkLCBzdGF0X2FkZHIsIG9wdGlvbnMpICAgICAgIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF93YWl0cGlkKChsb25nKShwaWQpLCAobG9uZykoc3RhdF9hZGRyKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKG9wdGlvbnMpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfd2FpdHBpZChyZXMsIHBpZCwgc3RhdF9hZGRyLCBvcHRpb25zKSAgICAgICBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3dhaXRwaWQocmVzLCAobG9uZykocGlkKSwgKGxvbmcpKHN0YXRfYWRkciksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykob3B0aW9ucykpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3NldF90aWRfYWRkcmVzcyh0aWRwdHIpIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zZXRfdGlkX2FkZHJlc3MoKGxvbmcpKHRpZHB0cikpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9zZXRfdGlkX2FkZHJlc3MocmVzLCB0aWRwdHIpIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2V0X3RpZF9hZGRyZXNzKHJlcywgKGxvbmcpKHRpZHB0cikpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2luaXRfbW9kdWxlKHVtb2QsIGxlbiwgdWFyZ3MpICAgICAgICAgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2luaXRfbW9kdWxlKChsb25nKSh1bW9kKSwgKGxvbmcpKGxlbiksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykodWFyZ3MpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW5pdF9tb2R1bGUocmVzLCB1bW9kLCBsZW4sIHVhcmdzKSAgICAgICAgIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfaW5pdF9tb2R1bGUocmVzLCAobG9uZykodW1vZCksIChsb25nKShsZW4pLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSh1YXJncykpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2RlbGV0ZV9tb2R1bGUobmFtZV91c2VyLCBmbGFncykgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2RlbGV0ZV9tb2R1bGUoKGxvbmcpKG5hbWVfdXNlciksIChsb25nKShmbGFncykpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9kZWxldGVfbW9kdWxlKHJlcywgbmFtZV91c2VyLCBmbGFncykgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9kZWxldGVfbW9kdWxlKHJlcywgKGxvbmcpKG5hbWVfdXNlciksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoZmxhZ3MpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9ydF9zaWdwcm9jbWFzayhob3csIHNldCwgb3NldCwgc2lnc2V0c2l6ZSkgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3J0X3NpZ3Byb2NtYXNrKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgKGxvbmcpKGhvdyksIChsb25nKShzZXQpLCAobG9uZykob3NldCksIChsb25nKShzaWdzZXRzaXplKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3J0X3NpZ3Byb2NtYXNrKHJlcywgaG93LCBzZXQsIG9zZXQsIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ3NldHNpemUpICAgICAgICAgIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfcnRfc2lncHJvY21hc2soICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIHJlcywgKGxvbmcpKGhvdyksIChsb25nKShzZXQpLCAobG9uZykob3NldCksIChsb25nKShzaWdzZXRzaXplKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfcnRfc2lncGVuZGluZyhzZXQsIHNpZ3NldHNpemUpIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9ydF9zaWdwZW5kaW5nKChsb25nKShzZXQpLCAobG9uZykoc2lnc2V0c2l6ZSkpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9ydF9zaWdwZW5kaW5nKHJlcywgc2V0LCBzaWdzZXRzaXplKSBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3J0X3NpZ3BlbmRpbmcocmVzLCAobG9uZykoc2V0KSwgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHNpZ3NldHNpemUpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9ydF9zaWd0aW1lZHdhaXQodXRoZXNlLCB1aW5mbywgdXRzLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWdzZXRzaXplKSAgICAgICAgIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9ydF9zaWd0aW1lZHdhaXQoICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgKGxvbmcpKHV0aGVzZSksIChsb25nKSh1aW5mbyksIChsb25nKSh1dHMpLCAobG9uZykoc2lnc2V0c2l6ZSkpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9ydF9zaWd0aW1lZHdhaXQocmVzLCB1dGhlc2UsIHVpbmZvLCB1dHMsIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWdzZXRzaXplKSAgICAgICAgICAgICAgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9ydF9zaWd0aW1lZHdhaXQoICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICByZXMsIChsb25nKSh1dGhlc2UpLCAobG9uZykodWluZm8pLCAobG9uZykodXRzKSwgKGxvbmcpKHNpZ3NldHNpemUpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9ydF90Z3NpZ3F1ZXVlaW5mbyh0Z2lkLCBwaWQsIHNpZywgdWluZm8pICAgIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9ydF90Z3NpZ3F1ZXVlaW5mbygobG9uZykodGdpZCksIChsb25nKShwaWQpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHNpZyksIChsb25nKSh1aW5mbykpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9ydF90Z3NpZ3F1ZXVlaW5mbyhyZXMsIHRnaWQsIHBpZCwgc2lnLCB1aW5mbykgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9ydF90Z3NpZ3F1ZXVlaW5mbyggICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIHJlcywgKGxvbmcpKHRnaWQpLCAobG9uZykocGlkKSwgKGxvbmcpKHNpZyksIChsb25nKSh1aW5mbykpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2tpbGwocGlkLCBzaWcpIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9raWxsKChsb25nKShwaWQpLCAobG9uZykoc2lnKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2tpbGwocmVzLCBwaWQsIHNpZykgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9raWxsKHJlcywgKGxvbmcpKHBpZCksIChsb25nKShzaWcpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV90Z2tpbGwodGdpZCwgcGlkLCBzaWcpIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF90Z2tpbGwoKGxvbmcpKHRnaWQpLCAobG9uZykocGlkKSwgKGxvbmcpKHNpZykpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF90Z2tpbGwocmVzLCB0Z2lkLCBwaWQsIHNpZykgICAgICAgICAgIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfdGdraWxsKHJlcywgKGxvbmcpKHRnaWQpLCAobG9uZykocGlkKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHNpZykpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3RraWxsKHBpZCwgc2lnKSBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfdGtpbGwoKGxvbmcpKHBpZCksIChsb25nKShzaWcpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfdGtpbGwocmVzLCBwaWQsIHNpZykgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF90a2lsbChyZXMsIChsb25nKShwaWQpLCAobG9uZykoc2lnKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfcnRfc2lncXVldWVpbmZvKHBpZCwgc2lnLCB1aW5mbykgICAgICAgICBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfcnRfc2lncXVldWVpbmZvKChsb25nKShwaWQpLCAobG9uZykoc2lnKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykodWluZm8pKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfcnRfc2lncXVldWVpbmZvKHJlcywgcGlkLCBzaWcsIHVpbmZvKSAgICAgICAgIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfcnRfc2lncXVldWVpbmZvKHJlcywgKGxvbmcpKHBpZCksIChsb25nKShzaWcpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykodWluZm8pKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9zZ2V0bWFzaygpIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zZ2V0bWFzaygpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9zZ2V0bWFzayhyZXMpIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2dldG1hc2socmVzKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9zc2V0bWFzayhuZXdtYXNrKSBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc3NldG1hc2soKGxvbmcpKG5ld21hc2spKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfc3NldG1hc2socmVzLCBuZXdtYXNrKSBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NzZXRtYXNrKHJlcywgKGxvbmcpKG5ld21hc2spKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9zaWduYWwoc2lnLCBoYW5kbGVyKSBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2lnbmFsKChsb25nKShzaWcpLCAobG9uZykoaGFuZGxlcikpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9zaWduYWwocmVzLCBzaWcsIGhhbmRsZXIpIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2lnbmFsKHJlcywgKGxvbmcpKHNpZyksIChsb25nKShoYW5kbGVyKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfcGF1c2UoKSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3BhdXNlKCkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3BhdXNlKHJlcykgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9wYXVzZShyZXMpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3N5bmMoKSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3N5bmMoKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfc3luYyhyZXMpIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc3luYyhyZXMpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ZzeW5jKGZkKSBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZnN5bmMoKGxvbmcpKGZkKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ZzeW5jKHJlcywgZmQpIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZnN5bmMocmVzLCAobG9uZykoZmQpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9mZGF0YXN5bmMoZmQpIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9mZGF0YXN5bmMoKGxvbmcpKGZkKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ZkYXRhc3luYyhyZXMsIGZkKSBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2ZkYXRhc3luYyhyZXMsIChsb25nKShmZCkpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2JkZmx1c2goZnVuYywgZGF0YSkgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2JkZmx1c2goKGxvbmcpKGZ1bmMpLCAobG9uZykoZGF0YSkpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9iZGZsdXNoKHJlcywgZnVuYywgZGF0YSkgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9iZGZsdXNoKHJlcywgKGxvbmcpKGZ1bmMpLCAobG9uZykoZGF0YSkpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX21vdW50KGRldl9uYW1lLCBkaXJfbmFtZSwgdHlwZSwgZmxhZ3MsIGRhdGEpIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9tb3VudCgobG9uZykoZGV2X25hbWUpLCAobG9uZykoZGlyX25hbWUpLCAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSh0eXBlKSwgKGxvbmcpKGZsYWdzKSwgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGRhdGEpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfbW91bnQocmVzLCBkZXZfbmFtZSwgZGlyX25hbWUsIHR5cGUsIGZsYWdzLCAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX21vdW50KHJlcywgKGxvbmcpKGRldl9uYW1lKSwgKGxvbmcpKGRpcl9uYW1lKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykodHlwZSksIChsb25nKShmbGFncyksICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGRhdGEpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV91bW91bnQobmFtZSwgZmxhZ3MpIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF91bW91bnQoKGxvbmcpKG5hbWUpLCAobG9uZykoZmxhZ3MpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfdW1vdW50KHJlcywgbmFtZSwgZmxhZ3MpIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfdW1vdW50KHJlcywgKGxvbmcpKG5hbWUpLCAobG9uZykoZmxhZ3MpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9vbGR1bW91bnQobmFtZSkgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX29sZHVtb3VudCgobG9uZykobmFtZSkpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9vbGR1bW91bnQocmVzLCBuYW1lKSBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX29sZHVtb3VudChyZXMsIChsb25nKShuYW1lKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfdHJ1bmNhdGUocGF0aCwgbGVuZ3RoKSBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfdHJ1bmNhdGUoKGxvbmcpKHBhdGgpLCAobG9uZykobGVuZ3RoKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3RydW5jYXRlKHJlcywgcGF0aCwgbGVuZ3RoKSBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3RydW5jYXRlKHJlcywgKGxvbmcpKHBhdGgpLCAobG9uZykobGVuZ3RoKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfZnRydW5jYXRlKGZkLCBsZW5ndGgpIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9mdHJ1bmNhdGUoKGxvbmcpKGZkKSwgKGxvbmcpKGxlbmd0aCkpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9mdHJ1bmNhdGUocmVzLCBmZCwgbGVuZ3RoKSBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2Z0cnVuY2F0ZShyZXMsIChsb25nKShmZCksIChsb25nKShsZW5ndGgpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9zdGF0KGZpbGVuYW1lLCBzdGF0YnVmKSBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc3RhdCgobG9uZykoZmlsZW5hbWUpLCAobG9uZykoc3RhdGJ1ZikpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9zdGF0KHJlcywgZmlsZW5hbWUsIHN0YXRidWYpIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc3RhdChyZXMsIChsb25nKShmaWxlbmFtZSksIChsb25nKShzdGF0YnVmKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfc3RhdGZzKHBhdGgsIGJ1ZikgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3N0YXRmcygobG9uZykocGF0aCksIChsb25nKShidWYpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfc3RhdGZzKHJlcywgcGF0aCwgYnVmKSBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3N0YXRmcyhyZXMsIChsb25nKShwYXRoKSwgKGxvbmcpKGJ1ZikpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3N0YXRmczY0KHBhdGgsIHN6LCBidWYpIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zdGF0ZnM2NCgobG9uZykocGF0aCksIChsb25nKShzeiksIChsb25nKShidWYpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfc3RhdGZzNjQocmVzLCBwYXRoLCBzeiwgYnVmKSAgICAgICAgICAgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zdGF0ZnM2NChyZXMsIChsb25nKShwYXRoKSwgKGxvbmcpKHN6KSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoYnVmKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfZnN0YXRmcyhmZCwgYnVmKSBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZnN0YXRmcygobG9uZykoZmQpLCAobG9uZykoYnVmKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ZzdGF0ZnMocmVzLCBmZCwgYnVmKSBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2ZzdGF0ZnMocmVzLCAobG9uZykoZmQpLCAobG9uZykoYnVmKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfZnN0YXRmczY0KGZkLCBzeiwgYnVmKSBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZnN0YXRmczY0KChsb25nKShmZCksIChsb25nKShzeiksIChsb25nKShidWYpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfZnN0YXRmczY0KHJlcywgZmQsIHN6LCBidWYpICAgICAgICAgICBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2ZzdGF0ZnM2NChyZXMsIChsb25nKShmZCksIChsb25nKShzeiksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShidWYpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9sc3RhdChmaWxlbmFtZSwgc3RhdGJ1ZikgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2xzdGF0KChsb25nKShmaWxlbmFtZSksIChsb25nKShzdGF0YnVmKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2xzdGF0KHJlcywgZmlsZW5hbWUsIHN0YXRidWYpIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbHN0YXQocmVzLCAobG9uZykoZmlsZW5hbWUpLCAobG9uZykoc3RhdGJ1ZikpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ZzdGF0KGZkLCBzdGF0YnVmKSBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZnN0YXQoKGxvbmcpKGZkKSwgKGxvbmcpKHN0YXRidWYpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfZnN0YXQocmVzLCBmZCwgc3RhdGJ1ZikgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9mc3RhdChyZXMsIChsb25nKShmZCksIChsb25nKShzdGF0YnVmKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfbmV3c3RhdChmaWxlbmFtZSwgc3RhdGJ1ZikgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX25ld3N0YXQoKGxvbmcpKGZpbGVuYW1lKSwgKGxvbmcpKHN0YXRidWYpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfbmV3c3RhdChyZXMsIGZpbGVuYW1lLCBzdGF0YnVmKSBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX25ld3N0YXQocmVzLCAobG9uZykoZmlsZW5hbWUpLCAobG9uZykoc3RhdGJ1ZikpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX25ld2xzdGF0KGZpbGVuYW1lLCBzdGF0YnVmKSBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfbmV3bHN0YXQoKGxvbmcpKGZpbGVuYW1lKSwgKGxvbmcpKHN0YXRidWYpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfbmV3bHN0YXQocmVzLCBmaWxlbmFtZSwgc3RhdGJ1ZikgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9uZXdsc3RhdChyZXMsIChsb25nKShmaWxlbmFtZSksIChsb25nKShzdGF0YnVmKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfbmV3ZnN0YXQoZmQsIHN0YXRidWYpIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9uZXdmc3RhdCgobG9uZykoZmQpLCAobG9uZykoc3RhdGJ1ZikpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9uZXdmc3RhdChyZXMsIGZkLCBzdGF0YnVmKSBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX25ld2ZzdGF0KHJlcywgKGxvbmcpKGZkKSwgKGxvbmcpKHN0YXRidWYpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV91c3RhdChkZXYsIHVidWYpIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF91c3RhdCgobG9uZykoZGV2KSwgKGxvbmcpKHVidWYpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfdXN0YXQocmVzLCBkZXYsIHVidWYpIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfdXN0YXQocmVzLCAobG9uZykoZGV2KSwgKGxvbmcpKHVidWYpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9zdGF0NjQoZmlsZW5hbWUsIHN0YXRidWYpIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zdGF0NjQoKGxvbmcpKGZpbGVuYW1lKSwgKGxvbmcpKHN0YXRidWYpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfc3RhdDY0KHJlcywgZmlsZW5hbWUsIHN0YXRidWYpIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc3RhdDY0KHJlcywgKGxvbmcpKGZpbGVuYW1lKSwgKGxvbmcpKHN0YXRidWYpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9mc3RhdDY0KGZkLCBzdGF0YnVmKSBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZnN0YXQ2NCgobG9uZykoZmQpLCAobG9uZykoc3RhdGJ1ZikpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9mc3RhdDY0KHJlcywgZmQsIHN0YXRidWYpIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZnN0YXQ2NChyZXMsIChsb25nKShmZCksIChsb25nKShzdGF0YnVmKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfbHN0YXQ2NChmaWxlbmFtZSwgc3RhdGJ1ZikgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2xzdGF0NjQoKGxvbmcpKGZpbGVuYW1lKSwgKGxvbmcpKHN0YXRidWYpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfbHN0YXQ2NChyZXMsIGZpbGVuYW1lLCBzdGF0YnVmKSBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2xzdGF0NjQocmVzLCAobG9uZykoZmlsZW5hbWUpLCAobG9uZykoc3RhdGJ1ZikpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3NldHhhdHRyKHBhdGgsIG5hbWUsIHZhbHVlLCBzaXplLCBmbGFncykgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NldHhhdHRyKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIChsb25nKShwYXRoKSwgKGxvbmcpKG5hbWUpLCAobG9uZykodmFsdWUpLCAobG9uZykoc2l6ZSksIChsb25nKShmbGFncykpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9zZXR4YXR0cihyZXMsIHBhdGgsIG5hbWUsIHZhbHVlLCBzaXplLCBmbGFncykgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zZXR4YXR0cihyZXMsIChsb25nKShwYXRoKSwgKGxvbmcpKG5hbWUpLCAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHZhbHVlKSwgKGxvbmcpKHNpemUpLCAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShmbGFncykpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2xzZXR4YXR0cihwYXRoLCBuYW1lLCB2YWx1ZSwgc2l6ZSwgZmxhZ3MpIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9sc2V0eGF0dHIoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgKGxvbmcpKHBhdGgpLCAobG9uZykobmFtZSksIChsb25nKSh2YWx1ZSksIChsb25nKShzaXplKSwgKGxvbmcpKGZsYWdzKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2xzZXR4YXR0cihyZXMsIHBhdGgsIG5hbWUsIHZhbHVlLCBzaXplLCAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFncykgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbHNldHhhdHRyKHJlcywgKGxvbmcpKHBhdGgpLCAobG9uZykobmFtZSksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSh2YWx1ZSksIChsb25nKShzaXplKSwgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShmbGFncykpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ZzZXR4YXR0cihmZCwgbmFtZSwgdmFsdWUsIHNpemUsIGZsYWdzKSBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZnNldHhhdHRyKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAobG9uZykoZmQpLCAobG9uZykobmFtZSksIChsb25nKSh2YWx1ZSksIChsb25nKShzaXplKSwgKGxvbmcpKGZsYWdzKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ZzZXR4YXR0cihyZXMsIGZkLCBuYW1lLCB2YWx1ZSwgc2l6ZSwgZmxhZ3MpIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZnNldHhhdHRyKHJlcywgKGxvbmcpKGZkKSwgKGxvbmcpKG5hbWUpLCAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSh2YWx1ZSksIChsb25nKShzaXplKSwgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShmbGFncykpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2dldHhhdHRyKHBhdGgsIG5hbWUsIHZhbHVlLCBzaXplKSAgIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9nZXR4YXR0cigobG9uZykocGF0aCksIChsb25nKShuYW1lKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSh2YWx1ZSksIChsb25nKShzaXplKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2dldHhhdHRyKHJlcywgcGF0aCwgbmFtZSwgdmFsdWUsIHNpemUpICAgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9nZXR4YXR0cihyZXMsIChsb25nKShwYXRoKSwgKGxvbmcpKG5hbWUpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSh2YWx1ZSksIChsb25nKShzaXplKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfbGdldHhhdHRyKHBhdGgsIG5hbWUsIHZhbHVlLCBzaXplKSAgIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9sZ2V0eGF0dHIoKGxvbmcpKHBhdGgpLCAobG9uZykobmFtZSksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHZhbHVlKSwgKGxvbmcpKHNpemUpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfbGdldHhhdHRyKHJlcywgcGF0aCwgbmFtZSwgdmFsdWUsIHNpemUpICAgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9sZ2V0eGF0dHIocmVzLCAobG9uZykocGF0aCksIChsb25nKShuYW1lKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHZhbHVlKSwgKGxvbmcpKHNpemUpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9mZ2V0eGF0dHIoZmQsIG5hbWUsIHZhbHVlLCBzaXplKSAgIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9mZ2V0eGF0dHIoKGxvbmcpKGZkKSwgKGxvbmcpKG5hbWUpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSh2YWx1ZSksIChsb25nKShzaXplKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ZnZXR4YXR0cihyZXMsIGZkLCBuYW1lLCB2YWx1ZSwgc2l6ZSkgICBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2ZnZXR4YXR0cihyZXMsIChsb25nKShmZCksIChsb25nKShuYW1lKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHZhbHVlKSwgKGxvbmcpKHNpemUpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9saXN0eGF0dHIocGF0aCwgbGlzdCwgc2l6ZSkgICAgICAgICAgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2xpc3R4YXR0cigobG9uZykocGF0aCksIChsb25nKShsaXN0KSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoc2l6ZSkpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9saXN0eGF0dHIocmVzLCBwYXRoLCBsaXN0LCBzaXplKSAgICAgICAgICBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2xpc3R4YXR0cihyZXMsIChsb25nKShwYXRoKSwgKGxvbmcpKGxpc3QpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoc2l6ZSkpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2xsaXN0eGF0dHIocGF0aCwgbGlzdCwgc2l6ZSkgICAgICAgICAgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2xsaXN0eGF0dHIoKGxvbmcpKHBhdGgpLCAobG9uZykobGlzdCksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShzaXplKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2xsaXN0eGF0dHIocmVzLCBwYXRoLCBsaXN0LCBzaXplKSAgICAgICAgICBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2xsaXN0eGF0dHIocmVzLCAobG9uZykocGF0aCksIChsb25nKShsaXN0KSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShzaXplKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfZmxpc3R4YXR0cihmZCwgbGlzdCwgc2l6ZSkgICAgICAgICAgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2ZsaXN0eGF0dHIoKGxvbmcpKGZkKSwgKGxvbmcpKGxpc3QpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoc2l6ZSkpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9mbGlzdHhhdHRyKHJlcywgZmQsIGxpc3QsIHNpemUpICAgICAgICAgIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZmxpc3R4YXR0cihyZXMsIChsb25nKShmZCksIChsb25nKShsaXN0KSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShzaXplKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfcmVtb3ZleGF0dHIocGF0aCwgbmFtZSkgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3JlbW92ZXhhdHRyKChsb25nKShwYXRoKSwgKGxvbmcpKG5hbWUpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfcmVtb3ZleGF0dHIocmVzLCBwYXRoLCBuYW1lKSBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3JlbW92ZXhhdHRyKHJlcywgKGxvbmcpKHBhdGgpLCAobG9uZykobmFtZSkpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2xyZW1vdmV4YXR0cihwYXRoLCBuYW1lKSBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfbHJlbW92ZXhhdHRyKChsb25nKShwYXRoKSwgKGxvbmcpKG5hbWUpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfbHJlbW92ZXhhdHRyKHJlcywgcGF0aCwgbmFtZSkgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9scmVtb3ZleGF0dHIocmVzLCAobG9uZykocGF0aCksIChsb25nKShuYW1lKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfZnJlbW92ZXhhdHRyKGZkLCBuYW1lKSBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZnJlbW92ZXhhdHRyKChsb25nKShmZCksIChsb25nKShuYW1lKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ZyZW1vdmV4YXR0cihyZXMsIGZkLCBuYW1lKSBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2ZyZW1vdmV4YXR0cihyZXMsIChsb25nKShmZCksIChsb25nKShuYW1lKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfYnJrKGJyaykgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2JyaygobG9uZykoYnJrKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2JyayhyZXMsIGJyaykgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9icmsocmVzLCAobG9uZykoYnJrKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfbXByb3RlY3Qoc3RhcnQsIGxlbiwgcHJvdCkgICAgICAgICAgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX21wcm90ZWN0KChsb25nKShzdGFydCksIChsb25nKShsZW4pLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHByb3QpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfbXByb3RlY3QocmVzLCBzdGFydCwgbGVuLCBwcm90KSAgICAgICAgICBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX21wcm90ZWN0KHJlcywgKGxvbmcpKHN0YXJ0KSwgKGxvbmcpKGxlbiksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHByb3QpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9tcmVtYXAoYWRkciwgb2xkX2xlbiwgbmV3X2xlbiwgZmxhZ3MsIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld19hZGRyKSAgICAgICAgICAgICAgICAgICAgICBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfbXJlbWFwKChsb25nKShhZGRyKSwgKGxvbmcpKG9sZF9sZW4pLCAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykobmV3X2xlbiksIChsb25nKShmbGFncyksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKG5ld19hZGRyKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X21yZW1hcChyZXMsIGFkZHIsIG9sZF9sZW4sIG5ld19sZW4sIGZsYWdzLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3X2FkZHIpICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9tcmVtYXAocmVzLCAobG9uZykoYWRkciksIChsb25nKShvbGRfbGVuKSwgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShuZXdfbGVuKSwgKGxvbmcpKGZsYWdzKSwgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykobmV3X2FkZHIpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9yZW1hcF9maWxlX3BhZ2VzKHN0YXJ0LCBzaXplLCBwcm90LCBwZ29mZiwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzKSAgICAgICAgICAgICAgICAgICAgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3JlbWFwX2ZpbGVfcGFnZXMoICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgKGxvbmcpKHN0YXJ0KSwgKGxvbmcpKHNpemUpLCAobG9uZykocHJvdCksIChsb25nKShwZ29mZiksIChsb25nKShmbGFncykpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9yZW1hcF9maWxlX3BhZ2VzKHJlcywgc3RhcnQsIHNpemUsIHByb3QsICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdvZmYsIGZsYWdzKSAgICAgICAgICAgICAgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9yZW1hcF9maWxlX3BhZ2VzKHJlcywgKGxvbmcpKHN0YXJ0KSwgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHNpemUpLCAobG9uZykocHJvdCksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykocGdvZmYpLCAobG9uZykoZmxhZ3MpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9tc3luYyhzdGFydCwgbGVuLCBmbGFncykgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX21zeW5jKChsb25nKShzdGFydCksIChsb25nKShsZW4pLCAobG9uZykoZmxhZ3MpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfbXN5bmMocmVzLCBzdGFydCwgbGVuLCBmbGFncykgICAgICAgICBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX21zeW5jKHJlcywgKGxvbmcpKHN0YXJ0KSwgKGxvbmcpKGxlbiksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGZsYWdzKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfbXVubWFwKGFkZHIsIGxlbikgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX211bm1hcCgobG9uZykoYWRkciksIChsb25nKShsZW4pKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfbXVubWFwKHJlcywgYWRkciwgbGVuKSBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX211bm1hcChyZXMsIChsb25nKShhZGRyKSwgKGxvbmcpKGxlbikpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX21sb2NrKHN0YXJ0LCBsZW4pIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9tbG9jaygobG9uZykoc3RhcnQpLCAobG9uZykobGVuKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X21sb2NrKHJlcywgc3RhcnQsIGxlbikgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9tbG9jayhyZXMsIChsb25nKShzdGFydCksIChsb25nKShsZW4pKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9tdW5sb2NrKHN0YXJ0LCBsZW4pIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9tdW5sb2NrKChsb25nKShzdGFydCksIChsb25nKShsZW4pKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfbXVubG9jayhyZXMsIHN0YXJ0LCBsZW4pIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbXVubG9jayhyZXMsIChsb25nKShzdGFydCksIChsb25nKShsZW4pKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9tbG9ja2FsbChmbGFncykgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX21sb2NrYWxsKChsb25nKShmbGFncykpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9tbG9ja2FsbChyZXMsIGZsYWdzKSBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX21sb2NrYWxsKHJlcywgKGxvbmcpKGZsYWdzKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfbXVubG9ja2FsbCgpIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9tdW5sb2NrYWxsKCkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X211bmxvY2thbGwocmVzKSBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX211bmxvY2thbGwocmVzKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9tYWR2aXNlKHN0YXJ0LCBsZW4sIGJlaGF2aW9yKSAgICAgIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9tYWR2aXNlKChsb25nKShzdGFydCksIChsb25nKShsZW4pLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoYmVoYXZpb3IpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfbWFkdmlzZShyZXMsIHN0YXJ0LCBsZW4sIGJlaGF2aW9yKSAgICAgIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbWFkdmlzZShyZXMsIChsb25nKShzdGFydCksIChsb25nKShsZW4pLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGJlaGF2aW9yKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfbWluY29yZShzdGFydCwgbGVuLCB2ZWMpIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9taW5jb3JlKChsb25nKShzdGFydCksIChsb25nKShsZW4pLCAobG9uZykodmVjKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X21pbmNvcmUocmVzLCBzdGFydCwgbGVuLCB2ZWMpICAgICAgICAgICBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX21pbmNvcmUocmVzLCAobG9uZykoc3RhcnQpLCAobG9uZykobGVuKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSh2ZWMpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9waXZvdF9yb290KG5ld19yb290LCBwdXRfb2xkKSBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfcGl2b3Rfcm9vdCgobG9uZykobmV3X3Jvb3QpLCAobG9uZykocHV0X29sZCkpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9waXZvdF9yb290KHJlcywgbmV3X3Jvb3QsIHB1dF9vbGQpIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfcGl2b3Rfcm9vdChyZXMsIChsb25nKShuZXdfcm9vdCksICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShwdXRfb2xkKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfY2hyb290KGZpbGVuYW1lKSBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfY2hyb290KChsb25nKShmaWxlbmFtZSkpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9jaHJvb3QocmVzLCBmaWxlbmFtZSkgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9jaHJvb3QocmVzLCAobG9uZykoZmlsZW5hbWUpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9ta25vZChmaWxlbmFtZSwgbW9kZSwgZGV2KSAgICAgICAgICAgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX21rbm9kKChsb25nKShmaWxlbmFtZSksIChsb25nKShtb2RlKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShkZXYpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfbWtub2QocmVzLCBmaWxlbmFtZSwgbW9kZSwgZGV2KSAgICAgICAgICAgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9ta25vZChyZXMsIChsb25nKShmaWxlbmFtZSksIChsb25nKShtb2RlKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoZGV2KSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfbGluayhvbGRuYW1lLCBuZXduYW1lKSBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfbGluaygobG9uZykob2xkbmFtZSksIChsb25nKShuZXduYW1lKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2xpbmsocmVzLCBvbGRuYW1lLCBuZXduYW1lKSBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2xpbmsocmVzLCAobG9uZykob2xkbmFtZSksIChsb25nKShuZXduYW1lKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfc3ltbGluayhvbGQsIG5ld18pIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zeW1saW5rKChsb25nKShvbGQpLCAobG9uZykobmV3XykpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9zeW1saW5rKHJlcywgb2xkLCBuZXdfKSBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3N5bWxpbmsocmVzLCAobG9uZykob2xkKSwgKGxvbmcpKG5ld18pKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV91bmxpbmsocGF0aG5hbWUpIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF91bmxpbmsoKGxvbmcpKHBhdGhuYW1lKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3VubGluayhyZXMsIHBhdGhuYW1lKSBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3VubGluayhyZXMsIChsb25nKShwYXRobmFtZSkpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3JlbmFtZShvbGRuYW1lLCBuZXduYW1lKSBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfcmVuYW1lKChsb25nKShvbGRuYW1lKSwgKGxvbmcpKG5ld25hbWUpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfcmVuYW1lKHJlcywgb2xkbmFtZSwgbmV3bmFtZSkgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9yZW5hbWUocmVzLCAobG9uZykob2xkbmFtZSksIChsb25nKShuZXduYW1lKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfY2htb2QoZmlsZW5hbWUsIG1vZGUpIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9jaG1vZCgobG9uZykoZmlsZW5hbWUpLCAobG9uZykobW9kZSkpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9jaG1vZChyZXMsIGZpbGVuYW1lLCBtb2RlKSBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2NobW9kKHJlcywgKGxvbmcpKGZpbGVuYW1lKSwgKGxvbmcpKG1vZGUpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9mY2htb2QoZmQsIG1vZGUpIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9mY2htb2QoKGxvbmcpKGZkKSwgKGxvbmcpKG1vZGUpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfZmNobW9kKHJlcywgZmQsIG1vZGUpIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZmNobW9kKHJlcywgKGxvbmcpKGZkKSwgKGxvbmcpKG1vZGUpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9mY250bChmZCwgY21kLCBhcmcpIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9mY250bCgobG9uZykoZmQpLCAobG9uZykoY21kKSwgKGxvbmcpKGFyZykpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9mY250bChyZXMsIGZkLCBjbWQsIGFyZykgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9mY250bChyZXMsIChsb25nKShmZCksIChsb25nKShjbWQpLCAobG9uZykoYXJnKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfZmNudGw2NChmZCwgY21kLCBhcmcpIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9mY250bDY0KChsb25nKShmZCksIChsb25nKShjbWQpLCAobG9uZykoYXJnKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ZjbnRsNjQocmVzLCBmZCwgY21kLCBhcmcpICAgICAgICAgICBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2ZjbnRsNjQocmVzLCAobG9uZykoZmQpLCAobG9uZykoY21kKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShhcmcpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9waXBlKGZpbGRlcykgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3BpcGUoKGxvbmcpKGZpbGRlcykpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9waXBlKHJlcywgZmlsZGVzKSBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3BpcGUocmVzLCAobG9uZykoZmlsZGVzKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfcGlwZTIoZmlsZGVzLCBmbGFncykgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3BpcGUyKChsb25nKShmaWxkZXMpLCAobG9uZykoZmxhZ3MpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfcGlwZTIocmVzLCBmaWxkZXMsIGZsYWdzKSBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3BpcGUyKHJlcywgKGxvbmcpKGZpbGRlcyksIChsb25nKShmbGFncykpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2R1cChmaWxkZXMpIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9kdXAoKGxvbmcpKGZpbGRlcykpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9kdXAocmVzLCBmaWxkZXMpIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZHVwKHJlcywgKGxvbmcpKGZpbGRlcykpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2R1cDIob2xkZmQsIG5ld2ZkKSBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZHVwMigobG9uZykob2xkZmQpLCAobG9uZykobmV3ZmQpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfZHVwMihyZXMsIG9sZGZkLCBuZXdmZCkgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9kdXAyKHJlcywgKGxvbmcpKG9sZGZkKSwgKGxvbmcpKG5ld2ZkKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfZHVwMyhvbGRmZCwgbmV3ZmQsIGZsYWdzKSBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZHVwMygobG9uZykob2xkZmQpLCAobG9uZykobmV3ZmQpLCAobG9uZykoZmxhZ3MpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfZHVwMyhyZXMsIG9sZGZkLCBuZXdmZCwgZmxhZ3MpICAgICAgICAgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9kdXAzKHJlcywgKGxvbmcpKG9sZGZkKSwgKGxvbmcpKG5ld2ZkKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShmbGFncykpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2lvcGVybShmcm9tLCBudW0sIG9uKSBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfaW9wZXJtKChsb25nKShmcm9tKSwgKGxvbmcpKG51bSksIChsb25nKShvbikpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pb3Blcm0ocmVzLCBmcm9tLCBudW0sIG9uKSAgICAgICAgICAgIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfaW9wZXJtKHJlcywgKGxvbmcpKGZyb20pLCAobG9uZykobnVtKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKG9uKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW9jdGwoZmQsIGNtZCwgYXJnKSBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfaW9jdGwoKGxvbmcpKGZkKSwgKGxvbmcpKGNtZCksIChsb25nKShhcmcpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW9jdGwocmVzLCBmZCwgY21kLCBhcmcpIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfaW9jdGwocmVzLCAobG9uZykoZmQpLCAobG9uZykoY21kKSwgKGxvbmcpKGFyZykpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2Zsb2NrKGZkLCBjbWQpIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9mbG9jaygobG9uZykoZmQpLCAobG9uZykoY21kKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2Zsb2NrKHJlcywgZmQsIGNtZCkgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9mbG9jayhyZXMsIChsb25nKShmZCksIChsb25nKShjbWQpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pb19zZXR1cChucl9yZXFzLCBjdHgpIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9pb19zZXR1cCgobG9uZykobnJfcmVxcyksIChsb25nKShjdHgpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW9fc2V0dXAocmVzLCBucl9yZXFzLCBjdHgpIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfaW9fc2V0dXAocmVzLCAobG9uZykobnJfcmVxcyksIChsb25nKShjdHgpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pb19kZXN0cm95KGN0eCkgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2lvX2Rlc3Ryb3koKGxvbmcpKGN0eCkpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pb19kZXN0cm95KHJlcywgY3R4KSBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2lvX2Rlc3Ryb3kocmVzLCAobG9uZykoY3R4KSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW9fZ2V0ZXZlbnRzKGN0eF9pZCwgbWluX25yLCBuciwgZXZlbnRzLCAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0KSAgICAgICAgICAgICAgICAgICAgICAgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2lvX2dldGV2ZW50cygobG9uZykoY3R4X2lkKSwgKGxvbmcpKG1pbl9uciksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKG5yKSwgKGxvbmcpKGV2ZW50cyksICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSh0aW1lb3V0KSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2lvX2dldGV2ZW50cyhyZXMsIGN0eF9pZCwgbWluX25yLCBuciwgZXZlbnRzLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dCkgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9pb19nZXRldmVudHMocmVzLCAobG9uZykoY3R4X2lkKSwgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShtaW5fbnIpLCAobG9uZykobnIpLCAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoZXZlbnRzKSwgKGxvbmcpKHRpbWVvdXQpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pb19zdWJtaXQoY3R4X2lkLCBhcmcxLCBhcmcyKSAgICAgICAgICBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfaW9fc3VibWl0KChsb25nKShjdHhfaWQpLCAobG9uZykoYXJnMSksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGFyZzIpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW9fc3VibWl0KHJlcywgY3R4X2lkLCBhcmcxLCBhcmcyKSAgICAgICAgICBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2lvX3N1Ym1pdChyZXMsIChsb25nKShjdHhfaWQpLCAobG9uZykoYXJnMSksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShhcmcyKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW9fY2FuY2VsKGN0eF9pZCwgaW9jYiwgcmVzdWx0KSAgICAgICAgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2lvX2NhbmNlbCgobG9uZykoY3R4X2lkKSwgKGxvbmcpKGlvY2IpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShyZXN1bHQpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW9fY2FuY2VsKHJlcywgY3R4X2lkLCBpb2NiLCByZXN1bHQpICAgICAgICBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2lvX2NhbmNlbChyZXMsIChsb25nKShjdHhfaWQpLCAobG9uZykoaW9jYiksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShyZXN1bHQpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9zZW5kZmlsZShvdXRfZmQsIGluX2ZkLCBvZmZzZXQsIGNvdW50KSBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2VuZGZpbGUoKGxvbmcpKG91dF9mZCksIChsb25nKShpbl9mZCksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykob2Zmc2V0KSwgKGxvbmcpKGNvdW50KSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3NlbmRmaWxlKHJlcywgb3V0X2ZkLCBpbl9mZCwgb2Zmc2V0LCBjb3VudCkgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zZW5kZmlsZShyZXMsIChsb25nKShvdXRfZmQpLCAobG9uZykoaW5fZmQpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShvZmZzZXQpLCAobG9uZykoY291bnQpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9zZW5kZmlsZTY0KG91dF9mZCwgaW5fZmQsIG9mZnNldCwgY291bnQpIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zZW5kZmlsZTY0KChsb25nKShvdXRfZmQpLCAobG9uZykoaW5fZmQpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykob2Zmc2V0KSwgKGxvbmcpKGNvdW50KSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3NlbmRmaWxlNjQocmVzLCBvdXRfZmQsIGluX2ZkLCBvZmZzZXQsIGNvdW50KSBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NlbmRmaWxlNjQocmVzLCAobG9uZykob3V0X2ZkKSwgKGxvbmcpKGluX2ZkKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShvZmZzZXQpLCAobG9uZykoY291bnQpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9yZWFkbGluayhwYXRoLCBidWYsIGJ1ZnNpeikgICAgICAgIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9yZWFkbGluaygobG9uZykocGF0aCksIChsb25nKShidWYpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGJ1ZnNpeikpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9yZWFkbGluayhyZXMsIHBhdGgsIGJ1ZiwgYnVmc2l6KSAgICAgICAgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9yZWFkbGluayhyZXMsIChsb25nKShwYXRoKSwgKGxvbmcpKGJ1ZiksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGJ1ZnNpeikpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2NyZWF0KHBhdGhuYW1lLCBtb2RlKSBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfY3JlYXQoKGxvbmcpKHBhdGhuYW1lKSwgKGxvbmcpKG1vZGUpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfY3JlYXQocmVzLCBwYXRobmFtZSwgbW9kZSkgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9jcmVhdChyZXMsIChsb25nKShwYXRobmFtZSksIChsb25nKShtb2RlKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfb3BlbihmaWxlbmFtZSwgZmxhZ3MsIG1vZGUpICAgICAgICAgIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9vcGVuKChsb25nKShmaWxlbmFtZSksIChsb25nKShmbGFncyksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShtb2RlKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X29wZW4ocmVzLCBmaWxlbmFtZSwgZmxhZ3MsIG1vZGUpICAgICAgICAgIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfb3BlbihyZXMsIChsb25nKShmaWxlbmFtZSksIChsb25nKShmbGFncyksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykobW9kZSkpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2Nsb3NlKGZkKSBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfY2xvc2UoKGxvbmcpKGZkKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2Nsb3NlKHJlcywgZmQpIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfY2xvc2UocmVzLCAobG9uZykoZmQpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9hY2Nlc3MoZmlsZW5hbWUsIG1vZGUpIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9hY2Nlc3MoKGxvbmcpKGZpbGVuYW1lKSwgKGxvbmcpKG1vZGUpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfYWNjZXNzKHJlcywgZmlsZW5hbWUsIG1vZGUpIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfYWNjZXNzKHJlcywgKGxvbmcpKGZpbGVuYW1lKSwgKGxvbmcpKG1vZGUpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV92aGFuZ3VwKCkgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF92aGFuZ3VwKCkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3ZoYW5ndXAocmVzKSBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3ZoYW5ndXAocmVzKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9jaG93bihmaWxlbmFtZSwgdXNlciwgZ3JvdXApICAgICAgICAgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2Nob3duKChsb25nKShmaWxlbmFtZSksIChsb25nKSh1c2VyKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShncm91cCkpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9jaG93bihyZXMsIGZpbGVuYW1lLCB1c2VyLCBncm91cCkgICAgICAgICBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2Nob3duKHJlcywgKGxvbmcpKGZpbGVuYW1lKSwgKGxvbmcpKHVzZXIpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShncm91cCkpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2xjaG93bihmaWxlbmFtZSwgdXNlciwgZ3JvdXApICAgICAgICAgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2xjaG93bigobG9uZykoZmlsZW5hbWUpLCAobG9uZykodXNlciksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGdyb3VwKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2xjaG93bihyZXMsIGZpbGVuYW1lLCB1c2VyLCBncm91cCkgICAgICAgICBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2xjaG93bihyZXMsIChsb25nKShmaWxlbmFtZSksIChsb25nKSh1c2VyKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGdyb3VwKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfZmNob3duKGZkLCB1c2VyLCBncm91cCkgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2ZjaG93bigobG9uZykoZmQpLCAobG9uZykodXNlciksIChsb25nKShncm91cCkpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9mY2hvd24ocmVzLCBmZCwgdXNlciwgZ3JvdXApICAgICAgICAgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9mY2hvd24ocmVzLCAobG9uZykoZmQpLCAobG9uZykodXNlciksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShncm91cCkpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2Nob3duMTYoZmlsZW5hbWUsIHVzZXIsIGdyb3VwKSAgICAgICBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfY2hvd24xNigobG9uZykoZmlsZW5hbWUpLCAobG9uZyl1c2VyLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZylncm91cCkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2Nob3duMTYocmVzLCBmaWxlbmFtZSwgdXNlciwgZ3JvdXApICAgICAgIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfY2hvd24xNihyZXMsIChsb25nKShmaWxlbmFtZSksIChsb25nKXVzZXIsIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZylncm91cCkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfbGNob3duMTYoZmlsZW5hbWUsIHVzZXIsIGdyb3VwKSAgICAgICBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfbGNob3duMTYoKGxvbmcpKGZpbGVuYW1lKSwgKGxvbmcpdXNlciwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKWdyb3VwKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfbGNob3duMTYocmVzLCBmaWxlbmFtZSwgdXNlciwgZ3JvdXApICAgICAgIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbGNob3duMTYocmVzLCAobG9uZykoZmlsZW5hbWUpLCAobG9uZyl1c2VyLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKWdyb3VwKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9mY2hvd24xNihmZCwgdXNlciwgZ3JvdXApIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9mY2hvd24xNigobG9uZykoZmQpLCAobG9uZyl1c2VyLCAobG9uZylncm91cCkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ZjaG93bjE2KHJlcywgZmQsIHVzZXIsIGdyb3VwKSAgICAgICBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2ZjaG93bjE2KHJlcywgKGxvbmcpKGZkKSwgKGxvbmcpdXNlciwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZylncm91cCkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfc2V0cmVnaWQxNihyZ2lkLCBlZ2lkKSBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2V0cmVnaWQxNigobG9uZylyZ2lkLCAobG9uZyllZ2lkKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfc2V0cmVnaWQxNihyZXMsIHJnaWQsIGVnaWQpIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2V0cmVnaWQxNihyZXMsIChsb25nKXJnaWQsIChsb25nKWVnaWQpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3NldGdpZDE2KGdpZCkgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NldGdpZDE2KChsb25nKWdpZCkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3NldGdpZDE2KHJlcywgZ2lkKSBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NldGdpZDE2KHJlcywgKGxvbmcpZ2lkKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9zZXRyZXVpZDE2KHJ1aWQsIGV1aWQpIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zZXRyZXVpZDE2KChsb25nKXJ1aWQsIChsb25nKWV1aWQpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9zZXRyZXVpZDE2KHJlcywgcnVpZCwgZXVpZCkgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zZXRyZXVpZDE2KHJlcywgKGxvbmcpcnVpZCwgKGxvbmcpZXVpZCkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfc2V0dWlkMTYodWlkKSBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2V0dWlkMTYoKGxvbmcpdWlkKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfc2V0dWlkMTYocmVzLCB1aWQpIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2V0dWlkMTYocmVzLCAobG9uZyl1aWQpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3NldHJlc3VpZDE2KHJ1aWQsIGV1aWQsIHN1aWQpIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zZXRyZXN1aWQxNigobG9uZylydWlkLCAobG9uZylldWlkLCAobG9uZylzdWlkKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfc2V0cmVzdWlkMTYocmVzLCBydWlkLCBldWlkLCBzdWlkKSAgICAgIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2V0cmVzdWlkMTYocmVzLCAobG9uZylydWlkLCAobG9uZylldWlkLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKXN1aWQpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2dldHJlc3VpZDE2KHJ1aWQsIGV1aWQsIHN1aWQpICAgICAgICAgIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9nZXRyZXN1aWQxNigobG9uZykocnVpZCksIChsb25nKShldWlkKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShzdWlkKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2dldHJlc3VpZDE2KHJlcywgcnVpZCwgZXVpZCwgc3VpZCkgICAgICAgICAgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9nZXRyZXN1aWQxNihyZXMsIChsb25nKShydWlkKSwgKGxvbmcpKGV1aWQpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShzdWlkKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfc2V0cmVzZ2lkMTYocmdpZCwgZWdpZCwgc2dpZCkgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NldHJlc2dpZDE2KChsb25nKXJnaWQsIChsb25nKWVnaWQsIChsb25nKXNnaWQpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9zZXRyZXNnaWQxNihyZXMsIHJnaWQsIGVnaWQsIHNnaWQpICAgICAgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zZXRyZXNnaWQxNihyZXMsIChsb25nKXJnaWQsIChsb25nKWVnaWQsIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpc2dpZCkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfZ2V0cmVzZ2lkMTYocmdpZCwgZWdpZCwgc2dpZCkgICAgICAgICAgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2dldHJlc2dpZDE2KChsb25nKShyZ2lkKSwgKGxvbmcpKGVnaWQpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHNnaWQpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfZ2V0cmVzZ2lkMTYocmVzLCByZ2lkLCBlZ2lkLCBzZ2lkKSAgICAgICAgICBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2dldHJlc2dpZDE2KHJlcywgKGxvbmcpKHJnaWQpLCAobG9uZykoZWdpZCksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHNnaWQpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9zZXRmc3VpZDE2KHVpZCkgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NldGZzdWlkMTYoKGxvbmcpdWlkKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfc2V0ZnN1aWQxNihyZXMsIHVpZCkgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zZXRmc3VpZDE2KHJlcywgKGxvbmcpdWlkKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9zZXRmc2dpZDE2KGdpZCkgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NldGZzZ2lkMTYoKGxvbmcpZ2lkKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfc2V0ZnNnaWQxNihyZXMsIGdpZCkgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zZXRmc2dpZDE2KHJlcywgKGxvbmcpZ2lkKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9nZXRncm91cHMxNihnaWRzZXRzaXplLCBncm91cGxpc3QpIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9nZXRncm91cHMxNigobG9uZykoZ2lkc2V0c2l6ZSksICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGdyb3VwbGlzdCkpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9nZXRncm91cHMxNihyZXMsIGdpZHNldHNpemUsIGdyb3VwbGlzdCkgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9nZXRncm91cHMxNihyZXMsIChsb25nKShnaWRzZXRzaXplKSwgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGdyb3VwbGlzdCkpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3NldGdyb3VwczE2KGdpZHNldHNpemUsIGdyb3VwbGlzdCkgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NldGdyb3VwczE2KChsb25nKShnaWRzZXRzaXplKSwgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoZ3JvdXBsaXN0KSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3NldGdyb3VwczE2KHJlcywgZ2lkc2V0c2l6ZSwgZ3JvdXBsaXN0KSBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NldGdyb3VwczE2KHJlcywgKGxvbmcpKGdpZHNldHNpemUpLCAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoZ3JvdXBsaXN0KSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfZ2V0dWlkMTYoKSBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZ2V0dWlkMTYoKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfZ2V0dWlkMTYocmVzKSBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2dldHVpZDE2KHJlcykKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfZ2V0ZXVpZDE2KCkgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2dldGV1aWQxNigpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9nZXRldWlkMTYocmVzKSBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2dldGV1aWQxNihyZXMpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2dldGdpZDE2KCkgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2dldGdpZDE2KCkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2dldGdpZDE2KHJlcykgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9nZXRnaWQxNihyZXMpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2dldGVnaWQxNigpIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9nZXRlZ2lkMTYoKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfZ2V0ZWdpZDE2KHJlcykgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9nZXRlZ2lkMTYocmVzKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV91dGltZShmaWxlbmFtZSwgdGltZXMpIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF91dGltZSgobG9uZykoZmlsZW5hbWUpLCAobG9uZykodGltZXMpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfdXRpbWUocmVzLCBmaWxlbmFtZSwgdGltZXMpIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfdXRpbWUocmVzLCAobG9uZykoZmlsZW5hbWUpLCAobG9uZykodGltZXMpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV91dGltZXMoZmlsZW5hbWUsIHV0aW1lcykgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3V0aW1lcygobG9uZykoZmlsZW5hbWUpLCAobG9uZykodXRpbWVzKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3V0aW1lcyhyZXMsIGZpbGVuYW1lLCB1dGltZXMpIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfdXRpbWVzKHJlcywgKGxvbmcpKGZpbGVuYW1lKSwgKGxvbmcpKHV0aW1lcykpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2xzZWVrKGZkLCBvZmZzZXQsIG9yaWdpbikgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2xzZWVrKChsb25nKShmZCksIChsb25nKShvZmZzZXQpLCAobG9uZykob3JpZ2luKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2xzZWVrKHJlcywgZmQsIG9mZnNldCwgb3JpZ2luKSAgICAgICAgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9sc2VlayhyZXMsIChsb25nKShmZCksIChsb25nKShvZmZzZXQpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShvcmlnaW4pKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9sbHNlZWsoZmQsIG9mZnNldF9oaWdoLCBvZmZzZXRfbG93LCByZXN1bHQsIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfbGxzZWVrKChsb25nKShmZCksIChsb25nKShvZmZzZXRfaGlnaCksICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykob2Zmc2V0X2xvdyksIChsb25nKShyZXN1bHQpLCAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKG9yaWdpbikpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9sbHNlZWsocmVzLCBmZCwgb2Zmc2V0X2hpZ2gsIG9mZnNldF9sb3csICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQsIG9yaWdpbikgICAgICAgICAgICAgICAgICAgICAgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9sbHNlZWsocmVzLCAobG9uZykoZmQpLCAobG9uZykob2Zmc2V0X2hpZ2gpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykob2Zmc2V0X2xvdyksIChsb25nKShyZXN1bHQpLCAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShvcmlnaW4pKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9yZWFkKGZkLCBidWYsIGNvdW50KSBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfcmVhZCgobG9uZykoZmQpLCAobG9uZykoYnVmKSwgKGxvbmcpKGNvdW50KSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3JlYWQocmVzLCBmZCwgYnVmLCBjb3VudCkgICAgICAgICBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3JlYWQocmVzLCAobG9uZykoZmQpLCAobG9uZykoYnVmKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShjb3VudCkpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3JlYWR2KGZkLCB2ZWMsIHZsZW4pIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9yZWFkdigobG9uZykoZmQpLCAobG9uZykodmVjKSwgKGxvbmcpKHZsZW4pKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfcmVhZHYocmVzLCBmZCwgdmVjLCB2bGVuKSAgICAgICAgICBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3JlYWR2KHJlcywgKGxvbmcpKGZkKSwgKGxvbmcpKHZlYyksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHZsZW4pKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV93cml0ZShmZCwgYnVmLCBjb3VudCkgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3dyaXRlKChsb25nKShmZCksIChsb25nKShidWYpLCAobG9uZykoY291bnQpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfd3JpdGUocmVzLCBmZCwgYnVmLCBjb3VudCkgICAgICAgICBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3dyaXRlKHJlcywgKGxvbmcpKGZkKSwgKGxvbmcpKGJ1ZiksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGNvdW50KSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfd3JpdGV2KGZkLCB2ZWMsIHZsZW4pIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF93cml0ZXYoKGxvbmcpKGZkKSwgKGxvbmcpKHZlYyksIChsb25nKSh2bGVuKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3dyaXRldihyZXMsIGZkLCB2ZWMsIHZsZW4pICAgICAgICAgIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfd3JpdGV2KHJlcywgKGxvbmcpKGZkKSwgKGxvbmcpKHZlYyksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSh2bGVuKSkKLQotI2lmZGVmIF9MUDY0Ci0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3ByZWFkNjQoZmQsIGJ1ZiwgY291bnQsIHBvcykgICAgICAgICAgICAgICAgICAgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3ByZWFkNjQoKGxvbmcpKGZkKSwgKGxvbmcpKGJ1ZiksIChsb25nKShjb3VudCksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShwb3MpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfcHJlYWQ2NChyZXMsIGZkLCBidWYsIGNvdW50LCBwb3MpICAgIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfcHJlYWQ2NChyZXMsIChsb25nKShmZCksIChsb25nKShidWYpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGNvdW50KSwgKGxvbmcpKHBvcykpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3B3cml0ZTY0KGZkLCBidWYsIGNvdW50LCBwb3MpICAgIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9wd3JpdGU2NCgobG9uZykoZmQpLCAobG9uZykoYnVmKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShjb3VudCksIChsb25nKShwb3MpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfcHdyaXRlNjQocmVzLCBmZCwgYnVmLCBjb3VudCwgcG9zKSAgICBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3B3cml0ZTY0KHJlcywgKGxvbmcpKGZkKSwgKGxvbmcpKGJ1ZiksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGNvdW50KSwgKGxvbmcpKHBvcykpCi0jZWxzZQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9wcmVhZDY0KGZkLCBidWYsIGNvdW50LCBwb3MwLCBwb3MxKSAgICAgICAgICAgIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9wcmVhZDY0KChsb25nKShmZCksIChsb25nKShidWYpLCAobG9uZykoY291bnQpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykocG9zMCksIChsb25nKShwb3MxKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3ByZWFkNjQocmVzLCBmZCwgYnVmLCBjb3VudCwgcG9zMCwgcG9zMSkgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9wcmVhZDY0KHJlcywgKGxvbmcpKGZkKSwgKGxvbmcpKGJ1ZiksICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGNvdW50KSwgKGxvbmcpKHBvczApLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHBvczEpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9wd3JpdGU2NChmZCwgYnVmLCBjb3VudCwgcG9zMCwgcG9zMSkgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3B3cml0ZTY0KCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgKGxvbmcpKGZkKSwgKGxvbmcpKGJ1ZiksIChsb25nKShjb3VudCksIChsb25nKShwb3MwKSwgKGxvbmcpKHBvczEpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfcHdyaXRlNjQocmVzLCBmZCwgYnVmLCBjb3VudCwgcG9zMCwgcG9zMSkgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9wd3JpdGU2NCggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgcmVzLCAobG9uZykoZmQpLCAobG9uZykoYnVmKSwgKGxvbmcpKGNvdW50KSwgKGxvbmcpKHBvczApLCAobG9uZykocG9zMSkpCi0jZW5kaWYKLQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9wcmVhZHYoZmQsIHZlYywgdmxlbiwgcG9zX2wsIHBvc19oKSAgICAgICAgICBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfcHJlYWR2KChsb25nKShmZCksIChsb25nKSh2ZWMpLCAobG9uZykodmxlbiksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHBvc19sKSwgKGxvbmcpKHBvc19oKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3ByZWFkdihyZXMsIGZkLCB2ZWMsIHZsZW4sIHBvc19sLCBwb3NfaCkgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9wcmVhZHYocmVzLCAobG9uZykoZmQpLCAobG9uZykodmVjKSwgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykodmxlbiksIChsb25nKShwb3NfbCksICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShwb3NfaCkpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3B3cml0ZXYoZmQsIHZlYywgdmxlbiwgcG9zX2wsIHBvc19oKSAgICAgICAgICBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfcHdyaXRldigobG9uZykoZmQpLCAobG9uZykodmVjKSwgKGxvbmcpKHZsZW4pLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykocG9zX2wpLCAobG9uZykocG9zX2gpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfcHdyaXRldihyZXMsIGZkLCB2ZWMsIHZsZW4sIHBvc19sLCBwb3NfaCkgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9wd3JpdGV2KHJlcywgKGxvbmcpKGZkKSwgKGxvbmcpKHZlYyksICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSh2bGVuKSwgKGxvbmcpKHBvc19sKSwgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShwb3NfaCkpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2dldGN3ZChidWYsIHNpemUpIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9nZXRjd2QoKGxvbmcpKGJ1ZiksIChsb25nKShzaXplKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2dldGN3ZChyZXMsIGJ1Ziwgc2l6ZSkgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9nZXRjd2QocmVzLCAobG9uZykoYnVmKSwgKGxvbmcpKHNpemUpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9ta2RpcihwYXRobmFtZSwgbW9kZSkgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX21rZGlyKChsb25nKShwYXRobmFtZSksIChsb25nKShtb2RlKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X21rZGlyKHJlcywgcGF0aG5hbWUsIG1vZGUpIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbWtkaXIocmVzLCAobG9uZykocGF0aG5hbWUpLCAobG9uZykobW9kZSkpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2NoZGlyKGZpbGVuYW1lKSBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfY2hkaXIoKGxvbmcpKGZpbGVuYW1lKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2NoZGlyKHJlcywgZmlsZW5hbWUpIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfY2hkaXIocmVzLCAobG9uZykoZmlsZW5hbWUpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9mY2hkaXIoZmQpIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9mY2hkaXIoKGxvbmcpKGZkKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ZjaGRpcihyZXMsIGZkKSBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2ZjaGRpcihyZXMsIChsb25nKShmZCkpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3JtZGlyKHBhdGhuYW1lKSBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfcm1kaXIoKGxvbmcpKHBhdGhuYW1lKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3JtZGlyKHJlcywgcGF0aG5hbWUpIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfcm1kaXIocmVzLCAobG9uZykocGF0aG5hbWUpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9sb29rdXBfZGNvb2tpZShjb29raWU2NCwgYnVmLCBsZW4pICAgICAgICAgICBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfbG9va3VwX2Rjb29raWUoKGxvbmcpKGNvb2tpZTY0KSwgKGxvbmcpKGJ1ZiksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykobGVuKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2xvb2t1cF9kY29va2llKHJlcywgY29va2llNjQsIGJ1ZiwgbGVuKSBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2xvb2t1cF9kY29va2llKHJlcywgKGxvbmcpKGNvb2tpZTY0KSwgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoYnVmKSwgKGxvbmcpKGxlbikpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3F1b3RhY3RsKGNtZCwgc3BlY2lhbCwgaWQsIGFkZHIpICAgICAgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3F1b3RhY3RsKChsb25nKShjbWQpLCAobG9uZykoc3BlY2lhbCksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoaWQpLCAobG9uZykoYWRkcikpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9xdW90YWN0bChyZXMsIGNtZCwgc3BlY2lhbCwgaWQsIGFkZHIpICAgICAgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9xdW90YWN0bChyZXMsIChsb25nKShjbWQpLCAobG9uZykoc3BlY2lhbCksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGlkKSwgKGxvbmcpKGFkZHIpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9nZXRkZW50cyhmZCwgZGlyZW50LCBjb3VudCkgICAgICAgICBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZ2V0ZGVudHMoKGxvbmcpKGZkKSwgKGxvbmcpKGRpcmVudCksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoY291bnQpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfZ2V0ZGVudHMocmVzLCBmZCwgZGlyZW50LCBjb3VudCkgICAgICAgICBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2dldGRlbnRzKHJlcywgKGxvbmcpKGZkKSwgKGxvbmcpKGRpcmVudCksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGNvdW50KSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfZ2V0ZGVudHM2NChmZCwgZGlyZW50LCBjb3VudCkgICAgICAgICBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZ2V0ZGVudHM2NCgobG9uZykoZmQpLCAobG9uZykoZGlyZW50KSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGNvdW50KSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2dldGRlbnRzNjQocmVzLCBmZCwgZGlyZW50LCBjb3VudCkgICAgICAgICBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2dldGRlbnRzNjQocmVzLCAobG9uZykoZmQpLCAobG9uZykoZGlyZW50KSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShjb3VudCkpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3NldHNvY2tvcHQoZmQsIGxldmVsLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbikgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NldHNvY2tvcHQoKGxvbmcpKGZkKSwgKGxvbmcpKGxldmVsKSwgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShvcHRuYW1lKSwgKGxvbmcpKG9wdHZhbCksICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykob3B0bGVuKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3NldHNvY2tvcHQocmVzLCBmZCwgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRsZW4pICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NldHNvY2tvcHQocmVzLCAobG9uZykoZmQpLCAobG9uZykobGV2ZWwpLCAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykob3B0bmFtZSksIChsb25nKShvcHR2YWwpLCAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShvcHRsZW4pKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9nZXRzb2Nrb3B0KGZkLCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9nZXRzb2Nrb3B0KChsb25nKShmZCksIChsb25nKShsZXZlbCksICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykob3B0bmFtZSksIChsb25nKShvcHR2YWwpLCAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKG9wdGxlbikpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9nZXRzb2Nrb3B0KHJlcywgZmQsIGxldmVsLCBvcHRuYW1lLCBvcHR2YWwsIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0bGVuKSAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9nZXRzb2Nrb3B0KHJlcywgKGxvbmcpKGZkKSwgKGxvbmcpKGxldmVsKSwgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKG9wdG5hbWUpLCAobG9uZykob3B0dmFsKSwgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykob3B0bGVuKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfYmluZChhcmcwLCBhcmcxLCBhcmcyKSBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfYmluZCgobG9uZykoYXJnMCksIChsb25nKShhcmcxKSwgKGxvbmcpKGFyZzIpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfYmluZChyZXMsIGFyZzAsIGFyZzEsIGFyZzIpICAgICAgICAgIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfYmluZChyZXMsIChsb25nKShhcmcwKSwgKGxvbmcpKGFyZzEpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGFyZzIpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9jb25uZWN0KGFyZzAsIGFyZzEsIGFyZzIpIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9jb25uZWN0KChsb25nKShhcmcwKSwgKGxvbmcpKGFyZzEpLCAobG9uZykoYXJnMikpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9jb25uZWN0KHJlcywgYXJnMCwgYXJnMSwgYXJnMikgICAgICAgICAgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9jb25uZWN0KHJlcywgKGxvbmcpKGFyZzApLCAobG9uZykoYXJnMSksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoYXJnMikpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2FjY2VwdChhcmcwLCBhcmcxLCBhcmcyKSBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfYWNjZXB0KChsb25nKShhcmcwKSwgKGxvbmcpKGFyZzEpLCAobG9uZykoYXJnMikpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9hY2NlcHQocmVzLCBhcmcwLCBhcmcxLCBhcmcyKSAgICAgICAgICBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2FjY2VwdChyZXMsIChsb25nKShhcmcwKSwgKGxvbmcpKGFyZzEpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoYXJnMikpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2FjY2VwdDQoYXJnMCwgYXJnMSwgYXJnMiwgYXJnMykgICAgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2FjY2VwdDQoKGxvbmcpKGFyZzApLCAobG9uZykoYXJnMSksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShhcmcyKSwgKGxvbmcpKGFyZzMpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfYWNjZXB0NChyZXMsIGFyZzAsIGFyZzEsIGFyZzIsIGFyZzMpICAgIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfYWNjZXB0NChyZXMsIChsb25nKShhcmcwKSwgKGxvbmcpKGFyZzEpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGFyZzIpLCAobG9uZykoYXJnMykpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2dldHNvY2tuYW1lKGFyZzAsIGFyZzEsIGFyZzIpICAgICAgICAgIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9nZXRzb2NrbmFtZSgobG9uZykoYXJnMCksIChsb25nKShhcmcxKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShhcmcyKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2dldHNvY2tuYW1lKHJlcywgYXJnMCwgYXJnMSwgYXJnMikgICAgICAgICAgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9nZXRzb2NrbmFtZShyZXMsIChsb25nKShhcmcwKSwgKGxvbmcpKGFyZzEpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShhcmcyKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfZ2V0cGVlcm5hbWUoYXJnMCwgYXJnMSwgYXJnMikgICAgICAgICAgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2dldHBlZXJuYW1lKChsb25nKShhcmcwKSwgKGxvbmcpKGFyZzEpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGFyZzIpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfZ2V0cGVlcm5hbWUocmVzLCBhcmcwLCBhcmcxLCBhcmcyKSAgICAgICAgICBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2dldHBlZXJuYW1lKHJlcywgKGxvbmcpKGFyZzApLCAobG9uZykoYXJnMSksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGFyZzIpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9zZW5kKGFyZzAsIGFyZzEsIGFyZzIsIGFyZzMpICAgICAgICAgICAgICAgICAgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NlbmQoKGxvbmcpKGFyZzApLCAobG9uZykoYXJnMSksIChsb25nKShhcmcyKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGFyZzMpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfc2VuZChyZXMsIGFyZzAsIGFyZzEsIGFyZzIsIGFyZzMpICAgIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2VuZChyZXMsIChsb25nKShhcmcwKSwgKGxvbmcpKGFyZzEpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGFyZzIpLCAobG9uZykoYXJnMykpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3NlbmR0byhhcmcwLCBhcmcxLCBhcmcyLCBhcmczLCBhcmc0LCBhcmc1KSBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2VuZHRvKChsb25nKShhcmcwKSwgKGxvbmcpKGFyZzEpLCAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShhcmcyKSwgKGxvbmcpKGFyZzMpLCAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShhcmc0KSwgKGxvbmcpKGFyZzUpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfc2VuZHRvKHJlcywgYXJnMCwgYXJnMSwgYXJnMiwgYXJnMywgYXJnNCwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZzUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zZW5kdG8ocmVzLCAobG9uZykoYXJnMCksIChsb25nKShhcmcxKSwgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGFyZzIpLCAobG9uZykoYXJnMyksICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGFyZzQpLCAobG9uZykoYXJnNSkpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3NlbmRtc2coZmQsIG1zZywgZmxhZ3MpIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zZW5kbXNnKChsb25nKShmZCksIChsb25nKShtc2cpLCAobG9uZykoZmxhZ3MpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfc2VuZG1zZyhyZXMsIGZkLCBtc2csIGZsYWdzKSAgICAgICAgIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2VuZG1zZyhyZXMsIChsb25nKShmZCksIChsb25nKShtc2cpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGZsYWdzKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfc2VuZG1tc2coZmQsIG1zZywgdmxlbiwgZmxhZ3MpICAgICAgICAgICAgICAgICBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2VuZG1tc2coKGxvbmcpKGZkKSwgKGxvbmcpKG1zZyksIChsb25nKSh2bGVuKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShmbGFncykpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9zZW5kbW1zZyhyZXMsIGZkLCBtc2csIHZsZW4sIGZsYWdzKSAgIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2VuZG1tc2cocmVzLCAobG9uZykoZmQpLCAobG9uZykobXNnKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykodmxlbiksIChsb25nKShmbGFncykpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3JlY3YoYXJnMCwgYXJnMSwgYXJnMiwgYXJnMykgICAgICAgICAgICAgICAgICBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfcmVjdigobG9uZykoYXJnMCksIChsb25nKShhcmcxKSwgKGxvbmcpKGFyZzIpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoYXJnMykpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9yZWN2KHJlcywgYXJnMCwgYXJnMSwgYXJnMiwgYXJnMykgICAgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9yZWN2KHJlcywgKGxvbmcpKGFyZzApLCAobG9uZykoYXJnMSksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoYXJnMiksIChsb25nKShhcmczKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfcmVjdmZyb20oYXJnMCwgYXJnMSwgYXJnMiwgYXJnMywgYXJnNCwgYXJnNSkgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3JlY3Zmcm9tKChsb25nKShhcmcwKSwgKGxvbmcpKGFyZzEpLCAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGFyZzIpLCAobG9uZykoYXJnMyksICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoYXJnNCksIChsb25nKShhcmc1KSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3JlY3Zmcm9tKHJlcywgYXJnMCwgYXJnMSwgYXJnMiwgYXJnMywgYXJnNCwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3JlY3Zmcm9tKHJlcywgKGxvbmcpKGFyZzApLCAobG9uZykoYXJnMSksICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGFyZzIpLCAobG9uZykoYXJnMyksICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoYXJnNCksIChsb25nKShhcmc1KSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfcmVjdm1zZyhmZCwgbXNnLCBmbGFncykgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3JlY3Ztc2coKGxvbmcpKGZkKSwgKGxvbmcpKG1zZyksIChsb25nKShmbGFncykpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9yZWN2bXNnKHJlcywgZmQsIG1zZywgZmxhZ3MpICAgICAgICAgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9yZWN2bXNnKHJlcywgKGxvbmcpKGZkKSwgKGxvbmcpKG1zZyksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoZmxhZ3MpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9yZWN2bW1zZyhmZCwgbXNnLCB2bGVuLCBmbGFncywgdGltZW91dCkgICAgICAgIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9yZWN2bW1zZygobG9uZykoZmQpLCAobG9uZykobXNnKSwgKGxvbmcpKHZsZW4pLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGZsYWdzKSwgKGxvbmcpKHRpbWVvdXQpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfcmVjdm1tc2cocmVzLCBmZCwgbXNnLCB2bGVuLCBmbGFncywgdGltZW91dCkgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9yZWN2bW1zZyhyZXMsIChsb25nKShmZCksIChsb25nKShtc2cpLCAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykodmxlbiksIChsb25nKShmbGFncyksICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykodGltZW91dCkpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3NvY2tldChhcmcwLCBhcmcxLCBhcmcyKSBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc29ja2V0KChsb25nKShhcmcwKSwgKGxvbmcpKGFyZzEpLCAobG9uZykoYXJnMikpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9zb2NrZXQocmVzLCBhcmcwLCBhcmcxLCBhcmcyKSAgICAgICAgICBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NvY2tldChyZXMsIChsb25nKShhcmcwKSwgKGxvbmcpKGFyZzEpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoYXJnMikpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3NvY2tldHBhaXIoYXJnMCwgYXJnMSwgYXJnMiwgYXJnMykgICAgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NvY2tldHBhaXIoKGxvbmcpKGFyZzApLCAobG9uZykoYXJnMSksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShhcmcyKSwgKGxvbmcpKGFyZzMpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfc29ja2V0cGFpcihyZXMsIGFyZzAsIGFyZzEsIGFyZzIsIGFyZzMpICAgIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc29ja2V0cGFpcihyZXMsIChsb25nKShhcmcwKSwgKGxvbmcpKGFyZzEpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGFyZzIpLCAobG9uZykoYXJnMykpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3NvY2tldGNhbGwoY2FsbCwgYXJncykgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NvY2tldGNhbGwoKGxvbmcpKGNhbGwpLCAobG9uZykoYXJncykpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9zb2NrZXRjYWxsKHJlcywgY2FsbCwgYXJncykgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zb2NrZXRjYWxsKHJlcywgKGxvbmcpKGNhbGwpLCAobG9uZykoYXJncykpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2xpc3RlbihhcmcwLCBhcmcxKSBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfbGlzdGVuKChsb25nKShhcmcwKSwgKGxvbmcpKGFyZzEpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfbGlzdGVuKHJlcywgYXJnMCwgYXJnMSkgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9saXN0ZW4ocmVzLCAobG9uZykoYXJnMCksIChsb25nKShhcmcxKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfcG9sbCh1ZmRzLCBuZmRzLCB0aW1lb3V0KSBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfcG9sbCgobG9uZykodWZkcyksIChsb25nKShuZmRzKSwgKGxvbmcpKHRpbWVvdXQpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfcG9sbChyZXMsIHVmZHMsIG5mZHMsIHRpbWVvdXQpICAgICAgIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfcG9sbChyZXMsIChsb25nKSh1ZmRzKSwgKGxvbmcpKG5mZHMpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHRpbWVvdXQpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9zZWxlY3QobiwgaW5wLCBvdXRwLCBleHAsIHR2cCkgICAgICAgICAgICAgIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zZWxlY3QoKGxvbmcpKG4pLCAobG9uZykoaW5wKSwgKGxvbmcpKG91dHApLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShleHApLCAobG9uZykodHZwKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3NlbGVjdChyZXMsIG4sIGlucCwgb3V0cCwgZXhwLCB0dnApIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2VsZWN0KHJlcywgKGxvbmcpKG4pLCAobG9uZykoaW5wKSwgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShvdXRwKSwgKGxvbmcpKGV4cCksIChsb25nKSh0dnApKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9vbGRfc2VsZWN0KGFyZykgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX29sZF9zZWxlY3QoKGxvbmcpKGFyZykpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9vbGRfc2VsZWN0KHJlcywgYXJnKSBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX29sZF9zZWxlY3QocmVzLCAobG9uZykoYXJnKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfZXBvbGxfY3JlYXRlKHNpemUpIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9lcG9sbF9jcmVhdGUoKGxvbmcpKHNpemUpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfZXBvbGxfY3JlYXRlKHJlcywgc2l6ZSkgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9lcG9sbF9jcmVhdGUocmVzLCAobG9uZykoc2l6ZSkpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2Vwb2xsX2NyZWF0ZTEoZmxhZ3MpIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9lcG9sbF9jcmVhdGUxKChsb25nKShmbGFncykpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9lcG9sbF9jcmVhdGUxKHJlcywgZmxhZ3MpIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZXBvbGxfY3JlYXRlMShyZXMsIChsb25nKShmbGFncykpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2Vwb2xsX2N0bChlcGZkLCBvcCwgZmQsIGV2ZW50KSAgICAgICAgICAgICAgICAgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2Vwb2xsX2N0bCgobG9uZykoZXBmZCksIChsb25nKShvcCksIChsb25nKShmZCksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGV2ZW50KSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2Vwb2xsX2N0bChyZXMsIGVwZmQsIG9wLCBmZCwgZXZlbnQpICAgICBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2Vwb2xsX2N0bChyZXMsIChsb25nKShlcGZkKSwgKGxvbmcpKG9wKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGZkKSwgKGxvbmcpKGV2ZW50KSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfZXBvbGxfd2FpdChlcGZkLCBldmVudHMsIG1heGV2ZW50cywgdGltZW91dCkgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2Vwb2xsX3dhaXQoKGxvbmcpKGVwZmQpLCAobG9uZykoZXZlbnRzKSwgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykobWF4ZXZlbnRzKSwgKGxvbmcpKHRpbWVvdXQpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfZXBvbGxfd2FpdChyZXMsIGVwZmQsIGV2ZW50cywgbWF4ZXZlbnRzLCAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0KSAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9lcG9sbF93YWl0KHJlcywgKGxvbmcpKGVwZmQpLCAobG9uZykoZXZlbnRzKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShtYXhldmVudHMpLCAobG9uZykodGltZW91dCkpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2Vwb2xsX3B3YWl0KGVwZmQsIGV2ZW50cywgbWF4ZXZlbnRzLCB0aW1lb3V0LCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ21hc2ssIHNpZ3NldHNpemUpICAgICAgICAgICAgICBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZXBvbGxfcHdhaXQoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAobG9uZykoZXBmZCksIChsb25nKShldmVudHMpLCAobG9uZykobWF4ZXZlbnRzKSwgKGxvbmcpKHRpbWVvdXQpLCAgICAgICBcCi0gICAgICAobG9uZykoc2lnbWFzayksIChsb25nKShzaWdzZXRzaXplKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2Vwb2xsX3B3YWl0KHJlcywgZXBmZCwgZXZlbnRzLCBtYXhldmVudHMsICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dCwgc2lnbWFzaywgc2lnc2V0c2l6ZSkgICBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2Vwb2xsX3B3YWl0KCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIHJlcywgKGxvbmcpKGVwZmQpLCAobG9uZykoZXZlbnRzKSwgKGxvbmcpKG1heGV2ZW50cyksIChsb25nKSh0aW1lb3V0KSwgXAotICAgICAgKGxvbmcpKHNpZ21hc2spLCAobG9uZykoc2lnc2V0c2l6ZSkpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2dldGhvc3RuYW1lKG5hbWUsIGxlbikgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2dldGhvc3RuYW1lKChsb25nKShuYW1lKSwgKGxvbmcpKGxlbikpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9nZXRob3N0bmFtZShyZXMsIG5hbWUsIGxlbikgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9nZXRob3N0bmFtZShyZXMsIChsb25nKShuYW1lKSwgKGxvbmcpKGxlbikpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3NldGhvc3RuYW1lKG5hbWUsIGxlbikgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NldGhvc3RuYW1lKChsb25nKShuYW1lKSwgKGxvbmcpKGxlbikpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9zZXRob3N0bmFtZShyZXMsIG5hbWUsIGxlbikgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zZXRob3N0bmFtZShyZXMsIChsb25nKShuYW1lKSwgKGxvbmcpKGxlbikpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3NldGRvbWFpbm5hbWUobmFtZSwgbGVuKSBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2V0ZG9tYWlubmFtZSgobG9uZykobmFtZSksIChsb25nKShsZW4pKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfc2V0ZG9tYWlubmFtZShyZXMsIG5hbWUsIGxlbikgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zZXRkb21haW5uYW1lKHJlcywgKGxvbmcpKG5hbWUpLCAobG9uZykobGVuKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfbmV3dW5hbWUobmFtZSkgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX25ld3VuYW1lKChsb25nKShuYW1lKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X25ld3VuYW1lKHJlcywgbmFtZSkgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9uZXd1bmFtZShyZXMsIChsb25nKShuYW1lKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfdW5hbWUoYXJnMCkgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3VuYW1lKChsb25nKShhcmcwKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3VuYW1lKHJlcywgYXJnMCkgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF91bmFtZShyZXMsIChsb25nKShhcmcwKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfb2xkdW5hbWUoYXJnMCkgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX29sZHVuYW1lKChsb25nKShhcmcwKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X29sZHVuYW1lKHJlcywgYXJnMCkgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9vbGR1bmFtZShyZXMsIChsb25nKShhcmcwKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfZ2V0cmxpbWl0KHJlc291cmNlLCBybGltKSBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZ2V0cmxpbWl0KChsb25nKShyZXNvdXJjZSksIChsb25nKShybGltKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2dldHJsaW1pdChyZXMsIHJlc291cmNlLCBybGltKSBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2dldHJsaW1pdChyZXMsIChsb25nKShyZXNvdXJjZSksIChsb25nKShybGltKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfb2xkX2dldHJsaW1pdChyZXNvdXJjZSwgcmxpbSkgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX29sZF9nZXRybGltaXQoKGxvbmcpKHJlc291cmNlKSwgKGxvbmcpKHJsaW0pKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfb2xkX2dldHJsaW1pdChyZXMsIHJlc291cmNlLCBybGltKSAgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9vbGRfZ2V0cmxpbWl0KHJlcywgKGxvbmcpKHJlc291cmNlKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShybGltKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfc2V0cmxpbWl0KHJlc291cmNlLCBybGltKSBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2V0cmxpbWl0KChsb25nKShyZXNvdXJjZSksIChsb25nKShybGltKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3NldHJsaW1pdChyZXMsIHJlc291cmNlLCBybGltKSBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NldHJsaW1pdChyZXMsIChsb25nKShyZXNvdXJjZSksIChsb25nKShybGltKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfcHJsaW1pdDY0KHBpZCwgcmVzb3VyY2UsIG5ld19ybGltLCBvbGRfcmxpbSkgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3BybGltaXQ2NCgobG9uZykocGlkKSwgKGxvbmcpKHJlc291cmNlKSwgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShuZXdfcmxpbSksIChsb25nKShvbGRfcmxpbSkpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9wcmxpbWl0NjQocmVzLCBwaWQsIHJlc291cmNlLCBuZXdfcmxpbSwgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2xkX3JsaW0pICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3BybGltaXQ2NChyZXMsIChsb25nKShwaWQpLCAobG9uZykocmVzb3VyY2UpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykobmV3X3JsaW0pLCAobG9uZykob2xkX3JsaW0pKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9nZXRydXNhZ2Uod2hvLCBydSkgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2dldHJ1c2FnZSgobG9uZykod2hvKSwgKGxvbmcpKHJ1KSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2dldHJ1c2FnZShyZXMsIHdobywgcnUpIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZ2V0cnVzYWdlKHJlcywgKGxvbmcpKHdobyksIChsb25nKShydSkpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3VtYXNrKG1hc2spIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF91bWFzaygobG9uZykobWFzaykpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF91bWFzayhyZXMsIG1hc2spIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfdW1hc2socmVzLCAobG9uZykobWFzaykpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX21zZ2dldChrZXksIG1zZ2ZsZykgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX21zZ2dldCgobG9uZykoa2V5KSwgKGxvbmcpKG1zZ2ZsZykpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9tc2dnZXQocmVzLCBrZXksIG1zZ2ZsZykgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9tc2dnZXQocmVzLCAobG9uZykoa2V5KSwgKGxvbmcpKG1zZ2ZsZykpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX21zZ3NuZChtc3FpZCwgbXNncCwgbXNnc3osIG1zZ2ZsZykgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX21zZ3NuZCgobG9uZykobXNxaWQpLCAobG9uZykobXNncCksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKG1zZ3N6KSwgKGxvbmcpKG1zZ2ZsZykpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9tc2dzbmQocmVzLCBtc3FpZCwgbXNncCwgbXNnc3osIG1zZ2ZsZykgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9tc2dzbmQocmVzLCAobG9uZykobXNxaWQpLCAobG9uZykobXNncCksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShtc2dzeiksIChsb25nKShtc2dmbGcpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9tc2dyY3YobXNxaWQsIG1zZ3AsIG1zZ3N6LCBtc2d0eXAsIG1zZ2ZsZykgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX21zZ3JjdigobG9uZykobXNxaWQpLCAobG9uZykobXNncCksICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykobXNnc3opLCAobG9uZykobXNndHlwKSwgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykobXNnZmxnKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X21zZ3JjdihyZXMsIG1zcWlkLCBtc2dwLCBtc2dzeiwgbXNndHlwLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnZmxnKSAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9tc2dyY3YocmVzLCAobG9uZykobXNxaWQpLCAobG9uZykobXNncCksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShtc2dzeiksIChsb25nKShtc2d0eXApLCAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykobXNnZmxnKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfbXNnY3RsKG1zcWlkLCBjbWQsIGJ1ZikgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX21zZ2N0bCgobG9uZykobXNxaWQpLCAobG9uZykoY21kKSwgKGxvbmcpKGJ1ZikpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9tc2djdGwocmVzLCBtc3FpZCwgY21kLCBidWYpICAgICAgICAgICBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX21zZ2N0bChyZXMsIChsb25nKShtc3FpZCksIChsb25nKShjbWQpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoYnVmKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfc2VtZ2V0KGtleSwgbnNlbXMsIHNlbWZsZykgICAgICAgIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zZW1nZXQoKGxvbmcpKGtleSksIChsb25nKShuc2VtcyksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHNlbWZsZykpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9zZW1nZXQocmVzLCBrZXksIG5zZW1zLCBzZW1mbGcpICAgICAgICBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NlbWdldChyZXMsIChsb25nKShrZXkpLCAobG9uZykobnNlbXMpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoc2VtZmxnKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfc2Vtb3Aoc2VtaWQsIHNvcHMsIG5zb3BzKSBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2Vtb3AoKGxvbmcpKHNlbWlkKSwgKGxvbmcpKHNvcHMpLCAobG9uZykobnNvcHMpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfc2Vtb3AocmVzLCBzZW1pZCwgc29wcywgbnNvcHMpICAgICAgICAgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zZW1vcChyZXMsIChsb25nKShzZW1pZCksIChsb25nKShzb3BzKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykobnNvcHMpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9zZW1jdGwoc2VtaWQsIHNlbW51bSwgY21kLCBhcmcpICAgICAgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NlbWN0bCgobG9uZykoc2VtaWQpLCAobG9uZykoc2VtbnVtKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoY21kKSwgKGxvbmcpKGFyZykpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9zZW1jdGwocmVzLCBzZW1pZCwgc2VtbnVtLCBjbWQsIGFyZykgICAgICBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NlbWN0bChyZXMsIChsb25nKShzZW1pZCksIChsb25nKShzZW1udW0pLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoY21kKSwgKGxvbmcpKGFyZykpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3NlbXRpbWVkb3Aoc2VtaWQsIHNvcHMsIG5zb3BzLCB0aW1lb3V0KSBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2VtdGltZWRvcCgobG9uZykoc2VtaWQpLCAobG9uZykoc29wcyksICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykobnNvcHMpLCAobG9uZykodGltZW91dCkpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9zZW10aW1lZG9wKHJlcywgc2VtaWQsIHNvcHMsIG5zb3BzLCB0aW1lb3V0KSBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NlbXRpbWVkb3AocmVzLCAobG9uZykoc2VtaWQpLCAobG9uZykoc29wcyksICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKG5zb3BzKSwgKGxvbmcpKHRpbWVvdXQpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9zaG1hdChzaG1pZCwgc2htYWRkciwgc2htZmxnKSAgICAgICAgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NobWF0KChsb25nKShzaG1pZCksIChsb25nKShzaG1hZGRyKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShzaG1mbGcpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfc2htYXQocmVzLCBzaG1pZCwgc2htYWRkciwgc2htZmxnKSAgICAgICAgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zaG1hdChyZXMsIChsb25nKShzaG1pZCksIChsb25nKShzaG1hZGRyKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoc2htZmxnKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfc2htZ2V0KGtleSwgc2l6ZSwgZmxhZykgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NobWdldCgobG9uZykoa2V5KSwgKGxvbmcpKHNpemUpLCAobG9uZykoZmxhZykpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9zaG1nZXQocmVzLCBrZXksIHNpemUsIGZsYWcpICAgICAgICAgIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2htZ2V0KHJlcywgKGxvbmcpKGtleSksIChsb25nKShzaXplKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGZsYWcpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9zaG1kdChzaG1hZGRyKSBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2htZHQoKGxvbmcpKHNobWFkZHIpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfc2htZHQocmVzLCBzaG1hZGRyKSBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NobWR0KHJlcywgKGxvbmcpKHNobWFkZHIpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9zaG1jdGwoc2htaWQsIGNtZCwgYnVmKSBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2htY3RsKChsb25nKShzaG1pZCksIChsb25nKShjbWQpLCAobG9uZykoYnVmKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3NobWN0bChyZXMsIHNobWlkLCBjbWQsIGJ1ZikgICAgICAgICAgIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2htY3RsKHJlcywgKGxvbmcpKHNobWlkKSwgKGxvbmcpKGNtZCksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShidWYpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pcGMoY2FsbCwgZmlyc3QsIHNlY29uZCwgdGhpcmQsIHB0ciwgZmlmdGgpICAgIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9pcGMoKGxvbmcpKGNhbGwpLCAobG9uZykoZmlyc3QpLCAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShzZWNvbmQpLCAobG9uZykodGhpcmQpLCAobG9uZykocHRyKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoZmlmdGgpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaXBjKHJlcywgY2FsbCwgZmlyc3QsIHNlY29uZCwgdGhpcmQsIHB0ciwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZnRoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9pcGMocmVzLCAobG9uZykoY2FsbCksIChsb25nKShmaXJzdCksICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHNlY29uZCksIChsb25nKSh0aGlyZCksICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHB0ciksIChsb25nKShmaWZ0aCkpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX21xX29wZW4obmFtZSwgb2ZsYWcsIG1vZGUsIGF0dHIpICAgIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9tcV9vcGVuKChsb25nKShuYW1lKSwgKGxvbmcpKG9mbGFnKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKG1vZGUpLCAobG9uZykoYXR0cikpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9tcV9vcGVuKHJlcywgbmFtZSwgb2ZsYWcsIG1vZGUsIGF0dHIpICAgIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbXFfb3BlbihyZXMsIChsb25nKShuYW1lKSwgKGxvbmcpKG9mbGFnKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShtb2RlKSwgKGxvbmcpKGF0dHIpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9tcV91bmxpbmsobmFtZSkgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX21xX3VubGluaygobG9uZykobmFtZSkpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9tcV91bmxpbmsocmVzLCBuYW1lKSBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX21xX3VubGluayhyZXMsIChsb25nKShuYW1lKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfbXFfdGltZWRzZW5kKG1xZGVzLCBtc2dfcHRyLCBtc2dfbGVuLCAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2dfcHJpbywgYWJzX3RpbWVvdXQpICAgICAgICAgICAgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX21xX3RpbWVkc2VuZCgobG9uZykobXFkZXMpLCAobG9uZykobXNnX3B0ciksICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKG1zZ19sZW4pLCAobG9uZykobXNnX3ByaW8pLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShhYnNfdGltZW91dCkpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9tcV90aW1lZHNlbmQocmVzLCBtcWRlcywgbXNnX3B0ciwgbXNnX2xlbiwgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnX3ByaW8sIGFic190aW1lb3V0KSAgICAgICAgICBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX21xX3RpbWVkc2VuZCggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICByZXMsIChsb25nKShtcWRlcyksIChsb25nKShtc2dfcHRyKSwgKGxvbmcpKG1zZ19sZW4pLCAobG9uZykobXNnX3ByaW8pLCBcCi0gICAgICAobG9uZykoYWJzX3RpbWVvdXQpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9tcV90aW1lZHJlY2VpdmUobXFkZXMsIG1zZ19wdHIsIG1zZ19sZW4sIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZ19wcmlvLCBhYnNfdGltZW91dCkgICBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfbXFfdGltZWRyZWNlaXZlKCAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgKGxvbmcpKG1xZGVzKSwgKGxvbmcpKG1zZ19wdHIpLCAobG9uZykobXNnX2xlbiksIChsb25nKShtc2dfcHJpbyksIFwKLSAgICAgIChsb25nKShhYnNfdGltZW91dCkpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9tcV90aW1lZHJlY2VpdmUocmVzLCBtcWRlcywgbXNnX3B0ciwgbXNnX2xlbiwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZ19wcmlvLCBhYnNfdGltZW91dCkgICAgICAgIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbXFfdGltZWRyZWNlaXZlKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICByZXMsIChsb25nKShtcWRlcyksIChsb25nKShtc2dfcHRyKSwgKGxvbmcpKG1zZ19sZW4pLCAobG9uZykobXNnX3ByaW8pLCAgXAotICAgICAgKGxvbmcpKGFic190aW1lb3V0KSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfbXFfbm90aWZ5KG1xZGVzLCBub3RpZmljYXRpb24pIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9tcV9ub3RpZnkoKGxvbmcpKG1xZGVzKSwgKGxvbmcpKG5vdGlmaWNhdGlvbikpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9tcV9ub3RpZnkocmVzLCBtcWRlcywgbm90aWZpY2F0aW9uKSBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX21xX25vdGlmeShyZXMsIChsb25nKShtcWRlcyksICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykobm90aWZpY2F0aW9uKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfbXFfZ2V0c2V0YXR0cihtcWRlcywgbXFzdGF0LCBvbXFzdGF0KSAgICAgICBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfbXFfZ2V0c2V0YXR0cigobG9uZykobXFkZXMpLCAobG9uZykobXFzdGF0KSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKG9tcXN0YXQpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfbXFfZ2V0c2V0YXR0cihyZXMsIG1xZGVzLCBtcXN0YXQsIG9tcXN0YXQpIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbXFfZ2V0c2V0YXR0cihyZXMsIChsb25nKShtcWRlcyksICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKG1xc3RhdCksIChsb25nKShvbXFzdGF0KSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfcGNpY29uZmlnX2lvYmFzZSh3aGljaCwgYnVzLCBkZXZmbikgICAgICAgICBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfcGNpY29uZmlnX2lvYmFzZSgobG9uZykod2hpY2gpLCAobG9uZykoYnVzKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGRldmZuKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3BjaWNvbmZpZ19pb2Jhc2UocmVzLCB3aGljaCwgYnVzLCBkZXZmbikgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9wY2ljb25maWdfaW9iYXNlKHJlcywgKGxvbmcpKHdoaWNoKSwgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGJ1cyksIChsb25nKShkZXZmbikpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3BjaWNvbmZpZ19yZWFkKGJ1cywgZGZuLCBvZmYsIGxlbiwgYnVmKSBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfcGNpY29uZmlnX3JlYWQoICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAobG9uZykoYnVzKSwgKGxvbmcpKGRmbiksIChsb25nKShvZmYpLCAobG9uZykobGVuKSwgKGxvbmcpKGJ1ZikpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9wY2ljb25maWdfcmVhZChyZXMsIGJ1cywgZGZuLCBvZmYsIGxlbiwgYnVmKSBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3BjaWNvbmZpZ19yZWFkKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICByZXMsIChsb25nKShidXMpLCAobG9uZykoZGZuKSwgKGxvbmcpKG9mZiksIChsb25nKShsZW4pLCAobG9uZykoYnVmKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfcGNpY29uZmlnX3dyaXRlKGJ1cywgZGZuLCBvZmYsIGxlbiwgYnVmKSBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfcGNpY29uZmlnX3dyaXRlKCAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgKGxvbmcpKGJ1cyksIChsb25nKShkZm4pLCAobG9uZykob2ZmKSwgKGxvbmcpKGxlbiksIChsb25nKShidWYpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfcGNpY29uZmlnX3dyaXRlKHJlcywgYnVzLCBkZm4sIG9mZiwgbGVuLCBidWYpIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfcGNpY29uZmlnX3dyaXRlKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICByZXMsIChsb25nKShidXMpLCAobG9uZykoZGZuKSwgKGxvbmcpKG9mZiksIChsb25nKShsZW4pLCAobG9uZykoYnVmKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfc3dhcG9uKHNwZWNpYWxmaWxlLCBzd2FwX2ZsYWdzKSBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc3dhcG9uKChsb25nKShzcGVjaWFsZmlsZSksIChsb25nKShzd2FwX2ZsYWdzKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3N3YXBvbihyZXMsIHNwZWNpYWxmaWxlLCBzd2FwX2ZsYWdzKSBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3N3YXBvbihyZXMsIChsb25nKShzcGVjaWFsZmlsZSksICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHN3YXBfZmxhZ3MpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9zd2Fwb2ZmKHNwZWNpYWxmaWxlKSBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc3dhcG9mZigobG9uZykoc3BlY2lhbGZpbGUpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfc3dhcG9mZihyZXMsIHNwZWNpYWxmaWxlKSBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3N3YXBvZmYocmVzLCAobG9uZykoc3BlY2lhbGZpbGUpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9zeXNjdGwoYXJncykgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3N5c2N0bCgobG9uZykoYXJncykpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9zeXNjdGwocmVzLCBhcmdzKSBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3N5c2N0bChyZXMsIChsb25nKShhcmdzKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfc3lzaW5mbyhpbmZvKSBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc3lzaW5mbygobG9uZykoaW5mbykpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9zeXNpbmZvKHJlcywgaW5mbykgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zeXNpbmZvKHJlcywgKGxvbmcpKGluZm8pKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9zeXNmcyhvcHRpb24sIGFyZzEsIGFyZzIpIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zeXNmcygobG9uZykob3B0aW9uKSwgKGxvbmcpKGFyZzEpLCAobG9uZykoYXJnMikpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9zeXNmcyhyZXMsIG9wdGlvbiwgYXJnMSwgYXJnMikgICAgICAgICAgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zeXNmcyhyZXMsIChsb25nKShvcHRpb24pLCAobG9uZykoYXJnMSksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGFyZzIpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9zeXNsb2codHlwZSwgYnVmLCBsZW4pIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zeXNsb2coKGxvbmcpKHR5cGUpLCAobG9uZykoYnVmKSwgKGxvbmcpKGxlbikpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9zeXNsb2cocmVzLCB0eXBlLCBidWYsIGxlbikgICAgICAgICAgIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc3lzbG9nKHJlcywgKGxvbmcpKHR5cGUpLCAobG9uZykoYnVmKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGxlbikpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3VzZWxpYihsaWJyYXJ5KSBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfdXNlbGliKChsb25nKShsaWJyYXJ5KSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3VzZWxpYihyZXMsIGxpYnJhcnkpIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfdXNlbGliKHJlcywgKGxvbmcpKGxpYnJhcnkpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9uaV9zeXNjYWxsKCkgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX25pX3N5c2NhbGwoKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfbmlfc3lzY2FsbChyZXMpIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbmlfc3lzY2FsbChyZXMpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3B0cmFjZShyZXF1ZXN0LCBwaWQsIGFkZHIsIGRhdGEpICAgIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9wdHJhY2UoKGxvbmcpKHJlcXVlc3QpLCAobG9uZykocGlkKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoYWRkciksIChsb25nKShkYXRhKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3B0cmFjZShyZXMsIHJlcXVlc3QsIHBpZCwgYWRkciwgZGF0YSkgICAgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9wdHJhY2UocmVzLCAobG9uZykocmVxdWVzdCksIChsb25nKShwaWQpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoYWRkciksIChsb25nKShkYXRhKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfYWRkX2tleShfdHlwZSwgX2Rlc2NyaXB0aW9uLCBfcGF5bG9hZCwgcGxlbiwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RyaW5naWQpICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfYWRkX2tleSgobG9uZykoX3R5cGUpLCAobG9uZykoX2Rlc2NyaXB0aW9uKSwgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShfcGF5bG9hZCksIChsb25nKShwbGVuKSwgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGRlc3RyaW5naWQpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfYWRkX2tleShyZXMsIF90eXBlLCBfZGVzY3JpcHRpb24sIF9wYXlsb2FkLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsZW4sIGRlc3RyaW5naWQpICAgICAgICAgICAgICAgICAgIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfYWRkX2tleSggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgcmVzLCAobG9uZykoX3R5cGUpLCAobG9uZykoX2Rlc2NyaXB0aW9uKSwgKGxvbmcpKF9wYXlsb2FkKSwgICAgICAgICAgICBcCi0gICAgICAobG9uZykocGxlbiksIChsb25nKShkZXN0cmluZ2lkKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfcmVxdWVzdF9rZXkoX3R5cGUsIF9kZXNjcmlwdGlvbiwgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY2FsbG91dF9pbmZvLCBkZXN0cmluZ2lkKSBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfcmVxdWVzdF9rZXkoICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIChsb25nKShfdHlwZSksIChsb25nKShfZGVzY3JpcHRpb24pLCAobG9uZykoX2NhbGxvdXRfaW5mbyksICAgICAgXAotICAgICAgKGxvbmcpKGRlc3RyaW5naWQpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfcmVxdWVzdF9rZXkocmVzLCBfdHlwZSwgX2Rlc2NyaXB0aW9uLCAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NhbGxvdXRfaW5mbywgZGVzdHJpbmdpZCkgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9yZXF1ZXN0X2tleSggICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgcmVzLCAobG9uZykoX3R5cGUpLCAobG9uZykoX2Rlc2NyaXB0aW9uKSwgKGxvbmcpKF9jYWxsb3V0X2luZm8pLCAgXAotICAgICAgKGxvbmcpKGRlc3RyaW5naWQpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9rZXljdGwoY21kLCBhcmcyLCBhcmczLCBhcmc0LCBhcmc1KSAgICAgICAgICAgIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9rZXljdGwoKGxvbmcpKGNtZCksIChsb25nKShhcmcyKSwgKGxvbmcpKGFyZzMpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShhcmc0KSwgKGxvbmcpKGFyZzUpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfa2V5Y3RsKHJlcywgY21kLCBhcmcyLCBhcmczLCBhcmc0LCBhcmc1KSBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2tleWN0bChyZXMsIChsb25nKShjbWQpLCAobG9uZykoYXJnMiksICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShhcmczKSwgKGxvbmcpKGFyZzQpLCAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGFyZzUpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pb3ByaW9fc2V0KHdoaWNoLCB3aG8sIGlvcHJpbykgICAgICAgIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9pb3ByaW9fc2V0KChsb25nKSh3aGljaCksIChsb25nKSh3aG8pLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoaW9wcmlvKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2lvcHJpb19zZXQocmVzLCB3aGljaCwgd2hvLCBpb3ByaW8pICAgICAgICBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2lvcHJpb19zZXQocmVzLCAobG9uZykod2hpY2gpLCAobG9uZykod2hvKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShpb3ByaW8pKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pb3ByaW9fZ2V0KHdoaWNoLCB3aG8pIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9pb3ByaW9fZ2V0KChsb25nKSh3aGljaCksIChsb25nKSh3aG8pKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW9wcmlvX2dldChyZXMsIHdoaWNoLCB3aG8pIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfaW9wcmlvX2dldChyZXMsIChsb25nKSh3aGljaCksIChsb25nKSh3aG8pKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9zZXRfbWVtcG9saWN5KG1vZGUsIG5tYXNrLCBtYXhub2RlKSAgICAgICBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2V0X21lbXBvbGljeSgobG9uZykobW9kZSksIChsb25nKShubWFzayksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShtYXhub2RlKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3NldF9tZW1wb2xpY3kocmVzLCBtb2RlLCBubWFzaywgbWF4bm9kZSkgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zZXRfbWVtcG9saWN5KHJlcywgKGxvbmcpKG1vZGUpLCAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKG5tYXNrKSwgKGxvbmcpKG1heG5vZGUpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9taWdyYXRlX3BhZ2VzKHBpZCwgbWF4bm9kZSwgZnJvbSwgdG8pICAgICAgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX21pZ3JhdGVfcGFnZXMoKGxvbmcpKHBpZCksIChsb25nKShtYXhub2RlKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGZyb20pLCAobG9uZykodG8pKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfbWlncmF0ZV9wYWdlcyhyZXMsIHBpZCwgbWF4bm9kZSwgZnJvbSwgdG8pIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbWlncmF0ZV9wYWdlcyggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICByZXMsIChsb25nKShwaWQpLCAobG9uZykobWF4bm9kZSksIChsb25nKShmcm9tKSwgKGxvbmcpKHRvKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfbW92ZV9wYWdlcyhwaWQsIG5yX3BhZ2VzLCBwYWdlcywgbm9kZXMsICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzLCBmbGFncykgICAgICAgICAgICAgICAgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX21vdmVfcGFnZXMoKGxvbmcpKHBpZCksIChsb25nKShucl9wYWdlcyksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShwYWdlcyksIChsb25nKShub2RlcyksICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoc3RhdHVzKSwgKGxvbmcpKGZsYWdzKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X21vdmVfcGFnZXMocmVzLCBwaWQsIG5yX3BhZ2VzLCBwYWdlcywgbm9kZXMsICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cywgZmxhZ3MpICAgICAgICAgICAgICAgICAgICAgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9tb3ZlX3BhZ2VzKHJlcywgKGxvbmcpKHBpZCksIChsb25nKShucl9wYWdlcyksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykocGFnZXMpLCAobG9uZykobm9kZXMpLCAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHN0YXR1cyksIChsb25nKShmbGFncykpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX21iaW5kKHN0YXJ0LCBsZW4sIG1vZGUsIG5tYXNrLCBtYXhub2RlLCBmbGFncykgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX21iaW5kKChsb25nKShzdGFydCksIChsb25nKShsZW4pLCAobG9uZykobW9kZSksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykobm1hc2spLCAobG9uZykobWF4bm9kZSksICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGZsYWdzKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X21iaW5kKHJlcywgc3RhcnQsIGxlbiwgbW9kZSwgbm1hc2ssIG1heG5vZGUsIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbWJpbmQocmVzLCAobG9uZykoc3RhcnQpLCAobG9uZykobGVuKSwgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKG1vZGUpLCAobG9uZykobm1hc2spLCAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKG1heG5vZGUpLCAobG9uZykoZmxhZ3MpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9nZXRfbWVtcG9saWN5KHBvbGljeSwgbm1hc2ssIG1heG5vZGUsIGFkZHIsIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFncykgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZ2V0X21lbXBvbGljeSgobG9uZykocG9saWN5KSwgKGxvbmcpKG5tYXNrKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKG1heG5vZGUpLCAobG9uZykoYWRkciksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShmbGFncykpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9nZXRfbWVtcG9saWN5KHJlcywgcG9saWN5LCBubWFzaywgbWF4bm9kZSwgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHIsIGZsYWdzKSAgICAgICAgICAgICAgICAgICBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2dldF9tZW1wb2xpY3kocmVzLCAobG9uZykocG9saWN5KSwgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKG5tYXNrKSwgKGxvbmcpKG1heG5vZGUpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGFkZHIpLCAobG9uZykoZmxhZ3MpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbm90aWZ5X2luaXQoKSBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfaW5vdGlmeV9pbml0KCkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2lub3RpZnlfaW5pdChyZXMpIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfaW5vdGlmeV9pbml0KHJlcykKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW5vdGlmeV9pbml0MShmbGFncykgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2lub3RpZnlfaW5pdDEoKGxvbmcpKGZsYWdzKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2lub3RpZnlfaW5pdDEocmVzLCBmbGFncykgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9pbm90aWZ5X2luaXQxKHJlcywgKGxvbmcpKGZsYWdzKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW5vdGlmeV9hZGRfd2F0Y2goZmQsIHBhdGgsIG1hc2spICAgICAgICAgIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9pbm90aWZ5X2FkZF93YXRjaCgobG9uZykoZmQpLCAobG9uZykocGF0aCksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykobWFzaykpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbm90aWZ5X2FkZF93YXRjaChyZXMsIGZkLCBwYXRoLCBtYXNrKSBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2lub3RpZnlfYWRkX3dhdGNoKHJlcywgKGxvbmcpKGZkKSwgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShwYXRoKSwgKGxvbmcpKG1hc2spKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbm90aWZ5X3JtX3dhdGNoKGZkLCB3ZCkgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2lub3RpZnlfcm1fd2F0Y2goKGxvbmcpKGZkKSwgKGxvbmcpKHdkKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2lub3RpZnlfcm1fd2F0Y2gocmVzLCBmZCwgd2QpIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfaW5vdGlmeV9ybV93YXRjaChyZXMsIChsb25nKShmZCksIChsb25nKSh3ZCkpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3NwdV9ydW4oZmQsIHVucGMsIHVzdGF0dXMpICAgICAgIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zcHVfcnVuKChsb25nKShmZCksIChsb25nKSh1bnBjKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHVzdGF0dXMpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfc3B1X3J1bihyZXMsIGZkLCB1bnBjLCB1c3RhdHVzKSAgICAgICBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NwdV9ydW4ocmVzLCAobG9uZykoZmQpLCAobG9uZykodW5wYyksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykodXN0YXR1cykpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3NwdV9jcmVhdGUobmFtZSwgZmxhZ3MsIG1vZGUsIGZkKSAgICAgIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zcHVfY3JlYXRlKChsb25nKShuYW1lKSwgKGxvbmcpKGZsYWdzKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKG1vZGUpLCAobG9uZykoZmQpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfc3B1X2NyZWF0ZShyZXMsIG5hbWUsIGZsYWdzLCBtb2RlLCBmZCkgICAgICBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NwdV9jcmVhdGUocmVzLCAobG9uZykobmFtZSksIChsb25nKShmbGFncyksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykobW9kZSksIChsb25nKShmZCkpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX21rbm9kYXQoZGZkLCBmaWxlbmFtZSwgbW9kZSwgZGV2KSAgICAgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX21rbm9kYXQoKGxvbmcpKGRmZCksIChsb25nKShmaWxlbmFtZSksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShtb2RlKSwgKGxvbmcpKGRldikpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9ta25vZGF0KHJlcywgZGZkLCBmaWxlbmFtZSwgbW9kZSwgZGV2KSAgICAgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9ta25vZGF0KHJlcywgKGxvbmcpKGRmZCksIChsb25nKShmaWxlbmFtZSksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykobW9kZSksIChsb25nKShkZXYpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9ta2RpcmF0KGRmZCwgcGF0aG5hbWUsIG1vZGUpICAgICAgICAgIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9ta2RpcmF0KChsb25nKShkZmQpLCAobG9uZykocGF0aG5hbWUpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykobW9kZSkpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9ta2RpcmF0KHJlcywgZGZkLCBwYXRobmFtZSwgbW9kZSkgICAgICAgICAgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9ta2RpcmF0KHJlcywgKGxvbmcpKGRmZCksIChsb25nKShwYXRobmFtZSksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykobW9kZSkpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3VubGlua2F0KGRmZCwgcGF0aG5hbWUsIGZsYWcpICAgICAgICAgIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF91bmxpbmthdCgobG9uZykoZGZkKSwgKGxvbmcpKHBhdGhuYW1lKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShmbGFnKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3VubGlua2F0KHJlcywgZGZkLCBwYXRobmFtZSwgZmxhZykgICAgICAgICAgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF91bmxpbmthdChyZXMsIChsb25nKShkZmQpLCAobG9uZykocGF0aG5hbWUpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShmbGFnKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfc3ltbGlua2F0KG9sZG5hbWUsIG5ld2RmZCwgbmV3bmFtZSkgICAgICAgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3N5bWxpbmthdCgobG9uZykob2xkbmFtZSksIChsb25nKShuZXdkZmQpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShuZXduYW1lKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3N5bWxpbmthdChyZXMsIG9sZG5hbWUsIG5ld2RmZCwgbmV3bmFtZSkgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zeW1saW5rYXQocmVzLCAobG9uZykob2xkbmFtZSksICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykobmV3ZGZkKSwgKGxvbmcpKG5ld25hbWUpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9saW5rYXQob2xkZGZkLCBvbGRuYW1lLCBuZXdkZmQsIG5ld25hbWUsIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfbGlua2F0KChsb25nKShvbGRkZmQpLCAobG9uZykob2xkbmFtZSksICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykobmV3ZGZkKSwgKGxvbmcpKG5ld25hbWUpLCAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGZsYWdzKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2xpbmthdChyZXMsIG9sZGRmZCwgb2xkbmFtZSwgbmV3ZGZkLCBuZXduYW1lLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9saW5rYXQocmVzLCAobG9uZykob2xkZGZkKSwgKGxvbmcpKG9sZG5hbWUpLCAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShuZXdkZmQpLCAobG9uZykobmV3bmFtZSksICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoZmxhZ3MpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9yZW5hbWVhdChvbGRkZmQsIG9sZG5hbWUsIG5ld2RmZCwgbmV3bmFtZSkgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3JlbmFtZWF0KChsb25nKShvbGRkZmQpLCAobG9uZykob2xkbmFtZSksICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShuZXdkZmQpLCAobG9uZykobmV3bmFtZSkpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9yZW5hbWVhdChyZXMsIG9sZGRmZCwgb2xkbmFtZSwgbmV3ZGZkLCAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3bmFtZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfcmVuYW1lYXQocmVzLCAobG9uZykob2xkZGZkKSwgKGxvbmcpKG9sZG5hbWUpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShuZXdkZmQpLCAobG9uZykobmV3bmFtZSkpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2Z1dGltZXNhdChkZmQsIGZpbGVuYW1lLCB1dGltZXMpICAgICAgICBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZnV0aW1lc2F0KChsb25nKShkZmQpLCAobG9uZykoZmlsZW5hbWUpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSh1dGltZXMpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfZnV0aW1lc2F0KHJlcywgZGZkLCBmaWxlbmFtZSwgdXRpbWVzKSAgICAgICAgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9mdXRpbWVzYXQocmVzLCAobG9uZykoZGZkKSwgKGxvbmcpKGZpbGVuYW1lKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHV0aW1lcykpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ZhY2Nlc3NhdChkZmQsIGZpbGVuYW1lLCBtb2RlKSAgICAgICAgICBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZmFjY2Vzc2F0KChsb25nKShkZmQpLCAobG9uZykoZmlsZW5hbWUpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShtb2RlKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ZhY2Nlc3NhdChyZXMsIGRmZCwgZmlsZW5hbWUsIG1vZGUpICAgICAgICAgIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZmFjY2Vzc2F0KHJlcywgKGxvbmcpKGRmZCksIChsb25nKShmaWxlbmFtZSksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShtb2RlKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfZmNobW9kYXQoZGZkLCBmaWxlbmFtZSwgbW9kZSkgICAgICAgICAgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2ZjaG1vZGF0KChsb25nKShkZmQpLCAobG9uZykoZmlsZW5hbWUpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKG1vZGUpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfZmNobW9kYXQocmVzLCBkZmQsIGZpbGVuYW1lLCBtb2RlKSAgICAgICAgICBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2ZjaG1vZGF0KHJlcywgKGxvbmcpKGRmZCksIChsb25nKShmaWxlbmFtZSksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKG1vZGUpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9mY2hvd25hdChkZmQsIGZpbGVuYW1lLCB1c2VyLCBncm91cCwgZmxhZykgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2ZjaG93bmF0KChsb25nKShkZmQpLCAobG9uZykoZmlsZW5hbWUpLCAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSh1c2VyKSwgKGxvbmcpKGdyb3VwKSwgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShmbGFnKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ZjaG93bmF0KHJlcywgZGZkLCBmaWxlbmFtZSwgdXNlciwgZ3JvdXAsICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2ZjaG93bmF0KHJlcywgKGxvbmcpKGRmZCksIChsb25nKShmaWxlbmFtZSksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHVzZXIpLCAobG9uZykoZ3JvdXApLCAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoZmxhZykpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX29wZW5hdChkZmQsIGZpbGVuYW1lLCBmbGFncywgbW9kZSkgICBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfb3BlbmF0KChsb25nKShkZmQpLCAobG9uZykoZmlsZW5hbWUpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShmbGFncyksIChsb25nKShtb2RlKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X29wZW5hdChyZXMsIGRmZCwgZmlsZW5hbWUsIGZsYWdzLCBtb2RlKSAgIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfb3BlbmF0KHJlcywgKGxvbmcpKGRmZCksIChsb25nKShmaWxlbmFtZSksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShmbGFncyksIChsb25nKShtb2RlKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfbmV3ZnN0YXRhdChkZmQsIGZpbGVuYW1lLCBzdGF0YnVmLCBmbGFnKSBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfbmV3ZnN0YXRhdCgobG9uZykoZGZkKSwgKGxvbmcpKGZpbGVuYW1lKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHN0YXRidWYpLCAobG9uZykoZmxhZykpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9uZXdmc3RhdGF0KHJlcywgZGZkLCBmaWxlbmFtZSwgc3RhdGJ1ZiwgZmxhZykgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9uZXdmc3RhdGF0KHJlcywgKGxvbmcpKGRmZCksIChsb25nKShmaWxlbmFtZSksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoc3RhdGJ1ZiksIChsb25nKShmbGFnKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfZnN0YXRhdDY0KGRmZCwgZmlsZW5hbWUsIHN0YXRidWYsIGZsYWcpIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9mc3RhdGF0NjQoKGxvbmcpKGRmZCksIChsb25nKShmaWxlbmFtZSksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHN0YXRidWYpLCAobG9uZykoZmxhZykpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9mc3RhdGF0NjQocmVzLCBkZmQsIGZpbGVuYW1lLCBzdGF0YnVmLCBmbGFnKSBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2ZzdGF0YXQ2NChyZXMsIChsb25nKShkZmQpLCAobG9uZykoZmlsZW5hbWUpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoc3RhdGJ1ZiksIChsb25nKShmbGFnKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfcmVhZGxpbmthdChkZmQsIHBhdGgsIGJ1ZiwgYnVmc2l6KSAgIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9yZWFkbGlua2F0KChsb25nKShkZmQpLCAobG9uZykocGF0aCksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShidWYpLCAobG9uZykoYnVmc2l6KSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3JlYWRsaW5rYXQocmVzLCBkZmQsIHBhdGgsIGJ1ZiwgYnVmc2l6KSAgIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfcmVhZGxpbmthdChyZXMsIChsb25nKShkZmQpLCAobG9uZykocGF0aCksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoYnVmKSwgKGxvbmcpKGJ1ZnNpeikpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3V0aW1lbnNhdChkZmQsIGZpbGVuYW1lLCB1dGltZXMsIGZsYWdzKSBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfdXRpbWVuc2F0KChsb25nKShkZmQpLCAobG9uZykoZmlsZW5hbWUpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSh1dGltZXMpLCAobG9uZykoZmxhZ3MpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfdXRpbWVuc2F0KHJlcywgZGZkLCBmaWxlbmFtZSwgdXRpbWVzLCBmbGFncykgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF91dGltZW5zYXQocmVzLCAobG9uZykoZGZkKSwgKGxvbmcpKGZpbGVuYW1lKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHV0aW1lcyksIChsb25nKShmbGFncykpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3Vuc2hhcmUodW5zaGFyZV9mbGFncykgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3Vuc2hhcmUoKGxvbmcpKHVuc2hhcmVfZmxhZ3MpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfdW5zaGFyZShyZXMsIHVuc2hhcmVfZmxhZ3MpIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfdW5zaGFyZShyZXMsIChsb25nKSh1bnNoYXJlX2ZsYWdzKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfc3BsaWNlKGZkX2luLCBvZmZfaW4sIGZkX291dCwgb2ZmX291dCwgbGVuLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFncykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NwbGljZSgobG9uZykoZmRfaW4pLCAobG9uZykob2ZmX2luKSwgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGZkX291dCksIChsb25nKShvZmZfb3V0KSwgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShsZW4pLCAobG9uZykoZmxhZ3MpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfc3BsaWNlKHJlcywgZmRfaW4sIG9mZl9pbiwgZmRfb3V0LCBvZmZfb3V0LCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuLCBmbGFncykgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc3BsaWNlKHJlcywgKGxvbmcpKGZkX2luKSwgKGxvbmcpKG9mZl9pbiksICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGZkX291dCksIChsb25nKShvZmZfb3V0KSwgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykobGVuKSwgKGxvbmcpKGZsYWdzKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfdm1zcGxpY2UoZmQsIGlvdiwgbnJfc2VncywgZmxhZ3MpIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF92bXNwbGljZSgobG9uZykoZmQpLCAobG9uZykoaW92KSwgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykobnJfc2VncyksIChsb25nKShmbGFncykpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF92bXNwbGljZShyZXMsIGZkLCBpb3YsIG5yX3NlZ3MsIGZsYWdzKSBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3Ztc3BsaWNlKHJlcywgKGxvbmcpKGZkKSwgKGxvbmcpKGlvdiksICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShucl9zZWdzKSwgKGxvbmcpKGZsYWdzKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfdGVlKGZkaW4sIGZkb3V0LCBsZW4sIGZsYWdzKSAgICAgICAgICAgICAgICAgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3RlZSgobG9uZykoZmRpbiksIChsb25nKShmZG91dCksIChsb25nKShsZW4pLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShmbGFncykpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF90ZWUocmVzLCBmZGluLCBmZG91dCwgbGVuLCBmbGFncykgICAgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF90ZWUocmVzLCAobG9uZykoZmRpbiksIChsb25nKShmZG91dCksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShsZW4pLCAobG9uZykoZmxhZ3MpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9nZXRfcm9idXN0X2xpc3QocGlkLCBoZWFkX3B0ciwgbGVuX3B0cikgICAgICAgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2dldF9yb2J1c3RfbGlzdCgobG9uZykocGlkKSwgKGxvbmcpKGhlYWRfcHRyKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykobGVuX3B0cikpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9nZXRfcm9idXN0X2xpc3QocmVzLCBwaWQsIGhlYWRfcHRyLCBsZW5fcHRyKSBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2dldF9yb2J1c3RfbGlzdCggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICByZXMsIChsb25nKShwaWQpLCAobG9uZykoaGVhZF9wdHIpLCAobG9uZykobGVuX3B0cikpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3NldF9yb2J1c3RfbGlzdChoZWFkLCBsZW4pIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zZXRfcm9idXN0X2xpc3QoKGxvbmcpKGhlYWQpLCAobG9uZykobGVuKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3NldF9yb2J1c3RfbGlzdChyZXMsIGhlYWQsIGxlbikgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zZXRfcm9idXN0X2xpc3QocmVzLCAobG9uZykoaGVhZCksIChsb25nKShsZW4pKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9nZXRjcHUoY3B1LCBub2RlLCBjYWNoZSkgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2dldGNwdSgobG9uZykoY3B1KSwgKGxvbmcpKG5vZGUpLCAobG9uZykoY2FjaGUpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfZ2V0Y3B1KHJlcywgY3B1LCBub2RlLCBjYWNoZSkgICAgICAgICBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2dldGNwdShyZXMsIChsb25nKShjcHUpLCAobG9uZykobm9kZSksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShjYWNoZSkpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3NpZ25hbGZkKHVmZCwgdXNlcl9tYXNrLCBzaXplbWFzaykgICAgICBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2lnbmFsZmQoKGxvbmcpKHVmZCksIChsb25nKSh1c2VyX21hc2spLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHNpemVtYXNrKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3NpZ25hbGZkKHJlcywgdWZkLCB1c2VyX21hc2ssIHNpemVtYXNrKSAgICAgIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2lnbmFsZmQocmVzLCAobG9uZykodWZkKSwgKGxvbmcpKHVzZXJfbWFzayksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHNpemVtYXNrKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfc2lnbmFsZmQ0KHVmZCwgdXNlcl9tYXNrLCBzaXplbWFzaywgZmxhZ3MpIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zaWduYWxmZDQoKGxvbmcpKHVmZCksIChsb25nKSh1c2VyX21hc2spLCAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHNpemVtYXNrKSwgKGxvbmcpKGZsYWdzKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3NpZ25hbGZkNChyZXMsIHVmZCwgdXNlcl9tYXNrLCBzaXplbWFzaywgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zaWduYWxmZDQocmVzLCAobG9uZykodWZkKSwgKGxvbmcpKHVzZXJfbWFzayksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShzaXplbWFzayksIChsb25nKShmbGFncykpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3RpbWVyZmRfY3JlYXRlKGNsb2NraWQsIGZsYWdzKSBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfdGltZXJmZF9jcmVhdGUoKGxvbmcpKGNsb2NraWQpLCAobG9uZykoZmxhZ3MpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfdGltZXJmZF9jcmVhdGUocmVzLCBjbG9ja2lkLCBmbGFncykgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF90aW1lcmZkX2NyZWF0ZShyZXMsIChsb25nKShjbG9ja2lkKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoZmxhZ3MpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV90aW1lcmZkX3NldHRpbWUodWZkLCBmbGFncywgdXRtciwgb3RtcikgICAgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3RpbWVyZmRfc2V0dGltZSgobG9uZykodWZkKSwgKGxvbmcpKGZsYWdzKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykodXRtciksIChsb25nKShvdG1yKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3RpbWVyZmRfc2V0dGltZShyZXMsIHVmZCwgZmxhZ3MsIHV0bXIsIG90bXIpIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfdGltZXJmZF9zZXR0aW1lKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIHJlcywgKGxvbmcpKHVmZCksIChsb25nKShmbGFncyksIChsb25nKSh1dG1yKSwgKGxvbmcpKG90bXIpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV90aW1lcmZkX2dldHRpbWUodWZkLCBvdG1yKSBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfdGltZXJmZF9nZXR0aW1lKChsb25nKSh1ZmQpLCAobG9uZykob3RtcikpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF90aW1lcmZkX2dldHRpbWUocmVzLCB1ZmQsIG90bXIpIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfdGltZXJmZF9nZXR0aW1lKHJlcywgKGxvbmcpKHVmZCksIChsb25nKShvdG1yKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfZXZlbnRmZChjb3VudCkgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2V2ZW50ZmQoKGxvbmcpKGNvdW50KSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2V2ZW50ZmQocmVzLCBjb3VudCkgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9ldmVudGZkKHJlcywgKGxvbmcpKGNvdW50KSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfZXZlbnRmZDIoY291bnQsIGZsYWdzKSBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZXZlbnRmZDIoKGxvbmcpKGNvdW50KSwgKGxvbmcpKGZsYWdzKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2V2ZW50ZmQyKHJlcywgY291bnQsIGZsYWdzKSBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2V2ZW50ZmQyKHJlcywgKGxvbmcpKGNvdW50KSwgKGxvbmcpKGZsYWdzKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfb2xkX3JlYWRkaXIoYXJnMCwgYXJnMSwgYXJnMikgICAgICAgICAgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX29sZF9yZWFkZGlyKChsb25nKShhcmcwKSwgKGxvbmcpKGFyZzEpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGFyZzIpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfb2xkX3JlYWRkaXIocmVzLCBhcmcwLCBhcmcxLCBhcmcyKSAgICAgICAgICBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX29sZF9yZWFkZGlyKHJlcywgKGxvbmcpKGFyZzApLCAobG9uZykoYXJnMSksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGFyZzIpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9wc2VsZWN0NihhcmcwLCBhcmcxLCBhcmcyLCBhcmczLCBhcmc0LCBhcmc1KSBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfcHNlbGVjdDYoKGxvbmcpKGFyZzApLCAobG9uZykoYXJnMSksICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoYXJnMiksIChsb25nKShhcmczKSwgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShhcmc0KSwgKGxvbmcpKGFyZzUpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfcHNlbGVjdDYocmVzLCBhcmcwLCBhcmcxLCBhcmcyLCBhcmczLCBhcmc0LCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmc1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfcHNlbGVjdDYocmVzLCAobG9uZykoYXJnMCksIChsb25nKShhcmcxKSwgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoYXJnMiksIChsb25nKShhcmczKSwgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShhcmc0KSwgKGxvbmcpKGFyZzUpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9wcG9sbChhcmcwLCBhcmcxLCBhcmcyLCBhcmczLCBhcmc0KSAgICAgICAgICAgIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9wcG9sbCgobG9uZykoYXJnMCksIChsb25nKShhcmcxKSwgKGxvbmcpKGFyZzIpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGFyZzMpLCAobG9uZykoYXJnNCkpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9wcG9sbChyZXMsIGFyZzAsIGFyZzEsIGFyZzIsIGFyZzMsIGFyZzQpIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfcHBvbGwocmVzLCAobG9uZykoYXJnMCksIChsb25nKShhcmcxKSwgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoYXJnMiksIChsb25nKShhcmczKSwgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShhcmc0KSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfc3luY2ZzKGZkKSBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc3luY2ZzKChsb25nKShmZCkpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9zeW5jZnMocmVzLCBmZCkgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zeW5jZnMocmVzLCAobG9uZykoZmQpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9wZXJmX2V2ZW50X29wZW4oYXR0cl91cHRyLCBwaWQsIGNwdSwgZ3JvdXBfZmQsIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzKSAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfcGVyZl9ldmVudF9vcGVuKChsb25nKShhdHRyX3VwdHIpLCAobG9uZykocGlkKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoY3B1KSwgKGxvbmcpKGdyb3VwX2ZkKSwgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGZsYWdzKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3BlcmZfZXZlbnRfb3BlbihyZXMsIGF0dHJfdXB0ciwgcGlkLCBjcHUsIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncm91cF9mZCwgZmxhZ3MpICAgICAgICAgIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfcGVyZl9ldmVudF9vcGVuKCAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIHJlcywgKGxvbmcpKGF0dHJfdXB0ciksIChsb25nKShwaWQpLCAobG9uZykoY3B1KSwgKGxvbmcpKGdyb3VwX2ZkKSwgIFwKLSAgICAgIChsb25nKShmbGFncykpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX21tYXBfcGdvZmYoYWRkciwgbGVuLCBwcm90LCBmbGFncywgZmQsIHBnb2ZmKSBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfbW1hcF9wZ29mZigobG9uZykoYWRkciksIChsb25nKShsZW4pLCAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykocHJvdCksIChsb25nKShmbGFncyksICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoZmQpLCAobG9uZykocGdvZmYpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfbW1hcF9wZ29mZihyZXMsIGFkZHIsIGxlbiwgcHJvdCwgZmxhZ3MsIGZkLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnb2ZmKSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbW1hcF9wZ29mZihyZXMsIChsb25nKShhZGRyKSwgKGxvbmcpKGxlbiksICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShwcm90KSwgKGxvbmcpKGZsYWdzKSwgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGZkKSwgKGxvbmcpKHBnb2ZmKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfb2xkX21tYXAoYXJnKSBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfb2xkX21tYXAoKGxvbmcpKGFyZykpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9vbGRfbW1hcChyZXMsIGFyZykgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9vbGRfbW1hcChyZXMsIChsb25nKShhcmcpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9uYW1lX3RvX2hhbmRsZV9hdChkZmQsIG5hbWUsIGhhbmRsZSwgbW50X2lkLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWcpICAgICAgICAgICAgICAgICAgICAgIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9uYW1lX3RvX2hhbmRsZV9hdCggICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgKGxvbmcpKGRmZCksIChsb25nKShuYW1lKSwgKGxvbmcpKGhhbmRsZSksIChsb25nKShtbnRfaWQpLCAobG9uZykoZmxhZykpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9uYW1lX3RvX2hhbmRsZV9hdChyZXMsIGRmZCwgbmFtZSwgaGFuZGxlLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtbnRfaWQsIGZsYWcpICAgICAgICAgICBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX25hbWVfdG9faGFuZGxlX2F0KCAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICByZXMsIChsb25nKShkZmQpLCAobG9uZykobmFtZSksIChsb25nKShoYW5kbGUpLCAobG9uZykobW50X2lkKSwgICAgICBcCi0gICAgICAobG9uZykoZmxhZykpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX29wZW5fYnlfaGFuZGxlX2F0KG1vdW50ZGlyZmQsIGhhbmRsZSwgZmxhZ3MpIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9vcGVuX2J5X2hhbmRsZV9hdCggICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgKGxvbmcpKG1vdW50ZGlyZmQpLCAobG9uZykoaGFuZGxlKSwgKGxvbmcpKGZsYWdzKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X29wZW5fYnlfaGFuZGxlX2F0KHJlcywgbW91bnRkaXJmZCwgaGFuZGxlLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFncykgICAgICAgICAgICAgICAgICAgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9vcGVuX2J5X2hhbmRsZV9hdCggICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIHJlcywgKGxvbmcpKG1vdW50ZGlyZmQpLCAobG9uZykoaGFuZGxlKSwgKGxvbmcpKGZsYWdzKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfc2V0bnMoZmQsIG5zdHlwZSkgXAotICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NldG5zKChsb25nKShmZCksIChsb25nKShuc3R5cGUpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfc2V0bnMocmVzLCBmZCwgbnN0eXBlKSBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NldG5zKHJlcywgKGxvbmcpKGZkKSwgKGxvbmcpKG5zdHlwZSkpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3Byb2Nlc3Nfdm1fcmVhZHYocGlkLCBsdmVjLCBsaW92Y250LCBydmVjLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmlvdmNudCwgZmxhZ3MpICAgICAgICAgICBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfcHJvY2Vzc192bV9yZWFkdiggICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAobG9uZykocGlkKSwgKGxvbmcpKGx2ZWMpLCAobG9uZykobGlvdmNudCksIChsb25nKShydmVjKSwgICAgICAgICAgICBcCi0gICAgICAobG9uZykocmlvdmNudCksIChsb25nKShmbGFncykpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9wcm9jZXNzX3ZtX3JlYWR2KHJlcywgcGlkLCBsdmVjLCBsaW92Y250LCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ2ZWMsIHJpb3ZjbnQsIGZsYWdzKSAgICBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3Byb2Nlc3Nfdm1fcmVhZHYoICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICByZXMsIChsb25nKShwaWQpLCAobG9uZykobHZlYyksIChsb25nKShsaW92Y250KSwgKGxvbmcpKHJ2ZWMpLCAgICAgICBcCi0gICAgICAobG9uZykocmlvdmNudCksIChsb25nKShmbGFncykpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3Byb2Nlc3Nfdm1fd3JpdGV2KHBpZCwgbHZlYywgbGlvdmNudCwgcnZlYywgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByaW92Y250LCBmbGFncykgICAgICAgICAgIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9wcm9jZXNzX3ZtX3dyaXRldiggICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAobG9uZykocGlkKSwgKGxvbmcpKGx2ZWMpLCAobG9uZykobGlvdmNudCksIChsb25nKShydmVjKSwgICAgICAgICAgICAgXAotICAgICAgKGxvbmcpKHJpb3ZjbnQpLCAobG9uZykoZmxhZ3MpKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfcHJvY2Vzc192bV93cml0ZXYocmVzLCBwaWQsIGx2ZWMsIGxpb3ZjbnQsIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ2ZWMsIHJpb3ZjbnQsIGZsYWdzKSAgICBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3Byb2Nlc3Nfdm1fd3JpdGV2KCAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgcmVzLCAobG9uZykocGlkKSwgKGxvbmcpKGx2ZWMpLCAobG9uZykobGlvdmNudCksIChsb25nKShydmVjKSwgICAgICAgIFwKLSAgICAgIChsb25nKShyaW92Y250KSwgKGxvbmcpKGZsYWdzKSkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfZm9yaygpIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9mb3JrKCkKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ZvcmsocmVzKSBcCi0gIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2ZvcmsocmVzKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV92Zm9yaygpIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF92Zm9yaygpCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF92Zm9yayhyZXMpIFwKLSAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfdmZvcmsocmVzKQotCi0vLyBBbmQgbm93IGEgZmV3IHN5c2NhbGxzIHdlIGRvbid0IGhhbmRsZSB5ZXQuCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2Fmc19zeXNjYWxsKC4uLikKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfYXJjaF9wcmN0bCguLi4pCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2JyZWFrKC4uLikKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfY2hvd24zMiguLi4pCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2Nsb25lKC4uLikKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfY3JlYXRlX21vZHVsZSguLi4pCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2Vwb2xsX2N0bF9vbGQoLi4uKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9lcG9sbF93YWl0X29sZCguLi4pCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2V4ZWN2ZSguLi4pCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ZhZHZpc2U2NCguLi4pCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ZhZHZpc2U2NF82NCguLi4pCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ZhbGxvY2F0ZSguLi4pCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2Zhbm90aWZ5X2luaXQoLi4uKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9mYW5vdGlmeV9tYXJrKC4uLikKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfZmNob3duMzIoLi4uKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9mdGltZSguLi4pCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2Z0cnVuY2F0ZTY0KC4uLikKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfZnV0ZXgoLi4uKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9nZXRlZ2lkMzIoLi4uKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9nZXRldWlkMzIoLi4uKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9nZXRnaWQzMiguLi4pCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2dldGdyb3VwczMyKC4uLikKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfZ2V0X2tlcm5lbF9zeW1zKC4uLikKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfZ2V0cG1zZyguLi4pCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2dldHJlc2dpZDMyKC4uLikKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfZ2V0cmVzdWlkMzIoLi4uKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9nZXRfdGhyZWFkX2FyZWEoLi4uKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9nZXR1aWQzMiguLi4pCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2d0dHkoLi4uKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pZGxlKC4uLikKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW9wbCguLi4pCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2xjaG93bjMyKC4uLikKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfX2xsc2VlayguLi4pCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2xvY2soLi4uKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9tYWR2aXNlMSguLi4pCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX21tYXAoLi4uKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9tbWFwMiguLi4pCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX21vZGlmeV9sZHQoLi4uKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9tcHgoLi4uKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9fbmV3c2VsZWN0KC4uLikKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfbmZzc2VydmN0bCguLi4pCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX29sZGZzdGF0KC4uLikKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfb2xkbHN0YXQoLi4uKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9vbGRvbGR1bmFtZSguLi4pCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX29sZHN0YXQoLi4uKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9wcmN0bCguLi4pCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3Byb2YoLi4uKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9wcm9maWwoLi4uKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9wdXRwbXNnKC4uLikKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfcXVlcnlfbW9kdWxlKC4uLikKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfcmVhZGFoZWFkKC4uLikKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfcmVhZGRpciguLi4pCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3J0X3NpZ2FjdGlvbiguLi4pCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3J0X3NpZ3JldHVybiguLi4pCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3J0X3NpZ3N1c3BlbmQoLi4uKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9zZWN1cml0eSguLi4pCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3NldGZzZ2lkMzIoLi4uKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9zZXRmc3VpZDMyKC4uLikKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfc2V0Z2lkMzIoLi4uKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9zZXRncm91cHMzMiguLi4pCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3NldHJlZ2lkMzIoLi4uKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9zZXRyZXNnaWQzMiguLi4pCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3NldHJlc3VpZDMyKC4uLikKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfc2V0cmV1aWQzMiguLi4pCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3NldF90aHJlYWRfYXJlYSguLi4pCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3NldHVpZDMyKC4uLikKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfc2lnYWN0aW9uKC4uLikKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfc2lnYWx0c3RhY2soLi4uKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9zaWdyZXR1cm4oLi4uKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9zaWdzdXNwZW5kKC4uLikKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfc3R0eSguLi4pCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3N5bmNfZmlsZV9yYW5nZSguLi4pCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX19zeXNjdGwoLi4uKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV90cnVuY2F0ZTY0KC4uLikKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfdHV4Y2FsbCguLi4pCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3VnZXRybGltaXQoLi4uKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV91bGltaXQoLi4uKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV91bW91bnQyKC4uLikKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfdm04NiguLi4pCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3ZtODZvbGQoLi4uKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV92c2VydmVyKC4uLikKLQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfYWZzX3N5c2NhbGwocmVzLCAuLi4pCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9hcmNoX3ByY3RsKHJlcywgLi4uKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfYnJlYWsocmVzLCAuLi4pCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9jaG93bjMyKHJlcywgLi4uKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfY2xvbmUocmVzLCAuLi4pCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9jcmVhdGVfbW9kdWxlKHJlcywgLi4uKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfZXBvbGxfY3RsX29sZChyZXMsIC4uLikKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2Vwb2xsX3dhaXRfb2xkKHJlcywgLi4uKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfZXhlY3ZlKHJlcywgLi4uKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfZmFkdmlzZTY0KHJlcywgLi4uKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfZmFkdmlzZTY0XzY0KHJlcywgLi4uKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfZmFsbG9jYXRlKHJlcywgLi4uKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfZmFub3RpZnlfaW5pdChyZXMsIC4uLikKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2Zhbm90aWZ5X21hcmsocmVzLCAuLi4pCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9mY2hvd24zMihyZXMsIC4uLikKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2Z0aW1lKHJlcywgLi4uKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfZnRydW5jYXRlNjQocmVzLCAuLi4pCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9mdXRleChyZXMsIC4uLikKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2dldGVnaWQzMihyZXMsIC4uLikKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2dldGV1aWQzMihyZXMsIC4uLikKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2dldGdpZDMyKHJlcywgLi4uKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfZ2V0Z3JvdXBzMzIocmVzLCAuLi4pCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9nZXRfa2VybmVsX3N5bXMocmVzLCAuLi4pCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9nZXRwbXNnKHJlcywgLi4uKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfZ2V0cmVzZ2lkMzIocmVzLCAuLi4pCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9nZXRyZXN1aWQzMihyZXMsIC4uLikKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2dldF90aHJlYWRfYXJlYShyZXMsIC4uLikKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2dldHVpZDMyKHJlcywgLi4uKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfZ3R0eShyZXMsIC4uLikKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2lkbGUocmVzLCAuLi4pCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pb3BsKHJlcywgLi4uKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfbGNob3duMzIocmVzLCAuLi4pCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9fbGxzZWVrKHJlcywgLi4uKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfbG9jayhyZXMsIC4uLikKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X21hZHZpc2UxKHJlcywgLi4uKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfbW1hcDIocmVzLCAuLi4pCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9tbWFwKHJlcywgLi4uKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfbW9kaWZ5X2xkdChyZXMsIC4uLikKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X21weChyZXMsIC4uLikKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X19uZXdzZWxlY3QocmVzLCAuLi4pCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9uZnNzZXJ2Y3RsKHJlcywgLi4uKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfb2xkZnN0YXQocmVzLCAuLi4pCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9vbGRsc3RhdChyZXMsIC4uLikKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X29sZG9sZHVuYW1lKHJlcywgLi4uKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfb2xkc3RhdChyZXMsIC4uLikKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3ByY3RsKHJlcywgLi4uKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfcHJvZmlsKHJlcywgLi4uKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfcHJvZihyZXMsIC4uLikKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3B1dHBtc2cocmVzLCAuLi4pCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9xdWVyeV9tb2R1bGUocmVzLCAuLi4pCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9yZWFkYWhlYWQocmVzLCAuLi4pCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9yZWFkZGlyKHJlcywgLi4uKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfcnRfc2lnYWN0aW9uKHJlcywgLi4uKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfcnRfc2lncmV0dXJuKHJlcywgLi4uKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfcnRfc2lnc3VzcGVuZChyZXMsIC4uLikKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3NlY3VyaXR5KHJlcywgLi4uKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfc2V0ZnNnaWQzMihyZXMsIC4uLikKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3NldGZzdWlkMzIocmVzLCAuLi4pCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9zZXRnaWQzMihyZXMsIC4uLikKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3NldGdyb3VwczMyKHJlcywgLi4uKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfc2V0cmVnaWQzMihyZXMsIC4uLikKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3NldHJlc2dpZDMyKHJlcywgLi4uKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfc2V0cmVzdWlkMzIocmVzLCAuLi4pCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9zZXRyZXVpZDMyKHJlcywgLi4uKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfc2V0X3RocmVhZF9hcmVhKHJlcywgLi4uKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfc2V0dWlkMzIocmVzLCAuLi4pCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9zaWdhY3Rpb24ocmVzLCAuLi4pCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9zaWdhbHRzdGFjayhyZXMsIC4uLikKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3NpZ3JldHVybihyZXMsIC4uLikKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3NpZ3N1c3BlbmQocmVzLCAuLi4pCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9zdHR5KHJlcywgLi4uKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfc3luY19maWxlX3JhbmdlKHJlcywgLi4uKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfX3N5c2N0bChyZXMsIC4uLikKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3RydW5jYXRlNjQocmVzLCAuLi4pCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF90dXhjYWxsKHJlcywgLi4uKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfdWdldHJsaW1pdChyZXMsIC4uLikKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3VsaW1pdChyZXMsIC4uLikKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3Vtb3VudDIocmVzLCAuLi4pCi0jZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF92bTg2b2xkKHJlcywgLi4uKQotI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfdm04NihyZXMsIC4uLikKLSNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3ZzZXJ2ZXIocmVzLCAuLi4pCi0KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIiB7Ci0jZW5kaWYKLQotLy8gUHJpdmF0ZSBkZWNsYXJhdGlvbnMuIERvIG5vdCBjYWxsIGRpcmVjdGx5IGZyb20gdXNlciBjb2RlLiBVc2UgbWFjcm9zIGFib3ZlLgotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3RpbWUobG9uZyB0bG9jKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfdGltZShsb25nIHJlcywgbG9uZyB0bG9jKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zdGltZShsb25nIHRwdHIpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zdGltZShsb25nIHJlcywgbG9uZyB0cHRyKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9nZXR0aW1lb2ZkYXkobG9uZyB0diwgbG9uZyB0eik7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2dldHRpbWVvZmRheShsb25nIHJlcywgbG9uZyB0diwgbG9uZyB0eik7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2V0dGltZW9mZGF5KGxvbmcgdHYsIGxvbmcgdHopOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zZXR0aW1lb2ZkYXkobG9uZyByZXMsIGxvbmcgdHYsIGxvbmcgdHopOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2FkanRpbWV4KGxvbmcgdHhjX3ApOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9hZGp0aW1leChsb25nIHJlcywgbG9uZyB0eGNfcCk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfdGltZXMobG9uZyB0YnVmKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfdGltZXMobG9uZyByZXMsIGxvbmcgdGJ1Zik7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZ2V0dGlkKCk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2dldHRpZChsb25nIHJlcyk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfbmFub3NsZWVwKGxvbmcgcnF0cCwgbG9uZyBybXRwKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbmFub3NsZWVwKGxvbmcgcmVzLCBsb25nIHJxdHAsIGxvbmcgcm10cCk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfYWxhcm0obG9uZyBzZWNvbmRzKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfYWxhcm0obG9uZyByZXMsIGxvbmcgc2Vjb25kcyk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZ2V0cGlkKCk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2dldHBpZChsb25nIHJlcyk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZ2V0cHBpZCgpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9nZXRwcGlkKGxvbmcgcmVzKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9nZXR1aWQoKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZ2V0dWlkKGxvbmcgcmVzKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9nZXRldWlkKCk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2dldGV1aWQobG9uZyByZXMpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2dldGdpZCgpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9nZXRnaWQobG9uZyByZXMpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2dldGVnaWQoKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZ2V0ZWdpZChsb25nIHJlcyk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZ2V0cmVzdWlkKGxvbmcgcnVpZCwgbG9uZyBldWlkLCBsb25nIHN1aWQpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9nZXRyZXN1aWQobG9uZyByZXMsIGxvbmcgcnVpZCwgbG9uZyBldWlkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBzdWlkKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9nZXRyZXNnaWQobG9uZyByZ2lkLCBsb25nIGVnaWQsIGxvbmcgc2dpZCk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2dldHJlc2dpZChsb25nIHJlcywgbG9uZyByZ2lkLCBsb25nIGVnaWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHNnaWQpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2dldHBnaWQobG9uZyBwaWQpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9nZXRwZ2lkKGxvbmcgcmVzLCBsb25nIHBpZCk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZ2V0cGdycCgpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9nZXRwZ3JwKGxvbmcgcmVzKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9nZXRzaWQobG9uZyBwaWQpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9nZXRzaWQobG9uZyByZXMsIGxvbmcgcGlkKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9nZXRncm91cHMobG9uZyBnaWRzZXRzaXplLCBsb25nIGdyb3VwbGlzdCk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2dldGdyb3Vwcyhsb25nIHJlcywgbG9uZyBnaWRzZXRzaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBncm91cGxpc3QpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NldHJlZ2lkKGxvbmcgcmdpZCwgbG9uZyBlZ2lkKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2V0cmVnaWQobG9uZyByZXMsIGxvbmcgcmdpZCwgbG9uZyBlZ2lkKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zZXRnaWQobG9uZyBnaWQpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zZXRnaWQobG9uZyByZXMsIGxvbmcgZ2lkKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zZXRyZXVpZChsb25nIHJ1aWQsIGxvbmcgZXVpZCk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NldHJldWlkKGxvbmcgcmVzLCBsb25nIHJ1aWQsIGxvbmcgZXVpZCk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2V0dWlkKGxvbmcgdWlkKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2V0dWlkKGxvbmcgcmVzLCBsb25nIHVpZCk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2V0cmVzdWlkKGxvbmcgcnVpZCwgbG9uZyBldWlkLCBsb25nIHN1aWQpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zZXRyZXN1aWQobG9uZyByZXMsIGxvbmcgcnVpZCwgbG9uZyBldWlkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBzdWlkKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zZXRyZXNnaWQobG9uZyByZ2lkLCBsb25nIGVnaWQsIGxvbmcgc2dpZCk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NldHJlc2dpZChsb25nIHJlcywgbG9uZyByZ2lkLCBsb25nIGVnaWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHNnaWQpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NldGZzdWlkKGxvbmcgdWlkKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2V0ZnN1aWQobG9uZyByZXMsIGxvbmcgdWlkKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zZXRmc2dpZChsb25nIGdpZCk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NldGZzZ2lkKGxvbmcgcmVzLCBsb25nIGdpZCk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2V0cGdpZChsb25nIHBpZCwgbG9uZyBwZ2lkKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2V0cGdpZChsb25nIHJlcywgbG9uZyBwaWQsIGxvbmcgcGdpZCk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2V0c2lkKCk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NldHNpZChsb25nIHJlcyk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2V0Z3JvdXBzKGxvbmcgZ2lkc2V0c2l6ZSwgbG9uZyBncm91cGxpc3QpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zZXRncm91cHMobG9uZyByZXMsIGxvbmcgZ2lkc2V0c2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZ3JvdXBsaXN0KTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9hY2N0KGxvbmcgbmFtZSk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2FjY3QobG9uZyByZXMsIGxvbmcgbmFtZSk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfY2FwZ2V0KGxvbmcgaGVhZGVyLCBsb25nIGRhdGFwdHIpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9jYXBnZXQobG9uZyByZXMsIGxvbmcgaGVhZGVyLCBsb25nIGRhdGFwdHIpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2NhcHNldChsb25nIGhlYWRlciwgbG9uZyBkYXRhKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfY2Fwc2V0KGxvbmcgcmVzLCBsb25nIGhlYWRlciwgbG9uZyBkYXRhKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9wZXJzb25hbGl0eShsb25nIHBlcnNvbmFsaXR5KTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfcGVyc29uYWxpdHkobG9uZyByZXMsIGxvbmcgcGVyc29uYWxpdHkpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NpZ3BlbmRpbmcobG9uZyBzZXQpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zaWdwZW5kaW5nKGxvbmcgcmVzLCBsb25nIHNldCk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2lncHJvY21hc2sobG9uZyBob3csIGxvbmcgc2V0LCBsb25nIG9zZXQpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zaWdwcm9jbWFzayhsb25nIHJlcywgbG9uZyBob3csIGxvbmcgc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIG9zZXQpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2dldGl0aW1lcihsb25nIHdoaWNoLCBsb25nIHZhbHVlKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZ2V0aXRpbWVyKGxvbmcgcmVzLCBsb25nIHdoaWNoLCBsb25nIHZhbHVlKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zZXRpdGltZXIobG9uZyB3aGljaCwgbG9uZyB2YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBvdmFsdWUpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zZXRpdGltZXIobG9uZyByZXMsIGxvbmcgd2hpY2gsIGxvbmcgdmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIG92YWx1ZSk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfdGltZXJfY3JlYXRlKGxvbmcgd2hpY2hfY2xvY2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgdGltZXJfZXZlbnRfc3BlYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBjcmVhdGVkX3RpbWVyX2lkKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfdGltZXJfY3JlYXRlKGxvbmcgcmVzLCBsb25nIHdoaWNoX2Nsb2NrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyB0aW1lcl9ldmVudF9zcGVjLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBjcmVhdGVkX3RpbWVyX2lkKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF90aW1lcl9nZXR0aW1lKGxvbmcgdGltZXJfaWQsIGxvbmcgc2V0dGluZyk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3RpbWVyX2dldHRpbWUobG9uZyByZXMsIGxvbmcgdGltZXJfaWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBzZXR0aW5nKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF90aW1lcl9nZXRvdmVycnVuKGxvbmcgdGltZXJfaWQpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF90aW1lcl9nZXRvdmVycnVuKGxvbmcgcmVzLCBsb25nIHRpbWVyX2lkKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF90aW1lcl9zZXR0aW1lKGxvbmcgdGltZXJfaWQsIGxvbmcgZmxhZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIG5ld19zZXR0aW5nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBvbGRfc2V0dGluZyk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3RpbWVyX3NldHRpbWUobG9uZyByZXMsIGxvbmcgdGltZXJfaWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBmbGFncywgbG9uZyBuZXdfc2V0dGluZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIG9sZF9zZXR0aW5nKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF90aW1lcl9kZWxldGUobG9uZyB0aW1lcl9pZCk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3RpbWVyX2RlbGV0ZShsb25nIHJlcywgbG9uZyB0aW1lcl9pZCk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfY2xvY2tfc2V0dGltZShsb25nIHdoaWNoX2Nsb2NrLCBsb25nIHRwKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfY2xvY2tfc2V0dGltZShsb25nIHJlcywgbG9uZyB3aGljaF9jbG9jaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHRwKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9jbG9ja19nZXR0aW1lKGxvbmcgd2hpY2hfY2xvY2ssIGxvbmcgdHApOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9jbG9ja19nZXR0aW1lKGxvbmcgcmVzLCBsb25nIHdoaWNoX2Nsb2NrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgdHApOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2Nsb2NrX2FkanRpbWUobG9uZyB3aGljaF9jbG9jaywgbG9uZyB0eCk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2Nsb2NrX2FkanRpbWUobG9uZyByZXMsIGxvbmcgd2hpY2hfY2xvY2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyB0eCk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfY2xvY2tfZ2V0cmVzKGxvbmcgd2hpY2hfY2xvY2ssIGxvbmcgdHApOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9jbG9ja19nZXRyZXMobG9uZyByZXMsIGxvbmcgd2hpY2hfY2xvY2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHRwKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9jbG9ja19uYW5vc2xlZXAobG9uZyB3aGljaF9jbG9jaywgbG9uZyBmbGFncywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBycXRwLCBsb25nIHJtdHApOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9jbG9ja19uYW5vc2xlZXAobG9uZyByZXMsIGxvbmcgd2hpY2hfY2xvY2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGZsYWdzLCBsb25nIHJxdHAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHJtdHApOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX25pY2UobG9uZyBpbmNyZW1lbnQpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9uaWNlKGxvbmcgcmVzLCBsb25nIGluY3JlbWVudCk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2NoZWRfc2V0c2NoZWR1bGVyKGxvbmcgcGlkLCBsb25nIHBvbGljeSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBwYXJhbSk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NjaGVkX3NldHNjaGVkdWxlcihsb25nIHJlcywgbG9uZyBwaWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHBvbGljeSwgbG9uZyBwYXJhbSk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2NoZWRfc2V0cGFyYW0obG9uZyBwaWQsIGxvbmcgcGFyYW0pOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zY2hlZF9zZXRwYXJhbShsb25nIHJlcywgbG9uZyBwaWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgcGFyYW0pOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NjaGVkX2dldHNjaGVkdWxlcihsb25nIHBpZCk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NjaGVkX2dldHNjaGVkdWxlcihsb25nIHJlcywgbG9uZyBwaWQpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NjaGVkX2dldHBhcmFtKGxvbmcgcGlkLCBsb25nIHBhcmFtKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2NoZWRfZ2V0cGFyYW0obG9uZyByZXMsIGxvbmcgcGlkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHBhcmFtKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zY2hlZF9zZXRhZmZpbml0eShsb25nIHBpZCwgbG9uZyBsZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyB1c2VyX21hc2tfcHRyKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2NoZWRfc2V0YWZmaW5pdHkobG9uZyByZXMsIGxvbmcgcGlkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyB1c2VyX21hc2tfcHRyKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zY2hlZF9nZXRhZmZpbml0eShsb25nIHBpZCwgbG9uZyBsZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyB1c2VyX21hc2tfcHRyKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2NoZWRfZ2V0YWZmaW5pdHkobG9uZyByZXMsIGxvbmcgcGlkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyB1c2VyX21hc2tfcHRyKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zY2hlZF95aWVsZCgpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zY2hlZF95aWVsZChsb25nIHJlcyk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2NoZWRfZ2V0X3ByaW9yaXR5X21heChsb25nIHBvbGljeSk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NjaGVkX2dldF9wcmlvcml0eV9tYXgobG9uZyByZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBwb2xpY3kpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NjaGVkX2dldF9wcmlvcml0eV9taW4obG9uZyBwb2xpY3kpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zY2hlZF9nZXRfcHJpb3JpdHlfbWluKGxvbmcgcmVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgcG9saWN5KTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zY2hlZF9ycl9nZXRfaW50ZXJ2YWwobG9uZyBwaWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgaW50ZXJ2YWwpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zY2hlZF9ycl9nZXRfaW50ZXJ2YWwobG9uZyByZXMsIGxvbmcgcGlkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBpbnRlcnZhbCk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2V0cHJpb3JpdHkobG9uZyB3aGljaCwgbG9uZyB3aG8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBuaWNldmFsKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2V0cHJpb3JpdHkobG9uZyByZXMsIGxvbmcgd2hpY2gsIGxvbmcgd2hvLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIG5pY2V2YWwpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2dldHByaW9yaXR5KGxvbmcgd2hpY2gsIGxvbmcgd2hvKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZ2V0cHJpb3JpdHkobG9uZyByZXMsIGxvbmcgd2hpY2gsIGxvbmcgd2hvKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zaHV0ZG93bihsb25nIGFyZzAsIGxvbmcgYXJnMSk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NodXRkb3duKGxvbmcgcmVzLCBsb25nIGFyZzAsIGxvbmcgYXJnMSk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfcmVib290KGxvbmcgbWFnaWMxLCBsb25nIG1hZ2ljMiwgbG9uZyBjbWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgYXJnKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfcmVib290KGxvbmcgcmVzLCBsb25nIG1hZ2ljMSwgbG9uZyBtYWdpYzIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGNtZCwgbG9uZyBhcmcpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3Jlc3RhcnRfc3lzY2FsbCgpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9yZXN0YXJ0X3N5c2NhbGwobG9uZyByZXMpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2tleGVjX2xvYWQobG9uZyBlbnRyeSwgbG9uZyBucl9zZWdtZW50cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgc2VnbWVudHMsIGxvbmcgZmxhZ3MpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9rZXhlY19sb2FkKGxvbmcgcmVzLCBsb25nIGVudHJ5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgbnJfc2VnbWVudHMsIGxvbmcgc2VnbWVudHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBmbGFncyk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZXhpdChsb25nIGVycm9yX2NvZGUpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9leGl0KGxvbmcgcmVzLCBsb25nIGVycm9yX2NvZGUpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2V4aXRfZ3JvdXAobG9uZyBlcnJvcl9jb2RlKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZXhpdF9ncm91cChsb25nIHJlcywgbG9uZyBlcnJvcl9jb2RlKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF93YWl0NChsb25nIHBpZCwgbG9uZyBzdGF0X2FkZHIsIGxvbmcgb3B0aW9ucywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHJ1KTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfd2FpdDQobG9uZyByZXMsIGxvbmcgcGlkLCBsb25nIHN0YXRfYWRkciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBvcHRpb25zLCBsb25nIHJ1KTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF93YWl0aWQobG9uZyB3aGljaCwgbG9uZyBwaWQsIGxvbmcgaW5mb3AsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgb3B0aW9ucywgbG9uZyBydSk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3dhaXRpZChsb25nIHJlcywgbG9uZyB3aGljaCwgbG9uZyBwaWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGluZm9wLCBsb25nIG9wdGlvbnMsIGxvbmcgcnUpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3dhaXRwaWQobG9uZyBwaWQsIGxvbmcgc3RhdF9hZGRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBvcHRpb25zKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfd2FpdHBpZChsb25nIHJlcywgbG9uZyBwaWQsIGxvbmcgc3RhdF9hZGRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgb3B0aW9ucyk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2V0X3RpZF9hZGRyZXNzKGxvbmcgdGlkcHRyKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2V0X3RpZF9hZGRyZXNzKGxvbmcgcmVzLCBsb25nIHRpZHB0cik7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfaW5pdF9tb2R1bGUobG9uZyB1bW9kLCBsb25nIGxlbiwgbG9uZyB1YXJncyk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2luaXRfbW9kdWxlKGxvbmcgcmVzLCBsb25nIHVtb2QsIGxvbmcgbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHVhcmdzKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9kZWxldGVfbW9kdWxlKGxvbmcgbmFtZV91c2VyLCBsb25nIGZsYWdzKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZGVsZXRlX21vZHVsZShsb25nIHJlcywgbG9uZyBuYW1lX3VzZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBmbGFncyk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfcnRfc2lncHJvY21hc2sobG9uZyBob3csIGxvbmcgc2V0LCBsb25nIG9zZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBzaWdzZXRzaXplKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfcnRfc2lncHJvY21hc2sobG9uZyByZXMsIGxvbmcgaG93LCBsb25nIHNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBvc2V0LCBsb25nIHNpZ3NldHNpemUpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3J0X3NpZ3BlbmRpbmcobG9uZyBzZXQsIGxvbmcgc2lnc2V0c2l6ZSk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3J0X3NpZ3BlbmRpbmcobG9uZyByZXMsIGxvbmcgc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgc2lnc2V0c2l6ZSk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfcnRfc2lndGltZWR3YWl0KGxvbmcgdXRoZXNlLCBsb25nIHVpbmZvLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHV0cywgbG9uZyBzaWdzZXRzaXplKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfcnRfc2lndGltZWR3YWl0KGxvbmcgcmVzLCBsb25nIHV0aGVzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgdWluZm8sIGxvbmcgdXRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBzaWdzZXRzaXplKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9ydF90Z3NpZ3F1ZXVlaW5mbyhsb25nIHRnaWQsIGxvbmcgcGlkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgc2lnLCBsb25nIHVpbmZvKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfcnRfdGdzaWdxdWV1ZWluZm8obG9uZyByZXMsIGxvbmcgdGdpZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBwaWQsIGxvbmcgc2lnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHVpbmZvKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9raWxsKGxvbmcgcGlkLCBsb25nIHNpZyk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2tpbGwobG9uZyByZXMsIGxvbmcgcGlkLCBsb25nIHNpZyk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfdGdraWxsKGxvbmcgdGdpZCwgbG9uZyBwaWQsIGxvbmcgc2lnKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfdGdraWxsKGxvbmcgcmVzLCBsb25nIHRnaWQsIGxvbmcgcGlkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBzaWcpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3RraWxsKGxvbmcgcGlkLCBsb25nIHNpZyk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3RraWxsKGxvbmcgcmVzLCBsb25nIHBpZCwgbG9uZyBzaWcpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3J0X3NpZ3F1ZXVlaW5mbyhsb25nIHBpZCwgbG9uZyBzaWcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgdWluZm8pOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9ydF9zaWdxdWV1ZWluZm8obG9uZyByZXMsIGxvbmcgcGlkLCBsb25nIHNpZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgdWluZm8pOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NnZXRtYXNrKCk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NnZXRtYXNrKGxvbmcgcmVzKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zc2V0bWFzayhsb25nIG5ld21hc2spOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zc2V0bWFzayhsb25nIHJlcywgbG9uZyBuZXdtYXNrKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zaWduYWwobG9uZyBzaWcsIGxvbmcgaGFuZGxlcik7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NpZ25hbChsb25nIHJlcywgbG9uZyBzaWcsIGxvbmcgaGFuZGxlcik7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfcGF1c2UoKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfcGF1c2UobG9uZyByZXMpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3N5bmMoKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc3luYyhsb25nIHJlcyk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZnN5bmMobG9uZyBmZCk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2ZzeW5jKGxvbmcgcmVzLCBsb25nIGZkKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9mZGF0YXN5bmMobG9uZyBmZCk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2ZkYXRhc3luYyhsb25nIHJlcywgbG9uZyBmZCk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfYmRmbHVzaChsb25nIGZ1bmMsIGxvbmcgZGF0YSk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2JkZmx1c2gobG9uZyByZXMsIGxvbmcgZnVuYywgbG9uZyBkYXRhKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9tb3VudChsb25nIGRldl9uYW1lLCBsb25nIGRpcl9uYW1lLCBsb25nIHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBmbGFncywgbG9uZyBkYXRhKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbW91bnQobG9uZyByZXMsIGxvbmcgZGV2X25hbWUsIGxvbmcgZGlyX25hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgdHlwZSwgbG9uZyBmbGFncywgbG9uZyBkYXRhKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF91bW91bnQobG9uZyBuYW1lLCBsb25nIGZsYWdzKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfdW1vdW50KGxvbmcgcmVzLCBsb25nIG5hbWUsIGxvbmcgZmxhZ3MpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX29sZHVtb3VudChsb25nIG5hbWUpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9vbGR1bW91bnQobG9uZyByZXMsIGxvbmcgbmFtZSk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfdHJ1bmNhdGUobG9uZyBwYXRoLCBsb25nIGxlbmd0aCk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3RydW5jYXRlKGxvbmcgcmVzLCBsb25nIHBhdGgsIGxvbmcgbGVuZ3RoKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9mdHJ1bmNhdGUobG9uZyBmZCwgbG9uZyBsZW5ndGgpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9mdHJ1bmNhdGUobG9uZyByZXMsIGxvbmcgZmQsIGxvbmcgbGVuZ3RoKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zdGF0KGxvbmcgZmlsZW5hbWUsIGxvbmcgc3RhdGJ1Zik7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3N0YXQobG9uZyByZXMsIGxvbmcgZmlsZW5hbWUsIGxvbmcgc3RhdGJ1Zik7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc3RhdGZzKGxvbmcgcGF0aCwgbG9uZyBidWYpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zdGF0ZnMobG9uZyByZXMsIGxvbmcgcGF0aCwgbG9uZyBidWYpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3N0YXRmczY0KGxvbmcgcGF0aCwgbG9uZyBzeiwgbG9uZyBidWYpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zdGF0ZnM2NChsb25nIHJlcywgbG9uZyBwYXRoLCBsb25nIHN6LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGJ1Zik7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZnN0YXRmcyhsb25nIGZkLCBsb25nIGJ1Zik7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2ZzdGF0ZnMobG9uZyByZXMsIGxvbmcgZmQsIGxvbmcgYnVmKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9mc3RhdGZzNjQobG9uZyBmZCwgbG9uZyBzeiwgbG9uZyBidWYpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9mc3RhdGZzNjQobG9uZyByZXMsIGxvbmcgZmQsIGxvbmcgc3osCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGJ1Zik7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfbHN0YXQobG9uZyBmaWxlbmFtZSwgbG9uZyBzdGF0YnVmKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbHN0YXQobG9uZyByZXMsIGxvbmcgZmlsZW5hbWUsIGxvbmcgc3RhdGJ1Zik7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZnN0YXQobG9uZyBmZCwgbG9uZyBzdGF0YnVmKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZnN0YXQobG9uZyByZXMsIGxvbmcgZmQsIGxvbmcgc3RhdGJ1Zik7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfbmV3c3RhdChsb25nIGZpbGVuYW1lLCBsb25nIHN0YXRidWYpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9uZXdzdGF0KGxvbmcgcmVzLCBsb25nIGZpbGVuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgc3RhdGJ1Zik7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfbmV3bHN0YXQobG9uZyBmaWxlbmFtZSwgbG9uZyBzdGF0YnVmKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbmV3bHN0YXQobG9uZyByZXMsIGxvbmcgZmlsZW5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgc3RhdGJ1Zik7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfbmV3ZnN0YXQobG9uZyBmZCwgbG9uZyBzdGF0YnVmKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbmV3ZnN0YXQobG9uZyByZXMsIGxvbmcgZmQsIGxvbmcgc3RhdGJ1Zik7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfdXN0YXQobG9uZyBkZXYsIGxvbmcgdWJ1Zik7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3VzdGF0KGxvbmcgcmVzLCBsb25nIGRldiwgbG9uZyB1YnVmKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zdGF0NjQobG9uZyBmaWxlbmFtZSwgbG9uZyBzdGF0YnVmKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc3RhdDY0KGxvbmcgcmVzLCBsb25nIGZpbGVuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBzdGF0YnVmKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9mc3RhdDY0KGxvbmcgZmQsIGxvbmcgc3RhdGJ1Zik7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2ZzdGF0NjQobG9uZyByZXMsIGxvbmcgZmQsIGxvbmcgc3RhdGJ1Zik7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfbHN0YXQ2NChsb25nIGZpbGVuYW1lLCBsb25nIHN0YXRidWYpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9sc3RhdDY0KGxvbmcgcmVzLCBsb25nIGZpbGVuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgc3RhdGJ1Zik7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2V0eGF0dHIobG9uZyBwYXRoLCBsb25nIG5hbWUsIGxvbmcgdmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBzaXplLCBsb25nIGZsYWdzKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2V0eGF0dHIobG9uZyByZXMsIGxvbmcgcGF0aCwgbG9uZyBuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHZhbHVlLCBsb25nIHNpemUsIGxvbmcgZmxhZ3MpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2xzZXR4YXR0cihsb25nIHBhdGgsIGxvbmcgbmFtZSwgbG9uZyB2YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBzaXplLCBsb25nIGZsYWdzKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbHNldHhhdHRyKGxvbmcgcmVzLCBsb25nIHBhdGgsIGxvbmcgbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgdmFsdWUsIGxvbmcgc2l6ZSwgbG9uZyBmbGFncyk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZnNldHhhdHRyKGxvbmcgZmQsIGxvbmcgbmFtZSwgbG9uZyB2YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBzaXplLCBsb25nIGZsYWdzKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZnNldHhhdHRyKGxvbmcgcmVzLCBsb25nIGZkLCBsb25nIG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHZhbHVlLCBsb25nIHNpemUsIGxvbmcgZmxhZ3MpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2dldHhhdHRyKGxvbmcgcGF0aCwgbG9uZyBuYW1lLCBsb25nIHZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgc2l6ZSk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2dldHhhdHRyKGxvbmcgcmVzLCBsb25nIHBhdGgsIGxvbmcgbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyB2YWx1ZSwgbG9uZyBzaXplKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9sZ2V0eGF0dHIobG9uZyBwYXRoLCBsb25nIG5hbWUsIGxvbmcgdmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgc2l6ZSk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2xnZXR4YXR0cihsb25nIHJlcywgbG9uZyBwYXRoLCBsb25nIG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHZhbHVlLCBsb25nIHNpemUpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2ZnZXR4YXR0cihsb25nIGZkLCBsb25nIG5hbWUsIGxvbmcgdmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgc2l6ZSk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2ZnZXR4YXR0cihsb25nIHJlcywgbG9uZyBmZCwgbG9uZyBuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyB2YWx1ZSwgbG9uZyBzaXplKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9saXN0eGF0dHIobG9uZyBwYXRoLCBsb25nIGxpc3QsIGxvbmcgc2l6ZSk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2xpc3R4YXR0cihsb25nIHJlcywgbG9uZyBwYXRoLCBsb25nIGxpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHNpemUpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2xsaXN0eGF0dHIobG9uZyBwYXRoLCBsb25nIGxpc3QsIGxvbmcgc2l6ZSk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2xsaXN0eGF0dHIobG9uZyByZXMsIGxvbmcgcGF0aCwgbG9uZyBsaXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgc2l6ZSk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZmxpc3R4YXR0cihsb25nIGZkLCBsb25nIGxpc3QsIGxvbmcgc2l6ZSk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2ZsaXN0eGF0dHIobG9uZyByZXMsIGxvbmcgZmQsIGxvbmcgbGlzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHNpemUpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3JlbW92ZXhhdHRyKGxvbmcgcGF0aCwgbG9uZyBuYW1lKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfcmVtb3ZleGF0dHIobG9uZyByZXMsIGxvbmcgcGF0aCwgbG9uZyBuYW1lKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9scmVtb3ZleGF0dHIobG9uZyBwYXRoLCBsb25nIG5hbWUpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9scmVtb3ZleGF0dHIobG9uZyByZXMsIGxvbmcgcGF0aCwgbG9uZyBuYW1lKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9mcmVtb3ZleGF0dHIobG9uZyBmZCwgbG9uZyBuYW1lKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZnJlbW92ZXhhdHRyKGxvbmcgcmVzLCBsb25nIGZkLCBsb25nIG5hbWUpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2Jyayhsb25nIGJyayk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2Jyayhsb25nIHJlcywgbG9uZyBicmspOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX21wcm90ZWN0KGxvbmcgc3RhcnQsIGxvbmcgbGVuLCBsb25nIHByb3QpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9tcHJvdGVjdChsb25nIHJlcywgbG9uZyBzdGFydCwgbG9uZyBsZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgcHJvdCk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfbXJlbWFwKGxvbmcgYWRkciwgbG9uZyBvbGRfbGVuLCBsb25nIG5ld19sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZmxhZ3MsIGxvbmcgbmV3X2FkZHIpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9tcmVtYXAobG9uZyByZXMsIGxvbmcgYWRkciwgbG9uZyBvbGRfbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBuZXdfbGVuLCBsb25nIGZsYWdzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBuZXdfYWRkcik7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfcmVtYXBfZmlsZV9wYWdlcyhsb25nIHN0YXJ0LCBsb25nIHNpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHByb3QsIGxvbmcgcGdvZmYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGZsYWdzKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfcmVtYXBfZmlsZV9wYWdlcyhsb25nIHJlcywgbG9uZyBzdGFydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHNpemUsIGxvbmcgcHJvdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHBnb2ZmLCBsb25nIGZsYWdzKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9tc3luYyhsb25nIHN0YXJ0LCBsb25nIGxlbiwgbG9uZyBmbGFncyk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX21zeW5jKGxvbmcgcmVzLCBsb25nIHN0YXJ0LCBsb25nIGxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBmbGFncyk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfbXVubWFwKGxvbmcgYWRkciwgbG9uZyBsZW4pOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9tdW5tYXAobG9uZyByZXMsIGxvbmcgYWRkciwgbG9uZyBsZW4pOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX21sb2NrKGxvbmcgc3RhcnQsIGxvbmcgbGVuKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbWxvY2sobG9uZyByZXMsIGxvbmcgc3RhcnQsIGxvbmcgbGVuKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9tdW5sb2NrKGxvbmcgc3RhcnQsIGxvbmcgbGVuKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbXVubG9jayhsb25nIHJlcywgbG9uZyBzdGFydCwgbG9uZyBsZW4pOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX21sb2NrYWxsKGxvbmcgZmxhZ3MpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9tbG9ja2FsbChsb25nIHJlcywgbG9uZyBmbGFncyk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfbXVubG9ja2FsbCgpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9tdW5sb2NrYWxsKGxvbmcgcmVzKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9tYWR2aXNlKGxvbmcgc3RhcnQsIGxvbmcgbGVuLCBsb25nIGJlaGF2aW9yKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbWFkdmlzZShsb25nIHJlcywgbG9uZyBzdGFydCwgbG9uZyBsZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBiZWhhdmlvcik7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfbWluY29yZShsb25nIHN0YXJ0LCBsb25nIGxlbiwgbG9uZyB2ZWMpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9taW5jb3JlKGxvbmcgcmVzLCBsb25nIHN0YXJ0LCBsb25nIGxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHZlYyk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfcGl2b3Rfcm9vdChsb25nIG5ld19yb290LCBsb25nIHB1dF9vbGQpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9waXZvdF9yb290KGxvbmcgcmVzLCBsb25nIG5ld19yb290LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgcHV0X29sZCk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfY2hyb290KGxvbmcgZmlsZW5hbWUpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9jaHJvb3QobG9uZyByZXMsIGxvbmcgZmlsZW5hbWUpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX21rbm9kKGxvbmcgZmlsZW5hbWUsIGxvbmcgbW9kZSwgbG9uZyBkZXYpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9ta25vZChsb25nIHJlcywgbG9uZyBmaWxlbmFtZSwgbG9uZyBtb2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGRldik7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfbGluayhsb25nIG9sZG5hbWUsIGxvbmcgbmV3bmFtZSk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2xpbmsobG9uZyByZXMsIGxvbmcgb2xkbmFtZSwgbG9uZyBuZXduYW1lKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zeW1saW5rKGxvbmcgb2xkLCBsb25nIG5ld18pOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zeW1saW5rKGxvbmcgcmVzLCBsb25nIG9sZCwgbG9uZyBuZXdfKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF91bmxpbmsobG9uZyBwYXRobmFtZSk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3VubGluayhsb25nIHJlcywgbG9uZyBwYXRobmFtZSk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfcmVuYW1lKGxvbmcgb2xkbmFtZSwgbG9uZyBuZXduYW1lKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfcmVuYW1lKGxvbmcgcmVzLCBsb25nIG9sZG5hbWUsIGxvbmcgbmV3bmFtZSk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfY2htb2QobG9uZyBmaWxlbmFtZSwgbG9uZyBtb2RlKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfY2htb2QobG9uZyByZXMsIGxvbmcgZmlsZW5hbWUsIGxvbmcgbW9kZSk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZmNobW9kKGxvbmcgZmQsIGxvbmcgbW9kZSk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2ZjaG1vZChsb25nIHJlcywgbG9uZyBmZCwgbG9uZyBtb2RlKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9mY250bChsb25nIGZkLCBsb25nIGNtZCwgbG9uZyBhcmcpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9mY250bChsb25nIHJlcywgbG9uZyBmZCwgbG9uZyBjbWQsIGxvbmcgYXJnKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9mY250bDY0KGxvbmcgZmQsIGxvbmcgY21kLCBsb25nIGFyZyk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2ZjbnRsNjQobG9uZyByZXMsIGxvbmcgZmQsIGxvbmcgY21kLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgYXJnKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9waXBlKGxvbmcgZmlsZGVzKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfcGlwZShsb25nIHJlcywgbG9uZyBmaWxkZXMpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3BpcGUyKGxvbmcgZmlsZGVzLCBsb25nIGZsYWdzKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfcGlwZTIobG9uZyByZXMsIGxvbmcgZmlsZGVzLCBsb25nIGZsYWdzKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9kdXAobG9uZyBmaWxkZXMpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9kdXAobG9uZyByZXMsIGxvbmcgZmlsZGVzKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9kdXAyKGxvbmcgb2xkZmQsIGxvbmcgbmV3ZmQpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9kdXAyKGxvbmcgcmVzLCBsb25nIG9sZGZkLCBsb25nIG5ld2ZkKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9kdXAzKGxvbmcgb2xkZmQsIGxvbmcgbmV3ZmQsIGxvbmcgZmxhZ3MpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9kdXAzKGxvbmcgcmVzLCBsb25nIG9sZGZkLCBsb25nIG5ld2ZkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZmxhZ3MpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2lvcGVybShsb25nIGZyb20sIGxvbmcgbnVtLCBsb25nIG9uKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfaW9wZXJtKGxvbmcgcmVzLCBsb25nIGZyb20sIGxvbmcgbnVtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBvbik7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfaW9jdGwobG9uZyBmZCwgbG9uZyBjbWQsIGxvbmcgYXJnKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfaW9jdGwobG9uZyByZXMsIGxvbmcgZmQsIGxvbmcgY21kLCBsb25nIGFyZyk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZmxvY2sobG9uZyBmZCwgbG9uZyBjbWQpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9mbG9jayhsb25nIHJlcywgbG9uZyBmZCwgbG9uZyBjbWQpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2lvX3NldHVwKGxvbmcgbnJfcmVxcywgbG9uZyBjdHgpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9pb19zZXR1cChsb25nIHJlcywgbG9uZyBucl9yZXFzLCBsb25nIGN0eCk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfaW9fZGVzdHJveShsb25nIGN0eCk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2lvX2Rlc3Ryb3kobG9uZyByZXMsIGxvbmcgY3R4KTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9pb19nZXRldmVudHMobG9uZyBjdHhfaWQsIGxvbmcgbWluX25yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIG5yLCBsb25nIGV2ZW50cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyB0aW1lb3V0KTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfaW9fZ2V0ZXZlbnRzKGxvbmcgcmVzLCBsb25nIGN0eF9pZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgbWluX25yLCBsb25nIG5yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBldmVudHMsIGxvbmcgdGltZW91dCk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfaW9fc3VibWl0KGxvbmcgY3R4X2lkLCBsb25nIGFyZzEsIGxvbmcgYXJnMik7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2lvX3N1Ym1pdChsb25nIHJlcywgbG9uZyBjdHhfaWQsIGxvbmcgYXJnMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgYXJnMik7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfaW9fY2FuY2VsKGxvbmcgY3R4X2lkLCBsb25nIGlvY2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgcmVzdWx0KTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfaW9fY2FuY2VsKGxvbmcgcmVzLCBsb25nIGN0eF9pZCwgbG9uZyBpb2NiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyByZXN1bHQpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NlbmRmaWxlKGxvbmcgb3V0X2ZkLCBsb25nIGluX2ZkLCBsb25nIG9mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGNvdW50KTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2VuZGZpbGUobG9uZyByZXMsIGxvbmcgb3V0X2ZkLCBsb25nIGluX2ZkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIG9mZnNldCwgbG9uZyBjb3VudCk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2VuZGZpbGU2NChsb25nIG91dF9mZCwgbG9uZyBpbl9mZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgb2Zmc2V0LCBsb25nIGNvdW50KTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2VuZGZpbGU2NChsb25nIHJlcywgbG9uZyBvdXRfZmQsIGxvbmcgaW5fZmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBvZmZzZXQsIGxvbmcgY291bnQpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3JlYWRsaW5rKGxvbmcgcGF0aCwgbG9uZyBidWYsIGxvbmcgYnVmc2l6KTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfcmVhZGxpbmsobG9uZyByZXMsIGxvbmcgcGF0aCwgbG9uZyBidWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgYnVmc2l6KTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9jcmVhdChsb25nIHBhdGhuYW1lLCBsb25nIG1vZGUpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9jcmVhdChsb25nIHJlcywgbG9uZyBwYXRobmFtZSwgbG9uZyBtb2RlKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9vcGVuKGxvbmcgZmlsZW5hbWUsIGxvbmcgZmxhZ3MsIGxvbmcgbW9kZSk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX29wZW4obG9uZyByZXMsIGxvbmcgZmlsZW5hbWUsIGxvbmcgZmxhZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBtb2RlKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9jbG9zZShsb25nIGZkKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfY2xvc2UobG9uZyByZXMsIGxvbmcgZmQpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2FjY2Vzcyhsb25nIGZpbGVuYW1lLCBsb25nIG1vZGUpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9hY2Nlc3MobG9uZyByZXMsIGxvbmcgZmlsZW5hbWUsIGxvbmcgbW9kZSk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfdmhhbmd1cCgpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF92aGFuZ3VwKGxvbmcgcmVzKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9jaG93bihsb25nIGZpbGVuYW1lLCBsb25nIHVzZXIsIGxvbmcgZ3JvdXApOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9jaG93bihsb25nIHJlcywgbG9uZyBmaWxlbmFtZSwgbG9uZyB1c2VyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGdyb3VwKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9sY2hvd24obG9uZyBmaWxlbmFtZSwgbG9uZyB1c2VyLCBsb25nIGdyb3VwKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbGNob3duKGxvbmcgcmVzLCBsb25nIGZpbGVuYW1lLCBsb25nIHVzZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGdyb3VwKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9mY2hvd24obG9uZyBmZCwgbG9uZyB1c2VyLCBsb25nIGdyb3VwKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZmNob3duKGxvbmcgcmVzLCBsb25nIGZkLCBsb25nIHVzZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGdyb3VwKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9jaG93bjE2KGxvbmcgZmlsZW5hbWUsIGxvbmcgdXNlciwgbG9uZyBncm91cCk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2Nob3duMTYobG9uZyByZXMsIGxvbmcgZmlsZW5hbWUsIGxvbmcgdXNlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGdyb3VwKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9sY2hvd24xNihsb25nIGZpbGVuYW1lLCBsb25nIHVzZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBncm91cCk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2xjaG93bjE2KGxvbmcgcmVzLCBsb25nIGZpbGVuYW1lLCBsb25nIHVzZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZ3JvdXApOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2ZjaG93bjE2KGxvbmcgZmQsIGxvbmcgdXNlciwgbG9uZyBncm91cCk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2ZjaG93bjE2KGxvbmcgcmVzLCBsb25nIGZkLCBsb25nIHVzZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZ3JvdXApOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NldHJlZ2lkMTYobG9uZyByZ2lkLCBsb25nIGVnaWQpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zZXRyZWdpZDE2KGxvbmcgcmVzLCBsb25nIHJnaWQsIGxvbmcgZWdpZCk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2V0Z2lkMTYobG9uZyBnaWQpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zZXRnaWQxNihsb25nIHJlcywgbG9uZyBnaWQpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NldHJldWlkMTYobG9uZyBydWlkLCBsb25nIGV1aWQpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zZXRyZXVpZDE2KGxvbmcgcmVzLCBsb25nIHJ1aWQsIGxvbmcgZXVpZCk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2V0dWlkMTYobG9uZyB1aWQpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zZXR1aWQxNihsb25nIHJlcywgbG9uZyB1aWQpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NldHJlc3VpZDE2KGxvbmcgcnVpZCwgbG9uZyBldWlkLCBsb25nIHN1aWQpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zZXRyZXN1aWQxNihsb25nIHJlcywgbG9uZyBydWlkLCBsb25nIGV1aWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgc3VpZCk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZ2V0cmVzdWlkMTYobG9uZyBydWlkLCBsb25nIGV1aWQsIGxvbmcgc3VpZCk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2dldHJlc3VpZDE2KGxvbmcgcmVzLCBsb25nIHJ1aWQsIGxvbmcgZXVpZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBzdWlkKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zZXRyZXNnaWQxNihsb25nIHJnaWQsIGxvbmcgZWdpZCwgbG9uZyBzZ2lkKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2V0cmVzZ2lkMTYobG9uZyByZXMsIGxvbmcgcmdpZCwgbG9uZyBlZ2lkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHNnaWQpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2dldHJlc2dpZDE2KGxvbmcgcmdpZCwgbG9uZyBlZ2lkLCBsb25nIHNnaWQpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9nZXRyZXNnaWQxNihsb25nIHJlcywgbG9uZyByZ2lkLCBsb25nIGVnaWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgc2dpZCk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2V0ZnN1aWQxNihsb25nIHVpZCk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NldGZzdWlkMTYobG9uZyByZXMsIGxvbmcgdWlkKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zZXRmc2dpZDE2KGxvbmcgZ2lkKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2V0ZnNnaWQxNihsb25nIHJlcywgbG9uZyBnaWQpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2dldGdyb3VwczE2KGxvbmcgZ2lkc2V0c2l6ZSwgbG9uZyBncm91cGxpc3QpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9nZXRncm91cHMxNihsb25nIHJlcywgbG9uZyBnaWRzZXRzaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGdyb3VwbGlzdCk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2V0Z3JvdXBzMTYobG9uZyBnaWRzZXRzaXplLCBsb25nIGdyb3VwbGlzdCk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NldGdyb3VwczE2KGxvbmcgcmVzLCBsb25nIGdpZHNldHNpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZ3JvdXBsaXN0KTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9nZXR1aWQxNigpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9nZXR1aWQxNihsb25nIHJlcyk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZ2V0ZXVpZDE2KCk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2dldGV1aWQxNihsb25nIHJlcyk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZ2V0Z2lkMTYoKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZ2V0Z2lkMTYobG9uZyByZXMpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2dldGVnaWQxNigpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9nZXRlZ2lkMTYobG9uZyByZXMpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3V0aW1lKGxvbmcgZmlsZW5hbWUsIGxvbmcgdGltZXMpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF91dGltZShsb25nIHJlcywgbG9uZyBmaWxlbmFtZSwgbG9uZyB0aW1lcyk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfdXRpbWVzKGxvbmcgZmlsZW5hbWUsIGxvbmcgdXRpbWVzKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfdXRpbWVzKGxvbmcgcmVzLCBsb25nIGZpbGVuYW1lLCBsb25nIHV0aW1lcyk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfbHNlZWsobG9uZyBmZCwgbG9uZyBvZmZzZXQsIGxvbmcgb3JpZ2luKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbHNlZWsobG9uZyByZXMsIGxvbmcgZmQsIGxvbmcgb2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIG9yaWdpbik7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfbGxzZWVrKGxvbmcgZmQsIGxvbmcgb2Zmc2V0X2hpZ2gsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgb2Zmc2V0X2xvdywgbG9uZyByZXN1bHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgb3JpZ2luKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbGxzZWVrKGxvbmcgcmVzLCBsb25nIGZkLCBsb25nIG9mZnNldF9oaWdoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBvZmZzZXRfbG93LCBsb25nIHJlc3VsdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgb3JpZ2luKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9yZWFkKGxvbmcgZmQsIGxvbmcgYnVmLCBsb25nIGNvdW50KTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfcmVhZChsb25nIHJlcywgbG9uZyBmZCwgbG9uZyBidWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBjb3VudCk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfcmVhZHYobG9uZyBmZCwgbG9uZyB2ZWMsIGxvbmcgdmxlbik7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3JlYWR2KGxvbmcgcmVzLCBsb25nIGZkLCBsb25nIHZlYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyB2bGVuKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF93cml0ZShsb25nIGZkLCBsb25nIGJ1ZiwgbG9uZyBjb3VudCk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3dyaXRlKGxvbmcgcmVzLCBsb25nIGZkLCBsb25nIGJ1ZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBjb3VudCk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfd3JpdGV2KGxvbmcgZmQsIGxvbmcgdmVjLCBsb25nIHZsZW4pOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF93cml0ZXYobG9uZyByZXMsIGxvbmcgZmQsIGxvbmcgdmVjLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyB2bGVuKTsKLQotI2lmZGVmIF9MUDY0Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfcHJlYWQ2NChsb25nIGZkLCBsb25nIGJ1ZiwgbG9uZyBjb3VudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgcG9zKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfcHJlYWQ2NChsb25nIHJlcywgbG9uZyBmZCwgbG9uZyBidWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBjb3VudCwgbG9uZyBwb3MpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3B3cml0ZTY0KGxvbmcgZmQsIGxvbmcgYnVmLCBsb25nIGNvdW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgcG9zKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfcHdyaXRlNjQobG9uZyByZXMsIGxvbmcgZmQsIGxvbmcgYnVmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGNvdW50LCBsb25nIHBvcyk7Ci0jZWxzZQotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3ByZWFkNjQobG9uZyBmZCwgbG9uZyBidWYsIGxvbmcgY291bnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHBvczAsIGxvbmcgcG9zMSk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3ByZWFkNjQobG9uZyByZXMsIGxvbmcgZmQsIGxvbmcgYnVmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgY291bnQsIGxvbmcgcG9zMCwgbG9uZyBwb3MxKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9wd3JpdGU2NChsb25nIGZkLCBsb25nIGJ1ZiwgbG9uZyBjb3VudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHBvczAsIGxvbmcgcG9zMSk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3B3cml0ZTY0KGxvbmcgcmVzLCBsb25nIGZkLCBsb25nIGJ1ZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBjb3VudCwgbG9uZyBwb3MwLCBsb25nIHBvczEpOwotI2VuZGlmCi0KLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9wcmVhZHYobG9uZyBmZCwgbG9uZyB2ZWMsIGxvbmcgdmxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBwb3NfbCwgbG9uZyBwb3NfaCk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3ByZWFkdihsb25nIHJlcywgbG9uZyBmZCwgbG9uZyB2ZWMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHZsZW4sIGxvbmcgcG9zX2wsIGxvbmcgcG9zX2gpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3B3cml0ZXYobG9uZyBmZCwgbG9uZyB2ZWMsIGxvbmcgdmxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgcG9zX2wsIGxvbmcgcG9zX2gpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9wd3JpdGV2KGxvbmcgcmVzLCBsb25nIGZkLCBsb25nIHZlYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHZsZW4sIGxvbmcgcG9zX2wsIGxvbmcgcG9zX2gpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2dldGN3ZChsb25nIGJ1ZiwgbG9uZyBzaXplKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZ2V0Y3dkKGxvbmcgcmVzLCBsb25nIGJ1ZiwgbG9uZyBzaXplKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9ta2Rpcihsb25nIHBhdGhuYW1lLCBsb25nIG1vZGUpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9ta2Rpcihsb25nIHJlcywgbG9uZyBwYXRobmFtZSwgbG9uZyBtb2RlKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9jaGRpcihsb25nIGZpbGVuYW1lKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfY2hkaXIobG9uZyByZXMsIGxvbmcgZmlsZW5hbWUpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2ZjaGRpcihsb25nIGZkKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZmNoZGlyKGxvbmcgcmVzLCBsb25nIGZkKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9ybWRpcihsb25nIHBhdGhuYW1lKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfcm1kaXIobG9uZyByZXMsIGxvbmcgcGF0aG5hbWUpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2xvb2t1cF9kY29va2llKGxvbmcgY29va2llNjQsIGxvbmcgYnVmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgbGVuKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbG9va3VwX2Rjb29raWUobG9uZyByZXMsIGxvbmcgY29va2llNjQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgYnVmLCBsb25nIGxlbik7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfcXVvdGFjdGwobG9uZyBjbWQsIGxvbmcgc3BlY2lhbCwgbG9uZyBpZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGFkZHIpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9xdW90YWN0bChsb25nIHJlcywgbG9uZyBjbWQsIGxvbmcgc3BlY2lhbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBpZCwgbG9uZyBhZGRyKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9nZXRkZW50cyhsb25nIGZkLCBsb25nIGRpcmVudCwgbG9uZyBjb3VudCk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2dldGRlbnRzKGxvbmcgcmVzLCBsb25nIGZkLCBsb25nIGRpcmVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBjb3VudCk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZ2V0ZGVudHM2NChsb25nIGZkLCBsb25nIGRpcmVudCwgbG9uZyBjb3VudCk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2dldGRlbnRzNjQobG9uZyByZXMsIGxvbmcgZmQsIGxvbmcgZGlyZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgY291bnQpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NldHNvY2tvcHQobG9uZyBmZCwgbG9uZyBsZXZlbCwgbG9uZyBvcHRuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBvcHR2YWwsIGxvbmcgb3B0bGVuKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2V0c29ja29wdChsb25nIHJlcywgbG9uZyBmZCwgbG9uZyBsZXZlbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIG9wdG5hbWUsIGxvbmcgb3B0dmFsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgb3B0bGVuKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9nZXRzb2Nrb3B0KGxvbmcgZmQsIGxvbmcgbGV2ZWwsIGxvbmcgb3B0bmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgb3B0dmFsLCBsb25nIG9wdGxlbik7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2dldHNvY2tvcHQobG9uZyByZXMsIGxvbmcgZmQsIGxvbmcgbGV2ZWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBvcHRuYW1lLCBsb25nIG9wdHZhbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIG9wdGxlbik7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfYmluZChsb25nIGFyZzAsIGxvbmcgYXJnMSwgbG9uZyBhcmcyKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfYmluZChsb25nIHJlcywgbG9uZyBhcmcwLCBsb25nIGFyZzEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBhcmcyKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9jb25uZWN0KGxvbmcgYXJnMCwgbG9uZyBhcmcxLCBsb25nIGFyZzIpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9jb25uZWN0KGxvbmcgcmVzLCBsb25nIGFyZzAsIGxvbmcgYXJnMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGFyZzIpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2FjY2VwdChsb25nIGFyZzAsIGxvbmcgYXJnMSwgbG9uZyBhcmcyKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfYWNjZXB0KGxvbmcgcmVzLCBsb25nIGFyZzAsIGxvbmcgYXJnMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgYXJnMik7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfYWNjZXB0NChsb25nIGFyZzAsIGxvbmcgYXJnMSwgbG9uZyBhcmcyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBhcmczKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfYWNjZXB0NChsb25nIHJlcywgbG9uZyBhcmcwLCBsb25nIGFyZzEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBhcmcyLCBsb25nIGFyZzMpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2dldHNvY2tuYW1lKGxvbmcgYXJnMCwgbG9uZyBhcmcxLCBsb25nIGFyZzIpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9nZXRzb2NrbmFtZShsb25nIHJlcywgbG9uZyBhcmcwLCBsb25nIGFyZzEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgYXJnMik7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZ2V0cGVlcm5hbWUobG9uZyBhcmcwLCBsb25nIGFyZzEsIGxvbmcgYXJnMik7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2dldHBlZXJuYW1lKGxvbmcgcmVzLCBsb25nIGFyZzAsIGxvbmcgYXJnMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBhcmcyKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zZW5kKGxvbmcgYXJnMCwgbG9uZyBhcmcxLCBsb25nIGFyZzIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGFyZzMpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zZW5kKGxvbmcgcmVzLCBsb25nIGFyZzAsIGxvbmcgYXJnMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGFyZzIsIGxvbmcgYXJnMyk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2VuZHRvKGxvbmcgYXJnMCwgbG9uZyBhcmcxLCBsb25nIGFyZzIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgYXJnMywgbG9uZyBhcmc0LCBsb25nIGFyZzUpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zZW5kdG8obG9uZyByZXMsIGxvbmcgYXJnMCwgbG9uZyBhcmcxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBhcmcyLCBsb25nIGFyZzMsIGxvbmcgYXJnNCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgYXJnNSk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2VuZG1zZyhsb25nIGZkLCBsb25nIG1zZywgbG9uZyBmbGFncyk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NlbmRtc2cobG9uZyByZXMsIGxvbmcgZmQsIGxvbmcgbXNnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZmxhZ3MpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NlbmRtbXNnKGxvbmcgZmQsIGxvbmcgbXNnLCBsb25nIHZsZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBmbGFncyk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NlbmRtbXNnKGxvbmcgcmVzLCBsb25nIGZkLCBsb25nIG1zZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyB2bGVuLCBsb25nIGZsYWdzKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9yZWN2KGxvbmcgYXJnMCwgbG9uZyBhcmcxLCBsb25nIGFyZzIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGFyZzMpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9yZWN2KGxvbmcgcmVzLCBsb25nIGFyZzAsIGxvbmcgYXJnMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGFyZzIsIGxvbmcgYXJnMyk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfcmVjdmZyb20obG9uZyBhcmcwLCBsb25nIGFyZzEsIGxvbmcgYXJnMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGFyZzMsIGxvbmcgYXJnNCwgbG9uZyBhcmc1KTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfcmVjdmZyb20obG9uZyByZXMsIGxvbmcgYXJnMCwgbG9uZyBhcmcxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGFyZzIsIGxvbmcgYXJnMywgbG9uZyBhcmc0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGFyZzUpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3JlY3Ztc2cobG9uZyBmZCwgbG9uZyBtc2csIGxvbmcgZmxhZ3MpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9yZWN2bXNnKGxvbmcgcmVzLCBsb25nIGZkLCBsb25nIG1zZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGZsYWdzKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9yZWN2bW1zZyhsb25nIGZkLCBsb25nIG1zZywgbG9uZyB2bGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZmxhZ3MsIGxvbmcgdGltZW91dCk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3JlY3ZtbXNnKGxvbmcgcmVzLCBsb25nIGZkLCBsb25nIG1zZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyB2bGVuLCBsb25nIGZsYWdzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHRpbWVvdXQpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NvY2tldChsb25nIGFyZzAsIGxvbmcgYXJnMSwgbG9uZyBhcmcyKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc29ja2V0KGxvbmcgcmVzLCBsb25nIGFyZzAsIGxvbmcgYXJnMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgYXJnMik7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc29ja2V0cGFpcihsb25nIGFyZzAsIGxvbmcgYXJnMSwgbG9uZyBhcmcyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBhcmczKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc29ja2V0cGFpcihsb25nIHJlcywgbG9uZyBhcmcwLCBsb25nIGFyZzEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBhcmcyLCBsb25nIGFyZzMpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NvY2tldGNhbGwobG9uZyBjYWxsLCBsb25nIGFyZ3MpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zb2NrZXRjYWxsKGxvbmcgcmVzLCBsb25nIGNhbGwsIGxvbmcgYXJncyk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfbGlzdGVuKGxvbmcgYXJnMCwgbG9uZyBhcmcxKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbGlzdGVuKGxvbmcgcmVzLCBsb25nIGFyZzAsIGxvbmcgYXJnMSk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfcG9sbChsb25nIHVmZHMsIGxvbmcgbmZkcywgbG9uZyB0aW1lb3V0KTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfcG9sbChsb25nIHJlcywgbG9uZyB1ZmRzLCBsb25nIG5mZHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyB0aW1lb3V0KTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zZWxlY3QobG9uZyBuLCBsb25nIGlucCwgbG9uZyBvdXRwLCBsb25nIGV4cCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyB0dnApOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zZWxlY3QobG9uZyByZXMsIGxvbmcgbiwgbG9uZyBpbnAsIGxvbmcgb3V0cCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZXhwLCBsb25nIHR2cCk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfb2xkX3NlbGVjdChsb25nIGFyZyk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX29sZF9zZWxlY3QobG9uZyByZXMsIGxvbmcgYXJnKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9lcG9sbF9jcmVhdGUobG9uZyBzaXplKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZXBvbGxfY3JlYXRlKGxvbmcgcmVzLCBsb25nIHNpemUpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2Vwb2xsX2NyZWF0ZTEobG9uZyBmbGFncyk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2Vwb2xsX2NyZWF0ZTEobG9uZyByZXMsIGxvbmcgZmxhZ3MpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2Vwb2xsX2N0bChsb25nIGVwZmQsIGxvbmcgb3AsIGxvbmcgZmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZXZlbnQpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9lcG9sbF9jdGwobG9uZyByZXMsIGxvbmcgZXBmZCwgbG9uZyBvcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZmQsIGxvbmcgZXZlbnQpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2Vwb2xsX3dhaXQobG9uZyBlcGZkLCBsb25nIGV2ZW50cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgbWF4ZXZlbnRzLCBsb25nIHRpbWVvdXQpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9lcG9sbF93YWl0KGxvbmcgcmVzLCBsb25nIGVwZmQsIGxvbmcgZXZlbnRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgbWF4ZXZlbnRzLCBsb25nIHRpbWVvdXQpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2Vwb2xsX3B3YWl0KGxvbmcgZXBmZCwgbG9uZyBldmVudHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBtYXhldmVudHMsIGxvbmcgdGltZW91dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHNpZ21hc2ssIGxvbmcgc2lnc2V0c2l6ZSk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2Vwb2xsX3B3YWl0KGxvbmcgcmVzLCBsb25nIGVwZmQsIGxvbmcgZXZlbnRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIG1heGV2ZW50cywgbG9uZyB0aW1lb3V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHNpZ21hc2ssIGxvbmcgc2lnc2V0c2l6ZSk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZ2V0aG9zdG5hbWUobG9uZyBuYW1lLCBsb25nIGxlbik7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2dldGhvc3RuYW1lKGxvbmcgcmVzLCBsb25nIG5hbWUsIGxvbmcgbGVuKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zZXRob3N0bmFtZShsb25nIG5hbWUsIGxvbmcgbGVuKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2V0aG9zdG5hbWUobG9uZyByZXMsIGxvbmcgbmFtZSwgbG9uZyBsZW4pOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NldGRvbWFpbm5hbWUobG9uZyBuYW1lLCBsb25nIGxlbik7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NldGRvbWFpbm5hbWUobG9uZyByZXMsIGxvbmcgbmFtZSwgbG9uZyBsZW4pOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX25ld3VuYW1lKGxvbmcgbmFtZSk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX25ld3VuYW1lKGxvbmcgcmVzLCBsb25nIG5hbWUpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3VuYW1lKGxvbmcgYXJnMCk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3VuYW1lKGxvbmcgcmVzLCBsb25nIGFyZzApOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX29sZHVuYW1lKGxvbmcgYXJnMCk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX29sZHVuYW1lKGxvbmcgcmVzLCBsb25nIGFyZzApOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2dldHJsaW1pdChsb25nIHJlc291cmNlLCBsb25nIHJsaW0pOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9nZXRybGltaXQobG9uZyByZXMsIGxvbmcgcmVzb3VyY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHJsaW0pOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX29sZF9nZXRybGltaXQobG9uZyByZXNvdXJjZSwgbG9uZyBybGltKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfb2xkX2dldHJsaW1pdChsb25nIHJlcywgbG9uZyByZXNvdXJjZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHJsaW0pOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NldHJsaW1pdChsb25nIHJlc291cmNlLCBsb25nIHJsaW0pOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zZXRybGltaXQobG9uZyByZXMsIGxvbmcgcmVzb3VyY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHJsaW0pOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3BybGltaXQ2NChsb25nIHBpZCwgbG9uZyByZXNvdXJjZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBuZXdfcmxpbSwgbG9uZyBvbGRfcmxpbSk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3BybGltaXQ2NChsb25nIHJlcywgbG9uZyBwaWQsIGxvbmcgcmVzb3VyY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIG5ld19ybGltLCBsb25nIG9sZF9ybGltKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9nZXRydXNhZ2UobG9uZyB3aG8sIGxvbmcgcnUpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9nZXRydXNhZ2UobG9uZyByZXMsIGxvbmcgd2hvLCBsb25nIHJ1KTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF91bWFzayhsb25nIG1hc2spOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF91bWFzayhsb25nIHJlcywgbG9uZyBtYXNrKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9tc2dnZXQobG9uZyBrZXksIGxvbmcgbXNnZmxnKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbXNnZ2V0KGxvbmcgcmVzLCBsb25nIGtleSwgbG9uZyBtc2dmbGcpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX21zZ3NuZChsb25nIG1zcWlkLCBsb25nIG1zZ3AsIGxvbmcgbXNnc3osCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgbXNnZmxnKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbXNnc25kKGxvbmcgcmVzLCBsb25nIG1zcWlkLCBsb25nIG1zZ3AsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIG1zZ3N6LCBsb25nIG1zZ2ZsZyk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfbXNncmN2KGxvbmcgbXNxaWQsIGxvbmcgbXNncCwgbG9uZyBtc2dzeiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBtc2d0eXAsIGxvbmcgbXNnZmxnKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbXNncmN2KGxvbmcgcmVzLCBsb25nIG1zcWlkLCBsb25nIG1zZ3AsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIG1zZ3N6LCBsb25nIG1zZ3R5cCwgbG9uZyBtc2dmbGcpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX21zZ2N0bChsb25nIG1zcWlkLCBsb25nIGNtZCwgbG9uZyBidWYpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9tc2djdGwobG9uZyByZXMsIGxvbmcgbXNxaWQsIGxvbmcgY21kLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBidWYpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NlbWdldChsb25nIGtleSwgbG9uZyBuc2VtcywgbG9uZyBzZW1mbGcpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zZW1nZXQobG9uZyByZXMsIGxvbmcga2V5LCBsb25nIG5zZW1zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBzZW1mbGcpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NlbW9wKGxvbmcgc2VtaWQsIGxvbmcgc29wcywgbG9uZyBuc29wcyk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NlbW9wKGxvbmcgcmVzLCBsb25nIHNlbWlkLCBsb25nIHNvcHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgbnNvcHMpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NlbWN0bChsb25nIHNlbWlkLCBsb25nIHNlbW51bSwgbG9uZyBjbWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgYXJnKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2VtY3RsKGxvbmcgcmVzLCBsb25nIHNlbWlkLCBsb25nIHNlbW51bSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgY21kLCBsb25nIGFyZyk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2VtdGltZWRvcChsb25nIHNlbWlkLCBsb25nIHNvcHMsIGxvbmcgbnNvcHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHRpbWVvdXQpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zZW10aW1lZG9wKGxvbmcgcmVzLCBsb25nIHNlbWlkLCBsb25nIHNvcHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBuc29wcywgbG9uZyB0aW1lb3V0KTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zaG1hdChsb25nIHNobWlkLCBsb25nIHNobWFkZHIsIGxvbmcgc2htZmxnKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2htYXQobG9uZyByZXMsIGxvbmcgc2htaWQsIGxvbmcgc2htYWRkciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBzaG1mbGcpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NobWdldChsb25nIGtleSwgbG9uZyBzaXplLCBsb25nIGZsYWcpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zaG1nZXQobG9uZyByZXMsIGxvbmcga2V5LCBsb25nIHNpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGZsYWcpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NobWR0KGxvbmcgc2htYWRkcik7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NobWR0KGxvbmcgcmVzLCBsb25nIHNobWFkZHIpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NobWN0bChsb25nIHNobWlkLCBsb25nIGNtZCwgbG9uZyBidWYpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zaG1jdGwobG9uZyByZXMsIGxvbmcgc2htaWQsIGxvbmcgY21kLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBidWYpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2lwYyhsb25nIGNhbGwsIGxvbmcgZmlyc3QsIGxvbmcgc2Vjb25kLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHRoaXJkLCBsb25nIHB0ciwgbG9uZyBmaWZ0aCk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2lwYyhsb25nIHJlcywgbG9uZyBjYWxsLCBsb25nIGZpcnN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBzZWNvbmQsIGxvbmcgdGhpcmQsIGxvbmcgcHRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBmaWZ0aCk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfbXFfb3Blbihsb25nIG5hbWUsIGxvbmcgb2ZsYWcsIGxvbmcgbW9kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgYXR0cik7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX21xX29wZW4obG9uZyByZXMsIGxvbmcgbmFtZSwgbG9uZyBvZmxhZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIG1vZGUsIGxvbmcgYXR0cik7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfbXFfdW5saW5rKGxvbmcgbmFtZSk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX21xX3VubGluayhsb25nIHJlcywgbG9uZyBuYW1lKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9tcV90aW1lZHNlbmQobG9uZyBtcWRlcywgbG9uZyBtc2dfcHRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIG1zZ19sZW4sIGxvbmcgbXNnX3ByaW8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgYWJzX3RpbWVvdXQpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9tcV90aW1lZHNlbmQobG9uZyByZXMsIGxvbmcgbXFkZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIG1zZ19wdHIsIGxvbmcgbXNnX2xlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgbXNnX3ByaW8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGFic190aW1lb3V0KTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9tcV90aW1lZHJlY2VpdmUobG9uZyBtcWRlcywgbG9uZyBtc2dfcHRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIG1zZ19sZW4sIGxvbmcgbXNnX3ByaW8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgYWJzX3RpbWVvdXQpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9tcV90aW1lZHJlY2VpdmUobG9uZyByZXMsIGxvbmcgbXFkZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIG1zZ19wdHIsIGxvbmcgbXNnX2xlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgbXNnX3ByaW8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGFic190aW1lb3V0KTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9tcV9ub3RpZnkobG9uZyBtcWRlcywgbG9uZyBub3RpZmljYXRpb24pOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9tcV9ub3RpZnkobG9uZyByZXMsIGxvbmcgbXFkZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIG5vdGlmaWNhdGlvbik7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfbXFfZ2V0c2V0YXR0cihsb25nIG1xZGVzLCBsb25nIG1xc3RhdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgb21xc3RhdCk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX21xX2dldHNldGF0dHIobG9uZyByZXMsIGxvbmcgbXFkZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBtcXN0YXQsIGxvbmcgb21xc3RhdCk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfcGNpY29uZmlnX2lvYmFzZShsb25nIHdoaWNoLCBsb25nIGJ1cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZGV2Zm4pOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9wY2ljb25maWdfaW9iYXNlKGxvbmcgcmVzLCBsb25nIHdoaWNoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgYnVzLCBsb25nIGRldmZuKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9wY2ljb25maWdfcmVhZChsb25nIGJ1cywgbG9uZyBkZm4sIGxvbmcgb2ZmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgbGVuLCBsb25nIGJ1Zik7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3BjaWNvbmZpZ19yZWFkKGxvbmcgcmVzLCBsb25nIGJ1cywgbG9uZyBkZm4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgb2ZmLCBsb25nIGxlbiwgbG9uZyBidWYpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3BjaWNvbmZpZ193cml0ZShsb25nIGJ1cywgbG9uZyBkZm4sIGxvbmcgb2ZmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGxlbiwgbG9uZyBidWYpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9wY2ljb25maWdfd3JpdGUobG9uZyByZXMsIGxvbmcgYnVzLCBsb25nIGRmbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgb2ZmLCBsb25nIGxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgYnVmKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zd2Fwb24obG9uZyBzcGVjaWFsZmlsZSwgbG9uZyBzd2FwX2ZsYWdzKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc3dhcG9uKGxvbmcgcmVzLCBsb25nIHNwZWNpYWxmaWxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBzd2FwX2ZsYWdzKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zd2Fwb2ZmKGxvbmcgc3BlY2lhbGZpbGUpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zd2Fwb2ZmKGxvbmcgcmVzLCBsb25nIHNwZWNpYWxmaWxlKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zeXNjdGwobG9uZyBhcmdzKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc3lzY3RsKGxvbmcgcmVzLCBsb25nIGFyZ3MpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3N5c2luZm8obG9uZyBpbmZvKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc3lzaW5mbyhsb25nIHJlcywgbG9uZyBpbmZvKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zeXNmcyhsb25nIG9wdGlvbiwgbG9uZyBhcmcxLCBsb25nIGFyZzIpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zeXNmcyhsb25nIHJlcywgbG9uZyBvcHRpb24sIGxvbmcgYXJnMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBhcmcyKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zeXNsb2cobG9uZyB0eXBlLCBsb25nIGJ1ZiwgbG9uZyBsZW4pOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zeXNsb2cobG9uZyByZXMsIGxvbmcgdHlwZSwgbG9uZyBidWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGxlbik7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfdXNlbGliKGxvbmcgbGlicmFyeSk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3VzZWxpYihsb25nIHJlcywgbG9uZyBsaWJyYXJ5KTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9uaV9zeXNjYWxsKCk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX25pX3N5c2NhbGwobG9uZyByZXMpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3B0cmFjZShsb25nIHJlcXVlc3QsIGxvbmcgcGlkLCBsb25nIGFkZHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZGF0YSk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3B0cmFjZShsb25nIHJlcywgbG9uZyByZXF1ZXN0LCBsb25nIHBpZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgYWRkciwgbG9uZyBkYXRhKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9hZGRfa2V5KGxvbmcgX3R5cGUsIGxvbmcgX2Rlc2NyaXB0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBfcGF5bG9hZCwgbG9uZyBwbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBkZXN0cmluZ2lkKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfYWRkX2tleShsb25nIHJlcywgbG9uZyBfdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIF9kZXNjcmlwdGlvbiwgbG9uZyBfcGF5bG9hZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHBsZW4sIGxvbmcgZGVzdHJpbmdpZCk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfcmVxdWVzdF9rZXkobG9uZyBfdHlwZSwgbG9uZyBfZGVzY3JpcHRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBfY2FsbG91dF9pbmZvLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZGVzdHJpbmdpZCk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3JlcXVlc3Rfa2V5KGxvbmcgcmVzLCBsb25nIF90eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIF9kZXNjcmlwdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBfY2FsbG91dF9pbmZvLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGRlc3RyaW5naWQpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2tleWN0bChsb25nIGNtZCwgbG9uZyBhcmcyLCBsb25nIGFyZzMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgYXJnNCwgbG9uZyBhcmc1KTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfa2V5Y3RsKGxvbmcgcmVzLCBsb25nIGNtZCwgbG9uZyBhcmcyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBhcmczLCBsb25nIGFyZzQsIGxvbmcgYXJnNSk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfaW9wcmlvX3NldChsb25nIHdoaWNoLCBsb25nIHdobywgbG9uZyBpb3ByaW8pOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9pb3ByaW9fc2V0KGxvbmcgcmVzLCBsb25nIHdoaWNoLCBsb25nIHdobywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGlvcHJpbyk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfaW9wcmlvX2dldChsb25nIHdoaWNoLCBsb25nIHdobyk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2lvcHJpb19nZXQobG9uZyByZXMsIGxvbmcgd2hpY2gsIGxvbmcgd2hvKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zZXRfbWVtcG9saWN5KGxvbmcgbW9kZSwgbG9uZyBubWFzaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgbWF4bm9kZSk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NldF9tZW1wb2xpY3kobG9uZyByZXMsIGxvbmcgbW9kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIG5tYXNrLCBsb25nIG1heG5vZGUpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX21pZ3JhdGVfcGFnZXMobG9uZyBwaWQsIGxvbmcgbWF4bm9kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZnJvbSwgbG9uZyB0byk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX21pZ3JhdGVfcGFnZXMobG9uZyByZXMsIGxvbmcgcGlkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgbWF4bm9kZSwgbG9uZyBmcm9tLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgdG8pOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX21vdmVfcGFnZXMobG9uZyBwaWQsIGxvbmcgbnJfcGFnZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHBhZ2VzLCBsb25nIG5vZGVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBzdGF0dXMsIGxvbmcgZmxhZ3MpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9tb3ZlX3BhZ2VzKGxvbmcgcmVzLCBsb25nIHBpZCwgbG9uZyBucl9wYWdlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHBhZ2VzLCBsb25nIG5vZGVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgc3RhdHVzLCBsb25nIGZsYWdzKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9tYmluZChsb25nIHN0YXJ0LCBsb25nIGxlbiwgbG9uZyBtb2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgbm1hc2ssIGxvbmcgbWF4bm9kZSwgbG9uZyBmbGFncyk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX21iaW5kKGxvbmcgcmVzLCBsb25nIHN0YXJ0LCBsb25nIGxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBtb2RlLCBsb25nIG5tYXNrLCBsb25nIG1heG5vZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZmxhZ3MpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2dldF9tZW1wb2xpY3kobG9uZyBwb2xpY3ksIGxvbmcgbm1hc2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIG1heG5vZGUsIGxvbmcgYWRkciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZmxhZ3MpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9nZXRfbWVtcG9saWN5KGxvbmcgcmVzLCBsb25nIHBvbGljeSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIG5tYXNrLCBsb25nIG1heG5vZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBhZGRyLCBsb25nIGZsYWdzKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9pbm90aWZ5X2luaXQoKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfaW5vdGlmeV9pbml0KGxvbmcgcmVzKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9pbm90aWZ5X2luaXQxKGxvbmcgZmxhZ3MpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9pbm90aWZ5X2luaXQxKGxvbmcgcmVzLCBsb25nIGZsYWdzKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9pbm90aWZ5X2FkZF93YXRjaChsb25nIGZkLCBsb25nIHBhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBtYXNrKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfaW5vdGlmeV9hZGRfd2F0Y2gobG9uZyByZXMsIGxvbmcgZmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgcGF0aCwgbG9uZyBtYXNrKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9pbm90aWZ5X3JtX3dhdGNoKGxvbmcgZmQsIGxvbmcgd2QpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9pbm90aWZ5X3JtX3dhdGNoKGxvbmcgcmVzLCBsb25nIGZkLCBsb25nIHdkKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zcHVfcnVuKGxvbmcgZmQsIGxvbmcgdW5wYywgbG9uZyB1c3RhdHVzKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc3B1X3J1bihsb25nIHJlcywgbG9uZyBmZCwgbG9uZyB1bnBjLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgdXN0YXR1cyk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc3B1X2NyZWF0ZShsb25nIG5hbWUsIGxvbmcgZmxhZ3MsIGxvbmcgbW9kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZmQpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zcHVfY3JlYXRlKGxvbmcgcmVzLCBsb25nIG5hbWUsIGxvbmcgZmxhZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBtb2RlLCBsb25nIGZkKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9ta25vZGF0KGxvbmcgZGZkLCBsb25nIGZpbGVuYW1lLCBsb25nIG1vZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGRldik7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX21rbm9kYXQobG9uZyByZXMsIGxvbmcgZGZkLCBsb25nIGZpbGVuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgbW9kZSwgbG9uZyBkZXYpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX21rZGlyYXQobG9uZyBkZmQsIGxvbmcgcGF0aG5hbWUsIGxvbmcgbW9kZSk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX21rZGlyYXQobG9uZyByZXMsIGxvbmcgZGZkLCBsb25nIHBhdGhuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgbW9kZSk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfdW5saW5rYXQobG9uZyBkZmQsIGxvbmcgcGF0aG5hbWUsIGxvbmcgZmxhZyk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3VubGlua2F0KGxvbmcgcmVzLCBsb25nIGRmZCwgbG9uZyBwYXRobmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBmbGFnKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zeW1saW5rYXQobG9uZyBvbGRuYW1lLCBsb25nIG5ld2RmZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBuZXduYW1lKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc3ltbGlua2F0KGxvbmcgcmVzLCBsb25nIG9sZG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIG5ld2RmZCwgbG9uZyBuZXduYW1lKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9saW5rYXQobG9uZyBvbGRkZmQsIGxvbmcgb2xkbmFtZSwgbG9uZyBuZXdkZmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgbmV3bmFtZSwgbG9uZyBmbGFncyk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2xpbmthdChsb25nIHJlcywgbG9uZyBvbGRkZmQsIGxvbmcgb2xkbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgbmV3ZGZkLCBsb25nIG5ld25hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGZsYWdzKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9yZW5hbWVhdChsb25nIG9sZGRmZCwgbG9uZyBvbGRuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgbmV3ZGZkLCBsb25nIG5ld25hbWUpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9yZW5hbWVhdChsb25nIHJlcywgbG9uZyBvbGRkZmQsIGxvbmcgb2xkbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBuZXdkZmQsIGxvbmcgbmV3bmFtZSk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZnV0aW1lc2F0KGxvbmcgZGZkLCBsb25nIGZpbGVuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHV0aW1lcyk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2Z1dGltZXNhdChsb25nIHJlcywgbG9uZyBkZmQsIGxvbmcgZmlsZW5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHV0aW1lcyk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZmFjY2Vzc2F0KGxvbmcgZGZkLCBsb25nIGZpbGVuYW1lLCBsb25nIG1vZGUpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9mYWNjZXNzYXQobG9uZyByZXMsIGxvbmcgZGZkLCBsb25nIGZpbGVuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBtb2RlKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9mY2htb2RhdChsb25nIGRmZCwgbG9uZyBmaWxlbmFtZSwgbG9uZyBtb2RlKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZmNobW9kYXQobG9uZyByZXMsIGxvbmcgZGZkLCBsb25nIGZpbGVuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIG1vZGUpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2ZjaG93bmF0KGxvbmcgZGZkLCBsb25nIGZpbGVuYW1lLCBsb25nIHVzZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBncm91cCwgbG9uZyBmbGFnKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZmNob3duYXQobG9uZyByZXMsIGxvbmcgZGZkLCBsb25nIGZpbGVuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHVzZXIsIGxvbmcgZ3JvdXAsIGxvbmcgZmxhZyk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfb3BlbmF0KGxvbmcgZGZkLCBsb25nIGZpbGVuYW1lLCBsb25nIGZsYWdzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIG1vZGUpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9vcGVuYXQobG9uZyByZXMsIGxvbmcgZGZkLCBsb25nIGZpbGVuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBmbGFncywgbG9uZyBtb2RlKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9uZXdmc3RhdGF0KGxvbmcgZGZkLCBsb25nIGZpbGVuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBzdGF0YnVmLCBsb25nIGZsYWcpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9uZXdmc3RhdGF0KGxvbmcgcmVzLCBsb25nIGRmZCwgbG9uZyBmaWxlbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHN0YXRidWYsIGxvbmcgZmxhZyk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZnN0YXRhdDY0KGxvbmcgZGZkLCBsb25nIGZpbGVuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHN0YXRidWYsIGxvbmcgZmxhZyk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2ZzdGF0YXQ2NChsb25nIHJlcywgbG9uZyBkZmQsIGxvbmcgZmlsZW5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHN0YXRidWYsIGxvbmcgZmxhZyk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfcmVhZGxpbmthdChsb25nIGRmZCwgbG9uZyBwYXRoLCBsb25nIGJ1ZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgYnVmc2l6KTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfcmVhZGxpbmthdChsb25nIHJlcywgbG9uZyBkZmQsIGxvbmcgcGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGJ1ZiwgbG9uZyBidWZzaXopOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3V0aW1lbnNhdChsb25nIGRmZCwgbG9uZyBmaWxlbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyB1dGltZXMsIGxvbmcgZmxhZ3MpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF91dGltZW5zYXQobG9uZyByZXMsIGxvbmcgZGZkLCBsb25nIGZpbGVuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyB1dGltZXMsIGxvbmcgZmxhZ3MpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3Vuc2hhcmUobG9uZyB1bnNoYXJlX2ZsYWdzKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfdW5zaGFyZShsb25nIHJlcywgbG9uZyB1bnNoYXJlX2ZsYWdzKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zcGxpY2UobG9uZyBmZF9pbiwgbG9uZyBvZmZfaW4sIGxvbmcgZmRfb3V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIG9mZl9vdXQsIGxvbmcgbGVuLCBsb25nIGZsYWdzKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc3BsaWNlKGxvbmcgcmVzLCBsb25nIGZkX2luLCBsb25nIG9mZl9pbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZmRfb3V0LCBsb25nIG9mZl9vdXQsIGxvbmcgbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBmbGFncyk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfdm1zcGxpY2UobG9uZyBmZCwgbG9uZyBpb3YsIGxvbmcgbnJfc2VncywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGZsYWdzKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfdm1zcGxpY2UobG9uZyByZXMsIGxvbmcgZmQsIGxvbmcgaW92LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIG5yX3NlZ3MsIGxvbmcgZmxhZ3MpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3RlZShsb25nIGZkaW4sIGxvbmcgZmRvdXQsIGxvbmcgbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGZsYWdzKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfdGVlKGxvbmcgcmVzLCBsb25nIGZkaW4sIGxvbmcgZmRvdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGxlbiwgbG9uZyBmbGFncyk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZ2V0X3JvYnVzdF9saXN0KGxvbmcgcGlkLCBsb25nIGhlYWRfcHRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGxlbl9wdHIpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9nZXRfcm9idXN0X2xpc3QobG9uZyByZXMsIGxvbmcgcGlkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBoZWFkX3B0ciwgbG9uZyBsZW5fcHRyKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zZXRfcm9idXN0X2xpc3QobG9uZyBoZWFkLCBsb25nIGxlbik7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NldF9yb2J1c3RfbGlzdChsb25nIHJlcywgbG9uZyBoZWFkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBsZW4pOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2dldGNwdShsb25nIGNwdSwgbG9uZyBub2RlLCBsb25nIGNhY2hlKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZ2V0Y3B1KGxvbmcgcmVzLCBsb25nIGNwdSwgbG9uZyBub2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBjYWNoZSk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2lnbmFsZmQobG9uZyB1ZmQsIGxvbmcgdXNlcl9tYXNrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgc2l6ZW1hc2spOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zaWduYWxmZChsb25nIHJlcywgbG9uZyB1ZmQsIGxvbmcgdXNlcl9tYXNrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHNpemVtYXNrKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zaWduYWxmZDQobG9uZyB1ZmQsIGxvbmcgdXNlcl9tYXNrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHNpemVtYXNrLCBsb25nIGZsYWdzKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2lnbmFsZmQ0KGxvbmcgcmVzLCBsb25nIHVmZCwgbG9uZyB1c2VyX21hc2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHNpemVtYXNrLCBsb25nIGZsYWdzKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF90aW1lcmZkX2NyZWF0ZShsb25nIGNsb2NraWQsIGxvbmcgZmxhZ3MpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF90aW1lcmZkX2NyZWF0ZShsb25nIHJlcywgbG9uZyBjbG9ja2lkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGZsYWdzKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF90aW1lcmZkX3NldHRpbWUobG9uZyB1ZmQsIGxvbmcgZmxhZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgdXRtciwgbG9uZyBvdG1yKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfdGltZXJmZF9zZXR0aW1lKGxvbmcgcmVzLCBsb25nIHVmZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZmxhZ3MsIGxvbmcgdXRtciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgb3Rtcik7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfdGltZXJmZF9nZXR0aW1lKGxvbmcgdWZkLCBsb25nIG90bXIpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF90aW1lcmZkX2dldHRpbWUobG9uZyByZXMsIGxvbmcgdWZkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBvdG1yKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9ldmVudGZkKGxvbmcgY291bnQpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9ldmVudGZkKGxvbmcgcmVzLCBsb25nIGNvdW50KTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9ldmVudGZkMihsb25nIGNvdW50LCBsb25nIGZsYWdzKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZXZlbnRmZDIobG9uZyByZXMsIGxvbmcgY291bnQsIGxvbmcgZmxhZ3MpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX29sZF9yZWFkZGlyKGxvbmcgYXJnMCwgbG9uZyBhcmcxLCBsb25nIGFyZzIpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9vbGRfcmVhZGRpcihsb25nIHJlcywgbG9uZyBhcmcwLCBsb25nIGFyZzEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgYXJnMik7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfcHNlbGVjdDYobG9uZyBhcmcwLCBsb25nIGFyZzEsIGxvbmcgYXJnMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGFyZzMsIGxvbmcgYXJnNCwgbG9uZyBhcmc1KTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfcHNlbGVjdDYobG9uZyByZXMsIGxvbmcgYXJnMCwgbG9uZyBhcmcxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGFyZzIsIGxvbmcgYXJnMywgbG9uZyBhcmc0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGFyZzUpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3Bwb2xsKGxvbmcgYXJnMCwgbG9uZyBhcmcxLCBsb25nIGFyZzIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBhcmczLCBsb25nIGFyZzQpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9wcG9sbChsb25nIHJlcywgbG9uZyBhcmcwLCBsb25nIGFyZzEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgYXJnMiwgbG9uZyBhcmczLCBsb25nIGFyZzQpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2Zhbm90aWZ5X2luaXQobG9uZyBmbGFncywgbG9uZyBldmVudF9mX2ZsYWdzKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZmFub3RpZnlfaW5pdChsb25nIHJlcywgbG9uZyBmbGFncywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGV2ZW50X2ZfZmxhZ3MpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2Zhbm90aWZ5X21hcmsobG9uZyBmYW5vdGlmeV9mZCwgbG9uZyBmbGFncywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgbWFzaywgbG9uZyBmZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgcGF0aG5hbWUpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9mYW5vdGlmeV9tYXJrKGxvbmcgcmVzLCBsb25nIGZhbm90aWZ5X2ZkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZmxhZ3MsIGxvbmcgbWFzaywgbG9uZyBmZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHBhdGhuYW1lKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zeW5jZnMobG9uZyBmZCk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3N5bmNmcyhsb25nIHJlcywgbG9uZyBmZCk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfcGVyZl9ldmVudF9vcGVuKGxvbmcgYXR0cl91cHRyLCBsb25nIHBpZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBjcHUsIGxvbmcgZ3JvdXBfZmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZmxhZ3MpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9wZXJmX2V2ZW50X29wZW4obG9uZyByZXMsIGxvbmcgYXR0cl91cHRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBwaWQsIGxvbmcgY3B1LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBncm91cF9mZCwgbG9uZyBmbGFncyk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfbW1hcF9wZ29mZihsb25nIGFkZHIsIGxvbmcgbGVuLCBsb25nIHByb3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGZsYWdzLCBsb25nIGZkLCBsb25nIHBnb2ZmKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbW1hcF9wZ29mZihsb25nIHJlcywgbG9uZyBhZGRyLCBsb25nIGxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHByb3QsIGxvbmcgZmxhZ3MsIGxvbmcgZmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBwZ29mZik7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfb2xkX21tYXAobG9uZyBhcmcpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9vbGRfbW1hcChsb25nIHJlcywgbG9uZyBhcmcpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX25hbWVfdG9faGFuZGxlX2F0KGxvbmcgZGZkLCBsb25nIG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBoYW5kbGUsIGxvbmcgbW50X2lkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZmxhZyk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX25hbWVfdG9faGFuZGxlX2F0KGxvbmcgcmVzLCBsb25nIGRmZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBuYW1lLCBsb25nIGhhbmRsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBtbnRfaWQsIGxvbmcgZmxhZyk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfb3Blbl9ieV9oYW5kbGVfYXQobG9uZyBtb3VudGRpcmZkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgaGFuZGxlLCBsb25nIGZsYWdzKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfb3Blbl9ieV9oYW5kbGVfYXQobG9uZyByZXMsIGxvbmcgbW91bnRkaXJmZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBoYW5kbGUsIGxvbmcgZmxhZ3MpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NldG5zKGxvbmcgZmQsIGxvbmcgbnN0eXBlKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2V0bnMobG9uZyByZXMsIGxvbmcgZmQsIGxvbmcgbnN0eXBlKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9wcm9jZXNzX3ZtX3JlYWR2KGxvbmcgcGlkLCBsb25nIGx2ZWMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGxpb3ZjbnQsIGxvbmcgcnZlYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgcmlvdmNudCwgbG9uZyBmbGFncyk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3Byb2Nlc3Nfdm1fcmVhZHYobG9uZyByZXMsIGxvbmcgcGlkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgbHZlYywgbG9uZyBsaW92Y250LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgcnZlYywgbG9uZyByaW92Y250LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZmxhZ3MpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3Byb2Nlc3Nfdm1fd3JpdGV2KGxvbmcgcGlkLCBsb25nIGx2ZWMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBsaW92Y250LCBsb25nIHJ2ZWMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyByaW92Y250LCBsb25nIGZsYWdzKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfcHJvY2Vzc192bV93cml0ZXYobG9uZyByZXMsIGxvbmcgcGlkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGx2ZWMsIGxvbmcgbGlvdmNudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBydmVjLCBsb25nIHJpb3ZjbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZmxhZ3MpOwotdm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2ZvcmsoKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZm9yayhsb25nIHJlcyk7Ci12b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfdmZvcmsoKTsKLXZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfdmZvcmsobG9uZyByZXMpOwotCi0jaWZkZWYgX19jcGx1c3BsdXMKLX0gIC8vIGV4dGVybiAiQyIKLSNlbmRpZgotCi0jZW5kaWYgIC8vIFNBTklUSVpFUl9MSU5VWF9TWVNDQUxMX0hPT0tTX0gKZGlmZiAtLWdpdCBhL2NsYW5nLTI1NzcxMTMvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvc2FuaXRpemVyL2xzYW5faW50ZXJmYWNlLmggYi9jbGFuZy0yNTc3MTEzL2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL3Nhbml0aXplci9sc2FuX2ludGVyZmFjZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZmI4ZTc1Li4wMDAwMDAwCi0tLSBhL2NsYW5nLTI1NzcxMTMvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvc2FuaXRpemVyL2xzYW5faW50ZXJmYWNlLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4NCArMCwwIEBACi0vLz09PS0tIHNhbml0aXplci9sc2FuX2ludGVyZmFjZS5oIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSotIEMrKyAtKi09PT0vLwotLy8KLS8vICAgICAgICAgICAgICAgICAgICAgVGhlIExMVk0gQ29tcGlsZXIgSW5mcmFzdHJ1Y3R1cmUKLS8vCi0vLyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIFVuaXZlcnNpdHkgb2YgSWxsaW5vaXMgT3BlbiBTb3VyY2UKLS8vIExpY2Vuc2UuIFNlZSBMSUNFTlNFLlRYVCBmb3IgZGV0YWlscy4KLS8vCi0vLz09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0vLwotLy8KLS8vIFRoaXMgZmlsZSBpcyBhIHBhcnQgb2YgTGVha1Nhbml0aXplci4KLS8vCi0vLyBQdWJsaWMgaW50ZXJmYWNlIGhlYWRlci4KLS8vPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PS8vCi0jaWZuZGVmIFNBTklUSVpFUl9MU0FOX0lOVEVSRkFDRV9ICi0jZGVmaW5lIFNBTklUSVpFUl9MU0FOX0lOVEVSRkFDRV9ICi0KLSNpbmNsdWRlIDxzYW5pdGl6ZXIvY29tbW9uX2ludGVyZmFjZV9kZWZzLmg+Ci0KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIiB7Ci0jZW5kaWYKLSAgLy8gQWxsb2NhdGlvbnMgbWFkZSBiZXR3ZWVuIGNhbGxzIHRvIF9fbHNhbl9kaXNhYmxlKCkgYW5kIF9fbHNhbl9lbmFibGUoKSB3aWxsCi0gIC8vIGJlIHRyZWF0ZWQgYXMgbm9uLWxlYWtzLiBEaXNhYmxlL2VuYWJsZSBwYWlycyBtYXkgYmUgbmVzdGVkLgotICB2b2lkIF9fbHNhbl9kaXNhYmxlKCk7Ci0gIHZvaWQgX19sc2FuX2VuYWJsZSgpOwotCi0gIC8vIFRoZSBoZWFwIG9iamVjdCBpbnRvIHdoaWNoIHAgcG9pbnRzIHdpbGwgYmUgdHJlYXRlZCBhcyBhIG5vbi1sZWFrLgotICB2b2lkIF9fbHNhbl9pZ25vcmVfb2JqZWN0KGNvbnN0IHZvaWQgKnApOwotCi0gIC8vIE1lbW9yeSByZWdpb25zIHJlZ2lzdGVyZWQgdGhyb3VnaCB0aGlzIGludGVyZmFjZSB3aWxsIGJlIHRyZWF0ZWQgYXMgc291cmNlcwotICAvLyBvZiBsaXZlIHBvaW50ZXJzIGR1cmluZyBsZWFrIGNoZWNraW5nLiBVc2VmdWwgaWYgeW91IHN0b3JlIHBvaW50ZXJzIGluCi0gIC8vIG1hcHBlZCBtZW1vcnkuCi0gIC8vIFBvaW50cyBvZiBub3RlOgotICAvLyAtIF9fbHNhbl91bnJlZ2lzdGVyX3Jvb3RfcmVnaW9uKCkgbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgc2FtZSBwb2ludGVyIGFuZAotICAvLyBzaXplIHRoYXQgaGF2ZSBlYXJsaWVyIGJlZW4gcGFzc2VkIHRvIF9fbHNhbl9yZWdpc3Rlcl9yb290X3JlZ2lvbigpCi0gIC8vIC0gTFNhbiB3aWxsIHNraXAgYW55IGluYWNjZXNzaWJsZSBtZW1vcnkgd2hlbiBzY2FubmluZyBhIHJvb3QgcmVnaW9uLiBFLmcuLAotICAvLyBpZiB5b3UgbWFwIG1lbW9yeSB3aXRoaW4gYSBsYXJnZXIgcmVnaW9uIHRoYXQgeW91IGhhdmUgbXByb3RlY3QnZWQsIHlvdSBjYW4KLSAgLy8gcmVnaXN0ZXIgdGhlIGVudGlyZSBsYXJnZSByZWdpb24uCi0gIC8vIC0gdGhlIGltcGxlbWVudGF0aW9uIGlzIG5vdCBvcHRpbWl6ZWQgZm9yIHBlcmZvcm1hbmNlLiBUaGlzIGludGVyZmFjZSBpcwotICAvLyBpbnRlbmRlZCB0byBiZSB1c2VkIGZvciBhIHNtYWxsIG51bWJlciBvZiByZWxhdGl2ZWx5IHN0YXRpYyByZWdpb25zLgotICB2b2lkIF9fbHNhbl9yZWdpc3Rlcl9yb290X3JlZ2lvbihjb25zdCB2b2lkICpwLCBzaXplX3Qgc2l6ZSk7Ci0gIHZvaWQgX19sc2FuX3VucmVnaXN0ZXJfcm9vdF9yZWdpb24oY29uc3Qgdm9pZCAqcCwgc2l6ZV90IHNpemUpOwotCi0gIC8vIENoZWNrIGZvciBsZWFrcyBub3cuIFRoaXMgZnVuY3Rpb24gYmVoYXZlcyBpZGVudGljYWxseSB0byB0aGUgZGVmYXVsdAotICAvLyBlbmQtb2YtcHJvY2VzcyBsZWFrIGNoZWNrLiBJbiBwYXJ0aWN1bGFyLCBpdCB3aWxsIHRlcm1pbmF0ZSB0aGUgcHJvY2VzcyBpZgotICAvLyBsZWFrcyBhcmUgZm91bmQgYW5kIHRoZSBleGl0Y29kZSBydW50aW1lIGZsYWcgaXMgbm9uLXplcm8uCi0gIC8vIFN1YnNlcXVlbnQgY2FsbHMgdG8gdGhpcyBmdW5jdGlvbiB3aWxsIGhhdmUgbm8gZWZmZWN0IGFuZCBlbmQtb2YtcHJvY2VzcwotICAvLyBsZWFrIGNoZWNrIHdpbGwgbm90IHJ1bi4gRWZmZWN0aXZlbHksIGVuZC1vZi1wcm9jZXNzIGxlYWsgY2hlY2sgaXMgbW92ZWQgdG8KLSAgLy8gdGhlIHRpbWUgb2YgZmlyc3QgaW52b2NhdGlvbiBvZiB0aGlzIGZ1bmN0aW9uLgotICAvLyBCeSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24gZWFybHkgZHVyaW5nIHByb2Nlc3Mgc2h1dGRvd24sIHlvdSBjYW4gaW5zdHJ1Y3QKLSAgLy8gTFNhbiB0byBpZ25vcmUgc2h1dGRvd24tb25seSBsZWFrcyB3aGljaCBoYXBwZW4gbGF0ZXIgb24uCi0gIHZvaWQgX19sc2FuX2RvX2xlYWtfY2hlY2soKTsKLQotICAvLyBDaGVjayBmb3IgbGVha3Mgbm93LiBSZXR1cm5zIHplcm8gaWYgbm8gbGVha3MgaGF2ZSBiZWVuIGZvdW5kIG9yIGlmIGxlYWsKLSAgLy8gZGV0ZWN0aW9uIGlzIGRpc2FibGVkLCBub24temVybyBvdGhlcndpc2UuCi0gIC8vIFRoaXMgZnVuY3Rpb24gbWF5IGJlIGNhbGxlZCByZXBlYXRlZGx5LCBlLmcuIHRvIHBlcmlvZGljYWxseSBjaGVjayBhCi0gIC8vIGxvbmctcnVubmluZyBwcm9jZXNzLiBJdCBwcmludHMgYSBsZWFrIHJlcG9ydCBpZiBhcHByb3ByaWF0ZSwgYnV0IGRvZXMgbm90Ci0gIC8vIHRlcm1pbmF0ZSB0aGUgcHJvY2Vzcy4gSXQgZG9lcyBub3QgYWZmZWN0IHRoZSBiZWhhdmlvciBvZgotICAvLyBfX2xzYW5fZG9fbGVha19jaGVjaygpIG9yIHRoZSBlbmQtb2YtcHJvY2VzcyBsZWFrIGNoZWNrLCBhbmQgaXMgbm90Ci0gIC8vIGFmZmVjdGVkIGJ5IHRoZW0uCi0gIGludCBfX2xzYW5fZG9fcmVjb3ZlcmFibGVfbGVha19jaGVjaygpOwotCi0gIC8vIFRoZSB1c2VyIG1heSBvcHRpb25hbGx5IHByb3ZpZGUgdGhpcyBmdW5jdGlvbiB0byBkaXNhbGxvdyBsZWFrIGNoZWNraW5nCi0gIC8vIGZvciB0aGUgcHJvZ3JhbSBpdCBpcyBsaW5rZWQgaW50byAoaWYgdGhlIHJldHVybiB2YWx1ZSBpcyBub24temVybykuIFRoaXMKLSAgLy8gZnVuY3Rpb24gbXVzdCBiZSBkZWZpbmVkIGFzIHJldHVybmluZyBhIGNvbnN0YW50IHZhbHVlOyBhbnkgYmVoYXZpb3IgYmV5b25kCi0gIC8vIHRoYXQgaXMgdW5zdXBwb3J0ZWQuCi0gIGludCBfX2xzYW5faXNfdHVybmVkX29mZigpOwotCi0gIC8vIFRoaXMgZnVuY3Rpb24gbWF5IGJlIG9wdGlvbmFsbHkgcHJvdmlkZWQgYnkgdGhlIHVzZXIgYW5kIHNob3VsZCByZXR1cm4KLSAgLy8gYSBzdHJpbmcgY29udGFpbmluZyBMU2FuIHN1cHByZXNzaW9ucy4KLSAgY29uc3QgY2hhciAqX19sc2FuX2RlZmF1bHRfc3VwcHJlc3Npb25zKCk7Ci0jaWZkZWYgX19jcGx1c3BsdXMKLX0gIC8vIGV4dGVybiAiQyIKLQotbmFtZXNwYWNlIF9fbHNhbiB7Ci1jbGFzcyBTY29wZWREaXNhYmxlciB7Ci0gcHVibGljOgotICBTY29wZWREaXNhYmxlcigpIHsgX19sc2FuX2Rpc2FibGUoKTsgfQotICB+U2NvcGVkRGlzYWJsZXIoKSB7IF9fbHNhbl9lbmFibGUoKTsgfQotfTsKLX0gIC8vIG5hbWVzcGFjZSBfX2xzYW4KLSNlbmRpZgotCi0jZW5kaWYgIC8vIFNBTklUSVpFUl9MU0FOX0lOVEVSRkFDRV9ICmRpZmYgLS1naXQgYS9jbGFuZy0yNTc3MTEzL2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL3Nhbml0aXplci9tc2FuX2ludGVyZmFjZS5oIGIvY2xhbmctMjU3NzExMy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9zYW5pdGl6ZXIvbXNhbl9pbnRlcmZhY2UuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmQ2YTM3Ni4uMDAwMDAwMAotLS0gYS9jbGFuZy0yNTc3MTEzL2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL3Nhbml0aXplci9tc2FuX2ludGVyZmFjZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTExICswLDAgQEAKLS8vPT09LS0gbXNhbl9pbnRlcmZhY2UuaCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PS8vCi0vLwotLy8gICAgICAgICAgICAgICAgICAgICBUaGUgTExWTSBDb21waWxlciBJbmZyYXN0cnVjdHVyZQotLy8KLS8vIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgVW5pdmVyc2l0eSBvZiBJbGxpbm9pcyBPcGVuIFNvdXJjZQotLy8gTGljZW5zZS4gU2VlIExJQ0VOU0UuVFhUIGZvciBkZXRhaWxzLgotLy8KLS8vPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PS8vCi0vLwotLy8gVGhpcyBmaWxlIGlzIGEgcGFydCBvZiBNZW1vcnlTYW5pdGl6ZXIuCi0vLwotLy8gUHVibGljIGludGVyZmFjZSBoZWFkZXIuCi0vLz09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0vLwotI2lmbmRlZiBNU0FOX0lOVEVSRkFDRV9ICi0jZGVmaW5lIE1TQU5fSU5URVJGQUNFX0gKLQotI2luY2x1ZGUgPHNhbml0aXplci9jb21tb25faW50ZXJmYWNlX2RlZnMuaD4KLQotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiIHsKLSNlbmRpZgotICAvKiBTZXQgcmF3IG9yaWdpbiBmb3IgdGhlIG1lbW9yeSByYW5nZS4gKi8KLSAgdm9pZCBfX21zYW5fc2V0X29yaWdpbihjb25zdCB2b2xhdGlsZSB2b2lkICphLCBzaXplX3Qgc2l6ZSwgdWludDMyX3Qgb3JpZ2luKTsKLQotICAvKiBHZXQgcmF3IG9yaWdpbiBmb3IgYW4gYWRkcmVzcy4gKi8KLSAgdWludDMyX3QgX19tc2FuX2dldF9vcmlnaW4oY29uc3Qgdm9sYXRpbGUgdm9pZCAqYSk7Ci0KLSAgLyogVGVzdCB0aGF0IHRoaXNfaWQgaXMgYSBkZXNjZW5kYW50IG9mIHByZXZfaWQgKG9yIHRoZXkgYXJlIHNpbXBseSBlcXVhbCkuCi0gICAqICJkZXNjZW5kYW50IiBoZXJlIG1lYW5zIHRoZXkgYXJlIHBhcnQgb2YgdGhlIHNhbWUgY2hhaW4sIGNyZWF0ZWQgd2l0aAotICAgKiBfX21zYW5fY2hhaW5fb3JpZ2luLiAqLwotICBpbnQgX19tc2FuX29yaWdpbl9pc19kZXNjZW5kYW50X29yX3NhbWUodWludDMyX3QgdGhpc19pZCwgdWludDMyX3QgcHJldl9pZCk7Ci0KLSAgLyogUmV0dXJucyBub24temVybyBpZiB0cmFja2luZyBvcmlnaW5zLiAqLwotICBpbnQgX19tc2FuX2dldF90cmFja19vcmlnaW5zKCk7Ci0KLSAgLyogUmV0dXJucyB0aGUgb3JpZ2luIGlkIG9mIHRoZSBsYXRlc3QgVU1SIGluIHRoZSBjYWxsaW5nIHRocmVhZC4gKi8KLSAgdWludDMyX3QgX19tc2FuX2dldF91bXJfb3JpZ2luKCk7Ci0KLSAgLyogTWFrZSBtZW1vcnkgcmVnaW9uIGZ1bGx5IGluaXRpYWxpemVkICh3aXRob3V0IGNoYW5naW5nIGl0cyBjb250ZW50cykuICovCi0gIHZvaWQgX19tc2FuX3VucG9pc29uKGNvbnN0IHZvbGF0aWxlIHZvaWQgKmEsIHNpemVfdCBzaXplKTsKLQotICAvKiBNYWtlIGEgbnVsbC10ZXJtaW5hdGVkIHN0cmluZyBmdWxseSBpbml0aWFsaXplZCAod2l0aG91dCBjaGFuZ2luZyBpdHMKLSAgICAgY29udGVudHMpLiAqLwotICB2b2lkIF9fbXNhbl91bnBvaXNvbl9zdHJpbmcoY29uc3Qgdm9sYXRpbGUgY2hhciAqYSk7Ci0KLSAgLyogTWFrZSBtZW1vcnkgcmVnaW9uIGZ1bGx5IHVuaW5pdGlhbGl6ZWQgKHdpdGhvdXQgY2hhbmdpbmcgaXRzIGNvbnRlbnRzKS4KLSAgICAgVGhpcyBpcyBhIGxlZ2FjeSBpbnRlcmZhY2UgdGhhdCBkb2VzIG5vdCB1cGRhdGUgb3JpZ2luIGluZm9ybWF0aW9uLiBVc2UKLSAgICAgX19tc2FuX2FsbG9jYXRlZF9tZW1vcnkoKSBpbnN0ZWFkLiAqLwotICB2b2lkIF9fbXNhbl9wb2lzb24oY29uc3Qgdm9sYXRpbGUgdm9pZCAqYSwgc2l6ZV90IHNpemUpOwotCi0gIC8qIE1ha2UgbWVtb3J5IHJlZ2lvbiBwYXJ0aWFsbHkgdW5pbml0aWFsaXplZCAod2l0aG91dCBjaGFuZ2luZyBpdHMgY29udGVudHMpLgotICAgKi8KLSAgdm9pZCBfX21zYW5fcGFydGlhbF9wb2lzb24oY29uc3Qgdm9sYXRpbGUgdm9pZCAqZGF0YSwgdm9pZCAqc2hhZG93LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgc2l6ZSk7Ci0KLSAgLyogUmV0dXJucyB0aGUgb2Zmc2V0IG9mIHRoZSBmaXJzdCAoYXQgbGVhc3QgcGFydGlhbGx5KSBwb2lzb25lZCBieXRlIGluIHRoZQotICAgICBtZW1vcnkgcmFuZ2UsIG9yIC0xIGlmIHRoZSB3aG9sZSByYW5nZSBpcyBnb29kLiAqLwotICBpbnRwdHJfdCBfX21zYW5fdGVzdF9zaGFkb3coY29uc3Qgdm9sYXRpbGUgdm9pZCAqeCwgc2l6ZV90IHNpemUpOwotCi0gIC8qIENoZWNrcyB0aGF0IG1lbW9yeSByYW5nZSBpcyBmdWxseSBpbml0aWFsaXplZCwgYW5kIHJlcG9ydHMgYW4gZXJyb3IgaWYgaXQKLSAgICogaXMgbm90LiAqLwotICB2b2lkIF9fbXNhbl9jaGVja19tZW1faXNfaW5pdGlhbGl6ZWQoY29uc3Qgdm9sYXRpbGUgdm9pZCAqeCwgc2l6ZV90IHNpemUpOwotCi0gIC8qIEZvciB0ZXN0aW5nOgotICAgICBfX21zYW5fc2V0X2V4cGVjdF91bXIoMSk7Ci0gICAgIC4uLiBzb21lIGJ1Z2d5IGNvZGUgLi4uCi0gICAgIF9fbXNhbl9zZXRfZXhwZWN0X3VtcigwKTsKLSAgICAgVGhlIGxhc3QgbGluZSB3aWxsIHZlcmlmeSB0aGF0IGEgVU1SIGhhcHBlbmVkLiAqLwotICB2b2lkIF9fbXNhbl9zZXRfZXhwZWN0X3VtcihpbnQgZXhwZWN0X3Vtcik7Ci0KLSAgLyogQ2hhbmdlIHRoZSB2YWx1ZSBvZiBrZWVwX2dvaW5nIGZsYWcuIE5vbi16ZXJvIHZhbHVlIG1lYW5zIGRvbid0IHRlcm1pbmF0ZQotICAgICBwcm9ncmFtIGV4ZWN1dGlvbiB3aGVuIGFuIGVycm9yIGlzIGRldGVjdGVkLiBUaGlzIHdpbGwgbm90IGFmZmVjdCBlcnJvciBpbgotICAgICBtb2R1bGVzIHRoYXQgd2VyZSBjb21waWxlZCB3aXRob3V0IHRoZSBjb3JyZXNwb25kaW5nIGNvbXBpbGVyIGZsYWcuICovCi0gIHZvaWQgX19tc2FuX3NldF9rZWVwX2dvaW5nKGludCBrZWVwX2dvaW5nKTsKLQotICAvKiBQcmludCBzaGFkb3cgYW5kIG9yaWdpbiBmb3IgdGhlIG1lbW9yeSByYW5nZSB0byBzdGRlcnIgaW4gYSBodW1hbi1yZWFkYWJsZQotICAgICBmb3JtYXQuICovCi0gIHZvaWQgX19tc2FuX3ByaW50X3NoYWRvdyhjb25zdCB2b2xhdGlsZSB2b2lkICp4LCBzaXplX3Qgc2l6ZSk7Ci0KLSAgLyogUHJpbnQgc2hhZG93IGZvciB0aGUgbWVtb3J5IHJhbmdlIHRvIHN0ZGVyciBpbiBhIG1pbmltYWxpc3RpYwotICAgICBodW1hbi1yZWFkYWJsZSBmb3JtYXQuICovCi0gIHZvaWQgX19tc2FuX2R1bXBfc2hhZG93KGNvbnN0IHZvbGF0aWxlIHZvaWQgKngsIHNpemVfdCBzaXplKTsKLQotICAvKiBSZXR1cm5zIHRydWUgaWYgcnVubmluZyB1bmRlciBhIGR5bmFtaWMgdG9vbCAoRHluYW1vUmlvLWJhc2VkKS4gKi8KLSAgaW50ICBfX21zYW5faGFzX2R5bmFtaWNfY29tcG9uZW50KCk7Ci0KLSAgLyogVGVsbCBNU2FuIGFib3V0IG5ld2x5IGFsbG9jYXRlZCBtZW1vcnkgKGV4LjogY3VzdG9tIGFsbG9jYXRvcikuCi0gICAgIE1lbW9yeSB3aWxsIGJlIG1hcmtlZCB1bmluaXRpYWxpemVkLCB3aXRoIG9yaWdpbiBhdCB0aGUgY2FsbCBzaXRlLiAqLwotICB2b2lkIF9fbXNhbl9hbGxvY2F0ZWRfbWVtb3J5KGNvbnN0IHZvbGF0aWxlIHZvaWQqIGRhdGEsIHNpemVfdCBzaXplKTsKLQotICAvKiBUZWxsIE1TYW4gYWJvdXQgbmV3bHkgZGVzdHJveWVkIG1lbW9yeS4gTWFyayBtZW1vcnkgYXMgdW5pbml0aWFsaXplZC4gKi8KLSAgdm9pZCBfX3Nhbml0aXplcl9kdG9yX2NhbGxiYWNrKGNvbnN0IHZvbGF0aWxlIHZvaWQqIGRhdGEsIHNpemVfdCBzaXplKTsKLQotICAvKiBUaGlzIGZ1bmN0aW9uIG1heSBiZSBvcHRpb25hbGx5IHByb3ZpZGVkIGJ5IHVzZXIgYW5kIHNob3VsZCByZXR1cm4KLSAgICAgYSBzdHJpbmcgY29udGFpbmluZyBNc2FuIHJ1bnRpbWUgb3B0aW9ucy4gU2VlIG1zYW5fZmxhZ3MuaCBmb3IgZGV0YWlscy4gKi8KLSAgY29uc3QgY2hhciogX19tc2FuX2RlZmF1bHRfb3B0aW9ucygpOwotCi0gIC8qIERlcHJlY2F0ZWQuIENhbGwgX19zYW5pdGl6ZXJfc2V0X2RlYXRoX2NhbGxiYWNrIGluc3RlYWQuICovCi0gIHZvaWQgX19tc2FuX3NldF9kZWF0aF9jYWxsYmFjayh2b2lkICgqY2FsbGJhY2spKHZvaWQpKTsKLQotICAvKiBVcGRhdGUgc2hhZG93IGZvciB0aGUgYXBwbGljYXRpb24gY29weSBvZiBzaXplIGJ5dGVzIGZyb20gc3JjIHRvIGRzdC4KLSAgICAgU3JjIGFuZCBkc3QgYXJlIGFwcGxpY2F0aW9uIGFkZHJlc3Nlcy4gVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBjb3B5IHRoZQotICAgICBhY3R1YWwgYXBwbGljYXRpb24gbWVtb3J5LCBpdCBvbmx5IHVwZGF0ZXMgc2hhZG93IGFuZCBvcmlnaW4gZm9yIHN1Y2gKLSAgICAgY29weS4gU291cmNlIGFuZCBkZXN0aW5hdGlvbiByZWdpb25zIGNhbiBvdmVybGFwLiAqLwotICB2b2lkIF9fbXNhbl9jb3B5X3NoYWRvdyhjb25zdCB2b2xhdGlsZSB2b2lkICpkc3QsIGNvbnN0IHZvbGF0aWxlIHZvaWQgKnNyYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHNpemUpOwotI2lmZGVmIF9fY3BsdXNwbHVzCi19ICAvLyBleHRlcm4gIkMiCi0jZW5kaWYKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9jbGFuZy0yNTc3MTEzL2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL3Nhbml0aXplci90c2FuX2ludGVyZmFjZV9hdG9taWMuaCBiL2NsYW5nLTI1NzcxMTMvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvc2FuaXRpemVyL3RzYW5faW50ZXJmYWNlX2F0b21pYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZWE3N2QyLi4wMDAwMDAwCi0tLSBhL2NsYW5nLTI1NzcxMTMvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvc2FuaXRpemVyL3RzYW5faW50ZXJmYWNlX2F0b21pYy5oCisrKyAvZGV2L251bGwKQEAgLTEsMjIyICswLDAgQEAKLS8vPT09LS0gdHNhbl9pbnRlcmZhY2VfYXRvbWljLmggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi0gQysrIC0qLT09PS8vCi0vLwotLy8gICAgICAgICAgICAgICAgICAgICBUaGUgTExWTSBDb21waWxlciBJbmZyYXN0cnVjdHVyZQotLy8KLS8vIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgVW5pdmVyc2l0eSBvZiBJbGxpbm9pcyBPcGVuIFNvdXJjZQotLy8gTGljZW5zZS4gU2VlIExJQ0VOU0UuVFhUIGZvciBkZXRhaWxzLgotLy8KLS8vPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PS8vCi0vLwotLy8gVGhpcyBmaWxlIGlzIGEgcGFydCBvZiBUaHJlYWRTYW5pdGl6ZXIgKFRTYW4pLCBhIHJhY2UgZGV0ZWN0b3IuCi0vLwotLy8gUHVibGljIGludGVyZmFjZSBoZWFkZXIgZm9yIFRTYW4gYXRvbWljcy4KLS8vPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PS8vCi0jaWZuZGVmIFRTQU5fSU5URVJGQUNFX0FUT01JQ19ICi0jZGVmaW5lIFRTQU5fSU5URVJGQUNFX0FUT01JQ19ICi0KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIiB7Ci0jZW5kaWYKLQotdHlwZWRlZiBjaGFyICAgICBfX3RzYW5fYXRvbWljODsKLXR5cGVkZWYgc2hvcnQgICAgX190c2FuX2F0b21pYzE2OyAgLy8gTk9MSU5UCi10eXBlZGVmIGludCAgICAgIF9fdHNhbl9hdG9taWMzMjsKLXR5cGVkZWYgbG9uZyAgICAgX190c2FuX2F0b21pYzY0OyAgLy8gTk9MSU5UCi0jaWYgZGVmaW5lZChfX1NJWkVPRl9JTlQxMjhfXykgXAotICAgIHx8IChfX2NsYW5nX21ham9yX18gKiAxMDAgKyBfX2NsYW5nX21pbm9yX18gPj0gMzAyKQotX19leHRlbnNpb25fXyB0eXBlZGVmIF9faW50MTI4IF9fdHNhbl9hdG9taWMxMjg7Ci0jIGRlZmluZSBfX1RTQU5fSEFTX0lOVDEyOCAxCi0jZWxzZQotIyBkZWZpbmUgX19UU0FOX0hBU19JTlQxMjggMAotI2VuZGlmCi0KLS8vIFBhcnQgb2YgQUJJLCBkbyBub3QgY2hhbmdlLgotLy8gaHR0cDovL2xsdm0ub3JnL3ZpZXd2Yy9sbHZtLXByb2plY3QvbGliY3h4L3RydW5rL2luY2x1ZGUvYXRvbWljP3ZpZXc9bWFya3VwCi10eXBlZGVmIGVudW0gewotICBfX3RzYW5fbWVtb3J5X29yZGVyX3JlbGF4ZWQsCi0gIF9fdHNhbl9tZW1vcnlfb3JkZXJfY29uc3VtZSwKLSAgX190c2FuX21lbW9yeV9vcmRlcl9hY3F1aXJlLAotICBfX3RzYW5fbWVtb3J5X29yZGVyX3JlbGVhc2UsCi0gIF9fdHNhbl9tZW1vcnlfb3JkZXJfYWNxX3JlbCwKLSAgX190c2FuX21lbW9yeV9vcmRlcl9zZXFfY3N0Ci19IF9fdHNhbl9tZW1vcnlfb3JkZXI7Ci0KLV9fdHNhbl9hdG9taWM4IF9fdHNhbl9hdG9taWM4X2xvYWQoY29uc3Qgdm9sYXRpbGUgX190c2FuX2F0b21pYzggKmEsCi0gICAgX190c2FuX21lbW9yeV9vcmRlciBtbyk7Ci1fX3RzYW5fYXRvbWljMTYgX190c2FuX2F0b21pYzE2X2xvYWQoY29uc3Qgdm9sYXRpbGUgX190c2FuX2F0b21pYzE2ICphLAotICAgIF9fdHNhbl9tZW1vcnlfb3JkZXIgbW8pOwotX190c2FuX2F0b21pYzMyIF9fdHNhbl9hdG9taWMzMl9sb2FkKGNvbnN0IHZvbGF0aWxlIF9fdHNhbl9hdG9taWMzMiAqYSwKLSAgICBfX3RzYW5fbWVtb3J5X29yZGVyIG1vKTsKLV9fdHNhbl9hdG9taWM2NCBfX3RzYW5fYXRvbWljNjRfbG9hZChjb25zdCB2b2xhdGlsZSBfX3RzYW5fYXRvbWljNjQgKmEsCi0gICAgX190c2FuX21lbW9yeV9vcmRlciBtbyk7Ci0jaWYgX19UU0FOX0hBU19JTlQxMjgKLV9fdHNhbl9hdG9taWMxMjggX190c2FuX2F0b21pYzEyOF9sb2FkKGNvbnN0IHZvbGF0aWxlIF9fdHNhbl9hdG9taWMxMjggKmEsCi0gICAgX190c2FuX21lbW9yeV9vcmRlciBtbyk7Ci0jZW5kaWYKLQotdm9pZCBfX3RzYW5fYXRvbWljOF9zdG9yZSh2b2xhdGlsZSBfX3RzYW5fYXRvbWljOCAqYSwgX190c2FuX2F0b21pYzggdiwKLSAgICBfX3RzYW5fbWVtb3J5X29yZGVyIG1vKTsKLXZvaWQgX190c2FuX2F0b21pYzE2X3N0b3JlKHZvbGF0aWxlIF9fdHNhbl9hdG9taWMxNiAqYSwgX190c2FuX2F0b21pYzE2IHYsCi0gICAgX190c2FuX21lbW9yeV9vcmRlciBtbyk7Ci12b2lkIF9fdHNhbl9hdG9taWMzMl9zdG9yZSh2b2xhdGlsZSBfX3RzYW5fYXRvbWljMzIgKmEsIF9fdHNhbl9hdG9taWMzMiB2LAotICAgIF9fdHNhbl9tZW1vcnlfb3JkZXIgbW8pOwotdm9pZCBfX3RzYW5fYXRvbWljNjRfc3RvcmUodm9sYXRpbGUgX190c2FuX2F0b21pYzY0ICphLCBfX3RzYW5fYXRvbWljNjQgdiwKLSAgICBfX3RzYW5fbWVtb3J5X29yZGVyIG1vKTsKLSNpZiBfX1RTQU5fSEFTX0lOVDEyOAotdm9pZCBfX3RzYW5fYXRvbWljMTI4X3N0b3JlKHZvbGF0aWxlIF9fdHNhbl9hdG9taWMxMjggKmEsIF9fdHNhbl9hdG9taWMxMjggdiwKLSAgICBfX3RzYW5fbWVtb3J5X29yZGVyIG1vKTsKLSNlbmRpZgotCi1fX3RzYW5fYXRvbWljOCBfX3RzYW5fYXRvbWljOF9leGNoYW5nZSh2b2xhdGlsZSBfX3RzYW5fYXRvbWljOCAqYSwKLSAgICBfX3RzYW5fYXRvbWljOCB2LCBfX3RzYW5fbWVtb3J5X29yZGVyIG1vKTsKLV9fdHNhbl9hdG9taWMxNiBfX3RzYW5fYXRvbWljMTZfZXhjaGFuZ2Uodm9sYXRpbGUgX190c2FuX2F0b21pYzE2ICphLAotICAgIF9fdHNhbl9hdG9taWMxNiB2LCBfX3RzYW5fbWVtb3J5X29yZGVyIG1vKTsKLV9fdHNhbl9hdG9taWMzMiBfX3RzYW5fYXRvbWljMzJfZXhjaGFuZ2Uodm9sYXRpbGUgX190c2FuX2F0b21pYzMyICphLAotICAgIF9fdHNhbl9hdG9taWMzMiB2LCBfX3RzYW5fbWVtb3J5X29yZGVyIG1vKTsKLV9fdHNhbl9hdG9taWM2NCBfX3RzYW5fYXRvbWljNjRfZXhjaGFuZ2Uodm9sYXRpbGUgX190c2FuX2F0b21pYzY0ICphLAotICAgIF9fdHNhbl9hdG9taWM2NCB2LCBfX3RzYW5fbWVtb3J5X29yZGVyIG1vKTsKLSNpZiBfX1RTQU5fSEFTX0lOVDEyOAotX190c2FuX2F0b21pYzEyOCBfX3RzYW5fYXRvbWljMTI4X2V4Y2hhbmdlKHZvbGF0aWxlIF9fdHNhbl9hdG9taWMxMjggKmEsCi0gICAgX190c2FuX2F0b21pYzEyOCB2LCBfX3RzYW5fbWVtb3J5X29yZGVyIG1vKTsKLSNlbmRpZgotCi1fX3RzYW5fYXRvbWljOCBfX3RzYW5fYXRvbWljOF9mZXRjaF9hZGQodm9sYXRpbGUgX190c2FuX2F0b21pYzggKmEsCi0gICAgX190c2FuX2F0b21pYzggdiwgX190c2FuX21lbW9yeV9vcmRlciBtbyk7Ci1fX3RzYW5fYXRvbWljMTYgX190c2FuX2F0b21pYzE2X2ZldGNoX2FkZCh2b2xhdGlsZSBfX3RzYW5fYXRvbWljMTYgKmEsCi0gICAgX190c2FuX2F0b21pYzE2IHYsIF9fdHNhbl9tZW1vcnlfb3JkZXIgbW8pOwotX190c2FuX2F0b21pYzMyIF9fdHNhbl9hdG9taWMzMl9mZXRjaF9hZGQodm9sYXRpbGUgX190c2FuX2F0b21pYzMyICphLAotICAgIF9fdHNhbl9hdG9taWMzMiB2LCBfX3RzYW5fbWVtb3J5X29yZGVyIG1vKTsKLV9fdHNhbl9hdG9taWM2NCBfX3RzYW5fYXRvbWljNjRfZmV0Y2hfYWRkKHZvbGF0aWxlIF9fdHNhbl9hdG9taWM2NCAqYSwKLSAgICBfX3RzYW5fYXRvbWljNjQgdiwgX190c2FuX21lbW9yeV9vcmRlciBtbyk7Ci0jaWYgX19UU0FOX0hBU19JTlQxMjgKLV9fdHNhbl9hdG9taWMxMjggX190c2FuX2F0b21pYzEyOF9mZXRjaF9hZGQodm9sYXRpbGUgX190c2FuX2F0b21pYzEyOCAqYSwKLSAgICBfX3RzYW5fYXRvbWljMTI4IHYsIF9fdHNhbl9tZW1vcnlfb3JkZXIgbW8pOwotI2VuZGlmCi0KLV9fdHNhbl9hdG9taWM4IF9fdHNhbl9hdG9taWM4X2ZldGNoX3N1Yih2b2xhdGlsZSBfX3RzYW5fYXRvbWljOCAqYSwKLSAgICBfX3RzYW5fYXRvbWljOCB2LCBfX3RzYW5fbWVtb3J5X29yZGVyIG1vKTsKLV9fdHNhbl9hdG9taWMxNiBfX3RzYW5fYXRvbWljMTZfZmV0Y2hfc3ViKHZvbGF0aWxlIF9fdHNhbl9hdG9taWMxNiAqYSwKLSAgICBfX3RzYW5fYXRvbWljMTYgdiwgX190c2FuX21lbW9yeV9vcmRlciBtbyk7Ci1fX3RzYW5fYXRvbWljMzIgX190c2FuX2F0b21pYzMyX2ZldGNoX3N1Yih2b2xhdGlsZSBfX3RzYW5fYXRvbWljMzIgKmEsCi0gICAgX190c2FuX2F0b21pYzMyIHYsIF9fdHNhbl9tZW1vcnlfb3JkZXIgbW8pOwotX190c2FuX2F0b21pYzY0IF9fdHNhbl9hdG9taWM2NF9mZXRjaF9zdWIodm9sYXRpbGUgX190c2FuX2F0b21pYzY0ICphLAotICAgIF9fdHNhbl9hdG9taWM2NCB2LCBfX3RzYW5fbWVtb3J5X29yZGVyIG1vKTsKLSNpZiBfX1RTQU5fSEFTX0lOVDEyOAotX190c2FuX2F0b21pYzEyOCBfX3RzYW5fYXRvbWljMTI4X2ZldGNoX3N1Yih2b2xhdGlsZSBfX3RzYW5fYXRvbWljMTI4ICphLAotICAgIF9fdHNhbl9hdG9taWMxMjggdiwgX190c2FuX21lbW9yeV9vcmRlciBtbyk7Ci0jZW5kaWYKLQotX190c2FuX2F0b21pYzggX190c2FuX2F0b21pYzhfZmV0Y2hfYW5kKHZvbGF0aWxlIF9fdHNhbl9hdG9taWM4ICphLAotICAgIF9fdHNhbl9hdG9taWM4IHYsIF9fdHNhbl9tZW1vcnlfb3JkZXIgbW8pOwotX190c2FuX2F0b21pYzE2IF9fdHNhbl9hdG9taWMxNl9mZXRjaF9hbmQodm9sYXRpbGUgX190c2FuX2F0b21pYzE2ICphLAotICAgIF9fdHNhbl9hdG9taWMxNiB2LCBfX3RzYW5fbWVtb3J5X29yZGVyIG1vKTsKLV9fdHNhbl9hdG9taWMzMiBfX3RzYW5fYXRvbWljMzJfZmV0Y2hfYW5kKHZvbGF0aWxlIF9fdHNhbl9hdG9taWMzMiAqYSwKLSAgICBfX3RzYW5fYXRvbWljMzIgdiwgX190c2FuX21lbW9yeV9vcmRlciBtbyk7Ci1fX3RzYW5fYXRvbWljNjQgX190c2FuX2F0b21pYzY0X2ZldGNoX2FuZCh2b2xhdGlsZSBfX3RzYW5fYXRvbWljNjQgKmEsCi0gICAgX190c2FuX2F0b21pYzY0IHYsIF9fdHNhbl9tZW1vcnlfb3JkZXIgbW8pOwotI2lmIF9fVFNBTl9IQVNfSU5UMTI4Ci1fX3RzYW5fYXRvbWljMTI4IF9fdHNhbl9hdG9taWMxMjhfZmV0Y2hfYW5kKHZvbGF0aWxlIF9fdHNhbl9hdG9taWMxMjggKmEsCi0gICAgX190c2FuX2F0b21pYzEyOCB2LCBfX3RzYW5fbWVtb3J5X29yZGVyIG1vKTsKLSNlbmRpZgotCi1fX3RzYW5fYXRvbWljOCBfX3RzYW5fYXRvbWljOF9mZXRjaF9vcih2b2xhdGlsZSBfX3RzYW5fYXRvbWljOCAqYSwKLSAgICBfX3RzYW5fYXRvbWljOCB2LCBfX3RzYW5fbWVtb3J5X29yZGVyIG1vKTsKLV9fdHNhbl9hdG9taWMxNiBfX3RzYW5fYXRvbWljMTZfZmV0Y2hfb3Iodm9sYXRpbGUgX190c2FuX2F0b21pYzE2ICphLAotICAgIF9fdHNhbl9hdG9taWMxNiB2LCBfX3RzYW5fbWVtb3J5X29yZGVyIG1vKTsKLV9fdHNhbl9hdG9taWMzMiBfX3RzYW5fYXRvbWljMzJfZmV0Y2hfb3Iodm9sYXRpbGUgX190c2FuX2F0b21pYzMyICphLAotICAgIF9fdHNhbl9hdG9taWMzMiB2LCBfX3RzYW5fbWVtb3J5X29yZGVyIG1vKTsKLV9fdHNhbl9hdG9taWM2NCBfX3RzYW5fYXRvbWljNjRfZmV0Y2hfb3Iodm9sYXRpbGUgX190c2FuX2F0b21pYzY0ICphLAotICAgIF9fdHNhbl9hdG9taWM2NCB2LCBfX3RzYW5fbWVtb3J5X29yZGVyIG1vKTsKLSNpZiBfX1RTQU5fSEFTX0lOVDEyOAotX190c2FuX2F0b21pYzEyOCBfX3RzYW5fYXRvbWljMTI4X2ZldGNoX29yKHZvbGF0aWxlIF9fdHNhbl9hdG9taWMxMjggKmEsCi0gICAgX190c2FuX2F0b21pYzEyOCB2LCBfX3RzYW5fbWVtb3J5X29yZGVyIG1vKTsKLSNlbmRpZgotCi1fX3RzYW5fYXRvbWljOCBfX3RzYW5fYXRvbWljOF9mZXRjaF94b3Iodm9sYXRpbGUgX190c2FuX2F0b21pYzggKmEsCi0gICAgX190c2FuX2F0b21pYzggdiwgX190c2FuX21lbW9yeV9vcmRlciBtbyk7Ci1fX3RzYW5fYXRvbWljMTYgX190c2FuX2F0b21pYzE2X2ZldGNoX3hvcih2b2xhdGlsZSBfX3RzYW5fYXRvbWljMTYgKmEsCi0gICAgX190c2FuX2F0b21pYzE2IHYsIF9fdHNhbl9tZW1vcnlfb3JkZXIgbW8pOwotX190c2FuX2F0b21pYzMyIF9fdHNhbl9hdG9taWMzMl9mZXRjaF94b3Iodm9sYXRpbGUgX190c2FuX2F0b21pYzMyICphLAotICAgIF9fdHNhbl9hdG9taWMzMiB2LCBfX3RzYW5fbWVtb3J5X29yZGVyIG1vKTsKLV9fdHNhbl9hdG9taWM2NCBfX3RzYW5fYXRvbWljNjRfZmV0Y2hfeG9yKHZvbGF0aWxlIF9fdHNhbl9hdG9taWM2NCAqYSwKLSAgICBfX3RzYW5fYXRvbWljNjQgdiwgX190c2FuX21lbW9yeV9vcmRlciBtbyk7Ci0jaWYgX19UU0FOX0hBU19JTlQxMjgKLV9fdHNhbl9hdG9taWMxMjggX190c2FuX2F0b21pYzEyOF9mZXRjaF94b3Iodm9sYXRpbGUgX190c2FuX2F0b21pYzEyOCAqYSwKLSAgICBfX3RzYW5fYXRvbWljMTI4IHYsIF9fdHNhbl9tZW1vcnlfb3JkZXIgbW8pOwotI2VuZGlmCi0KLV9fdHNhbl9hdG9taWM4IF9fdHNhbl9hdG9taWM4X2ZldGNoX25hbmQodm9sYXRpbGUgX190c2FuX2F0b21pYzggKmEsCi0gICAgX190c2FuX2F0b21pYzggdiwgX190c2FuX21lbW9yeV9vcmRlciBtbyk7Ci1fX3RzYW5fYXRvbWljMTYgX190c2FuX2F0b21pYzE2X2ZldGNoX25hbmQodm9sYXRpbGUgX190c2FuX2F0b21pYzE2ICphLAotICAgIF9fdHNhbl9hdG9taWMxNiB2LCBfX3RzYW5fbWVtb3J5X29yZGVyIG1vKTsKLV9fdHNhbl9hdG9taWMzMiBfX3RzYW5fYXRvbWljMzJfZmV0Y2hfbmFuZCh2b2xhdGlsZSBfX3RzYW5fYXRvbWljMzIgKmEsCi0gICAgX190c2FuX2F0b21pYzMyIHYsIF9fdHNhbl9tZW1vcnlfb3JkZXIgbW8pOwotX190c2FuX2F0b21pYzY0IF9fdHNhbl9hdG9taWM2NF9mZXRjaF9uYW5kKHZvbGF0aWxlIF9fdHNhbl9hdG9taWM2NCAqYSwKLSAgICBfX3RzYW5fYXRvbWljNjQgdiwgX190c2FuX21lbW9yeV9vcmRlciBtbyk7Ci0jaWYgX19UU0FOX0hBU19JTlQxMjgKLV9fdHNhbl9hdG9taWMxMjggX190c2FuX2F0b21pYzEyOF9mZXRjaF9uYW5kKHZvbGF0aWxlIF9fdHNhbl9hdG9taWMxMjggKmEsCi0gICAgX190c2FuX2F0b21pYzEyOCB2LCBfX3RzYW5fbWVtb3J5X29yZGVyIG1vKTsKLSNlbmRpZgotCi1pbnQgX190c2FuX2F0b21pYzhfY29tcGFyZV9leGNoYW5nZV93ZWFrKHZvbGF0aWxlIF9fdHNhbl9hdG9taWM4ICphLAotICAgIF9fdHNhbl9hdG9taWM4ICpjLCBfX3RzYW5fYXRvbWljOCB2LCBfX3RzYW5fbWVtb3J5X29yZGVyIG1vLAotICAgIF9fdHNhbl9tZW1vcnlfb3JkZXIgZmFpbF9tbyk7Ci1pbnQgX190c2FuX2F0b21pYzE2X2NvbXBhcmVfZXhjaGFuZ2Vfd2Vhayh2b2xhdGlsZSBfX3RzYW5fYXRvbWljMTYgKmEsCi0gICAgX190c2FuX2F0b21pYzE2ICpjLCBfX3RzYW5fYXRvbWljMTYgdiwgX190c2FuX21lbW9yeV9vcmRlciBtbywKLSAgICBfX3RzYW5fbWVtb3J5X29yZGVyIGZhaWxfbW8pOwotaW50IF9fdHNhbl9hdG9taWMzMl9jb21wYXJlX2V4Y2hhbmdlX3dlYWsodm9sYXRpbGUgX190c2FuX2F0b21pYzMyICphLAotICAgIF9fdHNhbl9hdG9taWMzMiAqYywgX190c2FuX2F0b21pYzMyIHYsIF9fdHNhbl9tZW1vcnlfb3JkZXIgbW8sCi0gICAgX190c2FuX21lbW9yeV9vcmRlciBmYWlsX21vKTsKLWludCBfX3RzYW5fYXRvbWljNjRfY29tcGFyZV9leGNoYW5nZV93ZWFrKHZvbGF0aWxlIF9fdHNhbl9hdG9taWM2NCAqYSwKLSAgICBfX3RzYW5fYXRvbWljNjQgKmMsIF9fdHNhbl9hdG9taWM2NCB2LCBfX3RzYW5fbWVtb3J5X29yZGVyIG1vLAotICAgIF9fdHNhbl9tZW1vcnlfb3JkZXIgZmFpbF9tbyk7Ci0jaWYgX19UU0FOX0hBU19JTlQxMjgKLWludCBfX3RzYW5fYXRvbWljMTI4X2NvbXBhcmVfZXhjaGFuZ2Vfd2Vhayh2b2xhdGlsZSBfX3RzYW5fYXRvbWljMTI4ICphLAotICAgIF9fdHNhbl9hdG9taWMxMjggKmMsIF9fdHNhbl9hdG9taWMxMjggdiwgX190c2FuX21lbW9yeV9vcmRlciBtbywKLSAgICBfX3RzYW5fbWVtb3J5X29yZGVyIGZhaWxfbW8pOwotI2VuZGlmCi0KLWludCBfX3RzYW5fYXRvbWljOF9jb21wYXJlX2V4Y2hhbmdlX3N0cm9uZyh2b2xhdGlsZSBfX3RzYW5fYXRvbWljOCAqYSwKLSAgICBfX3RzYW5fYXRvbWljOCAqYywgX190c2FuX2F0b21pYzggdiwgX190c2FuX21lbW9yeV9vcmRlciBtbywKLSAgICBfX3RzYW5fbWVtb3J5X29yZGVyIGZhaWxfbW8pOwotaW50IF9fdHNhbl9hdG9taWMxNl9jb21wYXJlX2V4Y2hhbmdlX3N0cm9uZyh2b2xhdGlsZSBfX3RzYW5fYXRvbWljMTYgKmEsCi0gICAgX190c2FuX2F0b21pYzE2ICpjLCBfX3RzYW5fYXRvbWljMTYgdiwgX190c2FuX21lbW9yeV9vcmRlciBtbywKLSAgICBfX3RzYW5fbWVtb3J5X29yZGVyIGZhaWxfbW8pOwotaW50IF9fdHNhbl9hdG9taWMzMl9jb21wYXJlX2V4Y2hhbmdlX3N0cm9uZyh2b2xhdGlsZSBfX3RzYW5fYXRvbWljMzIgKmEsCi0gICAgX190c2FuX2F0b21pYzMyICpjLCBfX3RzYW5fYXRvbWljMzIgdiwgX190c2FuX21lbW9yeV9vcmRlciBtbywKLSAgICBfX3RzYW5fbWVtb3J5X29yZGVyIGZhaWxfbW8pOwotaW50IF9fdHNhbl9hdG9taWM2NF9jb21wYXJlX2V4Y2hhbmdlX3N0cm9uZyh2b2xhdGlsZSBfX3RzYW5fYXRvbWljNjQgKmEsCi0gICAgX190c2FuX2F0b21pYzY0ICpjLCBfX3RzYW5fYXRvbWljNjQgdiwgX190c2FuX21lbW9yeV9vcmRlciBtbywKLSAgICBfX3RzYW5fbWVtb3J5X29yZGVyIGZhaWxfbW8pOwotI2lmIF9fVFNBTl9IQVNfSU5UMTI4Ci1pbnQgX190c2FuX2F0b21pYzEyOF9jb21wYXJlX2V4Y2hhbmdlX3N0cm9uZyh2b2xhdGlsZSBfX3RzYW5fYXRvbWljMTI4ICphLAotICAgIF9fdHNhbl9hdG9taWMxMjggKmMsIF9fdHNhbl9hdG9taWMxMjggdiwgX190c2FuX21lbW9yeV9vcmRlciBtbywKLSAgICBfX3RzYW5fbWVtb3J5X29yZGVyIGZhaWxfbW8pOwotI2VuZGlmCi0KLV9fdHNhbl9hdG9taWM4IF9fdHNhbl9hdG9taWM4X2NvbXBhcmVfZXhjaGFuZ2VfdmFsKAotICAgIHZvbGF0aWxlIF9fdHNhbl9hdG9taWM4ICphLCBfX3RzYW5fYXRvbWljOCBjLCBfX3RzYW5fYXRvbWljOCB2LAotICAgIF9fdHNhbl9tZW1vcnlfb3JkZXIgbW8sIF9fdHNhbl9tZW1vcnlfb3JkZXIgZmFpbF9tbyk7Ci1fX3RzYW5fYXRvbWljMTYgX190c2FuX2F0b21pYzE2X2NvbXBhcmVfZXhjaGFuZ2VfdmFsKAotICAgIHZvbGF0aWxlIF9fdHNhbl9hdG9taWMxNiAqYSwgX190c2FuX2F0b21pYzE2IGMsIF9fdHNhbl9hdG9taWMxNiB2LAotICAgIF9fdHNhbl9tZW1vcnlfb3JkZXIgbW8sIF9fdHNhbl9tZW1vcnlfb3JkZXIgZmFpbF9tbyk7Ci1fX3RzYW5fYXRvbWljMzIgX190c2FuX2F0b21pYzMyX2NvbXBhcmVfZXhjaGFuZ2VfdmFsKAotICAgIHZvbGF0aWxlIF9fdHNhbl9hdG9taWMzMiAqYSwgX190c2FuX2F0b21pYzMyIGMsIF9fdHNhbl9hdG9taWMzMiB2LAotICAgIF9fdHNhbl9tZW1vcnlfb3JkZXIgbW8sIF9fdHNhbl9tZW1vcnlfb3JkZXIgZmFpbF9tbyk7Ci1fX3RzYW5fYXRvbWljNjQgX190c2FuX2F0b21pYzY0X2NvbXBhcmVfZXhjaGFuZ2VfdmFsKAotICAgIHZvbGF0aWxlIF9fdHNhbl9hdG9taWM2NCAqYSwgX190c2FuX2F0b21pYzY0IGMsIF9fdHNhbl9hdG9taWM2NCB2LAotICAgIF9fdHNhbl9tZW1vcnlfb3JkZXIgbW8sIF9fdHNhbl9tZW1vcnlfb3JkZXIgZmFpbF9tbyk7Ci0jaWYgX19UU0FOX0hBU19JTlQxMjgKLV9fdHNhbl9hdG9taWMxMjggX190c2FuX2F0b21pYzEyOF9jb21wYXJlX2V4Y2hhbmdlX3ZhbCgKLSAgICB2b2xhdGlsZSBfX3RzYW5fYXRvbWljMTI4ICphLCBfX3RzYW5fYXRvbWljMTI4IGMsIF9fdHNhbl9hdG9taWMxMjggdiwKLSAgICBfX3RzYW5fbWVtb3J5X29yZGVyIG1vLCBfX3RzYW5fbWVtb3J5X29yZGVyIGZhaWxfbW8pOwotI2VuZGlmCi0KLXZvaWQgX190c2FuX2F0b21pY190aHJlYWRfZmVuY2UoX190c2FuX21lbW9yeV9vcmRlciBtbyk7Ci12b2lkIF9fdHNhbl9hdG9taWNfc2lnbmFsX2ZlbmNlKF9fdHNhbl9tZW1vcnlfb3JkZXIgbW8pOwotCi0jaWZkZWYgX19jcGx1c3BsdXMKLX0gIC8vIGV4dGVybiAiQyIKLSNlbmRpZgotCi0jZW5kaWYgIC8vIFRTQU5fSU5URVJGQUNFX0FUT01JQ19ICmRpZmYgLS1naXQgYS9jbGFuZy0yNTc3MTEzL2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL3NoYWludHJpbi5oIGIvY2xhbmctMjU3NzExMy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9zaGFpbnRyaW4uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWI1ZDIxOC4uMDAwMDAwMAotLS0gYS9jbGFuZy0yNTc3MTEzL2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL3NoYWludHJpbi5oCisrKyAvZGV2L251bGwKQEAgLTEsNzUgKzAsMCBAQAotLyo9PT0tLS0tIHNoYWludHJpbi5oIC0gU0hBIGludHJpbnNpY3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQotICoKLSAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKLSAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCi0gKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCi0gKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCi0gKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKLSAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Ci0gKgotICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KLSAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgotICoKLSAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCi0gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKLSAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgotICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKLSAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KLSAqIFRIRSBTT0ZUV0FSRS4KLSAqCi0gKj09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09Ci0gKi8KLQotI2lmbmRlZiBfX0lNTUlOVFJJTl9ICi0jZXJyb3IgIk5ldmVyIHVzZSA8c2hhaW50cmluLmg+IGRpcmVjdGx5OyBpbmNsdWRlIDxpbW1pbnRyaW4uaD4gaW5zdGVhZC4iCi0jZW5kaWYKLQotI2lmbmRlZiBfX1NIQUlOVFJJTl9ICi0jZGVmaW5lIF9fU0hBSU5UUklOX0gKLQotLyogRGVmaW5lIHRoZSBkZWZhdWx0IGF0dHJpYnV0ZXMgZm9yIHRoZSBmdW5jdGlvbnMgaW4gdGhpcyBmaWxlLiAqLwotI2RlZmluZSBfX0RFRkFVTFRfRk5fQVRUUlMgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fLCBfX3RhcmdldF9fKCJzaGEiKSkpCi0KLSNkZWZpbmUgX21tX3NoYTFybmRzNF9lcHUzMihWMSwgVjIsIE0pIF9fZXh0ZW5zaW9uX18gKHsgXAotICBfX2J1aWx0aW5faWEzMl9zaGExcm5kczQoKF9fdjRzaSkoX19tMTI4aSkoVjEpLCAoX192NHNpKShfX20xMjhpKShWMiksIChNKSk7IH0pCi0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fc2hhMW5leHRlX2VwdTMyKF9fbTEyOGkgX19YLCBfX20xMjhpIF9fWSkKLXsKLSAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3NoYTFuZXh0ZSgoX192NHNpKV9fWCwgKF9fdjRzaSlfX1kpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX3NoYTFtc2cxX2VwdTMyKF9fbTEyOGkgX19YLCBfX20xMjhpIF9fWSkKLXsKLSAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3NoYTFtc2cxKChfX3Y0c2kpX19YLCAoX192NHNpKV9fWSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fc2hhMW1zZzJfZXB1MzIoX19tMTI4aSBfX1gsIF9fbTEyOGkgX19ZKQotewotICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfc2hhMW1zZzIoKF9fdjRzaSlfX1gsIChfX3Y0c2kpX19ZKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9zaGEyNTZybmRzMl9lcHUzMihfX20xMjhpIF9fWCwgX19tMTI4aSBfX1ksIF9fbTEyOGkgX19aKQotewotICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfc2hhMjU2cm5kczIoKF9fdjRzaSlfX1gsIChfX3Y0c2kpX19ZLCAoX192NHNpKV9fWik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fc2hhMjU2bXNnMV9lcHUzMihfX20xMjhpIF9fWCwgX19tMTI4aSBfX1kpCi17Ci0gIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9zaGEyNTZtc2cxKChfX3Y0c2kpX19YLCAoX192NHNpKV9fWSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fc2hhMjU2bXNnMl9lcHUzMihfX20xMjhpIF9fWCwgX19tMTI4aSBfX1kpCi17Ci0gIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9zaGEyNTZtc2cyKChfX3Y0c2kpX19YLCAoX192NHNpKV9fWSk7Ci19Ci0KLSN1bmRlZiBfX0RFRkFVTFRfRk5fQVRUUlMKLQotI2VuZGlmIC8qIF9fU0hBSU5UUklOX0ggKi8KZGlmZiAtLWdpdCBhL2NsYW5nLTI1NzcxMTMvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvc21taW50cmluLmggYi9jbGFuZy0yNTc3MTEzL2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL3NtbWludHJpbi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OWFkMDdmLi4wMDAwMDAwCi0tLSBhL2NsYW5nLTI1NzcxMTMvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvc21taW50cmluLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1MDggKzAsMCBAQAotLyo9PT0tLS0tIHNtbWludHJpbi5oIC0gU1NFNCBpbnRyaW5zaWNzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQotICoKLSAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKLSAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCi0gKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCi0gKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCi0gKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKLSAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Ci0gKgotICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KLSAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgotICoKLSAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCi0gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKLSAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgotICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKLSAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KLSAqIFRIRSBTT0ZUV0FSRS4KLSAqCi0gKj09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09Ci0gKi8KLQotI2lmbmRlZiBfU01NSU5UUklOX0gKLSNkZWZpbmUgX1NNTUlOVFJJTl9ICi0KLSNpbmNsdWRlIDx0bW1pbnRyaW4uaD4KLQotLyogRGVmaW5lIHRoZSBkZWZhdWx0IGF0dHJpYnV0ZXMgZm9yIHRoZSBmdW5jdGlvbnMgaW4gdGhpcyBmaWxlLiAqLwotI2RlZmluZSBfX0RFRkFVTFRfRk5fQVRUUlMgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fLCBfX3RhcmdldF9fKCJzc2U0LjEiKSkpCi0KLS8qIFNTRTQgUm91bmRpbmcgbWFjcm9zLiAqLwotI2RlZmluZSBfTU1fRlJPVU5EX1RPX05FQVJFU1RfSU5UICAgIDB4MDAKLSNkZWZpbmUgX01NX0ZST1VORF9UT19ORUdfSU5GICAgICAgICAweDAxCi0jZGVmaW5lIF9NTV9GUk9VTkRfVE9fUE9TX0lORiAgICAgICAgMHgwMgotI2RlZmluZSBfTU1fRlJPVU5EX1RPX1pFUk8gICAgICAgICAgIDB4MDMKLSNkZWZpbmUgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OICAgICAweDA0Ci0KLSNkZWZpbmUgX01NX0ZST1VORF9SQUlTRV9FWEMgICAgICAgICAweDAwCi0jZGVmaW5lIF9NTV9GUk9VTkRfTk9fRVhDICAgICAgICAgICAgMHgwOAotCi0jZGVmaW5lIF9NTV9GUk9VTkRfTklOVCAgICAgIChfTU1fRlJPVU5EX1JBSVNFX0VYQyB8IF9NTV9GUk9VTkRfVE9fTkVBUkVTVF9JTlQpCi0jZGVmaW5lIF9NTV9GUk9VTkRfRkxPT1IgICAgIChfTU1fRlJPVU5EX1JBSVNFX0VYQyB8IF9NTV9GUk9VTkRfVE9fTkVHX0lORikKLSNkZWZpbmUgX01NX0ZST1VORF9DRUlMICAgICAgKF9NTV9GUk9VTkRfUkFJU0VfRVhDIHwgX01NX0ZST1VORF9UT19QT1NfSU5GKQotI2RlZmluZSBfTU1fRlJPVU5EX1RSVU5DICAgICAoX01NX0ZST1VORF9SQUlTRV9FWEMgfCBfTU1fRlJPVU5EX1RPX1pFUk8pCi0jZGVmaW5lIF9NTV9GUk9VTkRfUklOVCAgICAgIChfTU1fRlJPVU5EX1JBSVNFX0VYQyB8IF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTikKLSNkZWZpbmUgX01NX0ZST1VORF9ORUFSQllJTlQgKF9NTV9GUk9VTkRfTk9fRVhDIHwgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKQotCi0jZGVmaW5lIF9tbV9jZWlsX3BzKFgpICAgICAgIF9tbV9yb3VuZF9wcygoWCksIF9NTV9GUk9VTkRfQ0VJTCkKLSNkZWZpbmUgX21tX2NlaWxfcGQoWCkgICAgICAgX21tX3JvdW5kX3BkKChYKSwgX01NX0ZST1VORF9DRUlMKQotI2RlZmluZSBfbW1fY2VpbF9zcyhYLCBZKSAgICBfbW1fcm91bmRfc3MoKFgpLCAoWSksIF9NTV9GUk9VTkRfQ0VJTCkKLSNkZWZpbmUgX21tX2NlaWxfc2QoWCwgWSkgICAgX21tX3JvdW5kX3NkKChYKSwgKFkpLCBfTU1fRlJPVU5EX0NFSUwpCi0KLSNkZWZpbmUgX21tX2Zsb29yX3BzKFgpICAgICAgX21tX3JvdW5kX3BzKChYKSwgX01NX0ZST1VORF9GTE9PUikKLSNkZWZpbmUgX21tX2Zsb29yX3BkKFgpICAgICAgX21tX3JvdW5kX3BkKChYKSwgX01NX0ZST1VORF9GTE9PUikKLSNkZWZpbmUgX21tX2Zsb29yX3NzKFgsIFkpICAgX21tX3JvdW5kX3NzKChYKSwgKFkpLCBfTU1fRlJPVU5EX0ZMT09SKQotI2RlZmluZSBfbW1fZmxvb3Jfc2QoWCwgWSkgICBfbW1fcm91bmRfc2QoKFgpLCAoWSksIF9NTV9GUk9VTkRfRkxPT1IpCi0KLSNkZWZpbmUgX21tX3JvdW5kX3BzKFgsIE0pIF9fZXh0ZW5zaW9uX18gKHsgXAotICAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX3JvdW5kcHMoKF9fdjRzZikoX19tMTI4KShYKSwgKE0pKTsgfSkKLQotI2RlZmluZSBfbW1fcm91bmRfc3MoWCwgWSwgTSkgX19leHRlbnNpb25fXyAoeyBcCi0gIChfX20xMjgpX19idWlsdGluX2lhMzJfcm91bmRzcygoX192NHNmKShfX20xMjgpKFgpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKShfX20xMjgpKFkpLCAoTSkpOyB9KQotCi0jZGVmaW5lIF9tbV9yb3VuZF9wZChYLCBNKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgKF9fbTEyOGQpX19idWlsdGluX2lhMzJfcm91bmRwZCgoX192MmRmKShfX20xMjhkKShYKSwgKE0pKTsgfSkKLQotI2RlZmluZSBfbW1fcm91bmRfc2QoWCwgWSwgTSkgX19leHRlbnNpb25fXyAoeyBcCi0gIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX3JvdW5kc2QoKF9fdjJkZikoX19tMTI4ZCkoWCksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKShfX20xMjhkKShZKSwgKE0pKTsgfSkKLQotLyogU1NFNCBQYWNrZWQgQmxlbmRpbmcgSW50cmluc2ljcy4gICovCi0jZGVmaW5lIF9tbV9ibGVuZF9wZChWMSwgVjIsIE0pIF9fZXh0ZW5zaW9uX18gKHsgXAotICAoX19tMTI4ZClfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192MmRmKShfX20xMjhkKShWMSksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikoX19tMTI4ZCkoVjIpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKE0pICYgMHgwMSkgPyAyIDogMCksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoTSkgJiAweDAyKSA/IDMgOiAxKSk7IH0pCi0KLSNkZWZpbmUgX21tX2JsZW5kX3BzKFYxLCBWMiwgTSkgX19leHRlbnNpb25fXyAoeyBcCi0gIChfX20xMjgpX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjRzZikoX19tMTI4KShWMSksIChfX3Y0c2YpKF9fbTEyOCkoVjIpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoTSkgJiAweDAxKSA/IDQgOiAwKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKE0pICYgMHgwMikgPyA1IDogMSksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChNKSAmIDB4MDQpID8gNiA6IDIpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoTSkgJiAweDA4KSA/IDcgOiAzKSk7IH0pCi0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fYmxlbmR2X3BkIChfX20xMjhkIF9fVjEsIF9fbTEyOGQgX19WMiwgX19tMTI4ZCBfX00pCi17Ci0gIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfYmxlbmR2cGQgKChfX3YyZGYpX19WMSwgKF9fdjJkZilfX1YyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKV9fTSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9ibGVuZHZfcHMgKF9fbTEyOCBfX1YxLCBfX20xMjggX19WMiwgX19tMTI4IF9fTSkKLXsKLSAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX2JsZW5kdnBzICgoX192NHNmKV9fVjEsIChfX3Y0c2YpX19WMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKV9fTSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fYmxlbmR2X2VwaTggKF9fbTEyOGkgX19WMSwgX19tMTI4aSBfX1YyLCBfX20xMjhpIF9fTSkKLXsKLSAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wYmxlbmR2YjEyOCAoKF9fdjE2cWkpX19WMSwgKF9fdjE2cWkpX19WMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2cWkpX19NKTsKLX0KLQotI2RlZmluZSBfbW1fYmxlbmRfZXBpMTYoVjEsIFYyLCBNKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgKF9fbTEyOGkpX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjhoaSkoX19tMTI4aSkoVjEpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4aGkpKF9fbTEyOGkpKFYyKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChNKSAmIDB4MDEpID8gIDggOiAwKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChNKSAmIDB4MDIpID8gIDkgOiAxKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChNKSAmIDB4MDQpID8gMTAgOiAyKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChNKSAmIDB4MDgpID8gMTEgOiAzKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChNKSAmIDB4MTApID8gMTIgOiA0KSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChNKSAmIDB4MjApID8gMTMgOiA1KSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChNKSAmIDB4NDApID8gMTQgOiA2KSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChNKSAmIDB4ODApID8gMTUgOiA3KSk7IH0pCi0KLS8qIFNTRTQgRHdvcmQgTXVsdGlwbHkgSW5zdHJ1Y3Rpb25zLiAgKi8KLXN0YXRpYyBfX2lubGluZV9fICBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX211bGxvX2VwaTMyIChfX20xMjhpIF9fVjEsIF9fbTEyOGkgX19WMikKLXsKLSAgcmV0dXJuIChfX20xMjhpKSAoKF9fdjRzaSlfX1YxICogKF9fdjRzaSlfX1YyKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbXVsX2VwaTMyIChfX20xMjhpIF9fVjEsIF9fbTEyOGkgX19WMikKLXsKLSAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbXVsZHExMjggKChfX3Y0c2kpX19WMSwgKF9fdjRzaSlfX1YyKTsKLX0KLQotLyogU1NFNCBGbG9hdGluZyBQb2ludCBEb3QgUHJvZHVjdCBJbnN0cnVjdGlvbnMuICAqLwotI2RlZmluZSBfbW1fZHBfcHMoWCwgWSwgTSkgX19leHRlbnNpb25fXyAoeyBcCi0gIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX2RwcHMoKF9fdjRzZikoX19tMTI4KShYKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpKF9fbTEyOCkoWSksIChNKSk7IH0pCi0KLSNkZWZpbmUgX21tX2RwX3BkKFgsIFksIE0pIF9fZXh0ZW5zaW9uX18gKHtcCi0gIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl9kcHBkKChfX3YyZGYpKF9fbTEyOGQpKFgpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpKF9fbTEyOGQpKFkpLCAoTSkpOyB9KQotCi0vKiBTU0U0IFN0cmVhbWluZyBMb2FkIEhpbnQgSW5zdHJ1Y3Rpb24uICAqLwotc3RhdGljIF9faW5saW5lX18gIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fc3RyZWFtX2xvYWRfc2kxMjggKF9fbTEyOGkgY29uc3QgKl9fVikKLXsKLSAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9tb3ZudGRxYSAoKGNvbnN0IF9fdjJkaSAqKSBfX1YpOwotfQotCi0vKiBTU0U0IFBhY2tlZCBJbnRlZ2VyIE1pbi9NYXggSW5zdHJ1Y3Rpb25zLiAgKi8KLXN0YXRpYyBfX2lubGluZV9fICBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21pbl9lcGk4IChfX20xMjhpIF9fVjEsIF9fbTEyOGkgX19WMikKLXsKLSAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbWluc2IxMjggKChfX3YxNnFpKSBfX1YxLCAoX192MTZxaSkgX19WMik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fICBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21heF9lcGk4IChfX20xMjhpIF9fVjEsIF9fbTEyOGkgX19WMikKLXsKLSAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbWF4c2IxMjggKChfX3YxNnFpKSBfX1YxLCAoX192MTZxaSkgX19WMik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fICBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21pbl9lcHUxNiAoX19tMTI4aSBfX1YxLCBfX20xMjhpIF9fVjIpCi17Ci0gIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1pbnV3MTI4ICgoX192OGhpKSBfX1YxLCAoX192OGhpKSBfX1YyKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWF4X2VwdTE2IChfX20xMjhpIF9fVjEsIF9fbTEyOGkgX19WMikKLXsKLSAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbWF4dXcxMjggKChfX3Y4aGkpIF9fVjEsIChfX3Y4aGkpIF9fVjIpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyAgX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9taW5fZXBpMzIgKF9fbTEyOGkgX19WMSwgX19tMTI4aSBfX1YyKQotewotICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BtaW5zZDEyOCAoKF9fdjRzaSkgX19WMSwgKF9fdjRzaSkgX19WMik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fICBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21heF9lcGkzMiAoX19tMTI4aSBfX1YxLCBfX20xMjhpIF9fVjIpCi17Ci0gIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1heHNkMTI4ICgoX192NHNpKSBfX1YxLCAoX192NHNpKSBfX1YyKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWluX2VwdTMyIChfX20xMjhpIF9fVjEsIF9fbTEyOGkgX19WMikKLXsKLSAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbWludWQxMjgoKF9fdjRzaSkgX19WMSwgKF9fdjRzaSkgX19WMik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fICBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21heF9lcHUzMiAoX19tMTI4aSBfX1YxLCBfX20xMjhpIF9fVjIpCi17Ci0gIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1heHVkMTI4KChfX3Y0c2kpIF9fVjEsIChfX3Y0c2kpIF9fVjIpOwotfQotCi0vKiBTU0U0IEluc2VydGlvbiBhbmQgRXh0cmFjdGlvbiBmcm9tIFhNTSBSZWdpc3RlciBJbnN0cnVjdGlvbnMuICAqLwotI2RlZmluZSBfbW1faW5zZXJ0X3BzKFgsIFksIE4pIF9fYnVpbHRpbl9pYTMyX2luc2VydHBzMTI4KChYKSwgKFkpLCAoTikpCi0jZGVmaW5lIF9tbV9leHRyYWN0X3BzKFgsIE4pIChfX2V4dGVuc2lvbl9fICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh7IHVuaW9uIHsgaW50IF9faTsgZmxvYXQgX19mOyB9IF9fdDsgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdjRzZiBfX2EgPSAoX192NHNmKShfX20xMjgpKFgpOyAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3QuX19mID0gX19hWyhOKSAmIDNdOyAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX190Ll9faTt9KSkKLQotLyogTWlzY2VsbGFuZW91cyBpbnNlcnQgYW5kIGV4dHJhY3QgbWFjcm9zLiAgKi8KLS8qIEV4dHJhY3QgYSBzaW5nbGUtcHJlY2lzaW9uIGZsb2F0IGZyb20gWCBhdCBpbmRleCBOIGludG8gRC4gICovCi0jZGVmaW5lIF9NTV9FWFRSQUNUX0ZMT0FUKEQsIFgsIE4pIChfX2V4dGVuc2lvbl9fICh7IF9fdjRzZiBfX2EgPSAoX192NHNmKShYKTsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChEKSA9IF9fYVtOXTsgfSkpCi0KLS8qIE9yIHRvZ2V0aGVyIDIgc2V0cyBvZiBpbmRleGVzIChYIGFuZCBZKSB3aXRoIHRoZSB6ZXJvaW5nIGJpdHMgKFopIHRvIGNyZWF0ZQotICAgYW4gaW5kZXggc3VpdGFibGUgZm9yIF9tbV9pbnNlcnRfcHMuICAqLwotI2RlZmluZSBfTU1fTUtfSU5TRVJUUFNfTkRYKFgsIFksIFopICgoKFgpIDw8IDYpIHwgKChZKSA8PCA0KSB8IChaKSkKLQotLyogRXh0cmFjdCBhIGZsb2F0IGZyb20gWCBhdCBpbmRleCBOIGludG8gdGhlIGZpcnN0IGluZGV4IG9mIHRoZSByZXR1cm4uICAqLwotI2RlZmluZSBfTU1fUElDS19PVVRfUFMoWCwgTikgX21tX2luc2VydF9wcyAoX21tX3NldHplcm9fcHMoKSwgKFgpLCAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NTV9NS19JTlNFUlRQU19ORFgoKE4pLCAwLCAweDBlKSkKLQotLyogSW5zZXJ0IGludCBpbnRvIHBhY2tlZCBpbnRlZ2VyIGFycmF5IGF0IGluZGV4LiAgKi8KLSNkZWZpbmUgX21tX2luc2VydF9lcGk4KFgsIEksIE4pIChfX2V4dGVuc2lvbl9fICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh7IF9fdjE2cWkgX19hID0gKF9fdjE2cWkpKF9fbTEyOGkpKFgpOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hWyhOKSAmIDE1XSA9IChJKTsgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2E7fSkpCi0jZGVmaW5lIF9tbV9pbnNlcnRfZXBpMzIoWCwgSSwgTikgKF9fZXh0ZW5zaW9uX18gICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoeyBfX3Y0c2kgX19hID0gKF9fdjRzaSkoX19tMTI4aSkoWCk7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hWyhOKSAmIDNdID0gKEkpOyAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYTt9KSkKLSNpZmRlZiBfX3g4Nl82NF9fCi0jZGVmaW5lIF9tbV9pbnNlcnRfZXBpNjQoWCwgSSwgTikgKF9fZXh0ZW5zaW9uX18gICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoeyBfX3YyZGkgX19hID0gKF9fdjJkaSkoX19tMTI4aSkoWCk7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hWyhOKSAmIDFdID0gKEkpOyAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYTt9KSkKLSNlbmRpZiAvKiBfX3g4Nl82NF9fICovCi0KLS8qIEV4dHJhY3QgaW50IGZyb20gcGFja2VkIGludGVnZXIgYXJyYXkgYXQgaW5kZXguICBUaGlzIHJldHVybnMgdGhlIGVsZW1lbnQKLSAqIGFzIGEgemVybyBleHRlbmRlZCB2YWx1ZSwgc28gaXQgaXMgdW5zaWduZWQuCi0gKi8KLSNkZWZpbmUgX21tX2V4dHJhY3RfZXBpOChYLCBOKSAoX19leHRlbnNpb25fXyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHsgX192MTZxaSBfX2EgPSAoX192MTZxaSkoX19tMTI4aSkoWCk7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkodW5zaWduZWQgY2hhcikgX19hWyhOKSAmIDE1XTt9KSkKLSNkZWZpbmUgX21tX2V4dHJhY3RfZXBpMzIoWCwgTikgKF9fZXh0ZW5zaW9uX18gICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHsgX192NHNpIF9fYSA9IChfX3Y0c2kpKF9fbTEyOGkpKFgpOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KV9fYVsoTikgJiAzXTt9KSkKLSNpZmRlZiBfX3g4Nl82NF9fCi0jZGVmaW5lIF9tbV9leHRyYWN0X2VwaTY0KFgsIE4pIChfX2V4dGVuc2lvbl9fICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh7IF9fdjJkaSBfX2EgPSAoX192MmRpKShfX20xMjhpKShYKTsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcgbG9uZylfX2FbKE4pICYgMV07fSkpCi0jZW5kaWYgLyogX194ODZfNjQgKi8KLQotLyogU1NFNCAxMjgtYml0IFBhY2tlZCBJbnRlZ2VyIENvbXBhcmlzb25zLiAgKi8KLXN0YXRpYyBfX2lubGluZV9fIGludCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV90ZXN0el9zaTEyOChfX20xMjhpIF9fTSwgX19tMTI4aSBfX1YpCi17Ci0gIHJldHVybiBfX2J1aWx0aW5faWEzMl9wdGVzdHoxMjgoKF9fdjJkaSlfX00sIChfX3YyZGkpX19WKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gaW50IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX3Rlc3RjX3NpMTI4KF9fbTEyOGkgX19NLCBfX20xMjhpIF9fVikKLXsKLSAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3B0ZXN0YzEyOCgoX192MmRpKV9fTSwgKF9fdjJkaSlfX1YpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBpbnQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fdGVzdG56Y19zaTEyOChfX20xMjhpIF9fTSwgX19tMTI4aSBfX1YpCi17Ci0gIHJldHVybiBfX2J1aWx0aW5faWEzMl9wdGVzdG56YzEyOCgoX192MmRpKV9fTSwgKF9fdjJkaSlfX1YpOwotfQotCi0jZGVmaW5lIF9tbV90ZXN0X2FsbF9vbmVzKFYpIF9tbV90ZXN0Y19zaTEyOCgoViksIF9tbV9jbXBlcV9lcGkzMigoViksIChWKSkpCi0jZGVmaW5lIF9tbV90ZXN0X21peF9vbmVzX3plcm9zKE0sIFYpIF9tbV90ZXN0bnpjX3NpMTI4KChNKSwgKFYpKQotI2RlZmluZSBfbW1fdGVzdF9hbGxfemVyb3MoTSwgVikgX21tX3Rlc3R6X3NpMTI4ICgoTSksIChWKSkKLQotLyogU1NFNCA2NC1iaXQgUGFja2VkIEludGVnZXIgQ29tcGFyaXNvbnMuICAqLwotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9jbXBlcV9lcGk2NChfX20xMjhpIF9fVjEsIF9fbTEyOGkgX19WMikKLXsKLSAgcmV0dXJuIChfX20xMjhpKSgoX192MmRpKV9fVjEgPT0gKF9fdjJkaSlfX1YyKTsKLX0KLQotLyogU1NFNCBQYWNrZWQgSW50ZWdlciBTaWduLUV4dGVuc2lvbi4gICovCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2N2dGVwaThfZXBpMTYoX19tMTI4aSBfX1YpCi17Ci0gIC8qIFRoaXMgZnVuY3Rpb24gYWx3YXlzIHBlcmZvcm1zIGEgc2lnbmVkIGV4dGVuc2lvbiwgYnV0IF9fdjE2cWkgaXMgYSBjaGFyCi0gICAgIHdoaWNoIG1heSBiZSBzaWduZWQgb3IgdW5zaWduZWQsIHNvIHVzZSBfX3YxNnFzLiAqLwotICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2NvbnZlcnR2ZWN0b3IoX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjE2cXMpX19WLCAoX192MTZxcylfX1YsIDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcpLCBfX3Y4aGkpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2N2dGVwaThfZXBpMzIoX19tMTI4aSBfX1YpCi17Ci0gIC8qIFRoaXMgZnVuY3Rpb24gYWx3YXlzIHBlcmZvcm1zIGEgc2lnbmVkIGV4dGVuc2lvbiwgYnV0IF9fdjE2cWkgaXMgYSBjaGFyCi0gICAgIHdoaWNoIG1heSBiZSBzaWduZWQgb3IgdW5zaWduZWQsIHNvIHVzZSBfX3YxNnFzLiAqLwotICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2NvbnZlcnR2ZWN0b3IoX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjE2cXMpX19WLCAoX192MTZxcylfX1YsIDAsIDEsIDIsIDMpLCBfX3Y0c2kpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2N2dGVwaThfZXBpNjQoX19tMTI4aSBfX1YpCi17Ci0gIC8qIFRoaXMgZnVuY3Rpb24gYWx3YXlzIHBlcmZvcm1zIGEgc2lnbmVkIGV4dGVuc2lvbiwgYnV0IF9fdjE2cWkgaXMgYSBjaGFyCi0gICAgIHdoaWNoIG1heSBiZSBzaWduZWQgb3IgdW5zaWduZWQsIHNvIHVzZSBfX3YxNnFzLiAqLwotICB0eXBlZGVmIHNpZ25lZCBjaGFyIF9fdjE2cXMgX19hdHRyaWJ1dGVfXygoX192ZWN0b3Jfc2l6ZV9fKDE2KSkpOwotICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2NvbnZlcnR2ZWN0b3IoX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjE2cXMpX19WLCAoX192MTZxcylfX1YsIDAsIDEpLCBfX3YyZGkpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2N2dGVwaTE2X2VwaTMyKF9fbTEyOGkgX19WKQotewotICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2NvbnZlcnR2ZWN0b3IoX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjhoaSlfX1YsIChfX3Y4aGkpX19WLCAwLCAxLCAyLCAzKSwgX192NHNpKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9jdnRlcGkxNl9lcGk2NChfX20xMjhpIF9fVikKLXsKLSAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9jb252ZXJ0dmVjdG9yKF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKChfX3Y4aGkpX19WLCAoX192OGhpKV9fViwgMCwgMSksIF9fdjJkaSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fY3Z0ZXBpMzJfZXBpNjQoX19tMTI4aSBfX1YpCi17Ci0gIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5fY29udmVydHZlY3RvcihfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192NHNpKV9fViwgKF9fdjRzaSlfX1YsIDAsIDEpLCBfX3YyZGkpOwotfQotCi0vKiBTU0U0IFBhY2tlZCBJbnRlZ2VyIFplcm8tRXh0ZW5zaW9uLiAgKi8KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fY3Z0ZXB1OF9lcGkxNihfX20xMjhpIF9fVikKLXsKLSAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbW92enhidzEyOCgoX192MTZxaSkgX19WKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9jdnRlcHU4X2VwaTMyKF9fbTEyOGkgX19WKQotewotICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3Btb3Z6eGJkMTI4KChfX3YxNnFpKV9fVik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fY3Z0ZXB1OF9lcGk2NChfX20xMjhpIF9fVikKLXsKLSAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbW92enhicTEyOCgoX192MTZxaSlfX1YpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2N2dGVwdTE2X2VwaTMyKF9fbTEyOGkgX19WKQotewotICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3Btb3Z6eHdkMTI4KChfX3Y4aGkpX19WKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9jdnRlcHUxNl9lcGk2NChfX20xMjhpIF9fVikKLXsKLSAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbW92enh3cTEyOCgoX192OGhpKV9fVik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fY3Z0ZXB1MzJfZXBpNjQoX19tMTI4aSBfX1YpCi17Ci0gIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1vdnp4ZHExMjgoKF9fdjRzaSlfX1YpOwotfQotCi0vKiBTU0U0IFBhY2sgd2l0aCBVbnNpZ25lZCBTYXR1cmF0aW9uLiAgKi8KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fcGFja3VzX2VwaTMyKF9fbTEyOGkgX19WMSwgX19tMTI4aSBfX1YyKQotewotICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BhY2t1c2R3MTI4KChfX3Y0c2kpX19WMSwgKF9fdjRzaSlfX1YyKTsKLX0KLQotLyogU1NFNCBNdWx0aXBsZSBQYWNrZWQgU3VtcyBvZiBBYnNvbHV0ZSBEaWZmZXJlbmNlLiAgKi8KLSNkZWZpbmUgX21tX21wc2FkYndfZXB1OChYLCBZLCBNKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX21wc2FkYncxMjgoKF9fdjE2cWkpKF9fbTEyOGkpKFgpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnFpKShfX20xMjhpKShZKSwgKE0pKTsgfSkKLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9taW5wb3NfZXB1MTYoX19tMTI4aSBfX1YpCi17Ci0gIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcGhtaW5wb3N1dzEyOCgoX192OGhpKV9fVik7Ci19Ci0KLS8qIEhhbmRsZSB0aGUgc3NlNC4yIGRlZmluaXRpb25zIGhlcmUuICovCi0KLS8qIFRoZXNlIGRlZmluaXRpb25zIGFyZSBub3JtYWxseSBpbiBubW1pbnRyaW4uaCwgYnV0IGdjYyBwdXRzIHRoZW0gaW4gaGVyZQotICAgc28gd2UnbGwgZG8gdGhlIHNhbWUuICAqLwotCi0jdW5kZWYgX19ERUZBVUxUX0ZOX0FUVFJTCi0jZGVmaW5lIF9fREVGQVVMVF9GTl9BVFRSUyBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18sIF9fdGFyZ2V0X18oInNzZTQuMiIpKSkKLQotLyogVGhlc2Ugc3BlY2lmeSB0aGUgdHlwZSBvZiBkYXRhIHRoYXQgd2UncmUgY29tcGFyaW5nLiAgKi8KLSNkZWZpbmUgX1NJRERfVUJZVEVfT1BTICAgICAgICAgICAgICAgICAweDAwCi0jZGVmaW5lIF9TSUREX1VXT1JEX09QUyAgICAgICAgICAgICAgICAgMHgwMQotI2RlZmluZSBfU0lERF9TQllURV9PUFMgICAgICAgICAgICAgICAgIDB4MDIKLSNkZWZpbmUgX1NJRERfU1dPUkRfT1BTICAgICAgICAgICAgICAgICAweDAzCi0KLS8qIFRoZXNlIHNwZWNpZnkgdGhlIHR5cGUgb2YgY29tcGFyaXNvbiBvcGVyYXRpb24uICAqLwotI2RlZmluZSBfU0lERF9DTVBfRVFVQUxfQU5ZICAgICAgICAgICAgIDB4MDAKLSNkZWZpbmUgX1NJRERfQ01QX1JBTkdFUyAgICAgICAgICAgICAgICAweDA0Ci0jZGVmaW5lIF9TSUREX0NNUF9FUVVBTF9FQUNIICAgICAgICAgICAgMHgwOAotI2RlZmluZSBfU0lERF9DTVBfRVFVQUxfT1JERVJFRCAgICAgICAgIDB4MGMKLQotLyogVGhlc2UgbWFjcm9zIHNwZWNpZnkgdGhlIHBvbGFyaXR5IG9mIHRoZSBvcGVyYXRpb24uICAqLwotI2RlZmluZSBfU0lERF9QT1NJVElWRV9QT0xBUklUWSAgICAgICAgIDB4MDAKLSNkZWZpbmUgX1NJRERfTkVHQVRJVkVfUE9MQVJJVFkgICAgICAgICAweDEwCi0jZGVmaW5lIF9TSUREX01BU0tFRF9QT1NJVElWRV9QT0xBUklUWSAgMHgyMAotI2RlZmluZSBfU0lERF9NQVNLRURfTkVHQVRJVkVfUE9MQVJJVFkgIDB4MzAKLQotLyogVGhlc2UgbWFjcm9zIGFyZSB1c2VkIGluIF9tbV9jbXBYc3RyaSgpIHRvIHNwZWNpZnkgdGhlIHJldHVybi4gICovCi0jZGVmaW5lIF9TSUREX0xFQVNUX1NJR05JRklDQU5UICAgICAgICAgMHgwMAotI2RlZmluZSBfU0lERF9NT1NUX1NJR05JRklDQU5UICAgICAgICAgIDB4NDAKLQotLyogVGhlc2UgbWFjcm9zIGFyZSB1c2VkIGluIF9tbV9jbXBYc3RyaSgpIHRvIHNwZWNpZnkgdGhlIHJldHVybi4gICovCi0jZGVmaW5lIF9TSUREX0JJVF9NQVNLICAgICAgICAgICAgICAgICAgMHgwMAotI2RlZmluZSBfU0lERF9VTklUX01BU0sgICAgICAgICAgICAgICAgIDB4NDAKLQotLyogU1NFNC4yIFBhY2tlZCBDb21wYXJpc29uIEludHJpbnNpY3MuICAqLwotI2RlZmluZSBfbW1fY21waXN0cm0oQSwgQiwgTSkgXAotICAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9wY21waXN0cm0xMjgoKF9fdjE2cWkpKF9fbTEyOGkpKEEpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZxaSkoX19tMTI4aSkoQiksIChpbnQpKE0pKQotI2RlZmluZSBfbW1fY21waXN0cmkoQSwgQiwgTSkgXAotICAoaW50KV9fYnVpbHRpbl9pYTMyX3BjbXBpc3RyaTEyOCgoX192MTZxaSkoX19tMTI4aSkoQSksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2cWkpKF9fbTEyOGkpKEIpLCAoaW50KShNKSkKLQotI2RlZmluZSBfbW1fY21wZXN0cm0oQSwgTEEsIEIsIExCLCBNKSBcCi0gIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3BjbXBlc3RybTEyOCgoX192MTZxaSkoX19tMTI4aSkoQSksIChpbnQpKExBKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2cWkpKF9fbTEyOGkpKEIpLCAoaW50KShMQiksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKE0pKQotI2RlZmluZSBfbW1fY21wZXN0cmkoQSwgTEEsIEIsIExCLCBNKSBcCi0gIChpbnQpX19idWlsdGluX2lhMzJfcGNtcGVzdHJpMTI4KChfX3YxNnFpKShfX20xMjhpKShBKSwgKGludCkoTEEpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnFpKShfX20xMjhpKShCKSwgKGludCkoTEIpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKE0pKQotCi0vKiBTU0U0LjIgUGFja2VkIENvbXBhcmlzb24gSW50cmluc2ljcyBhbmQgRUZsYWcgUmVhZGluZy4gICovCi0jZGVmaW5lIF9tbV9jbXBpc3RyYShBLCBCLCBNKSBcCi0gIChpbnQpX19idWlsdGluX2lhMzJfcGNtcGlzdHJpYTEyOCgoX192MTZxaSkoX19tMTI4aSkoQSksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnFpKShfX20xMjhpKShCKSwgKGludCkoTSkpCi0jZGVmaW5lIF9tbV9jbXBpc3RyYyhBLCBCLCBNKSBcCi0gIChpbnQpX19idWlsdGluX2lhMzJfcGNtcGlzdHJpYzEyOCgoX192MTZxaSkoX19tMTI4aSkoQSksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnFpKShfX20xMjhpKShCKSwgKGludCkoTSkpCi0jZGVmaW5lIF9tbV9jbXBpc3RybyhBLCBCLCBNKSBcCi0gIChpbnQpX19idWlsdGluX2lhMzJfcGNtcGlzdHJpbzEyOCgoX192MTZxaSkoX19tMTI4aSkoQSksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnFpKShfX20xMjhpKShCKSwgKGludCkoTSkpCi0jZGVmaW5lIF9tbV9jbXBpc3RycyhBLCBCLCBNKSBcCi0gIChpbnQpX19idWlsdGluX2lhMzJfcGNtcGlzdHJpczEyOCgoX192MTZxaSkoX19tMTI4aSkoQSksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnFpKShfX20xMjhpKShCKSwgKGludCkoTSkpCi0jZGVmaW5lIF9tbV9jbXBpc3RyeihBLCBCLCBNKSBcCi0gIChpbnQpX19idWlsdGluX2lhMzJfcGNtcGlzdHJpejEyOCgoX192MTZxaSkoX19tMTI4aSkoQSksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnFpKShfX20xMjhpKShCKSwgKGludCkoTSkpCi0KLSNkZWZpbmUgX21tX2NtcGVzdHJhKEEsIExBLCBCLCBMQiwgTSkgXAotICAoaW50KV9fYnVpbHRpbl9pYTMyX3BjbXBlc3RyaWExMjgoKF9fdjE2cWkpKF9fbTEyOGkpKEEpLCAoaW50KShMQSksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnFpKShfX20xMjhpKShCKSwgKGludCkoTEIpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KShNKSkKLSNkZWZpbmUgX21tX2NtcGVzdHJjKEEsIExBLCBCLCBMQiwgTSkgXAotICAoaW50KV9fYnVpbHRpbl9pYTMyX3BjbXBlc3RyaWMxMjgoKF9fdjE2cWkpKF9fbTEyOGkpKEEpLCAoaW50KShMQSksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnFpKShfX20xMjhpKShCKSwgKGludCkoTEIpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KShNKSkKLSNkZWZpbmUgX21tX2NtcGVzdHJvKEEsIExBLCBCLCBMQiwgTSkgXAotICAoaW50KV9fYnVpbHRpbl9pYTMyX3BjbXBlc3RyaW8xMjgoKF9fdjE2cWkpKF9fbTEyOGkpKEEpLCAoaW50KShMQSksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnFpKShfX20xMjhpKShCKSwgKGludCkoTEIpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KShNKSkKLSNkZWZpbmUgX21tX2NtcGVzdHJzKEEsIExBLCBCLCBMQiwgTSkgXAotICAoaW50KV9fYnVpbHRpbl9pYTMyX3BjbXBlc3RyaXMxMjgoKF9fdjE2cWkpKF9fbTEyOGkpKEEpLCAoaW50KShMQSksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnFpKShfX20xMjhpKShCKSwgKGludCkoTEIpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KShNKSkKLSNkZWZpbmUgX21tX2NtcGVzdHJ6KEEsIExBLCBCLCBMQiwgTSkgXAotICAoaW50KV9fYnVpbHRpbl9pYTMyX3BjbXBlc3RyaXoxMjgoKF9fdjE2cWkpKF9fbTEyOGkpKEEpLCAoaW50KShMQSksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnFpKShfX20xMjhpKShCKSwgKGludCkoTEIpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KShNKSkKLQotLyogU1NFNC4yIENvbXBhcmUgUGFja2VkIERhdGEgLS0gR3JlYXRlciBUaGFuLiAgKi8KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fY21wZ3RfZXBpNjQoX19tMTI4aSBfX1YxLCBfX20xMjhpIF9fVjIpCi17Ci0gIHJldHVybiAoX19tMTI4aSkoKF9fdjJkaSlfX1YxID4gKF9fdjJkaSlfX1YyKTsKLX0KLQotLyogU1NFNC4yIEFjY3VtdWxhdGUgQ1JDMzIuICAqLwotc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgaW50IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2NyYzMyX3U4KHVuc2lnbmVkIGludCBfX0MsIHVuc2lnbmVkIGNoYXIgX19EKQotewotICByZXR1cm4gX19idWlsdGluX2lhMzJfY3JjMzJxaShfX0MsIF9fRCk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGludCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9jcmMzMl91MTYodW5zaWduZWQgaW50IF9fQywgdW5zaWduZWQgc2hvcnQgX19EKQotewotICByZXR1cm4gX19idWlsdGluX2lhMzJfY3JjMzJoaShfX0MsIF9fRCk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGludCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9jcmMzMl91MzIodW5zaWduZWQgaW50IF9fQywgdW5zaWduZWQgaW50IF9fRCkKLXsKLSAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX2NyYzMyc2koX19DLCBfX0QpOwotfQotCi0jaWZkZWYgX194ODZfNjRfXwotc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgbG9uZyBsb25nIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2NyYzMyX3U2NCh1bnNpZ25lZCBsb25nIGxvbmcgX19DLCB1bnNpZ25lZCBsb25nIGxvbmcgX19EKQotewotICByZXR1cm4gX19idWlsdGluX2lhMzJfY3JjMzJkaShfX0MsIF9fRCk7Ci19Ci0jZW5kaWYgLyogX194ODZfNjRfXyAqLwotCi0jdW5kZWYgX19ERUZBVUxUX0ZOX0FUVFJTCi0KLSNpZmRlZiBfX1BPUENOVF9fCi0jaW5jbHVkZSA8cG9wY250aW50cmluLmg+Ci0jZW5kaWYKLQotI2VuZGlmIC8qIF9TTU1JTlRSSU5fSCAqLwpkaWZmIC0tZ2l0IGEvY2xhbmctMjU3NzExMy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9zdGRhbGlnbi5oIGIvY2xhbmctMjU3NzExMy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9zdGRhbGlnbi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNzM4ZDEyLi4wMDAwMDAwCi0tLSBhL2NsYW5nLTI1NzcxMTMvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvc3RkYWxpZ24uaAorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLS8qPT09LS0tLSBzdGRhbGlnbi5oIC0gU3RhbmRhcmQgaGVhZGVyIGZvciBhbGlnbm1lbnQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09Ci0gKgotICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQotICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKLSAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKLSAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKLSAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcwotICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKLSAqCi0gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgotICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCi0gKgotICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKLSAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAotICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCi0gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAotICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgotICogVEhFIFNPRlRXQVJFLgotICoKLSAqPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KLSAqLwotCi0jaWZuZGVmIF9fU1REQUxJR05fSAotI2RlZmluZSBfX1NUREFMSUdOX0gKLQotI2lmbmRlZiBfX2NwbHVzcGx1cwotI2RlZmluZSBhbGlnbmFzIF9BbGlnbmFzCi0jZGVmaW5lIGFsaWdub2YgX0FsaWdub2YKLSNlbmRpZgotCi0jZGVmaW5lIF9fYWxpZ25hc19pc19kZWZpbmVkIDEKLSNkZWZpbmUgX19hbGlnbm9mX2lzX2RlZmluZWQgMQotCi0jZW5kaWYgLyogX19TVERBTElHTl9IICovCmRpZmYgLS1naXQgYS9jbGFuZy0yNTc3MTEzL2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL3N0ZGFyZy5oIGIvY2xhbmctMjU3NzExMy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9zdGRhcmcuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTU3ZTE4My4uMDAwMDAwMAotLS0gYS9jbGFuZy0yNTc3MTEzL2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL3N0ZGFyZy5oCisrKyAvZGV2L251bGwKQEAgLTEsNTIgKzAsMCBAQAotLyo9PT0tLS0tIHN0ZGFyZy5oIC0gVmFyaWFibGUgYXJndW1lbnQgaGFuZGxpbmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQotICoKLSAqIENvcHlyaWdodCAoYykgMjAwOCBFbGkgRnJpZWRtYW4KLSAqCi0gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5Ci0gKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAotICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cwotICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAotICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCi0gKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgotICoKLSAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCi0gKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KLSAqCi0gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgotICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCi0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKLSAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCi0gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCi0gKiBUSEUgU09GVFdBUkUuCi0gKgotICo9PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQotICovCi0KLSNpZm5kZWYgX19TVERBUkdfSAotI2RlZmluZSBfX1NUREFSR19ICi0KLSNpZm5kZWYgX1ZBX0xJU1QKLXR5cGVkZWYgX19idWlsdGluX3ZhX2xpc3QgdmFfbGlzdDsKLSNkZWZpbmUgX1ZBX0xJU1QKLSNlbmRpZgotI2RlZmluZSB2YV9zdGFydChhcCwgcGFyYW0pIF9fYnVpbHRpbl92YV9zdGFydChhcCwgcGFyYW0pCi0jZGVmaW5lIHZhX2VuZChhcCkgICAgICAgICAgX19idWlsdGluX3ZhX2VuZChhcCkKLSNkZWZpbmUgdmFfYXJnKGFwLCB0eXBlKSAgICBfX2J1aWx0aW5fdmFfYXJnKGFwLCB0eXBlKQotCi0vKiBHQ0MgYWx3YXlzIGRlZmluZXMgX192YV9jb3B5LCBidXQgZG9lcyBub3QgZGVmaW5lIHZhX2NvcHkgdW5sZXNzIGluIGM5OSBtb2RlCi0gKiBvciAtYW5zaSBpcyBub3Qgc3BlY2lmaWVkLCBzaW5jZSBpdCB3YXMgbm90IHBhcnQgb2YgQzkwLgotICovCi0jZGVmaW5lIF9fdmFfY29weShkLHMpIF9fYnVpbHRpbl92YV9jb3B5KGQscykKLQotI2lmIF9fU1REQ19WRVJTSU9OX18gPj0gMTk5OTAxTCB8fCBfX2NwbHVzcGx1cyA+PSAyMDExMDNMIHx8ICFkZWZpbmVkKF9fU1RSSUNUX0FOU0lfXykKLSNkZWZpbmUgdmFfY29weShkZXN0LCBzcmMpICBfX2J1aWx0aW5fdmFfY29weShkZXN0LCBzcmMpCi0jZW5kaWYKLQotLyogSGFjayByZXF1aXJlZCB0byBtYWtlIHN0YW5kYXJkIGhlYWRlcnMgd29yaywgYXQgbGVhc3Qgb24gVWJ1bnR1ICovCi0jaWZuZGVmIF9fR05VQ19WQV9MSVNUCi0jZGVmaW5lIF9fR05VQ19WQV9MSVNUIDEKLSNlbmRpZgotdHlwZWRlZiBfX2J1aWx0aW5fdmFfbGlzdCBfX2dudWNfdmFfbGlzdDsKLQotI2VuZGlmIC8qIF9fU1REQVJHX0ggKi8KZGlmZiAtLWdpdCBhL2NsYW5nLTI1NzcxMTMvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvc3RkYXRvbWljLmggYi9jbGFuZy0yNTc3MTEzL2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL3N0ZGF0b21pYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYzRmMWNlLi4wMDAwMDAwCi0tLSBhL2NsYW5nLTI1NzcxMTMvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvc3RkYXRvbWljLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1ODIgKzAsMCBAQAotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTEgRWQgU2Nob3V0ZW4gPGVkQEZyZWVCU0Qub3JnPgotICogICAgICAgICAgICAgICAgICAgIERhdmlkIENoaXNuYWxsIDx0aGVyYXZlbkBGcmVlQlNELm9yZz4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKgotICogJEZyZWVCU0QkCi0gKi8KLQotI2lmbmRlZiBfU1REQVRPTUlDX0hfCi0jZGVmaW5lCV9TVERBVE9NSUNfSF8KLQotI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgotCi0jaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgIWRlZmluZWQoX19HTlVDX1BSRVJFUSkKLS8qIER1cGxpY2F0ZSBkZWZpbml0aW9uIGhlcmUsIHNpbmNlIHRoZSBtaW5ndyBzeXMvY2RlZnMuaCBvbWl0cyB0aGUgICovCi0vKiBkZWZpbml0aW9uLCBhbmQgdGhpcyBuZWVkcyB0byBiZSB1c2FibGUgdGhlcmUuICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZQlfX0dOVUNfUFJFUkVRKHgsIHkpICAgIFwKLQkoKF9fR05VQ19fID09ICh4KSAmJiBfX0dOVUNfTUlOT1JfXyA+PSAoeSkpIHx8IChfX0dOVUNfXyA+ICh4KSkpCi0jZW5kaWYgLyogX19HTlVDX18gJiYgLi4uICovCi0KLSNpZiBkZWZpbmVkKF9fY3BsdXNwbHVzKSAmJiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMICYmIGRlZmluZWQoX1VTSU5HX0xJQkNYWCkKLSMgaWZkZWYgX19jbGFuZ19fCi0jICBpZiBfX2hhc19mZWF0dXJlKGN4eF9hdG9taWMpCi0jICAgZGVmaW5lIF9TVERBVE9NSUNfSEFWRV9BVE9NSUMKLSMgIGVuZGlmCi0jIGVsc2UgLyogZ2NjICovCi0jICBpZiBfX0dOVUNfUFJFUkVRKDQsIDcpCi0jICAgZGVmaW5lIF9TVERBVE9NSUNfSEFWRV9BVE9NSUMKLSMgIGVuZGlmCi0jIGVuZGlmCi0jZW5kaWYKLQotI2lmZGVmIF9TVERBVE9NSUNfSEFWRV9BVE9NSUMKLQotLyogV2UgaGF2ZSBhIHVzYWJsZSBDKysgPGF0b21pYz47IHVzZSBpdCBpbnN0ZWFkLiAgKi8KLQotI2luY2x1ZGUgPGF0b21pYz4KLQotI3VuZGVmIF9BdG9taWMKLSAgICAgICAgLyogQWxzbyBkZWZpbmVkIGJ5IDxhdG9taWM+IGZvciBnY2MuICBCdXQgbm90IHVzZWQgaW4gbWFjcm9zLiAqLwotICAgICAgICAvKiBBbHNvIGEgY2xhbmcgaW50cmluc2ljLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgICAgIC8qIFNob3VsZCBub3QgYmUgdXNlZCBieSBjbGllbnQgY29kZSBiZWZvcmUgdGhpcyBmaWxlIGlzICAgICAgKi8KLSAgICAgICAgLyogaW5jbHVkZWQuICBUaGUgZGVmaW5pdGlvbnMgaW4gPGF0b21pYz4gdGhlbXNlbHZlcyBzZWUgICAgICAqLwotICAgICAgICAvKiB0aGUgb2xkIGRlZmluaXRpb24sIGFzIHRoZXkgc2hvdWxkLiAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgICAgIC8qIENsaWVudCBjb2RlIHNlZXMgdGhlIGZvbGxvd2luZyBkZWZpbml0aW9uLiAgICAgICAgICAgICAgICAgKi8KLQotI2RlZmluZSBfQXRvbWljKHQpIHN0ZDo6YXRvbWljPHQ+Ci0KLXVzaW5nIHN0ZDo6YXRvbWljX2lzX2xvY2tfZnJlZTsKLXVzaW5nIHN0ZDo6YXRvbWljX2luaXQ7Ci11c2luZyBzdGQ6OmF0b21pY19zdG9yZTsKLXVzaW5nIHN0ZDo6YXRvbWljX3N0b3JlX2V4cGxpY2l0OwotdXNpbmcgc3RkOjphdG9taWNfbG9hZDsKLXVzaW5nIHN0ZDo6YXRvbWljX2xvYWRfZXhwbGljaXQ7Ci11c2luZyBzdGQ6OmF0b21pY19leGNoYW5nZTsKLXVzaW5nIHN0ZDo6YXRvbWljX2V4Y2hhbmdlX2V4cGxpY2l0OwotdXNpbmcgc3RkOjphdG9taWNfY29tcGFyZV9leGNoYW5nZV9zdHJvbmc7Ci11c2luZyBzdGQ6OmF0b21pY19jb21wYXJlX2V4Y2hhbmdlX3N0cm9uZ19leHBsaWNpdDsKLXVzaW5nIHN0ZDo6YXRvbWljX2NvbXBhcmVfZXhjaGFuZ2Vfd2VhazsKLXVzaW5nIHN0ZDo6YXRvbWljX2NvbXBhcmVfZXhjaGFuZ2Vfd2Vha19leHBsaWNpdDsKLXVzaW5nIHN0ZDo6YXRvbWljX2ZldGNoX2FkZDsKLXVzaW5nIHN0ZDo6YXRvbWljX2ZldGNoX2FkZF9leHBsaWNpdDsKLXVzaW5nIHN0ZDo6YXRvbWljX2ZldGNoX3N1YjsKLXVzaW5nIHN0ZDo6YXRvbWljX2ZldGNoX3N1Yl9leHBsaWNpdDsKLXVzaW5nIHN0ZDo6YXRvbWljX2ZldGNoX29yOwotdXNpbmcgc3RkOjphdG9taWNfZmV0Y2hfb3JfZXhwbGljaXQ7Ci11c2luZyBzdGQ6OmF0b21pY19mZXRjaF94b3I7Ci11c2luZyBzdGQ6OmF0b21pY19mZXRjaF94b3JfZXhwbGljaXQ7Ci11c2luZyBzdGQ6OmF0b21pY19mZXRjaF9hbmQ7Ci11c2luZyBzdGQ6OmF0b21pY19mZXRjaF9hbmRfZXhwbGljaXQ7Ci11c2luZyBzdGQ6OmF0b21pY190aHJlYWRfZmVuY2U7Ci11c2luZyBzdGQ6OmF0b21pY19zaWduYWxfZmVuY2U7Ci0KLXVzaW5nIHN0ZDo6bWVtb3J5X29yZGVyOwotdXNpbmcgc3RkOjptZW1vcnlfb3JkZXJfcmVsYXhlZDsKLXVzaW5nIHN0ZDo6bWVtb3J5X29yZGVyX2NvbnN1bWU7Ci11c2luZyBzdGQ6Om1lbW9yeV9vcmRlcl9hY3F1aXJlOwotdXNpbmcgc3RkOjptZW1vcnlfb3JkZXJfcmVsZWFzZTsKLXVzaW5nIHN0ZDo6bWVtb3J5X29yZGVyX2FjcV9yZWw7Ci11c2luZyBzdGQ6Om1lbW9yeV9vcmRlcl9zZXFfY3N0OwotCi11c2luZyBzdGQ6OmF0b21pY19ib29sOwotdXNpbmcgc3RkOjphdG9taWNfY2hhcjsKLXVzaW5nIHN0ZDo6YXRvbWljX3NjaGFyOwotdXNpbmcgc3RkOjphdG9taWNfdWNoYXI7Ci11c2luZyBzdGQ6OmF0b21pY19zaG9ydDsKLXVzaW5nIHN0ZDo6YXRvbWljX3VzaG9ydDsKLXVzaW5nIHN0ZDo6YXRvbWljX2ludDsKLXVzaW5nIHN0ZDo6YXRvbWljX3VpbnQ7Ci11c2luZyBzdGQ6OmF0b21pY19sb25nOwotdXNpbmcgc3RkOjphdG9taWNfdWxvbmc7Ci11c2luZyBzdGQ6OmF0b21pY19sbG9uZzsKLXVzaW5nIHN0ZDo6YXRvbWljX3VsbG9uZzsKLXVzaW5nIHN0ZDo6YXRvbWljX2NoYXIxNl90OwotdXNpbmcgc3RkOjphdG9taWNfY2hhcjMyX3Q7Ci11c2luZyBzdGQ6OmF0b21pY193Y2hhcl90OwotdXNpbmcgc3RkOjphdG9taWNfaW50X2xlYXN0OF90OwotdXNpbmcgc3RkOjphdG9taWNfdWludF9sZWFzdDhfdDsKLXVzaW5nIHN0ZDo6YXRvbWljX2ludF9sZWFzdDE2X3Q7Ci11c2luZyBzdGQ6OmF0b21pY191aW50X2xlYXN0MTZfdDsKLXVzaW5nIHN0ZDo6YXRvbWljX2ludF9sZWFzdDMyX3Q7Ci11c2luZyBzdGQ6OmF0b21pY191aW50X2xlYXN0MzJfdDsKLXVzaW5nIHN0ZDo6YXRvbWljX2ludF9sZWFzdDY0X3Q7Ci11c2luZyBzdGQ6OmF0b21pY191aW50X2xlYXN0NjRfdDsKLXVzaW5nIHN0ZDo6YXRvbWljX2ludF9mYXN0OF90OwotdXNpbmcgc3RkOjphdG9taWNfdWludF9mYXN0OF90OwotdXNpbmcgc3RkOjphdG9taWNfaW50X2Zhc3QxNl90OwotdXNpbmcgc3RkOjphdG9taWNfdWludF9mYXN0MTZfdDsKLXVzaW5nIHN0ZDo6YXRvbWljX2ludF9mYXN0MzJfdDsKLXVzaW5nIHN0ZDo6YXRvbWljX3VpbnRfZmFzdDMyX3Q7Ci11c2luZyBzdGQ6OmF0b21pY19pbnRfZmFzdDY0X3Q7Ci11c2luZyBzdGQ6OmF0b21pY191aW50X2Zhc3Q2NF90OwotdXNpbmcgc3RkOjphdG9taWNfaW50cHRyX3Q7Ci11c2luZyBzdGQ6OmF0b21pY191aW50cHRyX3Q7Ci11c2luZyBzdGQ6OmF0b21pY19zaXplX3Q7Ci11c2luZyBzdGQ6OmF0b21pY19wdHJkaWZmX3Q7Ci11c2luZyBzdGQ6OmF0b21pY19pbnRtYXhfdDsKLXVzaW5nIHN0ZDo6YXRvbWljX3VpbnRtYXhfdDsKLQotI2Vsc2UgLyogPGF0b21pYz4gdW5hdmFpbGFibGUsIHBvc3NpYmx5IGJlY2F1c2UgdGhpcyBpcyBDLCBub3QgQysrICovCi0KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDxzdGRib29sLmg+Ci0KLS8qCi0gKiBDOiBEbyBpdCBvdXJzZWx2ZXMuCi0gKiBOb3RlIHRoYXQgdGhlIHJ1bnRpbWUgcmVwcmVzZW50YXRpb24gZGVmaW5lZCBoZXJlIHNob3VsZCBiZSBjb21wYXRpYmxlCi0gKiB3aXRoIHRoZSBDKysgb25lLCBpLmUuIGFuIF9BdG9taWMoVCkgbmVlZHMgdG8gY29udGFpbiB0aGUgc2FtZQotICogYml0cyBhcyBhIFQuCi0gKi8KLQotI2luY2x1ZGUgPHN0ZGRlZi5oPiAgLyogRm9yIHB0cmRpZmZfdC4gICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jaW5jbHVkZSA8c3RkaW50Lmg+ICAvKiBUT0RPOiBTaG91bGQgcG9sbHV0ZSBuYW1lc3BhY2UgbGVzcy4gICAgKi8KLSNpZiBfX1NURENfVkVSU0lPTl9fID49IDIwMTExMkwKLSMgaW5jbHVkZSA8dWNoYXIuaD4gIC8qIEZvciBjaGFyMTZfdCBhbmQgY2hhcjMyX3QuICAgICAgICAgICAgICAqLwotI2VuZGlmCi0KLSNpZmRlZiBfX2NsYW5nX18KLSMgaWYgX19oYXNfZXh0ZW5zaW9uKGNfYXRvbWljKSB8fCBfX2hhc19leHRlbnNpb24oY3h4X2F0b21pYykKLSMgIGRlZmluZSAgICAgICBfX0NMQU5HX0FUT01JQ1MKLSMgZWxzZQotIyAgZXJyb3IgInN0ZGF0b21pYy5oIGRvZXMgbm90IHN1cHBvcnQgeW91ciBjb21waWxlciIKLSMgZW5kaWYKLSMgaWYgX19oYXNfYnVpbHRpbihfX3N5bmNfc3dhcCkKLSMgIGRlZmluZSBfX0hBU19CVUlMVElOX1NZTkNfU1dBUAotIyBlbmRpZgotI2Vsc2UKLSMgaWYgX19HTlVDX1BSRVJFUSg0LCA3KQotIyAgZGVmaW5lCV9fR05VQ19BVE9NSUNTCi0jIGVsc2UKLSMgIGRlZmluZQlfX1NZTkNfQVRPTUlDUwotIyAgaWZkZWYgX19jcGx1c3BsdXMKLSMgICBkZWZpbmUgICAgICAgX19BVE9NSUNTX0FWT0lEX0RPVF9JTklUCi0jICBlbmRpZgotIyBlbmRpZgotI2VuZGlmCi0KLS8qCi0gKiA3LjE3LjEgQXRvbWljIGxvY2stZnJlZSBtYWNyb3MuCi0gKi8KLQotI2lmZGVmIF9fR0NDX0FUT01JQ19CT09MX0xPQ0tfRlJFRQotI2RlZmluZQlBVE9NSUNfQk9PTF9MT0NLX0ZSRUUJCV9fR0NDX0FUT01JQ19CT09MX0xPQ0tfRlJFRQotI2VsaWYgZGVmaW5lZChfX1NZTkNfQVRPTUlDUykKLSNkZWZpbmUJQVRPTUlDX0JPT0xfTE9DS19GUkVFICAgICAgICAgICAyIC8qIEZvciBhbGwgbW9kZXJuIHBsYXRmb3JtcyAqLwotI2VuZGlmCi0jaWZkZWYgX19HQ0NfQVRPTUlDX0NIQVJfTE9DS19GUkVFCi0jZGVmaW5lCUFUT01JQ19DSEFSX0xPQ0tfRlJFRQkJX19HQ0NfQVRPTUlDX0NIQVJfTE9DS19GUkVFCi0jZWxpZiBkZWZpbmVkKF9fU1lOQ19BVE9NSUNTKQotI2RlZmluZQlBVE9NSUNfQ0hBUl9MT0NLX0ZSRUUgICAgICAgICAgIDIKLSNlbmRpZgotI2lmZGVmIF9fR0NDX0FUT01JQ19DSEFSMTZfVF9MT0NLX0ZSRUUKLSNkZWZpbmUJQVRPTUlDX0NIQVIxNl9UX0xPQ0tfRlJFRQlfX0dDQ19BVE9NSUNfQ0hBUjE2X1RfTE9DS19GUkVFCi0jZWxpZiBkZWZpbmVkKF9fU1lOQ19BVE9NSUNTKQotI2RlZmluZQlBVE9NSUNfQ0hBUjE2X1RfTE9DS19GUkVFICAgICAgIDIKLSNlbmRpZgotI2lmZGVmIF9fR0NDX0FUT01JQ19DSEFSMzJfVF9MT0NLX0ZSRUUKLSNkZWZpbmUJQVRPTUlDX0NIQVIzMl9UX0xPQ0tfRlJFRQlfX0dDQ19BVE9NSUNfQ0hBUjMyX1RfTE9DS19GUkVFCi0jZWxpZiBkZWZpbmVkKF9fU1lOQ19BVE9NSUNTKQotI2RlZmluZQlBVE9NSUNfQ0hBUjMyX1RfTE9DS19GUkVFICAgICAgIDIKLSNlbmRpZgotI2lmZGVmIF9fR0NDX0FUT01JQ19XQ0hBUl9UX0xPQ0tfRlJFRQotI2RlZmluZQlBVE9NSUNfV0NIQVJfVF9MT0NLX0ZSRUUJX19HQ0NfQVRPTUlDX1dDSEFSX1RfTE9DS19GUkVFCi0jZWxpZiBkZWZpbmVkKF9fU1lOQ19BVE9NSUNTKQotI2RlZmluZQlBVE9NSUNfV0NIQVJfVF9MT0NLX0ZSRUUgICAgICAgIDIKLSNlbmRpZgotI2lmZGVmIF9fR0NDX0FUT01JQ19TSE9SVF9MT0NLX0ZSRUUKLSNkZWZpbmUJQVRPTUlDX1NIT1JUX0xPQ0tfRlJFRQkJX19HQ0NfQVRPTUlDX1NIT1JUX0xPQ0tfRlJFRQotI2VsaWYgZGVmaW5lZChfX1NZTkNfQVRPTUlDUykKLSNkZWZpbmUJQVRPTUlDX1NIT1JUX0xPQ0tfRlJFRSAgICAgICAgICAyCi0jZW5kaWYKLSNpZmRlZiBfX0dDQ19BVE9NSUNfSU5UX0xPQ0tfRlJFRQotI2RlZmluZQlBVE9NSUNfSU5UX0xPQ0tfRlJFRQkJX19HQ0NfQVRPTUlDX0lOVF9MT0NLX0ZSRUUKLSNlbGlmIGRlZmluZWQoX19TWU5DX0FUT01JQ1MpCi0jZGVmaW5lCUFUT01JQ19JTlRfTE9DS19GUkVFICAgICAgICAgICAgMgotI2VuZGlmCi0jaWZkZWYgX19HQ0NfQVRPTUlDX0xPTkdfTE9DS19GUkVFCi0jZGVmaW5lCUFUT01JQ19MT05HX0xPQ0tfRlJFRQkJX19HQ0NfQVRPTUlDX0xPTkdfTE9DS19GUkVFCi0jZWxpZiBkZWZpbmVkKF9fU1lOQ19BVE9NSUNTKQotI2RlZmluZQlBVE9NSUNfTE9OR19MT0NLX0ZSRUUgICAgICAgICAgIDIKLSNlbmRpZgotI2lmZGVmIF9fR0NDX0FUT01JQ19MTE9OR19MT0NLX0ZSRUUKLSNkZWZpbmUJQVRPTUlDX0xMT05HX0xPQ0tfRlJFRQkJX19HQ0NfQVRPTUlDX0xMT05HX0xPQ0tfRlJFRQotI2VsaWYgZGVmaW5lZChfX1NZTkNfQVRPTUlDUykKLSNkZWZpbmUJQVRPTUlDX0xMT05HX0xPQ0tfRlJFRSAgICAgICAgICAxIC8qIG1heWJlICovCi0jZW5kaWYKLSNpZmRlZiBfX0dDQ19BVE9NSUNfUE9JTlRFUl9MT0NLX0ZSRUUKLSNkZWZpbmUJQVRPTUlDX1BPSU5URVJfTE9DS19GUkVFCV9fR0NDX0FUT01JQ19QT0lOVEVSX0xPQ0tfRlJFRQotI2VsaWYgZGVmaW5lZChfX1NZTkNfQVRPTUlDUykKLSNkZWZpbmUJQVRPTUlDX1BPSU5URVJfTE9DS19GUkVFICAgICAgICAyCi0jZW5kaWYKLQotLyoKLSAqIDcuMTcuMiBJbml0aWFsaXphdGlvbi4KLSAqLwotCi0jaWYgZGVmaW5lZChfX0NMQU5HX0FUT01JQ1MpCi0jZGVmaW5lCUFUT01JQ19WQVJfSU5JVCh2YWx1ZSkJCSh2YWx1ZSkKLSNkZWZpbmUJYXRvbWljX2luaXQob2JqLCB2YWx1ZSkJCV9fYzExX2F0b21pY19pbml0KG9iaiwgdmFsdWUpCi0jZWxzZQotI2lmZGVmIF9fQVRPTUlDU19BVk9JRF9ET1RfSU5JVAotI2RlZmluZQlBVE9NSUNfVkFSX0lOSVQodmFsdWUpCQl7IHZhbHVlIH0KLSNlbHNlCi0jZGVmaW5lCUFUT01JQ19WQVJfSU5JVCh2YWx1ZSkJCXsgLl9fdmFsID0gKHZhbHVlKSB9Ci0jZW5kaWYKLSNkZWZpbmUJYXRvbWljX2luaXQob2JqLCB2YWx1ZSkJCSgodm9pZCkoKG9iaiktPl9fdmFsID0gKHZhbHVlKSkpCi0jZW5kaWYKLQotLyoKLSAqIENsYW5nIGFuZCByZWNlbnQgR0NDIGJvdGggcHJvdmlkZSBwcmVkZWZpbmVkIG1hY3JvcyBmb3IgdGhlIG1lbW9yeQotICogb3JkZXJpbmdzLiAgSWYgd2UgYXJlIHVzaW5nIGEgY29tcGlsZXIgdGhhdCBkb2Vzbid0IGRlZmluZSB0aGVtLCB1c2UgdGhlCi0gKiBjbGFuZyB2YWx1ZXMgLSB0aGVzZSB3aWxsIGJlIGlnbm9yZWQgaW4gdGhlIGZhbGxiYWNrIHBhdGguCi0gKi8KLQotI2lmbmRlZiBfX0FUT01JQ19SRUxBWEVECi0jZGVmaW5lIF9fQVRPTUlDX1JFTEFYRUQJCTAKLSNlbmRpZgotI2lmbmRlZiBfX0FUT01JQ19DT05TVU1FCi0jZGVmaW5lIF9fQVRPTUlDX0NPTlNVTUUJCTEKLSNlbmRpZgotI2lmbmRlZiBfX0FUT01JQ19BQ1FVSVJFCi0jZGVmaW5lIF9fQVRPTUlDX0FDUVVJUkUJCTIKLSNlbmRpZgotI2lmbmRlZiBfX0FUT01JQ19SRUxFQVNFCi0jZGVmaW5lIF9fQVRPTUlDX1JFTEVBU0UJCTMKLSNlbmRpZgotI2lmbmRlZiBfX0FUT01JQ19BQ1FfUkVMCi0jZGVmaW5lIF9fQVRPTUlDX0FDUV9SRUwJCTQKLSNlbmRpZgotI2lmbmRlZiBfX0FUT01JQ19TRVFfQ1NUCi0jZGVmaW5lIF9fQVRPTUlDX1NFUV9DU1QJCTUKLSNlbmRpZgotCi0vKgotICogNy4xNy4zIE9yZGVyIGFuZCBjb25zaXN0ZW5jeS4KLSAqCi0gKiBUaGUgbWVtb3J5X29yZGVyXyogY29uc3RhbnRzIHRoYXQgZGVub3RlIHRoZSBiYXJyaWVyIGJlaGF2aW91ciBvZiB0aGUKLSAqIGF0b21pYyBvcGVyYXRpb25zLgotICogVGhlIGVudW0gdmFsdWVzIG11c3QgYmUgaWRlbnRpY2FsIHRvIHRob3NlIHVzZWQgYnkgdGhlCi0gKiBDKysgPGF0b21pYz4gaGVhZGVyLgotICovCi0KLXR5cGVkZWYgZW51bSB7Ci0JbWVtb3J5X29yZGVyX3JlbGF4ZWQgPSBfX0FUT01JQ19SRUxBWEVELAotCW1lbW9yeV9vcmRlcl9jb25zdW1lID0gX19BVE9NSUNfQ09OU1VNRSwKLQltZW1vcnlfb3JkZXJfYWNxdWlyZSA9IF9fQVRPTUlDX0FDUVVJUkUsCi0JbWVtb3J5X29yZGVyX3JlbGVhc2UgPSBfX0FUT01JQ19SRUxFQVNFLAotCW1lbW9yeV9vcmRlcl9hY3FfcmVsID0gX19BVE9NSUNfQUNRX1JFTCwKLQltZW1vcnlfb3JkZXJfc2VxX2NzdCA9IF9fQVRPTUlDX1NFUV9DU1QKLX0gbWVtb3J5X29yZGVyOwotCi0vKgotICogNy4xNy40IEZlbmNlcy4KLSAqLwotCi1zdGF0aWMgX19pbmxpbmUgdm9pZAotYXRvbWljX3RocmVhZF9mZW5jZShtZW1vcnlfb3JkZXIgX19vcmRlciBfX2F0dHJpYnV0ZV9fKCh1bnVzZWQpKSkKLXsKLQotI2lmZGVmIF9fQ0xBTkdfQVRPTUlDUwotCV9fYzExX2F0b21pY190aHJlYWRfZmVuY2UoX19vcmRlcik7Ci0jZWxpZiBkZWZpbmVkKF9fR05VQ19BVE9NSUNTKQotCV9fYXRvbWljX3RocmVhZF9mZW5jZShfX29yZGVyKTsKLSNlbHNlCi0JX19zeW5jX3N5bmNocm9uaXplKCk7Ci0jZW5kaWYKLX0KLQotc3RhdGljIF9faW5saW5lIHZvaWQKLWF0b21pY19zaWduYWxfZmVuY2UobWVtb3J5X29yZGVyIF9fb3JkZXIgX19hdHRyaWJ1dGVfXygodW51c2VkKSkpCi17Ci0KLSNpZmRlZiBfX0NMQU5HX0FUT01JQ1MKLQlfX2MxMV9hdG9taWNfc2lnbmFsX2ZlbmNlKF9fb3JkZXIpOwotI2VsaWYgZGVmaW5lZChfX0dOVUNfQVRPTUlDUykKLQlfX2F0b21pY19zaWduYWxfZmVuY2UoX19vcmRlcik7Ci0jZWxzZQotCV9fYXNtIHZvbGF0aWxlICgiIiA6OjogIm1lbW9yeSIpOwotI2VuZGlmCi19Ci0KLS8qCi0gKiA3LjE3LjUgTG9jay1mcmVlIHByb3BlcnR5LgotICovCi0KLSNpZiBkZWZpbmVkKF9LRVJORUwpCi0vKiBBdG9taWNzIGluIGtlcm5lbHNwYWNlIGFyZSBhbHdheXMgbG9jay1mcmVlLiAqLwotI2RlZmluZQlhdG9taWNfaXNfbG9ja19mcmVlKG9iaikgXAotCSgodm9pZCkob2JqKSwgKF9Cb29sKTEpCi0jZWxpZiBkZWZpbmVkKF9fQ0xBTkdfQVRPTUlDUykKLSNkZWZpbmUJYXRvbWljX2lzX2xvY2tfZnJlZShvYmopIFwKLQlfX2MxMV9hdG9taWNfaXNfbG9ja19mcmVlKHNpemVvZigqKG9iaikpKQotI2VsaWYgZGVmaW5lZChfX0dOVUNfQVRPTUlDUykKLSNkZWZpbmUJYXRvbWljX2lzX2xvY2tfZnJlZShvYmopIFwKLQlfX2F0b21pY19pc19sb2NrX2ZyZWUoc2l6ZW9mKChvYmopLT5fX3ZhbCksICYob2JqKS0+X192YWwpCi0jZWxzZQotI2RlZmluZQlhdG9taWNfaXNfbG9ja19mcmVlKG9iaikgXAotCSgodm9pZCkob2JqKSwgc2l6ZW9mKChvYmopLT5fX3ZhbCkgPD0gc2l6ZW9mKHZvaWQgKikpCi0jZW5kaWYKLQotLyoKLSAqIDcuMTcuNiBBdG9taWMgaW50ZWdlciB0eXBlcy4KLSAqLwotCi0jaWZuZGVmIF9fQ0xBTkdfQVRPTUlDUwotLyoKLSAqIE5vIG5hdGl2ZSBzdXBwb3J0IGZvciBfQXRvbWljKCkuIFBsYWNlIG9iamVjdCBpbiBzdHJ1Y3R1cmUgdG8gcHJldmVudAotICogbW9zdCBmb3JtcyBvZiBkaXJlY3Qgbm9uLWF0b21pYyBhY2Nlc3MuCi0gKi8KLSNkZWZpbmUgX0F0b21pYyhUKSAgICAgICAgICAgICAgc3RydWN0IHsgVCB2b2xhdGlsZSBfX3ZhbDsgfQotI2VuZGlmCi0KLXR5cGVkZWYgX0F0b21pYyhib29sKQkJCWF0b21pY19ib29sOwotdHlwZWRlZiBfQXRvbWljKGNoYXIpCQkJYXRvbWljX2NoYXI7Ci10eXBlZGVmIF9BdG9taWMoc2lnbmVkIGNoYXIpCQlhdG9taWNfc2NoYXI7Ci10eXBlZGVmIF9BdG9taWModW5zaWduZWQgY2hhcikJCWF0b21pY191Y2hhcjsKLXR5cGVkZWYgX0F0b21pYyhzaG9ydCkJCQlhdG9taWNfc2hvcnQ7Ci10eXBlZGVmIF9BdG9taWModW5zaWduZWQgc2hvcnQpCQlhdG9taWNfdXNob3J0OwotdHlwZWRlZiBfQXRvbWljKGludCkJCQlhdG9taWNfaW50OwotdHlwZWRlZiBfQXRvbWljKHVuc2lnbmVkIGludCkJCWF0b21pY191aW50OwotdHlwZWRlZiBfQXRvbWljKGxvbmcpCQkJYXRvbWljX2xvbmc7Ci10eXBlZGVmIF9BdG9taWModW5zaWduZWQgbG9uZykJCWF0b21pY191bG9uZzsKLXR5cGVkZWYgX0F0b21pYyhsb25nIGxvbmcpCQlhdG9taWNfbGxvbmc7Ci10eXBlZGVmIF9BdG9taWModW5zaWduZWQgbG9uZyBsb25nKQlhdG9taWNfdWxsb25nOwotI2lmIF9fU1REQ19WRVJTSU9OX18gPj0gMjAxMTEyTCB8fCBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCi0gIHR5cGVkZWYgX0F0b21pYyhjaGFyMTZfdCkJCWF0b21pY19jaGFyMTZfdDsKLSAgdHlwZWRlZiBfQXRvbWljKGNoYXIzMl90KQkJYXRvbWljX2NoYXIzMl90OwotI2VuZGlmCi10eXBlZGVmIF9BdG9taWMod2NoYXJfdCkJCWF0b21pY193Y2hhcl90OwotdHlwZWRlZiBfQXRvbWljKGludF9sZWFzdDhfdCkJCWF0b21pY19pbnRfbGVhc3Q4X3Q7Ci10eXBlZGVmIF9BdG9taWModWludF9sZWFzdDhfdCkJYXRvbWljX3VpbnRfbGVhc3Q4X3Q7Ci10eXBlZGVmIF9BdG9taWMoaW50X2xlYXN0MTZfdCkJYXRvbWljX2ludF9sZWFzdDE2X3Q7Ci10eXBlZGVmIF9BdG9taWModWludF9sZWFzdDE2X3QpCWF0b21pY191aW50X2xlYXN0MTZfdDsKLXR5cGVkZWYgX0F0b21pYyhpbnRfbGVhc3QzMl90KQlhdG9taWNfaW50X2xlYXN0MzJfdDsKLXR5cGVkZWYgX0F0b21pYyh1aW50X2xlYXN0MzJfdCkJYXRvbWljX3VpbnRfbGVhc3QzMl90OwotdHlwZWRlZiBfQXRvbWljKGludF9sZWFzdDY0X3QpCWF0b21pY19pbnRfbGVhc3Q2NF90OwotdHlwZWRlZiBfQXRvbWljKHVpbnRfbGVhc3Q2NF90KQlhdG9taWNfdWludF9sZWFzdDY0X3Q7Ci10eXBlZGVmIF9BdG9taWMoaW50X2Zhc3Q4X3QpCQlhdG9taWNfaW50X2Zhc3Q4X3Q7Ci10eXBlZGVmIF9BdG9taWModWludF9mYXN0OF90KQkJYXRvbWljX3VpbnRfZmFzdDhfdDsKLXR5cGVkZWYgX0F0b21pYyhpbnRfZmFzdDE2X3QpCQlhdG9taWNfaW50X2Zhc3QxNl90OwotdHlwZWRlZiBfQXRvbWljKHVpbnRfZmFzdDE2X3QpCWF0b21pY191aW50X2Zhc3QxNl90OwotdHlwZWRlZiBfQXRvbWljKGludF9mYXN0MzJfdCkJCWF0b21pY19pbnRfZmFzdDMyX3Q7Ci10eXBlZGVmIF9BdG9taWModWludF9mYXN0MzJfdCkJYXRvbWljX3VpbnRfZmFzdDMyX3Q7Ci10eXBlZGVmIF9BdG9taWMoaW50X2Zhc3Q2NF90KQkJYXRvbWljX2ludF9mYXN0NjRfdDsKLXR5cGVkZWYgX0F0b21pYyh1aW50X2Zhc3Q2NF90KQlhdG9taWNfdWludF9mYXN0NjRfdDsKLXR5cGVkZWYgX0F0b21pYyhpbnRwdHJfdCkJCWF0b21pY19pbnRwdHJfdDsKLXR5cGVkZWYgX0F0b21pYyh1aW50cHRyX3QpCQlhdG9taWNfdWludHB0cl90OwotdHlwZWRlZiBfQXRvbWljKHNpemVfdCkJCWF0b21pY19zaXplX3Q7Ci10eXBlZGVmIF9BdG9taWMocHRyZGlmZl90KQkJYXRvbWljX3B0cmRpZmZfdDsKLXR5cGVkZWYgX0F0b21pYyhpbnRtYXhfdCkJCWF0b21pY19pbnRtYXhfdDsKLXR5cGVkZWYgX0F0b21pYyh1aW50bWF4X3QpCQlhdG9taWNfdWludG1heF90OwotCi0vKgotICogNy4xNy43IE9wZXJhdGlvbnMgb24gYXRvbWljIHR5cGVzLgotICovCi0KLS8qCi0gKiBDb21waWxlci1zcGVjaWZpYyBvcGVyYXRpb25zLgotICovCi0KLSNpZiBkZWZpbmVkKF9fQ0xBTkdfQVRPTUlDUykKLSNkZWZpbmUJYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2Vfc3Ryb25nX2V4cGxpY2l0KG9iamVjdCwgZXhwZWN0ZWQsCVwKLSAgICBkZXNpcmVkLCBzdWNjZXNzLCBmYWlsdXJlKQkJCQkJCVwKLQlfX2MxMV9hdG9taWNfY29tcGFyZV9leGNoYW5nZV9zdHJvbmcob2JqZWN0LCBleHBlY3RlZCwgZGVzaXJlZCwJXAotCSAgICBzdWNjZXNzLCBmYWlsdXJlKQotI2RlZmluZQlhdG9taWNfY29tcGFyZV9leGNoYW5nZV93ZWFrX2V4cGxpY2l0KG9iamVjdCwgZXhwZWN0ZWQsCQlcCi0gICAgZGVzaXJlZCwgc3VjY2VzcywgZmFpbHVyZSkJCQkJCQlcCi0JX19jMTFfYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2Vfd2VhayhvYmplY3QsIGV4cGVjdGVkLCBkZXNpcmVkLAlcCi0JICAgIHN1Y2Nlc3MsIGZhaWx1cmUpCi0jZGVmaW5lCWF0b21pY19leGNoYW5nZV9leHBsaWNpdChvYmplY3QsIGRlc2lyZWQsIG9yZGVyKQkJXAotCV9fYzExX2F0b21pY19leGNoYW5nZShvYmplY3QsIGRlc2lyZWQsIG9yZGVyKQotI2RlZmluZQlhdG9taWNfZmV0Y2hfYWRkX2V4cGxpY2l0KG9iamVjdCwgb3BlcmFuZCwgb3JkZXIpCQlcCi0JX19jMTFfYXRvbWljX2ZldGNoX2FkZChvYmplY3QsIG9wZXJhbmQsIG9yZGVyKQotI2RlZmluZQlhdG9taWNfZmV0Y2hfYW5kX2V4cGxpY2l0KG9iamVjdCwgb3BlcmFuZCwgb3JkZXIpCQlcCi0JX19jMTFfYXRvbWljX2ZldGNoX2FuZChvYmplY3QsIG9wZXJhbmQsIG9yZGVyKQotI2RlZmluZQlhdG9taWNfZmV0Y2hfb3JfZXhwbGljaXQob2JqZWN0LCBvcGVyYW5kLCBvcmRlcikJCVwKLQlfX2MxMV9hdG9taWNfZmV0Y2hfb3Iob2JqZWN0LCBvcGVyYW5kLCBvcmRlcikKLSNkZWZpbmUJYXRvbWljX2ZldGNoX3N1Yl9leHBsaWNpdChvYmplY3QsIG9wZXJhbmQsIG9yZGVyKQkJXAotCV9fYzExX2F0b21pY19mZXRjaF9zdWIob2JqZWN0LCBvcGVyYW5kLCBvcmRlcikKLSNkZWZpbmUJYXRvbWljX2ZldGNoX3hvcl9leHBsaWNpdChvYmplY3QsIG9wZXJhbmQsIG9yZGVyKQkJXAotCV9fYzExX2F0b21pY19mZXRjaF94b3Iob2JqZWN0LCBvcGVyYW5kLCBvcmRlcikKLSNkZWZpbmUJYXRvbWljX2xvYWRfZXhwbGljaXQob2JqZWN0LCBvcmRlcikJCQkJXAotCV9fYzExX2F0b21pY19sb2FkKG9iamVjdCwgb3JkZXIpCi0jZGVmaW5lCWF0b21pY19zdG9yZV9leHBsaWNpdChvYmplY3QsIGRlc2lyZWQsIG9yZGVyKQkJCVwKLQlfX2MxMV9hdG9taWNfc3RvcmUob2JqZWN0LCBkZXNpcmVkLCBvcmRlcikKLSNlbGlmIGRlZmluZWQoX19HTlVDX0FUT01JQ1MpCi0jZGVmaW5lCWF0b21pY19jb21wYXJlX2V4Y2hhbmdlX3N0cm9uZ19leHBsaWNpdChvYmplY3QsIGV4cGVjdGVkLAlcCi0gICAgZGVzaXJlZCwgc3VjY2VzcywgZmFpbHVyZSkJCQkJCQlcCi0JX19hdG9taWNfY29tcGFyZV9leGNoYW5nZV9uKCYob2JqZWN0KS0+X192YWwsIGV4cGVjdGVkLAkJXAotCSAgICBkZXNpcmVkLCAwLCBzdWNjZXNzLCBmYWlsdXJlKQotI2RlZmluZQlhdG9taWNfY29tcGFyZV9leGNoYW5nZV93ZWFrX2V4cGxpY2l0KG9iamVjdCwgZXhwZWN0ZWQsCQlcCi0gICAgZGVzaXJlZCwgc3VjY2VzcywgZmFpbHVyZSkJCQkJCQlcCi0JX19hdG9taWNfY29tcGFyZV9leGNoYW5nZV9uKCYob2JqZWN0KS0+X192YWwsIGV4cGVjdGVkLAkJXAotCSAgICBkZXNpcmVkLCAxLCBzdWNjZXNzLCBmYWlsdXJlKQotI2RlZmluZQlhdG9taWNfZXhjaGFuZ2VfZXhwbGljaXQob2JqZWN0LCBkZXNpcmVkLCBvcmRlcikJCVwKLQlfX2F0b21pY19leGNoYW5nZV9uKCYob2JqZWN0KS0+X192YWwsIGRlc2lyZWQsIG9yZGVyKQotI2RlZmluZQlhdG9taWNfZmV0Y2hfYWRkX2V4cGxpY2l0KG9iamVjdCwgb3BlcmFuZCwgb3JkZXIpCQlcCi0JX19hdG9taWNfZmV0Y2hfYWRkKCYob2JqZWN0KS0+X192YWwsIG9wZXJhbmQsIG9yZGVyKQotI2RlZmluZQlhdG9taWNfZmV0Y2hfYW5kX2V4cGxpY2l0KG9iamVjdCwgb3BlcmFuZCwgb3JkZXIpCQlcCi0JX19hdG9taWNfZmV0Y2hfYW5kKCYob2JqZWN0KS0+X192YWwsIG9wZXJhbmQsIG9yZGVyKQotI2RlZmluZQlhdG9taWNfZmV0Y2hfb3JfZXhwbGljaXQob2JqZWN0LCBvcGVyYW5kLCBvcmRlcikJCVwKLQlfX2F0b21pY19mZXRjaF9vcigmKG9iamVjdCktPl9fdmFsLCBvcGVyYW5kLCBvcmRlcikKLSNkZWZpbmUJYXRvbWljX2ZldGNoX3N1Yl9leHBsaWNpdChvYmplY3QsIG9wZXJhbmQsIG9yZGVyKQkJXAotCV9fYXRvbWljX2ZldGNoX3N1YigmKG9iamVjdCktPl9fdmFsLCBvcGVyYW5kLCBvcmRlcikKLSNkZWZpbmUJYXRvbWljX2ZldGNoX3hvcl9leHBsaWNpdChvYmplY3QsIG9wZXJhbmQsIG9yZGVyKQkJXAotCV9fYXRvbWljX2ZldGNoX3hvcigmKG9iamVjdCktPl9fdmFsLCBvcGVyYW5kLCBvcmRlcikKLSNkZWZpbmUJYXRvbWljX2xvYWRfZXhwbGljaXQob2JqZWN0LCBvcmRlcikJCQkJXAotCV9fYXRvbWljX2xvYWRfbigmKG9iamVjdCktPl9fdmFsLCBvcmRlcikKLSNkZWZpbmUJYXRvbWljX3N0b3JlX2V4cGxpY2l0KG9iamVjdCwgZGVzaXJlZCwgb3JkZXIpCQkJXAotCV9fYXRvbWljX3N0b3JlX24oJihvYmplY3QpLT5fX3ZhbCwgZGVzaXJlZCwgb3JkZXIpCi0jZWxzZQotI2RlZmluZQlfX2F0b21pY19hcHBseV9zdHJpZGUob2JqZWN0LCBvcGVyYW5kKSBcCi0JKCgoX190eXBlb2ZfXygob2JqZWN0KS0+X192YWwpKTApICsgKG9wZXJhbmQpKQotI2RlZmluZQlhdG9taWNfY29tcGFyZV9leGNoYW5nZV9zdHJvbmdfZXhwbGljaXQob2JqZWN0LCBleHBlY3RlZCwJXAotICAgIGRlc2lyZWQsIHN1Y2Nlc3MsIGZhaWx1cmUpCV9fZXh0ZW5zaW9uX18gKHsJCQlcCi0JX190eXBlb2ZfXyhleHBlY3RlZCkgX19lcCA9IChleHBlY3RlZCk7CQkJCVwKLQlfX3R5cGVvZl9fKCpfX2VwKSBfX2UgPSAqX19lcDsJCQkJCVwKLQkodm9pZCkoc3VjY2Vzcyk7ICh2b2lkKShmYWlsdXJlKTsJCQkJXAotCShib29sKSgoKl9fZXAgPSBfX3N5bmNfdmFsX2NvbXBhcmVfYW5kX3N3YXAoJihvYmplY3QpLT5fX3ZhbCwJXAotCSAgICBfX2UsIGRlc2lyZWQpKSA9PSBfX2UpOwkJCQkJXAotfSkKLSNkZWZpbmUJYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2Vfd2Vha19leHBsaWNpdChvYmplY3QsIGV4cGVjdGVkLAkJXAotICAgIGRlc2lyZWQsIHN1Y2Nlc3MsIGZhaWx1cmUpCQkJCQkJXAotCWF0b21pY19jb21wYXJlX2V4Y2hhbmdlX3N0cm9uZ19leHBsaWNpdChvYmplY3QsIGV4cGVjdGVkLAlcCi0JCWRlc2lyZWQsIHN1Y2Nlc3MsIGZhaWx1cmUpCi0jaWZkZWYgX19IQVNfQlVJTFRJTl9TWU5DX1NXQVAKLS8qIENsYW5nIHByb3ZpZGVzIGEgZnVsbC1iYXJyaWVyIGF0b21pYyBleGNoYW5nZSAtIHVzZSBpdCBpZiBhdmFpbGFibGUuICovCi0jZGVmaW5lCWF0b21pY19leGNoYW5nZV9leHBsaWNpdChvYmplY3QsIGRlc2lyZWQsIG9yZGVyKQkJXAotCSgodm9pZCkob3JkZXIpLCBfX3N5bmNfc3dhcCgmKG9iamVjdCktPl9fdmFsLCBkZXNpcmVkKSkKLSNlbHNlCi0vKgotICogX19zeW5jX2xvY2tfdGVzdF9hbmRfc2V0KCkgaXMgb25seSBhbiBhY3F1aXJlIGJhcnJpZXIgaW4gdGhlb3J5IChhbHRob3VnaCBpbgotICogcHJhY3RpY2UgaXQgaXMgdXN1YWxseSBhIGZ1bGwgYmFycmllcikgc28gd2UgbmVlZCBhbiBleHBsaWNpdCBiYXJyaWVyIGJlZm9yZQotICogaXQuCi0gKi8KLSNkZWZpbmUJYXRvbWljX2V4Y2hhbmdlX2V4cGxpY2l0KG9iamVjdCwgZGVzaXJlZCwgb3JkZXIpCQlcCi1fX2V4dGVuc2lvbl9fICh7CQkJCQkJCVwKLQlfX3R5cGVvZl9fKG9iamVjdCkgX19vID0gKG9iamVjdCk7CQkJCVwKLQlfX3R5cGVvZl9fKGRlc2lyZWQpIF9fZCA9IChkZXNpcmVkKTsJCQkJXAotCSh2b2lkKShvcmRlcik7CQkJCQkJCVwKLQlfX3N5bmNfc3luY2hyb25pemUoKTsJCQkJCQlcCi0JX19zeW5jX2xvY2tfdGVzdF9hbmRfc2V0KCYoX19vKS0+X192YWwsIF9fZCk7CQkJXAotfSkKLSNlbmRpZgotI2RlZmluZQlhdG9taWNfZmV0Y2hfYWRkX2V4cGxpY2l0KG9iamVjdCwgb3BlcmFuZCwgb3JkZXIpCQlcCi0JKCh2b2lkKShvcmRlciksIF9fc3luY19mZXRjaF9hbmRfYWRkKCYob2JqZWN0KS0+X192YWwsCQlcCi0JICAgIF9fYXRvbWljX2FwcGx5X3N0cmlkZShvYmplY3QsIG9wZXJhbmQpKSkKLSNkZWZpbmUJYXRvbWljX2ZldGNoX2FuZF9leHBsaWNpdChvYmplY3QsIG9wZXJhbmQsIG9yZGVyKQkJXAotCSgodm9pZCkob3JkZXIpLCBfX3N5bmNfZmV0Y2hfYW5kX2FuZCgmKG9iamVjdCktPl9fdmFsLCBvcGVyYW5kKSkKLSNkZWZpbmUJYXRvbWljX2ZldGNoX29yX2V4cGxpY2l0KG9iamVjdCwgb3BlcmFuZCwgb3JkZXIpCQlcCi0JKCh2b2lkKShvcmRlciksIF9fc3luY19mZXRjaF9hbmRfb3IoJihvYmplY3QpLT5fX3ZhbCwgb3BlcmFuZCkpCi0jZGVmaW5lCWF0b21pY19mZXRjaF9zdWJfZXhwbGljaXQob2JqZWN0LCBvcGVyYW5kLCBvcmRlcikJCVwKLQkoKHZvaWQpKG9yZGVyKSwgX19zeW5jX2ZldGNoX2FuZF9zdWIoJihvYmplY3QpLT5fX3ZhbCwJCVwKLQkgICAgX19hdG9taWNfYXBwbHlfc3RyaWRlKG9iamVjdCwgb3BlcmFuZCkpKQotI2RlZmluZQlhdG9taWNfZmV0Y2hfeG9yX2V4cGxpY2l0KG9iamVjdCwgb3BlcmFuZCwgb3JkZXIpCQlcCi0JKCh2b2lkKShvcmRlciksIF9fc3luY19mZXRjaF9hbmRfeG9yKCYob2JqZWN0KS0+X192YWwsIG9wZXJhbmQpKQotI2RlZmluZQlhdG9taWNfbG9hZF9leHBsaWNpdChvYmplY3QsIG9yZGVyKQkJCQlcCi0JKCh2b2lkKShvcmRlciksIF9fc3luY19mZXRjaF9hbmRfYWRkKCYob2JqZWN0KS0+X192YWwsIDApKQotI2RlZmluZQlhdG9taWNfc3RvcmVfZXhwbGljaXQob2JqZWN0LCBkZXNpcmVkLCBvcmRlcikJCQlcCi0JKCh2b2lkKWF0b21pY19leGNoYW5nZV9leHBsaWNpdChvYmplY3QsIGRlc2lyZWQsIG9yZGVyKSkKLSNlbmRpZgotCi0vKgotICogQ29udmVuaWVuY2UgZnVuY3Rpb25zLgotICoKLSAqIERvbid0IHByb3ZpZGUgdGhlc2UgaW4ga2VybmVsIHNwYWNlLiBJbiBrZXJuZWwgc3BhY2UsIHdlIHNob3VsZCBiZQotICogZGlzY2lwbGluZWQgZW5vdWdoIHRvIGFsd2F5cyBwcm92aWRlIGV4cGxpY2l0IGJhcnJpZXJzLgotICovCi0KLSNpZm5kZWYgX0tFUk5FTAotI2RlZmluZQlhdG9taWNfY29tcGFyZV9leGNoYW5nZV9zdHJvbmcob2JqZWN0LCBleHBlY3RlZCwgZGVzaXJlZCkJXAotCWF0b21pY19jb21wYXJlX2V4Y2hhbmdlX3N0cm9uZ19leHBsaWNpdChvYmplY3QsIGV4cGVjdGVkLAlcCi0JICAgIGRlc2lyZWQsIG1lbW9yeV9vcmRlcl9zZXFfY3N0LCBtZW1vcnlfb3JkZXJfc2VxX2NzdCkKLSNkZWZpbmUJYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2Vfd2VhayhvYmplY3QsIGV4cGVjdGVkLCBkZXNpcmVkKQkJXAotCWF0b21pY19jb21wYXJlX2V4Y2hhbmdlX3dlYWtfZXhwbGljaXQob2JqZWN0LCBleHBlY3RlZCwJCVwKLQkgICAgZGVzaXJlZCwgbWVtb3J5X29yZGVyX3NlcV9jc3QsIG1lbW9yeV9vcmRlcl9zZXFfY3N0KQotI2RlZmluZQlhdG9taWNfZXhjaGFuZ2Uob2JqZWN0LCBkZXNpcmVkKQkJCQlcCi0JYXRvbWljX2V4Y2hhbmdlX2V4cGxpY2l0KG9iamVjdCwgZGVzaXJlZCwgbWVtb3J5X29yZGVyX3NlcV9jc3QpCi0jZGVmaW5lCWF0b21pY19mZXRjaF9hZGQob2JqZWN0LCBvcGVyYW5kKQkJCQlcCi0JYXRvbWljX2ZldGNoX2FkZF9leHBsaWNpdChvYmplY3QsIG9wZXJhbmQsIG1lbW9yeV9vcmRlcl9zZXFfY3N0KQotI2RlZmluZQlhdG9taWNfZmV0Y2hfYW5kKG9iamVjdCwgb3BlcmFuZCkJCQkJXAotCWF0b21pY19mZXRjaF9hbmRfZXhwbGljaXQob2JqZWN0LCBvcGVyYW5kLCBtZW1vcnlfb3JkZXJfc2VxX2NzdCkKLSNkZWZpbmUJYXRvbWljX2ZldGNoX29yKG9iamVjdCwgb3BlcmFuZCkJCQkJXAotCWF0b21pY19mZXRjaF9vcl9leHBsaWNpdChvYmplY3QsIG9wZXJhbmQsIG1lbW9yeV9vcmRlcl9zZXFfY3N0KQotI2RlZmluZQlhdG9taWNfZmV0Y2hfc3ViKG9iamVjdCwgb3BlcmFuZCkJCQkJXAotCWF0b21pY19mZXRjaF9zdWJfZXhwbGljaXQob2JqZWN0LCBvcGVyYW5kLCBtZW1vcnlfb3JkZXJfc2VxX2NzdCkKLSNkZWZpbmUJYXRvbWljX2ZldGNoX3hvcihvYmplY3QsIG9wZXJhbmQpCQkJCVwKLQlhdG9taWNfZmV0Y2hfeG9yX2V4cGxpY2l0KG9iamVjdCwgb3BlcmFuZCwgbWVtb3J5X29yZGVyX3NlcV9jc3QpCi0jZGVmaW5lCWF0b21pY19sb2FkKG9iamVjdCkJCQkJCQlcCi0JYXRvbWljX2xvYWRfZXhwbGljaXQob2JqZWN0LCBtZW1vcnlfb3JkZXJfc2VxX2NzdCkKLSNkZWZpbmUJYXRvbWljX3N0b3JlKG9iamVjdCwgZGVzaXJlZCkJCQkJCVwKLQlhdG9taWNfc3RvcmVfZXhwbGljaXQob2JqZWN0LCBkZXNpcmVkLCBtZW1vcnlfb3JkZXJfc2VxX2NzdCkKLSNlbmRpZiAvKiAhX0tFUk5FTCAqLwotCi0vKgotICogNy4xNy44IEF0b21pYyBmbGFnIHR5cGUgYW5kIG9wZXJhdGlvbnMuCi0gKgotICogWFhYOiBBc3N1bWUgYXRvbWljX2Jvb2wgY2FuIGJlIHVzZWQgYXMgYW4gYXRvbWljX2ZsYWcuIElzIHRoZXJlIHNvbWUKLSAqIGtpbmQgb2YgY29tcGlsZXIgYnVpbHQtaW4gdHlwZSB3ZSBjb3VsZCB1c2U/Ci0gKi8KLQotdHlwZWRlZiBzdHJ1Y3QgewotCWF0b21pY19ib29sCV9fZmxhZzsKLX0gYXRvbWljX2ZsYWc7Ci0KLSNkZWZpbmUJQVRPTUlDX0ZMQUdfSU5JVAkJeyBBVE9NSUNfVkFSX0lOSVQoZmFsc2UpIH0KLQotc3RhdGljIF9faW5saW5lIGJvb2wKLWF0b21pY19mbGFnX3Rlc3RfYW5kX3NldF9leHBsaWNpdCh2b2xhdGlsZSBhdG9taWNfZmxhZyAqX19vYmplY3QsCi0gICAgbWVtb3J5X29yZGVyIF9fb3JkZXIpCi17Ci0JcmV0dXJuIChhdG9taWNfZXhjaGFuZ2VfZXhwbGljaXQoJl9fb2JqZWN0LT5fX2ZsYWcsIDEsIF9fb3JkZXIpKTsKLX0KLQotc3RhdGljIF9faW5saW5lIHZvaWQKLWF0b21pY19mbGFnX2NsZWFyX2V4cGxpY2l0KHZvbGF0aWxlIGF0b21pY19mbGFnICpfX29iamVjdCwgbWVtb3J5X29yZGVyIF9fb3JkZXIpCi17Ci0KLQlhdG9taWNfc3RvcmVfZXhwbGljaXQoJl9fb2JqZWN0LT5fX2ZsYWcsIDAsIF9fb3JkZXIpOwotfQotCi0jaWZuZGVmIF9LRVJORUwKLXN0YXRpYyBfX2lubGluZSBib29sCi1hdG9taWNfZmxhZ190ZXN0X2FuZF9zZXQodm9sYXRpbGUgYXRvbWljX2ZsYWcgKl9fb2JqZWN0KQotewotCi0JcmV0dXJuIChhdG9taWNfZmxhZ190ZXN0X2FuZF9zZXRfZXhwbGljaXQoX19vYmplY3QsCi0JICAgIG1lbW9yeV9vcmRlcl9zZXFfY3N0KSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZSB2b2lkCi1hdG9taWNfZmxhZ19jbGVhcih2b2xhdGlsZSBhdG9taWNfZmxhZyAqX19vYmplY3QpCi17Ci0KLQlhdG9taWNfZmxhZ19jbGVhcl9leHBsaWNpdChfX29iamVjdCwgbWVtb3J5X29yZGVyX3NlcV9jc3QpOwotfQotI2VuZGlmIC8qICFfS0VSTkVMICovCi0KLSNlbmRpZiAvKiA8YXRvbWljPiB1bmF2YWlsYWJsZSAqLwotCi0jZW5kaWYgLyogIV9TVERBVE9NSUNfSF8gKi8KZGlmZiAtLWdpdCBhL2NsYW5nLTI1NzcxMTMvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvc3RkYm9vbC5oIGIvY2xhbmctMjU3NzExMy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9zdGRib29sLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA0Njc4OTMuLjAwMDAwMDAKLS0tIGEvY2xhbmctMjU3NzExMy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9zdGRib29sLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0NCArMCwwIEBACi0vKj09PS0tLS0gc3RkYm9vbC5oIC0gU3RhbmRhcmQgaGVhZGVyIGZvciBib29sZWFucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09Ci0gKgotICogQ29weXJpZ2h0IChjKSAyMDA4IEVsaSBGcmllZG1hbgotICoKLSAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKLSAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCi0gKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCi0gKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCi0gKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKLSAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Ci0gKgotICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KLSAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgotICoKLSAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCi0gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKLSAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgotICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKLSAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KLSAqIFRIRSBTT0ZUV0FSRS4KLSAqCi0gKj09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09Ci0gKi8KLQotI2lmbmRlZiBfX1NUREJPT0xfSAotI2RlZmluZSBfX1NUREJPT0xfSAotCi0vKiBEb24ndCBkZWZpbmUgYm9vbCwgdHJ1ZSwgYW5kIGZhbHNlIGluIEMrKywgZXhjZXB0IGFzIGEgR05VIGV4dGVuc2lvbi4gKi8KLSNpZm5kZWYgX19jcGx1c3BsdXMKLSNkZWZpbmUgYm9vbCBfQm9vbAotI2RlZmluZSB0cnVlIDEKLSNkZWZpbmUgZmFsc2UgMAotI2VsaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgIWRlZmluZWQoX19TVFJJQ1RfQU5TSV9fKQotLyogRGVmaW5lIF9Cb29sLCBib29sLCBmYWxzZSwgdHJ1ZSBhcyBhIEdOVSBleHRlbnNpb24uICovCi0jZGVmaW5lIF9Cb29sIGJvb2wKLSNkZWZpbmUgYm9vbCAgYm9vbAotI2RlZmluZSBmYWxzZSBmYWxzZQotI2RlZmluZSB0cnVlICB0cnVlCi0jZW5kaWYKLQotI2RlZmluZSBfX2Jvb2xfdHJ1ZV9mYWxzZV9hcmVfZGVmaW5lZCAxCi0KLSNlbmRpZiAvKiBfX1NUREJPT0xfSCAqLwpkaWZmIC0tZ2l0IGEvY2xhbmctMjU3NzExMy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9zdGRkZWYuaCBiL2NsYW5nLTI1NzcxMTMvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvc3RkZGVmLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczNTQ5OTYuLjAwMDAwMDAKLS0tIGEvY2xhbmctMjU3NzExMy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9zdGRkZWYuaAorKysgL2Rldi9udWxsCkBAIC0xLDEzNyArMCwwIEBACi0vKj09PS0tLS0gc3RkZGVmLmggLSBCYXNpYyB0eXBlIGRlZmluaXRpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09Ci0gKgotICogQ29weXJpZ2h0IChjKSAyMDA4IEVsaSBGcmllZG1hbgotICoKLSAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKLSAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCi0gKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCi0gKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCi0gKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKLSAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Ci0gKgotICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KLSAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgotICoKLSAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCi0gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKLSAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgotICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKLSAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KLSAqIFRIRSBTT0ZUV0FSRS4KLSAqCi0gKj09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09Ci0gKi8KLQotI2lmICFkZWZpbmVkKF9fU1REREVGX0gpIHx8IGRlZmluZWQoX19uZWVkX3B0cmRpZmZfdCkgfHwgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBkZWZpbmVkKF9fbmVlZF9zaXplX3QpIHx8IGRlZmluZWQoX19uZWVkX3djaGFyX3QpIHx8ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgZGVmaW5lZChfX25lZWRfTlVMTCkgfHwgZGVmaW5lZChfX25lZWRfd2ludF90KQotCi0jaWYgIWRlZmluZWQoX19uZWVkX3B0cmRpZmZfdCkgJiYgIWRlZmluZWQoX19uZWVkX3NpemVfdCkgJiYgICAgICAgICAgICAgICAgICAgXAotICAgICFkZWZpbmVkKF9fbmVlZF93Y2hhcl90KSAmJiAhZGVmaW5lZChfX25lZWRfTlVMTCkgJiYgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAhZGVmaW5lZChfX25lZWRfd2ludF90KQotLyogQWx3YXlzIGRlZmluZSBtaXNjZWxsYW5lb3VzIHBpZWNlcyB3aGVuIG1vZHVsZXMgYXJlIGF2YWlsYWJsZS4gKi8KLSNpZiAhX19oYXNfZmVhdHVyZShtb2R1bGVzKQotI2RlZmluZSBfX1NURERFRl9ICi0jZW5kaWYKLSNkZWZpbmUgX19uZWVkX3B0cmRpZmZfdAotI2RlZmluZSBfX25lZWRfc2l6ZV90Ci0jZGVmaW5lIF9fbmVlZF93Y2hhcl90Ci0jZGVmaW5lIF9fbmVlZF9OVUxMCi0jZGVmaW5lIF9fbmVlZF9TVERERUZfSF9taXNjCi0vKiBfX25lZWRfd2ludF90IGlzIGludGVudGlvbmFsbHkgbm90IGRlZmluZWQgaGVyZS4gKi8KLSNlbmRpZgotCi0jaWYgZGVmaW5lZChfX25lZWRfcHRyZGlmZl90KQotI2lmICFkZWZpbmVkKF9QVFJESUZGX1QpIHx8IF9faGFzX2ZlYXR1cmUobW9kdWxlcykKLS8qIEFsd2F5cyBkZWZpbmUgcHRyZGlmZl90IHdoZW4gbW9kdWxlcyBhcmUgYXZhaWxhYmxlLiAqLwotI2lmICFfX2hhc19mZWF0dXJlKG1vZHVsZXMpCi0jZGVmaW5lIF9QVFJESUZGX1QKLSNlbmRpZgotdHlwZWRlZiBfX1BUUkRJRkZfVFlQRV9fIHB0cmRpZmZfdDsKLSNlbmRpZgotI3VuZGVmIF9fbmVlZF9wdHJkaWZmX3QKLSNlbmRpZiAvKiBkZWZpbmVkKF9fbmVlZF9wdHJkaWZmX3QpICovCi0KLSNpZiBkZWZpbmVkKF9fbmVlZF9zaXplX3QpCi0jaWYgIWRlZmluZWQoX1NJWkVfVCkgfHwgX19oYXNfZmVhdHVyZShtb2R1bGVzKQotLyogQWx3YXlzIGRlZmluZSBzaXplX3Qgd2hlbiBtb2R1bGVzIGFyZSBhdmFpbGFibGUuICovCi0jaWYgIV9faGFzX2ZlYXR1cmUobW9kdWxlcykKLSNkZWZpbmUgX1NJWkVfVAotI2VuZGlmCi10eXBlZGVmIF9fU0laRV9UWVBFX18gc2l6ZV90OwotI2VuZGlmCi0jdW5kZWYgX19uZWVkX3NpemVfdAotI2VuZGlmIC8qZGVmaW5lZChfX25lZWRfc2l6ZV90KSAqLwotCi0jaWYgZGVmaW5lZChfX25lZWRfU1REREVGX0hfbWlzYykKLS8qIElTTzk4OTk6MjAxMSA3LjIwIChDMTEgQW5uZXggSyk6IERlZmluZSByc2l6ZV90IGlmIF9fU1REQ19XQU5UX0xJQl9FWFQxX18gaXMKLSAqIGVuYWJsZWQuICovCi0jaWYgKGRlZmluZWQoX19TVERDX1dBTlRfTElCX0VYVDFfXykgJiYgX19TVERDX1dBTlRfTElCX0VYVDFfXyA+PSAxICYmIFwKLSAgICAgIWRlZmluZWQoX1JTSVpFX1QpKSB8fCBfX2hhc19mZWF0dXJlKG1vZHVsZXMpCi0vKiBBbHdheXMgZGVmaW5lIHJzaXplX3Qgd2hlbiBtb2R1bGVzIGFyZSBhdmFpbGFibGUuICovCi0jaWYgIV9faGFzX2ZlYXR1cmUobW9kdWxlcykKLSNkZWZpbmUgX1JTSVpFX1QKLSNlbmRpZgotdHlwZWRlZiBfX1NJWkVfVFlQRV9fIHJzaXplX3Q7Ci0jZW5kaWYKLSNlbmRpZiAvKiBkZWZpbmVkKF9fbmVlZF9TVERERUZfSF9taXNjKSAqLwotCi0jaWYgZGVmaW5lZChfX25lZWRfd2NoYXJfdCkKLSNpZm5kZWYgX19jcGx1c3BsdXMKLS8qIEFsd2F5cyBkZWZpbmUgd2NoYXJfdCB3aGVuIG1vZHVsZXMgYXJlIGF2YWlsYWJsZS4gKi8KLSNpZiAhZGVmaW5lZChfV0NIQVJfVCkgfHwgX19oYXNfZmVhdHVyZShtb2R1bGVzKQotI2lmICFfX2hhc19mZWF0dXJlKG1vZHVsZXMpCi0jZGVmaW5lIF9XQ0hBUl9UCi0jaWYgZGVmaW5lZChfTVNDX0VYVEVOU0lPTlMpCi0jZGVmaW5lIF9XQ0hBUl9UX0RFRklORUQKLSNlbmRpZgotI2VuZGlmCi10eXBlZGVmIF9fV0NIQVJfVFlQRV9fIHdjaGFyX3Q7Ci0jZW5kaWYKLSNlbmRpZgotI3VuZGVmIF9fbmVlZF93Y2hhcl90Ci0jZW5kaWYgLyogZGVmaW5lZChfX25lZWRfd2NoYXJfdCkgKi8KLQotI2lmIGRlZmluZWQoX19uZWVkX05VTEwpCi0jdW5kZWYgTlVMTAotI2lmZGVmIF9fY3BsdXNwbHVzCi0jICBpZiAhZGVmaW5lZChfX01JTkdXMzJfXykgJiYgIWRlZmluZWQoX01TQ19WRVIpCi0jICAgIGRlZmluZSBOVUxMIF9fbnVsbAotIyAgZWxzZQotIyAgICBkZWZpbmUgTlVMTCAwCi0jICBlbmRpZgotI2Vsc2UKLSMgIGRlZmluZSBOVUxMICgodm9pZCopMCkKLSNlbmRpZgotI2lmZGVmIF9fY3BsdXNwbHVzCi0jaWYgZGVmaW5lZChfTVNDX0VYVEVOU0lPTlMpICYmIGRlZmluZWQoX05BVElWRV9OVUxMUFRSX1NVUFBPUlRFRCkKLW5hbWVzcGFjZSBzdGQgeyB0eXBlZGVmIGRlY2x0eXBlKG51bGxwdHIpIG51bGxwdHJfdDsgfQotdXNpbmcgOjpzdGQ6Om51bGxwdHJfdDsKLSNlbmRpZgotI2VuZGlmCi0jdW5kZWYgX19uZWVkX05VTEwKLSNlbmRpZiAvKiBkZWZpbmVkKF9fbmVlZF9OVUxMKSAqLwotCi0jaWYgZGVmaW5lZChfX25lZWRfU1REREVGX0hfbWlzYykKLSNpZiBfX1NURENfVkVSU0lPTl9fID49IDIwMTExMkwgfHwgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAotI2luY2x1ZGUgIl9fc3RkZGVmX21heF9hbGlnbl90LmgiCi0jZW5kaWYKLSNkZWZpbmUgb2Zmc2V0b2YodCwgZCkgX19idWlsdGluX29mZnNldG9mKHQsIGQpCi0jdW5kZWYgX19uZWVkX1NURERFRl9IX21pc2MKLSNlbmRpZiAgLyogZGVmaW5lZChfX25lZWRfU1REREVGX0hfbWlzYykgKi8KLQotLyogU29tZSBDIGxpYnJhcmllcyBleHBlY3QgdG8gc2VlIGEgd2ludF90IGhlcmUuIE90aGVycyAobm90YWJseSBNaW5HVykgd2lsbCB1c2UKLV9fV0lOVF9UWVBFX18gZGlyZWN0bHk7IGFjY29tbW9kYXRlIGJvdGggYnkgcmVxdWlyaW5nIF9fbmVlZF93aW50X3QgKi8KLSNpZiBkZWZpbmVkKF9fbmVlZF93aW50X3QpCi0vKiBBbHdheXMgZGVmaW5lIHdpbnRfdCB3aGVuIG1vZHVsZXMgYXJlIGF2YWlsYWJsZS4gKi8KLSNpZiAhZGVmaW5lZChfV0lOVF9UKSB8fCBfX2hhc19mZWF0dXJlKG1vZHVsZXMpCi0jaWYgIV9faGFzX2ZlYXR1cmUobW9kdWxlcykKLSNkZWZpbmUgX1dJTlRfVAotI2VuZGlmCi10eXBlZGVmIF9fV0lOVF9UWVBFX18gd2ludF90OwotI2VuZGlmCi0jdW5kZWYgX19uZWVkX3dpbnRfdAotI2VuZGlmIC8qIF9fbmVlZF93aW50X3QgKi8KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9jbGFuZy0yNTc3MTEzL2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL3N0ZGludC5oIGIvY2xhbmctMjU3NzExMy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9zdGRpbnQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2YyZmNiYy4uMDAwMDAwMAotLS0gYS9jbGFuZy0yNTc3MTEzL2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL3N0ZGludC5oCisrKyAvZGV2L251bGwKQEAgLTEsNzA3ICswLDAgQEAKLS8qPT09LS0tLSBzdGRpbnQuaCAtIFN0YW5kYXJkIGhlYWRlciBmb3Igc2l6ZWQgaW50ZWdlciB0eXBlcyAtLS0tLS0tLS0tLS0tLT09PSpcCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDA5IENocmlzIExhdHRuZXIKLSAqCi0gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5Ci0gKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAotICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cwotICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAotICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCi0gKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgotICoKLSAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCi0gKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KLSAqCi0gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgotICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCi0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKLSAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCi0gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCi0gKiBUSEUgU09GVFdBUkUuCi0gKgotXCo9PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09Ki8KLQotI2lmbmRlZiBfX0NMQU5HX1NURElOVF9ICi0jZGVmaW5lIF9fQ0xBTkdfU1RESU5UX0gKLQotLyogSWYgd2UncmUgaG9zdGVkLCBmYWxsIGJhY2sgdG8gdGhlIHN5c3RlbSdzIHN0ZGludC5oLCB3aGljaCBtaWdodCBoYXZlCi0gKiBhZGRpdGlvbmFsIGRlZmluaXRpb25zLgotICovCi0jaWYgX19TVERDX0hPU1RFRF9fICYmIF9faGFzX2luY2x1ZGVfbmV4dCg8c3RkaW50Lmg+KQotCi0vLyBDOTkgNy4xOC4zIExpbWl0cyBvZiBvdGhlciBpbnRlZ2VyIHR5cGVzCi0vLwotLy8gIEZvb3Rub3RlIDIxOSwgMjIwOiBDKysgaW1wbGVtZW50YXRpb25zIHNob3VsZCBkZWZpbmUgdGhlc2UgbWFjcm9zIG9ubHkgd2hlbgotLy8gIF9fU1REQ19MSU1JVF9NQUNST1MgaXMgZGVmaW5lZCBiZWZvcmUgPHN0ZGludC5oPiBpcyBpbmNsdWRlZC4KLS8vCi0vLyAgRm9vdG5vdGUgMjIyOiBDKysgaW1wbGVtZW50YXRpb25zIHNob3VsZCBkZWZpbmUgdGhlc2UgbWFjcm9zIG9ubHkgd2hlbgotLy8gIF9fU1REQ19DT05TVEFOVF9NQUNST1MgaXMgZGVmaW5lZCBiZWZvcmUgPHN0ZGludC5oPiBpcyBpbmNsdWRlZC4KLS8vCi0vLyBDKysxMSBbY3N0ZGludC5zeW5dcDI6Ci0vLwotLy8gIFRoZSBtYWNyb3MgZGVmaW5lZCBieSA8Y3N0ZGludD4gYXJlIHByb3ZpZGVkIHVuY29uZGl0aW9uYWxseS4gSW4gcGFydGljdWxhciwKLS8vICB0aGUgc3ltYm9scyBfX1NURENfTElNSVRfTUFDUk9TIGFuZCBfX1NURENfQ09OU1RBTlRfTUFDUk9TIChtZW50aW9uZWQgaW4KLS8vICBmb290bm90ZXMgMjE5LCAyMjAsIGFuZCAyMjIgaW4gdGhlIEMgc3RhbmRhcmQpIHBsYXkgbm8gcm9sZSBpbiBDKysuCi0vLwotLy8gQzExIHJlbW92ZWQgdGhlIHByb2JsZW1hdGljIGZvb3Rub3Rlcy4KLS8vCi0vLyBXb3JrIGFyb3VuZCB0aGlzIGluY29uc2lzdGVuY3kgYnkgYWx3YXlzIGRlZmluaW5nIHRob3NlIG1hY3JvcyBpbiBDKysgbW9kZSwKLS8vIHNvIHRoYXQgYSBDIGxpYnJhcnkgaW1wbGVtZW50YXRpb24gd2hpY2ggZm9sbG93cyB0aGUgQzk5IHN0YW5kYXJkIGNhbiBiZQotLy8gdXNlZCBpbiBDKysuCi0jIGlmZGVmIF9fY3BsdXNwbHVzCi0jICBpZiAhZGVmaW5lZChfX1NURENfTElNSVRfTUFDUk9TKQotIyAgIGRlZmluZSBfX1NURENfTElNSVRfTUFDUk9TCi0jICAgZGVmaW5lIF9fU1REQ19MSU1JVF9NQUNST1NfREVGSU5FRF9CWV9DTEFORwotIyAgZW5kaWYKLSMgIGlmICFkZWZpbmVkKF9fU1REQ19DT05TVEFOVF9NQUNST1MpCi0jICAgZGVmaW5lIF9fU1REQ19DT05TVEFOVF9NQUNST1MKLSMgICBkZWZpbmUgX19TVERDX0NPTlNUQU5UX01BQ1JPU19ERUZJTkVEX0JZX0NMQU5HCi0jICBlbmRpZgotIyBlbmRpZgotCi0jIGluY2x1ZGVfbmV4dCA8c3RkaW50Lmg+Ci0KLSMgaWZkZWYgX19TVERDX0xJTUlUX01BQ1JPU19ERUZJTkVEX0JZX0NMQU5HCi0jICB1bmRlZiBfX1NURENfTElNSVRfTUFDUk9TCi0jICB1bmRlZiBfX1NURENfTElNSVRfTUFDUk9TX0RFRklORURfQllfQ0xBTkcKLSMgZW5kaWYKLSMgaWZkZWYgX19TVERDX0NPTlNUQU5UX01BQ1JPU19ERUZJTkVEX0JZX0NMQU5HCi0jICB1bmRlZiBfX1NURENfQ09OU1RBTlRfTUFDUk9TCi0jICB1bmRlZiBfX1NURENfQ09OU1RBTlRfTUFDUk9TX0RFRklORURfQllfQ0xBTkcKLSMgZW5kaWYKLQotI2Vsc2UKLQotLyogQzk5IDcuMTguMS4xIEV4YWN0LXdpZHRoIGludGVnZXIgdHlwZXMuCi0gKiBDOTkgNy4xOC4xLjIgTWluaW11bS13aWR0aCBpbnRlZ2VyIHR5cGVzLgotICogQzk5IDcuMTguMS4zIEZhc3Rlc3QgbWluaW11bS13aWR0aCBpbnRlZ2VyIHR5cGVzLgotICoKLSAqIFRoZSBzdGFuZGFyZCByZXF1aXJlcyB0aGF0IGV4YWN0LXdpZHRoIHR5cGUgYmUgZGVmaW5lZCBmb3IgOC0sIDE2LSwgMzItLCBhbmQKLSAqIDY0LWJpdCB0eXBlcyBpZiB0aGV5IGFyZSBpbXBsZW1lbnRlZC4gT3RoZXIgZXhhY3Qgd2lkdGggdHlwZXMgYXJlIG9wdGlvbmFsLgotICogVGhpcyBpbXBsZW1lbnRhdGlvbiBkZWZpbmVzIGFuIGV4YWN0LXdpZHRoIHR5cGVzIGZvciBldmVyeSBpbnRlZ2VyIHdpZHRoCi0gKiB0aGF0IGlzIHJlcHJlc2VudGVkIGluIHRoZSBzdGFuZGFyZCBpbnRlZ2VyIHR5cGVzLgotICoKLSAqIFRoZSBzdGFuZGFyZCBhbHNvIHJlcXVpcmVzIG1pbmltdW0td2lkdGggdHlwZXMgYmUgZGVmaW5lZCBmb3IgOC0sIDE2LSwgMzItLAotICogYW5kIDY0LWJpdCB3aWR0aHMgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZXJlIGFyZSBjb3JyZXNwb25kaW5nIGV4YWN0LXdpZHRoCi0gKiB0eXBlcy4KLSAqCi0gKiBUbyBhY2NvbW1vZGF0ZSB0YXJnZXRzIHRoYXQgYXJlIG1pc3NpbmcgdHlwZXMgdGhhdCBhcmUgZXhhY3RseSA4LCAxNiwgMzIsIG9yCi0gKiA2NCBiaXRzIHdpZGUsIHRoaXMgaW1wbGVtZW50YXRpb24gdGFrZXMgYW4gYXBwcm9hY2ggb2YgY2FzY2FkaW5nCi0gKiByZWRlZmludGlvbnMsIHJlZGVmaW5pbmcgX19pbnRfbGVhc3ROX3QgdG8gc3VjY2Vzc2l2ZWx5IHNtYWxsZXIgZXhhY3Qtd2lkdGgKLSAqIHR5cGVzLiBJdCBpcyB0aGVyZWZvcmUgaW1wb3J0YW50IHRoYXQgdGhlIHR5cGVzIGFyZSBkZWZpbmVkIGluIG9yZGVyIG9mCi0gKiBkZXNjZW5kaW5nIHdpZHRocy4KLSAqCi0gKiBXZSBjdXJyZW50bHkgYXNzdW1lIHRoYXQgdGhlIG1pbmltdW0td2lkdGggdHlwZXMgYW5kIHRoZSBmYXN0ZXN0Ci0gKiBtaW5pbXVtLXdpZHRoIHR5cGVzIGFyZSB0aGUgc2FtZS4gVGhpcyBpcyBhbGxvd2VkIGJ5IHRoZSBzdGFuZGFyZCwgYnV0IGlzCi0gKiBzdWJvcHRpbWFsLgotICoKLSAqIEluIHZpb2xhdGlvbiBvZiB0aGUgc3RhbmRhcmQsIHNvbWUgdGFyZ2V0cyBkbyBub3QgaW1wbGVtZW50IGEgdHlwZSB0aGF0IGlzCi0gKiB3aWRlIGVub3VnaCB0byByZXByZXNlbnQgYWxsIG9mIHRoZSByZXF1aXJlZCB3aWR0aHMgKDgtLCAxNi0sIDMyLSwgNjQtYml0KS4KLSAqIFRvIGFjY29tbW9kYXRlIHRoZXNlIHRhcmdldHMsIGEgcmVxdWlyZWQgbWluaW11bS13aWR0aCB0eXBlIGlzIG9ubHkKLSAqIGRlZmluZWQgaWYgdGhlcmUgZXhpc3RzIGFuIGV4YWN0LXdpZHRoIHR5cGUgb2YgZXF1YWwgb3IgZ3JlYXRlciB3aWR0aC4KLSAqLwotCi0jaWZkZWYgX19JTlQ2NF9UWVBFX18KLSMgaWZuZGVmIF9faW50OF90X2RlZmluZWQgLyogZ2xpYmMgc3lzL3R5cGVzLmggYWxzbyBkZWZpbmVzIGludDY0X3QqLwotdHlwZWRlZiBfX0lOVDY0X1RZUEVfXyBpbnQ2NF90OwotIyBlbmRpZiAvKiBfX2ludDhfdF9kZWZpbmVkICovCi10eXBlZGVmIF9fVUlOVDY0X1RZUEVfXyB1aW50NjRfdDsKLSMgZGVmaW5lIF9faW50X2xlYXN0NjRfdCBpbnQ2NF90Ci0jIGRlZmluZSBfX3VpbnRfbGVhc3Q2NF90IHVpbnQ2NF90Ci0jIGRlZmluZSBfX2ludF9sZWFzdDMyX3QgaW50NjRfdAotIyBkZWZpbmUgX191aW50X2xlYXN0MzJfdCB1aW50NjRfdAotIyBkZWZpbmUgX19pbnRfbGVhc3QxNl90IGludDY0X3QKLSMgZGVmaW5lIF9fdWludF9sZWFzdDE2X3QgdWludDY0X3QKLSMgZGVmaW5lIF9faW50X2xlYXN0OF90IGludDY0X3QKLSMgZGVmaW5lIF9fdWludF9sZWFzdDhfdCB1aW50NjRfdAotI2VuZGlmIC8qIF9fSU5UNjRfVFlQRV9fICovCi0KLSNpZmRlZiBfX2ludF9sZWFzdDY0X3QKLXR5cGVkZWYgX19pbnRfbGVhc3Q2NF90IGludF9sZWFzdDY0X3Q7Ci10eXBlZGVmIF9fdWludF9sZWFzdDY0X3QgdWludF9sZWFzdDY0X3Q7Ci10eXBlZGVmIF9faW50X2xlYXN0NjRfdCBpbnRfZmFzdDY0X3Q7Ci10eXBlZGVmIF9fdWludF9sZWFzdDY0X3QgdWludF9mYXN0NjRfdDsKLSNlbmRpZiAvKiBfX2ludF9sZWFzdDY0X3QgKi8KLQotI2lmZGVmIF9fSU5UNTZfVFlQRV9fCi10eXBlZGVmIF9fSU5UNTZfVFlQRV9fIGludDU2X3Q7Ci10eXBlZGVmIF9fVUlOVDU2X1RZUEVfXyB1aW50NTZfdDsKLXR5cGVkZWYgaW50NTZfdCBpbnRfbGVhc3Q1Nl90OwotdHlwZWRlZiB1aW50NTZfdCB1aW50X2xlYXN0NTZfdDsKLXR5cGVkZWYgaW50NTZfdCBpbnRfZmFzdDU2X3Q7Ci10eXBlZGVmIHVpbnQ1Nl90IHVpbnRfZmFzdDU2X3Q7Ci0jIGRlZmluZSBfX2ludF9sZWFzdDMyX3QgaW50NTZfdAotIyBkZWZpbmUgX191aW50X2xlYXN0MzJfdCB1aW50NTZfdAotIyBkZWZpbmUgX19pbnRfbGVhc3QxNl90IGludDU2X3QKLSMgZGVmaW5lIF9fdWludF9sZWFzdDE2X3QgdWludDU2X3QKLSMgZGVmaW5lIF9faW50X2xlYXN0OF90IGludDU2X3QKLSMgZGVmaW5lIF9fdWludF9sZWFzdDhfdCB1aW50NTZfdAotI2VuZGlmIC8qIF9fSU5UNTZfVFlQRV9fICovCi0KLQotI2lmZGVmIF9fSU5UNDhfVFlQRV9fCi10eXBlZGVmIF9fSU5UNDhfVFlQRV9fIGludDQ4X3Q7Ci10eXBlZGVmIF9fVUlOVDQ4X1RZUEVfXyB1aW50NDhfdDsKLXR5cGVkZWYgaW50NDhfdCBpbnRfbGVhc3Q0OF90OwotdHlwZWRlZiB1aW50NDhfdCB1aW50X2xlYXN0NDhfdDsKLXR5cGVkZWYgaW50NDhfdCBpbnRfZmFzdDQ4X3Q7Ci10eXBlZGVmIHVpbnQ0OF90IHVpbnRfZmFzdDQ4X3Q7Ci0jIGRlZmluZSBfX2ludF9sZWFzdDMyX3QgaW50NDhfdAotIyBkZWZpbmUgX191aW50X2xlYXN0MzJfdCB1aW50NDhfdAotIyBkZWZpbmUgX19pbnRfbGVhc3QxNl90IGludDQ4X3QKLSMgZGVmaW5lIF9fdWludF9sZWFzdDE2X3QgdWludDQ4X3QKLSMgZGVmaW5lIF9faW50X2xlYXN0OF90IGludDQ4X3QKLSMgZGVmaW5lIF9fdWludF9sZWFzdDhfdCB1aW50NDhfdAotI2VuZGlmIC8qIF9fSU5UNDhfVFlQRV9fICovCi0KLQotI2lmZGVmIF9fSU5UNDBfVFlQRV9fCi10eXBlZGVmIF9fSU5UNDBfVFlQRV9fIGludDQwX3Q7Ci10eXBlZGVmIF9fVUlOVDQwX1RZUEVfXyB1aW50NDBfdDsKLXR5cGVkZWYgaW50NDBfdCBpbnRfbGVhc3Q0MF90OwotdHlwZWRlZiB1aW50NDBfdCB1aW50X2xlYXN0NDBfdDsKLXR5cGVkZWYgaW50NDBfdCBpbnRfZmFzdDQwX3Q7Ci10eXBlZGVmIHVpbnQ0MF90IHVpbnRfZmFzdDQwX3Q7Ci0jIGRlZmluZSBfX2ludF9sZWFzdDMyX3QgaW50NDBfdAotIyBkZWZpbmUgX191aW50X2xlYXN0MzJfdCB1aW50NDBfdAotIyBkZWZpbmUgX19pbnRfbGVhc3QxNl90IGludDQwX3QKLSMgZGVmaW5lIF9fdWludF9sZWFzdDE2X3QgdWludDQwX3QKLSMgZGVmaW5lIF9faW50X2xlYXN0OF90IGludDQwX3QKLSMgZGVmaW5lIF9fdWludF9sZWFzdDhfdCB1aW50NDBfdAotI2VuZGlmIC8qIF9fSU5UNDBfVFlQRV9fICovCi0KLQotI2lmZGVmIF9fSU5UMzJfVFlQRV9fCi0KLSMgaWZuZGVmIF9faW50OF90X2RlZmluZWQgLyogZ2xpYmMgc3lzL3R5cGVzLmggYWxzbyBkZWZpbmVzIGludDMyX3QqLwotdHlwZWRlZiBfX0lOVDMyX1RZUEVfXyBpbnQzMl90OwotIyBlbmRpZiAvKiBfX2ludDhfdF9kZWZpbmVkICovCi0KLSMgaWZuZGVmIF9fdWludDMyX3RfZGVmaW5lZCAgLyogbW9yZSBnbGliYyBjb21wYXRpYmlsaXR5ICovCi0jIGRlZmluZSBfX3VpbnQzMl90X2RlZmluZWQKLXR5cGVkZWYgX19VSU5UMzJfVFlQRV9fIHVpbnQzMl90OwotIyBlbmRpZiAvKiBfX3VpbnQzMl90X2RlZmluZWQgKi8KLQotIyBkZWZpbmUgX19pbnRfbGVhc3QzMl90IGludDMyX3QKLSMgZGVmaW5lIF9fdWludF9sZWFzdDMyX3QgdWludDMyX3QKLSMgZGVmaW5lIF9faW50X2xlYXN0MTZfdCBpbnQzMl90Ci0jIGRlZmluZSBfX3VpbnRfbGVhc3QxNl90IHVpbnQzMl90Ci0jIGRlZmluZSBfX2ludF9sZWFzdDhfdCBpbnQzMl90Ci0jIGRlZmluZSBfX3VpbnRfbGVhc3Q4X3QgdWludDMyX3QKLSNlbmRpZiAvKiBfX0lOVDMyX1RZUEVfXyAqLwotCi0jaWZkZWYgX19pbnRfbGVhc3QzMl90Ci10eXBlZGVmIF9faW50X2xlYXN0MzJfdCBpbnRfbGVhc3QzMl90OwotdHlwZWRlZiBfX3VpbnRfbGVhc3QzMl90IHVpbnRfbGVhc3QzMl90OwotdHlwZWRlZiBfX2ludF9sZWFzdDMyX3QgaW50X2Zhc3QzMl90OwotdHlwZWRlZiBfX3VpbnRfbGVhc3QzMl90IHVpbnRfZmFzdDMyX3Q7Ci0jZW5kaWYgLyogX19pbnRfbGVhc3QzMl90ICovCi0KLSNpZmRlZiBfX0lOVDI0X1RZUEVfXwotdHlwZWRlZiBfX0lOVDI0X1RZUEVfXyBpbnQyNF90OwotdHlwZWRlZiBfX1VJTlQyNF9UWVBFX18gdWludDI0X3Q7Ci10eXBlZGVmIGludDI0X3QgaW50X2xlYXN0MjRfdDsKLXR5cGVkZWYgdWludDI0X3QgdWludF9sZWFzdDI0X3Q7Ci10eXBlZGVmIGludDI0X3QgaW50X2Zhc3QyNF90OwotdHlwZWRlZiB1aW50MjRfdCB1aW50X2Zhc3QyNF90OwotIyBkZWZpbmUgX19pbnRfbGVhc3QxNl90IGludDI0X3QKLSMgZGVmaW5lIF9fdWludF9sZWFzdDE2X3QgdWludDI0X3QKLSMgZGVmaW5lIF9faW50X2xlYXN0OF90IGludDI0X3QKLSMgZGVmaW5lIF9fdWludF9sZWFzdDhfdCB1aW50MjRfdAotI2VuZGlmIC8qIF9fSU5UMjRfVFlQRV9fICovCi0KLSNpZmRlZiBfX0lOVDE2X1RZUEVfXwotI2lmbmRlZiBfX2ludDhfdF9kZWZpbmVkIC8qIGdsaWJjIHN5cy90eXBlcy5oIGFsc28gZGVmaW5lcyBpbnQxNl90Ki8KLXR5cGVkZWYgX19JTlQxNl9UWVBFX18gaW50MTZfdDsKLSNlbmRpZiAvKiBfX2ludDhfdF9kZWZpbmVkICovCi10eXBlZGVmIF9fVUlOVDE2X1RZUEVfXyB1aW50MTZfdDsKLSMgZGVmaW5lIF9faW50X2xlYXN0MTZfdCBpbnQxNl90Ci0jIGRlZmluZSBfX3VpbnRfbGVhc3QxNl90IHVpbnQxNl90Ci0jIGRlZmluZSBfX2ludF9sZWFzdDhfdCBpbnQxNl90Ci0jIGRlZmluZSBfX3VpbnRfbGVhc3Q4X3QgdWludDE2X3QKLSNlbmRpZiAvKiBfX0lOVDE2X1RZUEVfXyAqLwotCi0jaWZkZWYgX19pbnRfbGVhc3QxNl90Ci10eXBlZGVmIF9faW50X2xlYXN0MTZfdCBpbnRfbGVhc3QxNl90OwotdHlwZWRlZiBfX3VpbnRfbGVhc3QxNl90IHVpbnRfbGVhc3QxNl90OwotdHlwZWRlZiBfX2ludF9sZWFzdDE2X3QgaW50X2Zhc3QxNl90OwotdHlwZWRlZiBfX3VpbnRfbGVhc3QxNl90IHVpbnRfZmFzdDE2X3Q7Ci0jZW5kaWYgLyogX19pbnRfbGVhc3QxNl90ICovCi0KLQotI2lmZGVmIF9fSU5UOF9UWVBFX18KLSNpZm5kZWYgX19pbnQ4X3RfZGVmaW5lZCAgLyogZ2xpYmMgc3lzL3R5cGVzLmggYWxzbyBkZWZpbmVzIGludDhfdCovCi10eXBlZGVmIF9fSU5UOF9UWVBFX18gaW50OF90OwotI2VuZGlmIC8qIF9faW50OF90X2RlZmluZWQgKi8KLXR5cGVkZWYgX19VSU5UOF9UWVBFX18gdWludDhfdDsKLSMgZGVmaW5lIF9faW50X2xlYXN0OF90IGludDhfdAotIyBkZWZpbmUgX191aW50X2xlYXN0OF90IHVpbnQ4X3QKLSNlbmRpZiAvKiBfX0lOVDhfVFlQRV9fICovCi0KLSNpZmRlZiBfX2ludF9sZWFzdDhfdAotdHlwZWRlZiBfX2ludF9sZWFzdDhfdCBpbnRfbGVhc3Q4X3Q7Ci10eXBlZGVmIF9fdWludF9sZWFzdDhfdCB1aW50X2xlYXN0OF90OwotdHlwZWRlZiBfX2ludF9sZWFzdDhfdCBpbnRfZmFzdDhfdDsKLXR5cGVkZWYgX191aW50X2xlYXN0OF90IHVpbnRfZmFzdDhfdDsKLSNlbmRpZiAvKiBfX2ludF9sZWFzdDhfdCAqLwotCi0vKiBwcmV2ZW50IGdsaWJjIHN5cy90eXBlcy5oIGZyb20gZGVmaW5pbmcgY29uZmxpY3RpbmcgdHlwZXMgKi8KLSNpZm5kZWYgX19pbnQ4X3RfZGVmaW5lZAotIyBkZWZpbmUgX19pbnQ4X3RfZGVmaW5lZAotI2VuZGlmIC8qIF9faW50OF90X2RlZmluZWQgKi8KLQotLyogQzk5IDcuMTguMS40IEludGVnZXIgdHlwZXMgY2FwYWJsZSBvZiBob2xkaW5nIG9iamVjdCBwb2ludGVycy4KLSAqLwotI2RlZmluZSBfX3N0ZGludF9qb2luMyhhLGIsYykgYSAjIyBiICMjIGMKLQotI2RlZmluZSAgX19pbnRuX3QobikgX19zdGRpbnRfam9pbjMoIGludCwgbiwgX3QpCi0jZGVmaW5lIF9fdWludG5fdChuKSBfX3N0ZGludF9qb2luMyh1aW50LCBuLCBfdCkKLQotI2lmbmRlZiBfSU5UUFRSX1QKLSNpZm5kZWYgX19pbnRwdHJfdF9kZWZpbmVkCi10eXBlZGVmICBfX2ludG5fdChfX0lOVFBUUl9XSURUSF9fKSAgaW50cHRyX3Q7Ci0jZGVmaW5lIF9faW50cHRyX3RfZGVmaW5lZAotI2RlZmluZSBfSU5UUFRSX1QKLSNlbmRpZgotI2VuZGlmCi0KLSNpZm5kZWYgX1VJTlRQVFJfVAotdHlwZWRlZiBfX3VpbnRuX3QoX19JTlRQVFJfV0lEVEhfXykgdWludHB0cl90OwotI2RlZmluZSBfVUlOVFBUUl9UCi0jZW5kaWYKLQotLyogQzk5IDcuMTguMS41IEdyZWF0ZXN0LXdpZHRoIGludGVnZXIgdHlwZXMuCi0gKi8KLXR5cGVkZWYgX19JTlRNQVhfVFlQRV9fICBpbnRtYXhfdDsKLXR5cGVkZWYgX19VSU5UTUFYX1RZUEVfXyB1aW50bWF4X3Q7Ci0KLS8qIEM5OSA3LjE4LjQgTWFjcm9zIGZvciBtaW5pbXVtLXdpZHRoIGludGVnZXIgY29uc3RhbnRzLgotICoKLSAqIFRoZSBzdGFuZGFyZCByZXF1aXJlcyB0aGF0IGludGVnZXIgY29uc3RhbnQgbWFjcm9zIGJlIGRlZmluZWQgZm9yIGFsbCB0aGUKLSAqIG1pbmltdW0td2lkdGggdHlwZXMgZGVmaW5lZCBhYm92ZS4gQXMgOC0sIDE2LSwgMzItLCBhbmQgNjQtYml0IG1pbmltdW0td2lkdGgKLSAqIHR5cGVzIGFyZSByZXF1aXJlZCwgdGhlIGNvcnJlc3BvbmRpbmcgaW50ZWdlciBjb25zdGFudCBtYWNyb3MgYXJlIGRlZmluZWQKLSAqIGhlcmUuIFRoaXMgaW1wbGVtZW50YXRpb24gYWxzbyBkZWZpbmVzIG1pbmltdW0td2lkdGggdHlwZXMgZm9yIGV2ZXJ5IG90aGVyCi0gKiBpbnRlZ2VyIHdpZHRoIHRoYXQgdGhlIHRhcmdldCBpbXBsZW1lbnRzLCBzbyBjb3JyZXNwb25kaW5nIG1hY3JvcyBhcmUKLSAqIGRlZmluZWQgYmVsb3csIHRvby4KLSAqCi0gKiBUaGVzZSBtYWNyb3MgYXJlIGRlZmluZWQgdXNpbmcgdGhlIHNhbWUgc3VjY2Vzc2l2ZS1zaHJpbmtpbmcgYXBwcm9hY2ggYXMKLSAqIHRoZSB0eXBlIGRlZmluaXRpb25zIGFib3ZlLiBJdCBpcyBsaWtld2lzZSBpbXBvcnRhbnQgdGhhdCBtYWNyb3MgYXJlIGRlZmluZWQKLSAqIGluIG9yZGVyIG9mIGRlY2VuZGluZyB3aWR0aC4KLSAqCi0gKiBOb3RlIHRoYXQgQysrIHNob3VsZCBub3QgY2hlY2sgX19TVERDX0NPTlNUQU5UX01BQ1JPUyBoZXJlLCBjb250cmFyeSB0byB0aGUKLSAqIGNsYWltcyBvZiB0aGUgQyBzdGFuZGFyZCAoc2VlIEMrKyAxOC4zLjFwMiwgW2NzdGRpbnQuc3luXSkuCi0gKi8KLQotI2RlZmluZSBfX2ludF9jX2pvaW4oYSwgYikgYSAjIyBiCi0jZGVmaW5lIF9faW50X2Modiwgc3VmZml4KSBfX2ludF9jX2pvaW4odiwgc3VmZml4KQotI2RlZmluZSBfX3VpbnRfYyh2LCBzdWZmaXgpIF9faW50X2Nfam9pbih2IyNVLCBzdWZmaXgpCi0KLQotI2lmZGVmIF9fSU5UNjRfVFlQRV9fCi0jIGlmZGVmIF9fSU5UNjRfQ19TVUZGSVhfXwotIyAgZGVmaW5lIF9faW50NjRfY19zdWZmaXggX19JTlQ2NF9DX1NVRkZJWF9fCi0jICBkZWZpbmUgX19pbnQzMl9jX3N1ZmZpeCBfX0lOVDY0X0NfU1VGRklYX18KLSMgIGRlZmluZSBfX2ludDE2X2Nfc3VmZml4IF9fSU5UNjRfQ19TVUZGSVhfXwotIyAgZGVmaW5lICBfX2ludDhfY19zdWZmaXggX19JTlQ2NF9DX1NVRkZJWF9fCi0jIGVsc2UKLSMgIHVuZGVmIF9faW50NjRfY19zdWZmaXgKLSMgIHVuZGVmIF9faW50MzJfY19zdWZmaXgKLSMgIHVuZGVmIF9faW50MTZfY19zdWZmaXgKLSMgIHVuZGVmICBfX2ludDhfY19zdWZmaXgKLSMgZW5kaWYgLyogX19JTlQ2NF9DX1NVRkZJWF9fICovCi0jZW5kaWYgLyogX19JTlQ2NF9UWVBFX18gKi8KLQotI2lmZGVmIF9faW50X2xlYXN0NjRfdAotIyBpZmRlZiBfX2ludDY0X2Nfc3VmZml4Ci0jICBkZWZpbmUgSU5UNjRfQyh2KSBfX2ludF9jKHYsIF9faW50NjRfY19zdWZmaXgpCi0jICBkZWZpbmUgVUlOVDY0X0ModikgX191aW50X2ModiwgX19pbnQ2NF9jX3N1ZmZpeCkKLSMgZWxzZQotIyAgZGVmaW5lIElOVDY0X0ModikgdgotIyAgZGVmaW5lIFVJTlQ2NF9DKHYpIHYgIyMgVQotIyBlbmRpZiAvKiBfX2ludDY0X2Nfc3VmZml4ICovCi0jZW5kaWYgLyogX19pbnRfbGVhc3Q2NF90ICovCi0KLQotI2lmZGVmIF9fSU5UNTZfVFlQRV9fCi0jIGlmZGVmIF9fSU5UNTZfQ19TVUZGSVhfXwotIyAgZGVmaW5lIElOVDU2X0ModikgX19pbnRfYyh2LCBfX0lOVDU2X0NfU1VGRklYX18pCi0jICBkZWZpbmUgVUlOVDU2X0ModikgX191aW50X2ModiwgX19JTlQ1Nl9DX1NVRkZJWF9fKQotIyAgZGVmaW5lIF9faW50MzJfY19zdWZmaXggX19JTlQ1Nl9DX1NVRkZJWF9fCi0jICBkZWZpbmUgX19pbnQxNl9jX3N1ZmZpeCBfX0lOVDU2X0NfU1VGRklYX18KLSMgIGRlZmluZSBfX2ludDhfY19zdWZmaXggIF9fSU5UNTZfQ19TVUZGSVhfXwotIyBlbHNlCi0jICBkZWZpbmUgSU5UNTZfQyh2KSB2Ci0jICBkZWZpbmUgVUlOVDU2X0ModikgdiAjIyBVCi0jICB1bmRlZiBfX2ludDMyX2Nfc3VmZml4Ci0jICB1bmRlZiBfX2ludDE2X2Nfc3VmZml4Ci0jICB1bmRlZiAgX19pbnQ4X2Nfc3VmZml4Ci0jIGVuZGlmIC8qIF9fSU5UNTZfQ19TVUZGSVhfXyAqLwotI2VuZGlmIC8qIF9fSU5UNTZfVFlQRV9fICovCi0KLQotI2lmZGVmIF9fSU5UNDhfVFlQRV9fCi0jIGlmZGVmIF9fSU5UNDhfQ19TVUZGSVhfXwotIyAgZGVmaW5lIElOVDQ4X0ModikgX19pbnRfYyh2LCBfX0lOVDQ4X0NfU1VGRklYX18pCi0jICBkZWZpbmUgVUlOVDQ4X0ModikgX191aW50X2ModiwgX19JTlQ0OF9DX1NVRkZJWF9fKQotIyAgZGVmaW5lIF9faW50MzJfY19zdWZmaXggX19JTlQ0OF9DX1NVRkZJWF9fCi0jICBkZWZpbmUgX19pbnQxNl9jX3N1ZmZpeCBfX0lOVDQ4X0NfU1VGRklYX18KLSMgIGRlZmluZSBfX2ludDhfY19zdWZmaXggIF9fSU5UNDhfQ19TVUZGSVhfXwotIyBlbHNlCi0jICBkZWZpbmUgSU5UNDhfQyh2KSB2Ci0jICBkZWZpbmUgVUlOVDQ4X0ModikgdiAjIyBVCi0jICB1bmRlZiBfX2ludDMyX2Nfc3VmZml4Ci0jICB1bmRlZiBfX2ludDE2X2Nfc3VmZml4Ci0jICB1bmRlZiAgX19pbnQ4X2Nfc3VmZml4Ci0jIGVuZGlmIC8qIF9fSU5UNDhfQ19TVUZGSVhfXyAqLwotI2VuZGlmIC8qIF9fSU5UNDhfVFlQRV9fICovCi0KLQotI2lmZGVmIF9fSU5UNDBfVFlQRV9fCi0jIGlmZGVmIF9fSU5UNDBfQ19TVUZGSVhfXwotIyAgZGVmaW5lIElOVDQwX0ModikgX19pbnRfYyh2LCBfX0lOVDQwX0NfU1VGRklYX18pCi0jICBkZWZpbmUgVUlOVDQwX0ModikgX191aW50X2ModiwgX19JTlQ0MF9DX1NVRkZJWF9fKQotIyAgZGVmaW5lIF9faW50MzJfY19zdWZmaXggX19JTlQ0MF9DX1NVRkZJWF9fCi0jICBkZWZpbmUgX19pbnQxNl9jX3N1ZmZpeCBfX0lOVDQwX0NfU1VGRklYX18KLSMgIGRlZmluZSBfX2ludDhfY19zdWZmaXggIF9fSU5UNDBfQ19TVUZGSVhfXwotIyBlbHNlCi0jICBkZWZpbmUgSU5UNDBfQyh2KSB2Ci0jICBkZWZpbmUgVUlOVDQwX0ModikgdiAjIyBVCi0jICB1bmRlZiBfX2ludDMyX2Nfc3VmZml4Ci0jICB1bmRlZiBfX2ludDE2X2Nfc3VmZml4Ci0jICB1bmRlZiAgX19pbnQ4X2Nfc3VmZml4Ci0jIGVuZGlmIC8qIF9fSU5UNDBfQ19TVUZGSVhfXyAqLwotI2VuZGlmIC8qIF9fSU5UNDBfVFlQRV9fICovCi0KLQotI2lmZGVmIF9fSU5UMzJfVFlQRV9fCi0jIGlmZGVmIF9fSU5UMzJfQ19TVUZGSVhfXwotIyAgZGVmaW5lIF9faW50MzJfY19zdWZmaXggX19JTlQzMl9DX1NVRkZJWF9fCi0jICBkZWZpbmUgX19pbnQxNl9jX3N1ZmZpeCBfX0lOVDMyX0NfU1VGRklYX18KLSMgIGRlZmluZSBfX2ludDhfY19zdWZmaXggIF9fSU5UMzJfQ19TVUZGSVhfXwotI2Vsc2UKLSMgIHVuZGVmIF9faW50MzJfY19zdWZmaXgKLSMgIHVuZGVmIF9faW50MTZfY19zdWZmaXgKLSMgIHVuZGVmICBfX2ludDhfY19zdWZmaXgKLSMgZW5kaWYgLyogX19JTlQzMl9DX1NVRkZJWF9fICovCi0jZW5kaWYgLyogX19JTlQzMl9UWVBFX18gKi8KLQotI2lmZGVmIF9faW50X2xlYXN0MzJfdAotIyBpZmRlZiBfX2ludDMyX2Nfc3VmZml4Ci0jICBkZWZpbmUgSU5UMzJfQyh2KSBfX2ludF9jKHYsIF9faW50MzJfY19zdWZmaXgpCi0jICBkZWZpbmUgVUlOVDMyX0ModikgX191aW50X2ModiwgX19pbnQzMl9jX3N1ZmZpeCkKLSMgZWxzZQotIyAgZGVmaW5lIElOVDMyX0ModikgdgotIyAgZGVmaW5lIFVJTlQzMl9DKHYpIHYgIyMgVQotIyBlbmRpZiAvKiBfX2ludDMyX2Nfc3VmZml4ICovCi0jZW5kaWYgLyogX19pbnRfbGVhc3QzMl90ICovCi0KLQotI2lmZGVmIF9fSU5UMjRfVFlQRV9fCi0jIGlmZGVmIF9fSU5UMjRfQ19TVUZGSVhfXwotIyAgZGVmaW5lIElOVDI0X0ModikgX19pbnRfYyh2LCBfX0lOVDI0X0NfU1VGRklYX18pCi0jICBkZWZpbmUgVUlOVDI0X0ModikgX191aW50X2ModiwgX19JTlQyNF9DX1NVRkZJWF9fKQotIyAgZGVmaW5lIF9faW50MTZfY19zdWZmaXggX19JTlQyNF9DX1NVRkZJWF9fCi0jICBkZWZpbmUgX19pbnQ4X2Nfc3VmZml4ICBfX0lOVDI0X0NfU1VGRklYX18KLSMgZWxzZQotIyAgZGVmaW5lIElOVDI0X0ModikgdgotIyAgZGVmaW5lIFVJTlQyNF9DKHYpIHYgIyMgVQotIyAgdW5kZWYgX19pbnQxNl9jX3N1ZmZpeAotIyAgdW5kZWYgIF9faW50OF9jX3N1ZmZpeAotIyBlbmRpZiAvKiBfX0lOVDI0X0NfU1VGRklYX18gKi8KLSNlbmRpZiAvKiBfX0lOVDI0X1RZUEVfXyAqLwotCi0KLSNpZmRlZiBfX0lOVDE2X1RZUEVfXwotIyBpZmRlZiBfX0lOVDE2X0NfU1VGRklYX18KLSMgIGRlZmluZSBfX2ludDE2X2Nfc3VmZml4IF9fSU5UMTZfQ19TVUZGSVhfXwotIyAgZGVmaW5lIF9faW50OF9jX3N1ZmZpeCAgX19JTlQxNl9DX1NVRkZJWF9fCi0jZWxzZQotIyAgdW5kZWYgX19pbnQxNl9jX3N1ZmZpeAotIyAgdW5kZWYgIF9faW50OF9jX3N1ZmZpeAotIyBlbmRpZiAvKiBfX0lOVDE2X0NfU1VGRklYX18gKi8KLSNlbmRpZiAvKiBfX0lOVDE2X1RZUEVfXyAqLwotCi0jaWZkZWYgX19pbnRfbGVhc3QxNl90Ci0jIGlmZGVmIF9faW50MTZfY19zdWZmaXgKLSMgIGRlZmluZSBJTlQxNl9DKHYpIF9faW50X2ModiwgX19pbnQxNl9jX3N1ZmZpeCkKLSMgIGRlZmluZSBVSU5UMTZfQyh2KSBfX3VpbnRfYyh2LCBfX2ludDE2X2Nfc3VmZml4KQotIyBlbHNlCi0jICBkZWZpbmUgSU5UMTZfQyh2KSB2Ci0jICBkZWZpbmUgVUlOVDE2X0ModikgdiAjIyBVCi0jIGVuZGlmIC8qIF9faW50MTZfY19zdWZmaXggKi8KLSNlbmRpZiAvKiBfX2ludF9sZWFzdDE2X3QgKi8KLQotCi0jaWZkZWYgX19JTlQ4X1RZUEVfXwotIyBpZmRlZiBfX0lOVDhfQ19TVUZGSVhfXwotIyAgZGVmaW5lIF9faW50OF9jX3N1ZmZpeCBfX0lOVDhfQ19TVUZGSVhfXwotI2Vsc2UKLSMgIHVuZGVmICBfX2ludDhfY19zdWZmaXgKLSMgZW5kaWYgLyogX19JTlQ4X0NfU1VGRklYX18gKi8KLSNlbmRpZiAvKiBfX0lOVDhfVFlQRV9fICovCi0KLSNpZmRlZiBfX2ludF9sZWFzdDhfdAotIyBpZmRlZiBfX2ludDhfY19zdWZmaXgKLSMgIGRlZmluZSBJTlQ4X0ModikgX19pbnRfYyh2LCBfX2ludDhfY19zdWZmaXgpCi0jICBkZWZpbmUgVUlOVDhfQyh2KSBfX3VpbnRfYyh2LCBfX2ludDhfY19zdWZmaXgpCi0jIGVsc2UKLSMgIGRlZmluZSBJTlQ4X0ModikgdgotIyAgZGVmaW5lIFVJTlQ4X0ModikgdiAjIyBVCi0jIGVuZGlmIC8qIF9faW50OF9jX3N1ZmZpeCAqLwotI2VuZGlmIC8qIF9faW50X2xlYXN0OF90ICovCi0KLQotLyogQzk5IDcuMTguMi4xIExpbWl0cyBvZiBleGFjdC13aWR0aCBpbnRlZ2VyIHR5cGVzLgotICogQzk5IDcuMTguMi4yIExpbWl0cyBvZiBtaW5pbXVtLXdpZHRoIGludGVnZXIgdHlwZXMuCi0gKiBDOTkgNy4xOC4yLjMgTGltaXRzIG9mIGZhc3Rlc3QgbWluaW11bS13aWR0aCBpbnRlZ2VyIHR5cGVzLgotICoKLSAqIFRoZSBwcmVzZW5jZSBvZiBsaW1pdCBtYWNyb3MgYXJlIGNvbXBsZXRlbHkgb3B0aW9uYWwgaW4gQzk5LiAgVGhpcwotICogaW1wbGVtZW50YXRpb24gZGVmaW5lcyBsaW1pdHMgZm9yIGFsbCBvZiB0aGUgdHlwZXMgKGV4YWN0LSBhbmQKLSAqIG1pbmltdW0td2lkdGgpIHRoYXQgaXQgZGVmaW5lcyBhYm92ZSwgdXNpbmcgdGhlIGxpbWl0cyBvZiB0aGUgbWluaW11bS13aWR0aAotICogdHlwZSBmb3IgYW55IHR5cGVzIHRoYXQgZG8gbm90IGhhdmUgZXhhY3Qtd2lkdGggcmVwcmVzZW50YXRpb25zLgotICoKLSAqIEFzIGluIHRoZSB0eXBlIGRlZmluaXRpb25zLCB0aGlzIHNlY3Rpb24gdGFrZXMgYW4gYXBwcm9hY2ggb2YKLSAqIHN1Y2Nlc3NpdmUtc2hyaW5raW5nIHRvIGRldGVybWluZSB3aGljaCBsaW1pdHMgdG8gdXNlIGZvciB0aGUgc3RhbmRhcmQgKDgsCi0gKiAxNiwgMzIsIDY0KSBiaXQgd2lkdGhzIHdoZW4gdGhleSBkb24ndCBoYXZlIGV4YWN0IHJlcHJlc2VudGF0aW9ucy4gSXQgaXMKLSAqIHRoZXJlZm9yZSBpbXBvcnRhbnQgdGhhdCB0aGUgZGVmaW50aW9ucyBiZSBrZXB0IGluIG9yZGVyIG9mIGRlY2VuZGluZwotICogd2lkdGhzLgotICoKLSAqIE5vdGUgdGhhdCBDKysgc2hvdWxkIG5vdCBjaGVjayBfX1NURENfTElNSVRfTUFDUk9TIGhlcmUsIGNvbnRyYXJ5IHRvIHRoZQotICogY2xhaW1zIG9mIHRoZSBDIHN0YW5kYXJkIChzZWUgQysrIDE4LjMuMXAyLCBbY3N0ZGludC5zeW5dKS4KLSAqLwotCi0jaWZkZWYgX19JTlQ2NF9UWVBFX18KLSMgZGVmaW5lIElOVDY0X01BWCAgICAgICAgICAgSU5UNjRfQyggOTIyMzM3MjAzNjg1NDc3NTgwNykKLSMgZGVmaW5lIElOVDY0X01JTiAgICAgICAgICgtSU5UNjRfQyggOTIyMzM3MjAzNjg1NDc3NTgwNyktMSkKLSMgZGVmaW5lIFVJTlQ2NF9NQVggICAgICAgICBVSU5UNjRfQygxODQ0Njc0NDA3MzcwOTU1MTYxNSkKLSMgZGVmaW5lIF9fSU5UX0xFQVNUNjRfTUlOICAgSU5UNjRfTUlOCi0jIGRlZmluZSBfX0lOVF9MRUFTVDY0X01BWCAgIElOVDY0X01BWAotIyBkZWZpbmUgX19VSU5UX0xFQVNUNjRfTUFYIFVJTlQ2NF9NQVgKLSMgZGVmaW5lIF9fSU5UX0xFQVNUMzJfTUlOICAgSU5UNjRfTUlOCi0jIGRlZmluZSBfX0lOVF9MRUFTVDMyX01BWCAgIElOVDY0X01BWAotIyBkZWZpbmUgX19VSU5UX0xFQVNUMzJfTUFYIFVJTlQ2NF9NQVgKLSMgZGVmaW5lIF9fSU5UX0xFQVNUMTZfTUlOICAgSU5UNjRfTUlOCi0jIGRlZmluZSBfX0lOVF9MRUFTVDE2X01BWCAgIElOVDY0X01BWAotIyBkZWZpbmUgX19VSU5UX0xFQVNUMTZfTUFYIFVJTlQ2NF9NQVgKLSMgZGVmaW5lIF9fSU5UX0xFQVNUOF9NSU4gICAgSU5UNjRfTUlOCi0jIGRlZmluZSBfX0lOVF9MRUFTVDhfTUFYICAgIElOVDY0X01BWAotIyBkZWZpbmUgX19VSU5UX0xFQVNUOF9NQVggIFVJTlQ2NF9NQVgKLSNlbmRpZiAvKiBfX0lOVDY0X1RZUEVfXyAqLwotCi0jaWZkZWYgX19JTlRfTEVBU1Q2NF9NSU4KLSMgZGVmaW5lIElOVF9MRUFTVDY0X01JTiAgIF9fSU5UX0xFQVNUNjRfTUlOCi0jIGRlZmluZSBJTlRfTEVBU1Q2NF9NQVggICBfX0lOVF9MRUFTVDY0X01BWAotIyBkZWZpbmUgVUlOVF9MRUFTVDY0X01BWCBfX1VJTlRfTEVBU1Q2NF9NQVgKLSMgZGVmaW5lIElOVF9GQVNUNjRfTUlOICAgIF9fSU5UX0xFQVNUNjRfTUlOCi0jIGRlZmluZSBJTlRfRkFTVDY0X01BWCAgICBfX0lOVF9MRUFTVDY0X01BWAotIyBkZWZpbmUgVUlOVF9GQVNUNjRfTUFYICBfX1VJTlRfTEVBU1Q2NF9NQVgKLSNlbmRpZiAvKiBfX0lOVF9MRUFTVDY0X01JTiAqLwotCi0KLSNpZmRlZiBfX0lOVDU2X1RZUEVfXwotIyBkZWZpbmUgSU5UNTZfTUFYICAgICAgICAgICBJTlQ1Nl9DKDM2MDI4Nzk3MDE4OTYzOTY3KQotIyBkZWZpbmUgSU5UNTZfTUlOICAgICAgICAgKC1JTlQ1Nl9DKDM2MDI4Nzk3MDE4OTYzOTY3KS0xKQotIyBkZWZpbmUgVUlOVDU2X01BWCAgICAgICAgIFVJTlQ1Nl9DKDcyMDU3NTk0MDM3OTI3OTM1KQotIyBkZWZpbmUgSU5UX0xFQVNUNTZfTUlOICAgICBJTlQ1Nl9NSU4KLSMgZGVmaW5lIElOVF9MRUFTVDU2X01BWCAgICAgSU5UNTZfTUFYCi0jIGRlZmluZSBVSU5UX0xFQVNUNTZfTUFYICAgVUlOVDU2X01BWAotIyBkZWZpbmUgSU5UX0ZBU1Q1Nl9NSU4gICAgICBJTlQ1Nl9NSU4KLSMgZGVmaW5lIElOVF9GQVNUNTZfTUFYICAgICAgSU5UNTZfTUFYCi0jIGRlZmluZSBVSU5UX0ZBU1Q1Nl9NQVggICAgVUlOVDU2X01BWAotIyBkZWZpbmUgX19JTlRfTEVBU1QzMl9NSU4gICBJTlQ1Nl9NSU4KLSMgZGVmaW5lIF9fSU5UX0xFQVNUMzJfTUFYICAgSU5UNTZfTUFYCi0jIGRlZmluZSBfX1VJTlRfTEVBU1QzMl9NQVggVUlOVDU2X01BWAotIyBkZWZpbmUgX19JTlRfTEVBU1QxNl9NSU4gICBJTlQ1Nl9NSU4KLSMgZGVmaW5lIF9fSU5UX0xFQVNUMTZfTUFYICAgSU5UNTZfTUFYCi0jIGRlZmluZSBfX1VJTlRfTEVBU1QxNl9NQVggVUlOVDU2X01BWAotIyBkZWZpbmUgX19JTlRfTEVBU1Q4X01JTiAgICBJTlQ1Nl9NSU4KLSMgZGVmaW5lIF9fSU5UX0xFQVNUOF9NQVggICAgSU5UNTZfTUFYCi0jIGRlZmluZSBfX1VJTlRfTEVBU1Q4X01BWCAgVUlOVDU2X01BWAotI2VuZGlmIC8qIF9fSU5UNTZfVFlQRV9fICovCi0KLQotI2lmZGVmIF9fSU5UNDhfVFlQRV9fCi0jIGRlZmluZSBJTlQ0OF9NQVggICAgICAgICAgIElOVDQ4X0MoMTQwNzM3NDg4MzU1MzI3KQotIyBkZWZpbmUgSU5UNDhfTUlOICAgICAgICAgKC1JTlQ0OF9DKDE0MDczNzQ4ODM1NTMyNyktMSkKLSMgZGVmaW5lIFVJTlQ0OF9NQVggICAgICAgICBVSU5UNDhfQygyODE0NzQ5NzY3MTA2NTUpCi0jIGRlZmluZSBJTlRfTEVBU1Q0OF9NSU4gICAgIElOVDQ4X01JTgotIyBkZWZpbmUgSU5UX0xFQVNUNDhfTUFYICAgICBJTlQ0OF9NQVgKLSMgZGVmaW5lIFVJTlRfTEVBU1Q0OF9NQVggICBVSU5UNDhfTUFYCi0jIGRlZmluZSBJTlRfRkFTVDQ4X01JTiAgICAgIElOVDQ4X01JTgotIyBkZWZpbmUgSU5UX0ZBU1Q0OF9NQVggICAgICBJTlQ0OF9NQVgKLSMgZGVmaW5lIFVJTlRfRkFTVDQ4X01BWCAgICBVSU5UNDhfTUFYCi0jIGRlZmluZSBfX0lOVF9MRUFTVDMyX01JTiAgIElOVDQ4X01JTgotIyBkZWZpbmUgX19JTlRfTEVBU1QzMl9NQVggICBJTlQ0OF9NQVgKLSMgZGVmaW5lIF9fVUlOVF9MRUFTVDMyX01BWCBVSU5UNDhfTUFYCi0jIGRlZmluZSBfX0lOVF9MRUFTVDE2X01JTiAgIElOVDQ4X01JTgotIyBkZWZpbmUgX19JTlRfTEVBU1QxNl9NQVggICBJTlQ0OF9NQVgKLSMgZGVmaW5lIF9fVUlOVF9MRUFTVDE2X01BWCBVSU5UNDhfTUFYCi0jIGRlZmluZSBfX0lOVF9MRUFTVDhfTUlOICAgIElOVDQ4X01JTgotIyBkZWZpbmUgX19JTlRfTEVBU1Q4X01BWCAgICBJTlQ0OF9NQVgKLSMgZGVmaW5lIF9fVUlOVF9MRUFTVDhfTUFYICBVSU5UNDhfTUFYCi0jZW5kaWYgLyogX19JTlQ0OF9UWVBFX18gKi8KLQotCi0jaWZkZWYgX19JTlQ0MF9UWVBFX18KLSMgZGVmaW5lIElOVDQwX01BWCAgICAgICAgICAgSU5UNDBfQyg1NDk3NTU4MTM4ODcpCi0jIGRlZmluZSBJTlQ0MF9NSU4gICAgICAgICAoLUlOVDQwX0MoNTQ5NzU1ODEzODg3KS0xKQotIyBkZWZpbmUgVUlOVDQwX01BWCAgICAgICAgIFVJTlQ0MF9DKDEwOTk1MTE2Mjc3NzUpCi0jIGRlZmluZSBJTlRfTEVBU1Q0MF9NSU4gICAgIElOVDQwX01JTgotIyBkZWZpbmUgSU5UX0xFQVNUNDBfTUFYICAgICBJTlQ0MF9NQVgKLSMgZGVmaW5lIFVJTlRfTEVBU1Q0MF9NQVggICBVSU5UNDBfTUFYCi0jIGRlZmluZSBJTlRfRkFTVDQwX01JTiAgICAgIElOVDQwX01JTgotIyBkZWZpbmUgSU5UX0ZBU1Q0MF9NQVggICAgICBJTlQ0MF9NQVgKLSMgZGVmaW5lIFVJTlRfRkFTVDQwX01BWCAgICBVSU5UNDBfTUFYCi0jIGRlZmluZSBfX0lOVF9MRUFTVDMyX01JTiAgIElOVDQwX01JTgotIyBkZWZpbmUgX19JTlRfTEVBU1QzMl9NQVggICBJTlQ0MF9NQVgKLSMgZGVmaW5lIF9fVUlOVF9MRUFTVDMyX01BWCBVSU5UNDBfTUFYCi0jIGRlZmluZSBfX0lOVF9MRUFTVDE2X01JTiAgIElOVDQwX01JTgotIyBkZWZpbmUgX19JTlRfTEVBU1QxNl9NQVggICBJTlQ0MF9NQVgKLSMgZGVmaW5lIF9fVUlOVF9MRUFTVDE2X01BWCBVSU5UNDBfTUFYCi0jIGRlZmluZSBfX0lOVF9MRUFTVDhfTUlOICAgIElOVDQwX01JTgotIyBkZWZpbmUgX19JTlRfTEVBU1Q4X01BWCAgICBJTlQ0MF9NQVgKLSMgZGVmaW5lIF9fVUlOVF9MRUFTVDhfTUFYICBVSU5UNDBfTUFYCi0jZW5kaWYgLyogX19JTlQ0MF9UWVBFX18gKi8KLQotCi0jaWZkZWYgX19JTlQzMl9UWVBFX18KLSMgZGVmaW5lIElOVDMyX01BWCAgICAgICAgICAgSU5UMzJfQygyMTQ3NDgzNjQ3KQotIyBkZWZpbmUgSU5UMzJfTUlOICAgICAgICAgKC1JTlQzMl9DKDIxNDc0ODM2NDcpLTEpCi0jIGRlZmluZSBVSU5UMzJfTUFYICAgICAgICAgVUlOVDMyX0MoNDI5NDk2NzI5NSkKLSMgZGVmaW5lIF9fSU5UX0xFQVNUMzJfTUlOICAgSU5UMzJfTUlOCi0jIGRlZmluZSBfX0lOVF9MRUFTVDMyX01BWCAgIElOVDMyX01BWAotIyBkZWZpbmUgX19VSU5UX0xFQVNUMzJfTUFYIFVJTlQzMl9NQVgKLSMgZGVmaW5lIF9fSU5UX0xFQVNUMTZfTUlOICAgSU5UMzJfTUlOCi0jIGRlZmluZSBfX0lOVF9MRUFTVDE2X01BWCAgIElOVDMyX01BWAotIyBkZWZpbmUgX19VSU5UX0xFQVNUMTZfTUFYIFVJTlQzMl9NQVgKLSMgZGVmaW5lIF9fSU5UX0xFQVNUOF9NSU4gICAgSU5UMzJfTUlOCi0jIGRlZmluZSBfX0lOVF9MRUFTVDhfTUFYICAgIElOVDMyX01BWAotIyBkZWZpbmUgX19VSU5UX0xFQVNUOF9NQVggIFVJTlQzMl9NQVgKLSNlbmRpZiAvKiBfX0lOVDMyX1RZUEVfXyAqLwotCi0jaWZkZWYgX19JTlRfTEVBU1QzMl9NSU4KLSMgZGVmaW5lIElOVF9MRUFTVDMyX01JTiAgIF9fSU5UX0xFQVNUMzJfTUlOCi0jIGRlZmluZSBJTlRfTEVBU1QzMl9NQVggICBfX0lOVF9MRUFTVDMyX01BWAotIyBkZWZpbmUgVUlOVF9MRUFTVDMyX01BWCBfX1VJTlRfTEVBU1QzMl9NQVgKLSMgZGVmaW5lIElOVF9GQVNUMzJfTUlOICAgIF9fSU5UX0xFQVNUMzJfTUlOCi0jIGRlZmluZSBJTlRfRkFTVDMyX01BWCAgICBfX0lOVF9MRUFTVDMyX01BWAotIyBkZWZpbmUgVUlOVF9GQVNUMzJfTUFYICBfX1VJTlRfTEVBU1QzMl9NQVgKLSNlbmRpZiAvKiBfX0lOVF9MRUFTVDMyX01JTiAqLwotCi0KLSNpZmRlZiBfX0lOVDI0X1RZUEVfXwotIyBkZWZpbmUgSU5UMjRfTUFYICAgICAgICAgICBJTlQyNF9DKDgzODg2MDcpCi0jIGRlZmluZSBJTlQyNF9NSU4gICAgICAgICAoLUlOVDI0X0MoODM4ODYwNyktMSkKLSMgZGVmaW5lIFVJTlQyNF9NQVggICAgICAgICBVSU5UMjRfQygxNjc3NzIxNSkKLSMgZGVmaW5lIElOVF9MRUFTVDI0X01JTiAgICAgSU5UMjRfTUlOCi0jIGRlZmluZSBJTlRfTEVBU1QyNF9NQVggICAgIElOVDI0X01BWAotIyBkZWZpbmUgVUlOVF9MRUFTVDI0X01BWCAgIFVJTlQyNF9NQVgKLSMgZGVmaW5lIElOVF9GQVNUMjRfTUlOICAgICAgSU5UMjRfTUlOCi0jIGRlZmluZSBJTlRfRkFTVDI0X01BWCAgICAgIElOVDI0X01BWAotIyBkZWZpbmUgVUlOVF9GQVNUMjRfTUFYICAgIFVJTlQyNF9NQVgKLSMgZGVmaW5lIF9fSU5UX0xFQVNUMTZfTUlOICAgSU5UMjRfTUlOCi0jIGRlZmluZSBfX0lOVF9MRUFTVDE2X01BWCAgIElOVDI0X01BWAotIyBkZWZpbmUgX19VSU5UX0xFQVNUMTZfTUFYIFVJTlQyNF9NQVgKLSMgZGVmaW5lIF9fSU5UX0xFQVNUOF9NSU4gICAgSU5UMjRfTUlOCi0jIGRlZmluZSBfX0lOVF9MRUFTVDhfTUFYICAgIElOVDI0X01BWAotIyBkZWZpbmUgX19VSU5UX0xFQVNUOF9NQVggIFVJTlQyNF9NQVgKLSNlbmRpZiAvKiBfX0lOVDI0X1RZUEVfXyAqLwotCi0KLSNpZmRlZiBfX0lOVDE2X1RZUEVfXwotI2RlZmluZSBJTlQxNl9NQVggICAgICAgICAgICBJTlQxNl9DKDMyNzY3KQotI2RlZmluZSBJTlQxNl9NSU4gICAgICAgICAgKC1JTlQxNl9DKDMyNzY3KS0xKQotI2RlZmluZSBVSU5UMTZfTUFYICAgICAgICAgIFVJTlQxNl9DKDY1NTM1KQotIyBkZWZpbmUgX19JTlRfTEVBU1QxNl9NSU4gICBJTlQxNl9NSU4KLSMgZGVmaW5lIF9fSU5UX0xFQVNUMTZfTUFYICAgSU5UMTZfTUFYCi0jIGRlZmluZSBfX1VJTlRfTEVBU1QxNl9NQVggVUlOVDE2X01BWAotIyBkZWZpbmUgX19JTlRfTEVBU1Q4X01JTiAgICBJTlQxNl9NSU4KLSMgZGVmaW5lIF9fSU5UX0xFQVNUOF9NQVggICAgSU5UMTZfTUFYCi0jIGRlZmluZSBfX1VJTlRfTEVBU1Q4X01BWCAgVUlOVDE2X01BWAotI2VuZGlmIC8qIF9fSU5UMTZfVFlQRV9fICovCi0KLSNpZmRlZiBfX0lOVF9MRUFTVDE2X01JTgotIyBkZWZpbmUgSU5UX0xFQVNUMTZfTUlOICAgX19JTlRfTEVBU1QxNl9NSU4KLSMgZGVmaW5lIElOVF9MRUFTVDE2X01BWCAgIF9fSU5UX0xFQVNUMTZfTUFYCi0jIGRlZmluZSBVSU5UX0xFQVNUMTZfTUFYIF9fVUlOVF9MRUFTVDE2X01BWAotIyBkZWZpbmUgSU5UX0ZBU1QxNl9NSU4gICAgX19JTlRfTEVBU1QxNl9NSU4KLSMgZGVmaW5lIElOVF9GQVNUMTZfTUFYICAgIF9fSU5UX0xFQVNUMTZfTUFYCi0jIGRlZmluZSBVSU5UX0ZBU1QxNl9NQVggIF9fVUlOVF9MRUFTVDE2X01BWAotI2VuZGlmIC8qIF9fSU5UX0xFQVNUMTZfTUlOICovCi0KLQotI2lmZGVmIF9fSU5UOF9UWVBFX18KLSMgZGVmaW5lIElOVDhfTUFYICAgICAgICAgICAgSU5UOF9DKDEyNykKLSMgZGVmaW5lIElOVDhfTUlOICAgICAgICAgICgtSU5UOF9DKDEyNyktMSkKLSMgZGVmaW5lIFVJTlQ4X01BWCAgICAgICAgICBVSU5UOF9DKDI1NSkKLSMgZGVmaW5lIF9fSU5UX0xFQVNUOF9NSU4gICAgSU5UOF9NSU4KLSMgZGVmaW5lIF9fSU5UX0xFQVNUOF9NQVggICAgSU5UOF9NQVgKLSMgZGVmaW5lIF9fVUlOVF9MRUFTVDhfTUFYICBVSU5UOF9NQVgKLSNlbmRpZiAvKiBfX0lOVDhfVFlQRV9fICovCi0KLSNpZmRlZiBfX0lOVF9MRUFTVDhfTUlOCi0jIGRlZmluZSBJTlRfTEVBU1Q4X01JTiAgIF9fSU5UX0xFQVNUOF9NSU4KLSMgZGVmaW5lIElOVF9MRUFTVDhfTUFYICAgX19JTlRfTEVBU1Q4X01BWAotIyBkZWZpbmUgVUlOVF9MRUFTVDhfTUFYIF9fVUlOVF9MRUFTVDhfTUFYCi0jIGRlZmluZSBJTlRfRkFTVDhfTUlOICAgIF9fSU5UX0xFQVNUOF9NSU4KLSMgZGVmaW5lIElOVF9GQVNUOF9NQVggICAgX19JTlRfTEVBU1Q4X01BWAotIyBkZWZpbmUgVUlOVF9GQVNUOF9NQVggIF9fVUlOVF9MRUFTVDhfTUFYCi0jZW5kaWYgLyogX19JTlRfTEVBU1Q4X01JTiAqLwotCi0vKiBTb21lIHV0aWxpdHkgbWFjcm9zICovCi0jZGVmaW5lICBfX0lOVE5fTUlOKG4pICBfX3N0ZGludF9qb2luMyggSU5ULCBuLCBfTUlOKQotI2RlZmluZSAgX19JTlROX01BWChuKSAgX19zdGRpbnRfam9pbjMoIElOVCwgbiwgX01BWCkKLSNkZWZpbmUgX19VSU5UTl9NQVgobikgIF9fc3RkaW50X2pvaW4zKFVJTlQsIG4sIF9NQVgpCi0jZGVmaW5lICBfX0lOVE5fQyhuLCB2KSBfX3N0ZGludF9qb2luMyggSU5ULCBuLCBfQyh2KSkKLSNkZWZpbmUgX19VSU5UTl9DKG4sIHYpIF9fc3RkaW50X2pvaW4zKFVJTlQsIG4sIF9DKHYpKQotCi0vKiBDOTkgNy4xOC4yLjQgTGltaXRzIG9mIGludGVnZXIgdHlwZXMgY2FwYWJsZSBvZiBob2xkaW5nIG9iamVjdCBwb2ludGVycy4gKi8KLS8qIEM5OSA3LjE4LjMgTGltaXRzIG9mIG90aGVyIGludGVnZXIgdHlwZXMuICovCi0KLSNkZWZpbmUgIElOVFBUUl9NSU4gIF9fSU5UTl9NSU4oX19JTlRQVFJfV0lEVEhfXykKLSNkZWZpbmUgIElOVFBUUl9NQVggIF9fSU5UTl9NQVgoX19JTlRQVFJfV0lEVEhfXykKLSNkZWZpbmUgVUlOVFBUUl9NQVggX19VSU5UTl9NQVgoX19JTlRQVFJfV0lEVEhfXykKLSNkZWZpbmUgUFRSRElGRl9NSU4gIF9fSU5UTl9NSU4oX19QVFJESUZGX1dJRFRIX18pCi0jZGVmaW5lIFBUUkRJRkZfTUFYICBfX0lOVE5fTUFYKF9fUFRSRElGRl9XSURUSF9fKQotI2RlZmluZSAgICBTSVpFX01BWCBfX1VJTlROX01BWChfX1NJWkVfV0lEVEhfXykKLQotLyogSVNPOTg5OToyMDExIDcuMjAgKEMxMSBBbm5leCBLKTogRGVmaW5lIFJTSVpFX01BWCBpZiBfX1NURENfV0FOVF9MSUJfRVhUMV9fCi0gKiBpcyBlbmFibGVkLiAqLwotI2lmIGRlZmluZWQoX19TVERDX1dBTlRfTElCX0VYVDFfXykgJiYgX19TVERDX1dBTlRfTElCX0VYVDFfXyA+PSAxCi0jZGVmaW5lICAgUlNJWkVfTUFYICAgICAgICAgICAgKFNJWkVfTUFYID4+IDEpCi0jZW5kaWYKLQotLyogQzk5IDcuMTguMi41IExpbWl0cyBvZiBncmVhdGVzdC13aWR0aCBpbnRlZ2VyIHR5cGVzLiAqLwotI2RlZmluZSBJTlRNQVhfTUlOICAgX19JTlROX01JTihfX0lOVE1BWF9XSURUSF9fKQotI2RlZmluZSBJTlRNQVhfTUFYICAgX19JTlROX01BWChfX0lOVE1BWF9XSURUSF9fKQotI2RlZmluZSBVSU5UTUFYX01BWCBfX1VJTlROX01BWChfX0lOVE1BWF9XSURUSF9fKQotCi0vKiBDOTkgNy4xOC4zIExpbWl0cyBvZiBvdGhlciBpbnRlZ2VyIHR5cGVzLiAqLwotI2RlZmluZSBTSUdfQVRPTUlDX01JTiBfX0lOVE5fTUlOKF9fU0lHX0FUT01JQ19XSURUSF9fKQotI2RlZmluZSBTSUdfQVRPTUlDX01BWCBfX0lOVE5fTUFYKF9fU0lHX0FUT01JQ19XSURUSF9fKQotI2lmZGVmIF9fV0lOVF9VTlNJR05FRF9fCi0jIGRlZmluZSBXSU5UX01JTiAgICAgICBfX1VJTlROX0MoX19XSU5UX1dJRFRIX18sIDApCi0jIGRlZmluZSBXSU5UX01BWCAgICAgICBfX1VJTlROX01BWChfX1dJTlRfV0lEVEhfXykKLSNlbHNlCi0jIGRlZmluZSBXSU5UX01JTiAgICAgICBfX0lOVE5fTUlOKF9fV0lOVF9XSURUSF9fKQotIyBkZWZpbmUgV0lOVF9NQVggICAgICAgX19JTlROX01BWChfX1dJTlRfV0lEVEhfXykKLSNlbmRpZgotCi0jaWZuZGVmIFdDSEFSX01BWAotIyBkZWZpbmUgV0NIQVJfTUFYIF9fV0NIQVJfTUFYX18KLSNlbmRpZgotI2lmbmRlZiBXQ0hBUl9NSU4KLSMgaWYgX19XQ0hBUl9NQVhfXyA9PSBfX0lOVE5fTUFYKF9fV0NIQVJfV0lEVEhfXykKLSMgIGRlZmluZSBXQ0hBUl9NSU4gX19JTlROX01JTihfX1dDSEFSX1dJRFRIX18pCi0jIGVsc2UKLSMgIGRlZmluZSBXQ0hBUl9NSU4gX19VSU5UTl9DKF9fV0NIQVJfV0lEVEhfXywgMCkKLSMgZW5kaWYKLSNlbmRpZgotCi0vKiA3LjE4LjQuMiBNYWNyb3MgZm9yIGdyZWF0ZXN0LXdpZHRoIGludGVnZXIgY29uc3RhbnRzLiAqLwotI2RlZmluZSBJTlRNQVhfQyh2KSAgIF9fSU5UTl9DKF9fSU5UTUFYX1dJRFRIX18sIHYpCi0jZGVmaW5lIFVJTlRNQVhfQyh2KSBfX1VJTlROX0MoX19JTlRNQVhfV0lEVEhfXywgdikKLQotI2VuZGlmIC8qIF9fU1REQ19IT1NURURfXyAqLwotI2VuZGlmIC8qIF9fQ0xBTkdfU1RESU5UX0ggKi8KZGlmZiAtLWdpdCBhL2NsYW5nLTI1NzcxMTMvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvc3Rkbm9yZXR1cm4uaCBiL2NsYW5nLTI1NzcxMTMvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvc3Rkbm9yZXR1cm4uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTdhMzAxZC4uMDAwMDAwMAotLS0gYS9jbGFuZy0yNTc3MTEzL2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL3N0ZG5vcmV0dXJuLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi0vKj09PS0tLS0gc3Rkbm9yZXR1cm4uaCAtIFN0YW5kYXJkIGhlYWRlciBmb3Igbm9yZXR1cm4gbWFjcm8gLS0tLS0tLS0tLS0tLS0tPT09Ci0gKgotICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQotICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKLSAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKLSAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKLSAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcwotICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKLSAqCi0gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgotICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCi0gKgotICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKLSAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAotICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCi0gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAotICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgotICogVEhFIFNPRlRXQVJFLgotICoKLSAqPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KLSAqLwotCi0jaWZuZGVmIF9fU1RETk9SRVRVUk5fSAotI2RlZmluZSBfX1NURE5PUkVUVVJOX0gKLQotI2RlZmluZSBub3JldHVybiBfTm9yZXR1cm4KLSNkZWZpbmUgX19ub3JldHVybl9pc19kZWZpbmVkIDEKLQotI2VuZGlmIC8qIF9fU1RETk9SRVRVUk5fSCAqLwpkaWZmIC0tZ2l0IGEvY2xhbmctMjU3NzExMy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS90Ym1pbnRyaW4uaCBiL2NsYW5nLTI1NzcxMTMvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvdGJtaW50cmluLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc4NTk2MWMuLjAwMDAwMDAKLS0tIGEvY2xhbmctMjU3NzExMy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS90Ym1pbnRyaW4uaAorKysgL2Rldi9udWxsCkBAIC0xLDE1NCArMCwwIEBACi0vKj09PS0tLS0gdGJtaW50cmluLmggLSBUQk0gaW50cmluc2ljcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09Ci0gKgotICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQotICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKLSAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKLSAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKLSAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcwotICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKLSAqCi0gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgotICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCi0gKgotICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKLSAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAotICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCi0gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAotICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgotICogVEhFIFNPRlRXQVJFLgotICoKLSAqPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KLSAqLwotCi0jaWZuZGVmIF9fWDg2SU5UUklOX0gKLSNlcnJvciAiTmV2ZXIgdXNlIDx0Ym1pbnRyaW4uaD4gZGlyZWN0bHk7IGluY2x1ZGUgPHg4NmludHJpbi5oPiBpbnN0ZWFkLiIKLSNlbmRpZgotCi0jaWZuZGVmIF9fVEJNSU5UUklOX0gKLSNkZWZpbmUgX19UQk1JTlRSSU5fSAotCi0vKiBEZWZpbmUgdGhlIGRlZmF1bHQgYXR0cmlidXRlcyBmb3IgdGhlIGZ1bmN0aW9ucyBpbiB0aGlzIGZpbGUuICovCi0jZGVmaW5lIF9fREVGQVVMVF9GTl9BVFRSUyBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18sIF9fdGFyZ2V0X18oInRibSIpKSkKLQotI2RlZmluZSBfX2JleHRyaV91MzIoYSwgYikgXAotICAoKHVuc2lnbmVkIGludClfX2J1aWx0aW5faWEzMl9iZXh0cmlfdTMyKCh1bnNpZ25lZCBpbnQpKGEpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGludCkoYikpKQotCi1zdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBpbnQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fX2JsY2ZpbGxfdTMyKHVuc2lnbmVkIGludCBhKQotewotICByZXR1cm4gYSAmIChhICsgMSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGludCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9fYmxjaV91MzIodW5zaWduZWQgaW50IGEpCi17Ci0gIHJldHVybiBhIHwgfihhICsgMSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGludCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9fYmxjaWNfdTMyKHVuc2lnbmVkIGludCBhKQotewotICByZXR1cm4gfmEgJiAoYSArIDEpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBpbnQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fX2JsY21za191MzIodW5zaWduZWQgaW50IGEpCi17Ci0gIHJldHVybiBhIF4gKGEgKyAxKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgaW50IF9fREVGQVVMVF9GTl9BVFRSUwotX19ibGNzX3UzMih1bnNpZ25lZCBpbnQgYSkKLXsKLSAgcmV0dXJuIGEgfCAoYSArIDEpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBpbnQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fX2Jsc2ZpbGxfdTMyKHVuc2lnbmVkIGludCBhKQotewotICByZXR1cm4gYSB8IChhIC0gMSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGludCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9fYmxzaWNfdTMyKHVuc2lnbmVkIGludCBhKQotewotICByZXR1cm4gfmEgfCAoYSAtIDEpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBpbnQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fX3QxbXNrY191MzIodW5zaWduZWQgaW50IGEpCi17Ci0gIHJldHVybiB+YSB8IChhICsgMSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGludCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9fdHptc2tfdTMyKHVuc2lnbmVkIGludCBhKQotewotICByZXR1cm4gfmEgJiAoYSAtIDEpOwotfQotCi0jaWZkZWYgX194ODZfNjRfXwotI2RlZmluZSBfX2JleHRyaV91NjQoYSwgYikgXAotICAoKHVuc2lnbmVkIGxvbmcgbG9uZylfX2J1aWx0aW5faWEzMl9iZXh0cmlfdTY0KCh1bnNpZ25lZCBsb25nIGxvbmcpKGEpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykoYikpKQotCi1zdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nIGxvbmcgX19ERUZBVUxUX0ZOX0FUVFJTCi1fX2JsY2ZpbGxfdTY0KHVuc2lnbmVkIGxvbmcgbG9uZyBhKQotewotICByZXR1cm4gYSAmIChhICsgMSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcgbG9uZyBfX0RFRkFVTFRfRk5fQVRUUlMKLV9fYmxjaV91NjQodW5zaWduZWQgbG9uZyBsb25nIGEpCi17Ci0gIHJldHVybiBhIHwgfihhICsgMSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcgbG9uZyBfX0RFRkFVTFRfRk5fQVRUUlMKLV9fYmxjaWNfdTY0KHVuc2lnbmVkIGxvbmcgbG9uZyBhKQotewotICByZXR1cm4gfmEgJiAoYSArIDEpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nIGxvbmcgX19ERUZBVUxUX0ZOX0FUVFJTCi1fX2JsY21za191NjQodW5zaWduZWQgbG9uZyBsb25nIGEpCi17Ci0gIHJldHVybiBhIF4gKGEgKyAxKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgbG9uZyBsb25nIF9fREVGQVVMVF9GTl9BVFRSUwotX19ibGNzX3U2NCh1bnNpZ25lZCBsb25nIGxvbmcgYSkKLXsKLSAgcmV0dXJuIGEgfCAoYSArIDEpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nIGxvbmcgX19ERUZBVUxUX0ZOX0FUVFJTCi1fX2Jsc2ZpbGxfdTY0KHVuc2lnbmVkIGxvbmcgbG9uZyBhKQotewotICByZXR1cm4gYSB8IChhIC0gMSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcgbG9uZyBfX0RFRkFVTFRfRk5fQVRUUlMKLV9fYmxzaWNfdTY0KHVuc2lnbmVkIGxvbmcgbG9uZyBhKQotewotICByZXR1cm4gfmEgfCAoYSAtIDEpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nIGxvbmcgX19ERUZBVUxUX0ZOX0FUVFJTCi1fX3QxbXNrY191NjQodW5zaWduZWQgbG9uZyBsb25nIGEpCi17Ci0gIHJldHVybiB+YSB8IChhICsgMSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcgbG9uZyBfX0RFRkFVTFRfRk5fQVRUUlMKLV9fdHptc2tfdTY0KHVuc2lnbmVkIGxvbmcgbG9uZyBhKQotewotICByZXR1cm4gfmEgJiAoYSAtIDEpOwotfQotI2VuZGlmCi0KLSN1bmRlZiBfX0RFRkFVTFRfRk5fQVRUUlMKLQotI2VuZGlmIC8qIF9fVEJNSU5UUklOX0ggKi8KZGlmZiAtLWdpdCBhL2NsYW5nLTI1NzcxMTMvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvdGdtYXRoLmggYi9jbGFuZy0yNTc3MTEzL2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL3RnbWF0aC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMThlMTE4Li4wMDAwMDAwCi0tLSBhL2NsYW5nLTI1NzcxMTMvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvdGdtYXRoLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMzc0ICswLDAgQEAKLS8qPT09LS0tLSB0Z21hdGguaCAtIFN0YW5kYXJkIGhlYWRlciBmb3IgdHlwZSBnZW5lcmljIG1hdGggLS0tLS0tLS0tLS0tLS0tLT09PSpcCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDA5IEhvd2FyZCBIaW5uYW50Ci0gKgotICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQotICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKLSAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKLSAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKLSAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcwotICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKLSAqCi0gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgotICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCi0gKgotICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKLSAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAotICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCi0gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAotICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgotICogVEhFIFNPRlRXQVJFLgotICoKLVwqPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PSovCi0KLSNpZm5kZWYgX19UR01BVEhfSAotI2RlZmluZSBfX1RHTUFUSF9ICi0KLS8qIEM5OSA3LjIyIFR5cGUtZ2VuZXJpYyBtYXRoIDx0Z21hdGguaD4uICovCi0jaW5jbHVkZSA8bWF0aC5oPgotCi0vKiBDKysgaGFuZGxlcyB0eXBlIGdlbmVyaWNpdHkgd2l0aCBvdmVybG9hZGluZyBpbiBtYXRoLmguICovCi0jaWZuZGVmIF9fY3BsdXNwbHVzCi0jaW5jbHVkZSA8Y29tcGxleC5oPgotCi0jZGVmaW5lIF9UR19BVFRSU3AgX19hdHRyaWJ1dGVfXygoX19vdmVybG9hZGFibGVfXykpCi0jZGVmaW5lIF9UR19BVFRSUyBfX2F0dHJpYnV0ZV9fKChfX292ZXJsb2FkYWJsZV9fLCBfX2Fsd2F5c19pbmxpbmVfXykpCi0KLS8vIHByb21vdGlvbgotCi10eXBlZGVmIHZvaWQgX0FyZ3VtZW50X3R5cGVfaXNfbm90X2FyaXRobWV0aWM7Ci1zdGF0aWMgX0FyZ3VtZW50X3R5cGVfaXNfbm90X2FyaXRobWV0aWMgX190Z19wcm9tb3RlKC4uLikKLSAgX19hdHRyaWJ1dGVfXygoX191bmF2YWlsYWJsZV9fLF9fb3ZlcmxvYWRhYmxlX18pKTsKLXN0YXRpYyBkb3VibGUgICAgICAgICAgICAgICBfVEdfQVRUUlNwIF9fdGdfcHJvbW90ZShpbnQpOwotc3RhdGljIGRvdWJsZSAgICAgICAgICAgICAgIF9UR19BVFRSU3AgX190Z19wcm9tb3RlKHVuc2lnbmVkIGludCk7Ci1zdGF0aWMgZG91YmxlICAgICAgICAgICAgICAgX1RHX0FUVFJTcCBfX3RnX3Byb21vdGUobG9uZyk7Ci1zdGF0aWMgZG91YmxlICAgICAgICAgICAgICAgX1RHX0FUVFJTcCBfX3RnX3Byb21vdGUodW5zaWduZWQgbG9uZyk7Ci1zdGF0aWMgZG91YmxlICAgICAgICAgICAgICAgX1RHX0FUVFJTcCBfX3RnX3Byb21vdGUobG9uZyBsb25nKTsKLXN0YXRpYyBkb3VibGUgICAgICAgICAgICAgICBfVEdfQVRUUlNwIF9fdGdfcHJvbW90ZSh1bnNpZ25lZCBsb25nIGxvbmcpOwotc3RhdGljIGZsb2F0ICAgICAgICAgICAgICAgIF9UR19BVFRSU3AgX190Z19wcm9tb3RlKGZsb2F0KTsKLXN0YXRpYyBkb3VibGUgICAgICAgICAgICAgICBfVEdfQVRUUlNwIF9fdGdfcHJvbW90ZShkb3VibGUpOwotc3RhdGljIGxvbmcgZG91YmxlICAgICAgICAgIF9UR19BVFRSU3AgX190Z19wcm9tb3RlKGxvbmcgZG91YmxlKTsKLXN0YXRpYyBmbG9hdCBfQ29tcGxleCAgICAgICBfVEdfQVRUUlNwIF9fdGdfcHJvbW90ZShmbG9hdCBfQ29tcGxleCk7Ci1zdGF0aWMgZG91YmxlIF9Db21wbGV4ICAgICAgX1RHX0FUVFJTcCBfX3RnX3Byb21vdGUoZG91YmxlIF9Db21wbGV4KTsKLXN0YXRpYyBsb25nIGRvdWJsZSBfQ29tcGxleCBfVEdfQVRUUlNwIF9fdGdfcHJvbW90ZShsb25nIGRvdWJsZSBfQ29tcGxleCk7Ci0KLSNkZWZpbmUgX190Z19wcm9tb3RlMShfX3gpICAgICAgICAgICAoX190eXBlb2ZfXyhfX3RnX3Byb21vdGUoX194KSkpCi0jZGVmaW5lIF9fdGdfcHJvbW90ZTIoX194LCBfX3kpICAgICAgKF9fdHlwZW9mX18oX190Z19wcm9tb3RlKF9feCkgKyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX190Z19wcm9tb3RlKF9feSkpKQotI2RlZmluZSBfX3RnX3Byb21vdGUzKF9feCwgX195LCBfX3opIChfX3R5cGVvZl9fKF9fdGdfcHJvbW90ZShfX3gpICsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdGdfcHJvbW90ZShfX3kpICsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdGdfcHJvbW90ZShfX3opKSkKLQotLy8gYWNvcwotCi1zdGF0aWMgZmxvYXQKLSAgICBfVEdfQVRUUlMKLSAgICBfX3RnX2Fjb3MoZmxvYXQgX194KSB7cmV0dXJuIGFjb3NmKF9feCk7fQotCi1zdGF0aWMgZG91YmxlCi0gICAgX1RHX0FUVFJTCi0gICAgX190Z19hY29zKGRvdWJsZSBfX3gpIHtyZXR1cm4gYWNvcyhfX3gpO30KLQotc3RhdGljIGxvbmcgZG91YmxlCi0gICAgX1RHX0FUVFJTCi0gICAgX190Z19hY29zKGxvbmcgZG91YmxlIF9feCkge3JldHVybiBhY29zbChfX3gpO30KLQotc3RhdGljIGZsb2F0IF9Db21wbGV4Ci0gICAgX1RHX0FUVFJTCi0gICAgX190Z19hY29zKGZsb2F0IF9Db21wbGV4IF9feCkge3JldHVybiBjYWNvc2YoX194KTt9Ci0KLXN0YXRpYyBkb3VibGUgX0NvbXBsZXgKLSAgICBfVEdfQVRUUlMKLSAgICBfX3RnX2Fjb3MoZG91YmxlIF9Db21wbGV4IF9feCkge3JldHVybiBjYWNvcyhfX3gpO30KLQotc3RhdGljIGxvbmcgZG91YmxlIF9Db21wbGV4Ci0gICAgX1RHX0FUVFJTCi0gICAgX190Z19hY29zKGxvbmcgZG91YmxlIF9Db21wbGV4IF9feCkge3JldHVybiBjYWNvc2woX194KTt9Ci0KLSN1bmRlZiBhY29zCi0jZGVmaW5lIGFjb3MoX194KSBfX3RnX2Fjb3MoX190Z19wcm9tb3RlMSgoX194KSkoX194KSkKLQotLy8gYXNpbgotCi1zdGF0aWMgZmxvYXQKLSAgICBfVEdfQVRUUlMKLSAgICBfX3RnX2FzaW4oZmxvYXQgX194KSB7cmV0dXJuIGFzaW5mKF9feCk7fQotCi1zdGF0aWMgZG91YmxlCi0gICAgX1RHX0FUVFJTCi0gICAgX190Z19hc2luKGRvdWJsZSBfX3gpIHtyZXR1cm4gYXNpbihfX3gpO30KLQotc3RhdGljIGxvbmcgZG91YmxlCi0gICAgX1RHX0FUVFJTCi0gICAgX190Z19hc2luKGxvbmcgZG91YmxlIF9feCkge3JldHVybiBhc2lubChfX3gpO30KLQotc3RhdGljIGZsb2F0IF9Db21wbGV4Ci0gICAgX1RHX0FUVFJTCi0gICAgX190Z19hc2luKGZsb2F0IF9Db21wbGV4IF9feCkge3JldHVybiBjYXNpbmYoX194KTt9Ci0KLXN0YXRpYyBkb3VibGUgX0NvbXBsZXgKLSAgICBfVEdfQVRUUlMKLSAgICBfX3RnX2FzaW4oZG91YmxlIF9Db21wbGV4IF9feCkge3JldHVybiBjYXNpbihfX3gpO30KLQotc3RhdGljIGxvbmcgZG91YmxlIF9Db21wbGV4Ci0gICAgX1RHX0FUVFJTCi0gICAgX190Z19hc2luKGxvbmcgZG91YmxlIF9Db21wbGV4IF9feCkge3JldHVybiBjYXNpbmwoX194KTt9Ci0KLSN1bmRlZiBhc2luCi0jZGVmaW5lIGFzaW4oX194KSBfX3RnX2FzaW4oX190Z19wcm9tb3RlMSgoX194KSkoX194KSkKLQotLy8gYXRhbgotCi1zdGF0aWMgZmxvYXQKLSAgICBfVEdfQVRUUlMKLSAgICBfX3RnX2F0YW4oZmxvYXQgX194KSB7cmV0dXJuIGF0YW5mKF9feCk7fQotCi1zdGF0aWMgZG91YmxlCi0gICAgX1RHX0FUVFJTCi0gICAgX190Z19hdGFuKGRvdWJsZSBfX3gpIHtyZXR1cm4gYXRhbihfX3gpO30KLQotc3RhdGljIGxvbmcgZG91YmxlCi0gICAgX1RHX0FUVFJTCi0gICAgX190Z19hdGFuKGxvbmcgZG91YmxlIF9feCkge3JldHVybiBhdGFubChfX3gpO30KLQotc3RhdGljIGZsb2F0IF9Db21wbGV4Ci0gICAgX1RHX0FUVFJTCi0gICAgX190Z19hdGFuKGZsb2F0IF9Db21wbGV4IF9feCkge3JldHVybiBjYXRhbmYoX194KTt9Ci0KLXN0YXRpYyBkb3VibGUgX0NvbXBsZXgKLSAgICBfVEdfQVRUUlMKLSAgICBfX3RnX2F0YW4oZG91YmxlIF9Db21wbGV4IF9feCkge3JldHVybiBjYXRhbihfX3gpO30KLQotc3RhdGljIGxvbmcgZG91YmxlIF9Db21wbGV4Ci0gICAgX1RHX0FUVFJTCi0gICAgX190Z19hdGFuKGxvbmcgZG91YmxlIF9Db21wbGV4IF9feCkge3JldHVybiBjYXRhbmwoX194KTt9Ci0KLSN1bmRlZiBhdGFuCi0jZGVmaW5lIGF0YW4oX194KSBfX3RnX2F0YW4oX190Z19wcm9tb3RlMSgoX194KSkoX194KSkKLQotLy8gYWNvc2gKLQotc3RhdGljIGZsb2F0Ci0gICAgX1RHX0FUVFJTCi0gICAgX190Z19hY29zaChmbG9hdCBfX3gpIHtyZXR1cm4gYWNvc2hmKF9feCk7fQotCi1zdGF0aWMgZG91YmxlCi0gICAgX1RHX0FUVFJTCi0gICAgX190Z19hY29zaChkb3VibGUgX194KSB7cmV0dXJuIGFjb3NoKF9feCk7fQotCi1zdGF0aWMgbG9uZyBkb3VibGUKLSAgICBfVEdfQVRUUlMKLSAgICBfX3RnX2Fjb3NoKGxvbmcgZG91YmxlIF9feCkge3JldHVybiBhY29zaGwoX194KTt9Ci0KLXN0YXRpYyBmbG9hdCBfQ29tcGxleAotICAgIF9UR19BVFRSUwotICAgIF9fdGdfYWNvc2goZmxvYXQgX0NvbXBsZXggX194KSB7cmV0dXJuIGNhY29zaGYoX194KTt9Ci0KLXN0YXRpYyBkb3VibGUgX0NvbXBsZXgKLSAgICBfVEdfQVRUUlMKLSAgICBfX3RnX2Fjb3NoKGRvdWJsZSBfQ29tcGxleCBfX3gpIHtyZXR1cm4gY2Fjb3NoKF9feCk7fQotCi1zdGF0aWMgbG9uZyBkb3VibGUgX0NvbXBsZXgKLSAgICBfVEdfQVRUUlMKLSAgICBfX3RnX2Fjb3NoKGxvbmcgZG91YmxlIF9Db21wbGV4IF9feCkge3JldHVybiBjYWNvc2hsKF9feCk7fQotCi0jdW5kZWYgYWNvc2gKLSNkZWZpbmUgYWNvc2goX194KSBfX3RnX2Fjb3NoKF9fdGdfcHJvbW90ZTEoKF9feCkpKF9feCkpCi0KLS8vIGFzaW5oCi0KLXN0YXRpYyBmbG9hdAotICAgIF9UR19BVFRSUwotICAgIF9fdGdfYXNpbmgoZmxvYXQgX194KSB7cmV0dXJuIGFzaW5oZihfX3gpO30KLQotc3RhdGljIGRvdWJsZQotICAgIF9UR19BVFRSUwotICAgIF9fdGdfYXNpbmgoZG91YmxlIF9feCkge3JldHVybiBhc2luaChfX3gpO30KLQotc3RhdGljIGxvbmcgZG91YmxlCi0gICAgX1RHX0FUVFJTCi0gICAgX190Z19hc2luaChsb25nIGRvdWJsZSBfX3gpIHtyZXR1cm4gYXNpbmhsKF9feCk7fQotCi1zdGF0aWMgZmxvYXQgX0NvbXBsZXgKLSAgICBfVEdfQVRUUlMKLSAgICBfX3RnX2FzaW5oKGZsb2F0IF9Db21wbGV4IF9feCkge3JldHVybiBjYXNpbmhmKF9feCk7fQotCi1zdGF0aWMgZG91YmxlIF9Db21wbGV4Ci0gICAgX1RHX0FUVFJTCi0gICAgX190Z19hc2luaChkb3VibGUgX0NvbXBsZXggX194KSB7cmV0dXJuIGNhc2luaChfX3gpO30KLQotc3RhdGljIGxvbmcgZG91YmxlIF9Db21wbGV4Ci0gICAgX1RHX0FUVFJTCi0gICAgX190Z19hc2luaChsb25nIGRvdWJsZSBfQ29tcGxleCBfX3gpIHtyZXR1cm4gY2FzaW5obChfX3gpO30KLQotI3VuZGVmIGFzaW5oCi0jZGVmaW5lIGFzaW5oKF9feCkgX190Z19hc2luaChfX3RnX3Byb21vdGUxKChfX3gpKShfX3gpKQotCi0vLyBhdGFuaAotCi1zdGF0aWMgZmxvYXQKLSAgICBfVEdfQVRUUlMKLSAgICBfX3RnX2F0YW5oKGZsb2F0IF9feCkge3JldHVybiBhdGFuaGYoX194KTt9Ci0KLXN0YXRpYyBkb3VibGUKLSAgICBfVEdfQVRUUlMKLSAgICBfX3RnX2F0YW5oKGRvdWJsZSBfX3gpIHtyZXR1cm4gYXRhbmgoX194KTt9Ci0KLXN0YXRpYyBsb25nIGRvdWJsZQotICAgIF9UR19BVFRSUwotICAgIF9fdGdfYXRhbmgobG9uZyBkb3VibGUgX194KSB7cmV0dXJuIGF0YW5obChfX3gpO30KLQotc3RhdGljIGZsb2F0IF9Db21wbGV4Ci0gICAgX1RHX0FUVFJTCi0gICAgX190Z19hdGFuaChmbG9hdCBfQ29tcGxleCBfX3gpIHtyZXR1cm4gY2F0YW5oZihfX3gpO30KLQotc3RhdGljIGRvdWJsZSBfQ29tcGxleAotICAgIF9UR19BVFRSUwotICAgIF9fdGdfYXRhbmgoZG91YmxlIF9Db21wbGV4IF9feCkge3JldHVybiBjYXRhbmgoX194KTt9Ci0KLXN0YXRpYyBsb25nIGRvdWJsZSBfQ29tcGxleAotICAgIF9UR19BVFRSUwotICAgIF9fdGdfYXRhbmgobG9uZyBkb3VibGUgX0NvbXBsZXggX194KSB7cmV0dXJuIGNhdGFuaGwoX194KTt9Ci0KLSN1bmRlZiBhdGFuaAotI2RlZmluZSBhdGFuaChfX3gpIF9fdGdfYXRhbmgoX190Z19wcm9tb3RlMSgoX194KSkoX194KSkKLQotLy8gY29zCi0KLXN0YXRpYyBmbG9hdAotICAgIF9UR19BVFRSUwotICAgIF9fdGdfY29zKGZsb2F0IF9feCkge3JldHVybiBjb3NmKF9feCk7fQotCi1zdGF0aWMgZG91YmxlCi0gICAgX1RHX0FUVFJTCi0gICAgX190Z19jb3MoZG91YmxlIF9feCkge3JldHVybiBjb3MoX194KTt9Ci0KLXN0YXRpYyBsb25nIGRvdWJsZQotICAgIF9UR19BVFRSUwotICAgIF9fdGdfY29zKGxvbmcgZG91YmxlIF9feCkge3JldHVybiBjb3NsKF9feCk7fQotCi1zdGF0aWMgZmxvYXQgX0NvbXBsZXgKLSAgICBfVEdfQVRUUlMKLSAgICBfX3RnX2NvcyhmbG9hdCBfQ29tcGxleCBfX3gpIHtyZXR1cm4gY2Nvc2YoX194KTt9Ci0KLXN0YXRpYyBkb3VibGUgX0NvbXBsZXgKLSAgICBfVEdfQVRUUlMKLSAgICBfX3RnX2Nvcyhkb3VibGUgX0NvbXBsZXggX194KSB7cmV0dXJuIGNjb3MoX194KTt9Ci0KLXN0YXRpYyBsb25nIGRvdWJsZSBfQ29tcGxleAotICAgIF9UR19BVFRSUwotICAgIF9fdGdfY29zKGxvbmcgZG91YmxlIF9Db21wbGV4IF9feCkge3JldHVybiBjY29zbChfX3gpO30KLQotI3VuZGVmIGNvcwotI2RlZmluZSBjb3MoX194KSBfX3RnX2NvcyhfX3RnX3Byb21vdGUxKChfX3gpKShfX3gpKQotCi0vLyBzaW4KLQotc3RhdGljIGZsb2F0Ci0gICAgX1RHX0FUVFJTCi0gICAgX190Z19zaW4oZmxvYXQgX194KSB7cmV0dXJuIHNpbmYoX194KTt9Ci0KLXN0YXRpYyBkb3VibGUKLSAgICBfVEdfQVRUUlMKLSAgICBfX3RnX3Npbihkb3VibGUgX194KSB7cmV0dXJuIHNpbihfX3gpO30KLQotc3RhdGljIGxvbmcgZG91YmxlCi0gICAgX1RHX0FUVFJTCi0gICAgX190Z19zaW4obG9uZyBkb3VibGUgX194KSB7cmV0dXJuIHNpbmwoX194KTt9Ci0KLXN0YXRpYyBmbG9hdCBfQ29tcGxleAotICAgIF9UR19BVFRSUwotICAgIF9fdGdfc2luKGZsb2F0IF9Db21wbGV4IF9feCkge3JldHVybiBjc2luZihfX3gpO30KLQotc3RhdGljIGRvdWJsZSBfQ29tcGxleAotICAgIF9UR19BVFRSUwotICAgIF9fdGdfc2luKGRvdWJsZSBfQ29tcGxleCBfX3gpIHtyZXR1cm4gY3NpbihfX3gpO30KLQotc3RhdGljIGxvbmcgZG91YmxlIF9Db21wbGV4Ci0gICAgX1RHX0FUVFJTCi0gICAgX190Z19zaW4obG9uZyBkb3VibGUgX0NvbXBsZXggX194KSB7cmV0dXJuIGNzaW5sKF9feCk7fQotCi0jdW5kZWYgc2luCi0jZGVmaW5lIHNpbihfX3gpIF9fdGdfc2luKF9fdGdfcHJvbW90ZTEoKF9feCkpKF9feCkpCi0KLS8vIHRhbgotCi1zdGF0aWMgZmxvYXQKLSAgICBfVEdfQVRUUlMKLSAgICBfX3RnX3RhbihmbG9hdCBfX3gpIHtyZXR1cm4gdGFuZihfX3gpO30KLQotc3RhdGljIGRvdWJsZQotICAgIF9UR19BVFRSUwotICAgIF9fdGdfdGFuKGRvdWJsZSBfX3gpIHtyZXR1cm4gdGFuKF9feCk7fQotCi1zdGF0aWMgbG9uZyBkb3VibGUKLSAgICBfVEdfQVRUUlMKLSAgICBfX3RnX3Rhbihsb25nIGRvdWJsZSBfX3gpIHtyZXR1cm4gdGFubChfX3gpO30KLQotc3RhdGljIGZsb2F0IF9Db21wbGV4Ci0gICAgX1RHX0FUVFJTCi0gICAgX190Z190YW4oZmxvYXQgX0NvbXBsZXggX194KSB7cmV0dXJuIGN0YW5mKF9feCk7fQotCi1zdGF0aWMgZG91YmxlIF9Db21wbGV4Ci0gICAgX1RHX0FUVFJTCi0gICAgX190Z190YW4oZG91YmxlIF9Db21wbGV4IF9feCkge3JldHVybiBjdGFuKF9feCk7fQotCi1zdGF0aWMgbG9uZyBkb3VibGUgX0NvbXBsZXgKLSAgICBfVEdfQVRUUlMKLSAgICBfX3RnX3Rhbihsb25nIGRvdWJsZSBfQ29tcGxleCBfX3gpIHtyZXR1cm4gY3RhbmwoX194KTt9Ci0KLSN1bmRlZiB0YW4KLSNkZWZpbmUgdGFuKF9feCkgX190Z190YW4oX190Z19wcm9tb3RlMSgoX194KSkoX194KSkKLQotLy8gY29zaAotCi1zdGF0aWMgZmxvYXQKLSAgICBfVEdfQVRUUlMKLSAgICBfX3RnX2Nvc2goZmxvYXQgX194KSB7cmV0dXJuIGNvc2hmKF9feCk7fQotCi1zdGF0aWMgZG91YmxlCi0gICAgX1RHX0FUVFJTCi0gICAgX190Z19jb3NoKGRvdWJsZSBfX3gpIHtyZXR1cm4gY29zaChfX3gpO30KLQotc3RhdGljIGxvbmcgZG91YmxlCi0gICAgX1RHX0FUVFJTCi0gICAgX190Z19jb3NoKGxvbmcgZG91YmxlIF9feCkge3JldHVybiBjb3NobChfX3gpO30KLQotc3RhdGljIGZsb2F0IF9Db21wbGV4Ci0gICAgX1RHX0FUVFJTCi0gICAgX190Z19jb3NoKGZsb2F0IF9Db21wbGV4IF9feCkge3JldHVybiBjY29zaGYoX194KTt9Ci0KLXN0YXRpYyBkb3VibGUgX0NvbXBsZXgKLSAgICBfVEdfQVRUUlMKLSAgICBfX3RnX2Nvc2goZG91YmxlIF9Db21wbGV4IF9feCkge3JldHVybiBjY29zaChfX3gpO30KLQotc3RhdGljIGxvbmcgZG91YmxlIF9Db21wbGV4Ci0gICAgX1RHX0FUVFJTCi0gICAgX190Z19jb3NoKGxvbmcgZG91YmxlIF9Db21wbGV4IF9feCkge3JldHVybiBjY29zaGwoX194KTt9Ci0KLSN1bmRlZiBjb3NoCi0jZGVmaW5lIGNvc2goX194KSBfX3RnX2Nvc2goX190Z19wcm9tb3RlMSgoX194KSkoX194KSkKLQotLy8gc2luaAotCi1zdGF0aWMgZmxvYXQKLSAgICBfVEdfQVRUUlMKLSAgICBfX3RnX3NpbmgoZmxvYXQgX194KSB7cmV0dXJuIHNpbmhmKF9feCk7fQotCi1zdGF0aWMgZG91YmxlCi0gICAgX1RHX0FUVFJTCi0gICAgX190Z19zaW5oKGRvdWJsZSBfX3gpIHtyZXR1cm4gc2luaChfX3gpO30KLQotc3RhdGljIGxvbmcgZG91YmxlCi0gICAgX1RHX0FUVFJTCi0gICAgX190Z19zaW5oKGxvbmcgZG91YmxlIF9feCkge3JldHVybiBzaW5obChfX3gpO30KLQotc3RhdGljIGZsb2F0IF9Db21wbGV4Ci0gICAgX1RHX0FUVFJTCi0gICAgX190Z19zaW5oKGZsb2F0IF9Db21wbGV4IF9feCkge3JldHVybiBjc2luaGYoX194KTt9Ci0KLXN0YXRpYyBkb3VibGUgX0NvbXBsZXgKLSAgICBfVEdfQVRUUlMKLSAgICBfX3RnX3NpbmgoZG91YmxlIF9Db21wbGV4IF9feCkge3JldHVybiBjc2luaChfX3gpO30KLQotc3RhdGljIGxvbmcgZG91YmxlIF9Db21wbGV4Ci0gICAgX1RHX0FUVFJTCi0gICAgX190Z19zaW5oKGxvbmcgZG91YmxlIF9Db21wbGV4IF9feCkge3JldHVybiBjc2luaGwoX194KTt9Ci0KLSN1bmRlZiBzaW5oCi0jZGVmaW5lIHNpbmgoX194KSBfX3RnX3NpbmgoX190Z19wcm9tb3RlMSgoX194KSkoX194KSkKLQotLy8gdGFuaAotCi1zdGF0aWMgZmxvYXQKLSAgICBfVEdfQVRUUlMKLSAgICBfX3RnX3RhbmgoZmxvYXQgX194KSB7cmV0dXJuIHRhbmhmKF9feCk7fQotCi1zdGF0aWMgZG91YmxlCi0gICAgX1RHX0FUVFJTCi0gICAgX190Z190YW5oKGRvdWJsZSBfX3gpIHtyZXR1cm4gdGFuaChfX3gpO30KLQotc3RhdGljIGxvbmcgZG91YmxlCi0gICAgX1RHX0FUVFJTCi0gICAgX190Z190YW5oKGxvbmcgZG91YmxlIF9feCkge3JldHVybiB0YW5obChfX3gpO30KLQotc3RhdGljIGZsb2F0IF9Db21wbGV4Ci0gICAgX1RHX0FUVFJTCi0gICAgX190Z190YW5oKGZsb2F0IF9Db21wbGV4IF9feCkge3JldHVybiBjdGFuaGYoX194KTt9Ci0KLXN0YXRpYyBkb3VibGUgX0NvbXBsZXgKLSAgICBfVEdfQVRUUlMKLSAgICBfX3RnX3RhbmgoZG91YmxlIF9Db21wbGV4IF9feCkge3JldHVybiBjdGFuaChfX3gpO30KLQotc3RhdGljIGxvbmcgZG91YmxlIF9Db21wbGV4Ci0gICAgX1RHX0FUVFJTCi0gICAgX190Z190YW5oKGxvbmcgZG91YmxlIF9Db21wbGV4IF9feCkge3JldHVybiBjdGFuaGwoX194KTt9Ci0KLSN1bmRlZiB0YW5oCi0jZGVmaW5lIHRhbmgoX194KSBfX3RnX3RhbmgoX190Z19wcm9tb3RlMSgoX194KSkoX194KSkKLQotLy8gZXhwCi0KLXN0YXRpYyBmbG9hdAotICAgIF9UR19BVFRSUwotICAgIF9fdGdfZXhwKGZsb2F0IF9feCkge3JldHVybiBleHBmKF9feCk7fQotCi1zdGF0aWMgZG91YmxlCi0gICAgX1RHX0FUVFJTCi0gICAgX190Z19leHAoZG91YmxlIF9feCkge3JldHVybiBleHAoX194KTt9Ci0KLXN0YXRpYyBsb25nIGRvdWJsZQotICAgIF9UR19BVFRSUwotICAgIF9fdGdfZXhwKGxvbmcgZG91YmxlIF9feCkge3JldHVybiBleHBsKF9feCk7fQotCi1zdGF0aWMgZmxvYXQgX0NvbXBsZXgKLSAgICBfVEdfQVRUUlMKLSAgICBfX3RnX2V4cChmbG9hdCBfQ29tcGxleCBfX3gpIHtyZXR1cm4gY2V4cGYoX194KTt9Ci0KLXN0YXRpYyBkb3VibGUgX0NvbXBsZXgKLSAgICBfVEdfQVRUUlMKLSAgICBfX3RnX2V4cChkb3VibGUgX0NvbXBsZXggX194KSB7cmV0dXJuIGNleHAoX194KTt9Ci0KLXN0YXRpYyBsb25nIGRvdWJsZSBfQ29tcGxleAotICAgIF9UR19BVFRSUwotICAgIF9fdGdfZXhwKGxvbmcgZG91YmxlIF9Db21wbGV4IF9feCkge3JldHVybiBjZXhwbChfX3gpO30KLQotI3VuZGVmIGV4cAotI2RlZmluZSBleHAoX194KSBfX3RnX2V4cChfX3RnX3Byb21vdGUxKChfX3gpKShfX3gpKQotCi0vLyBsb2cKLQotc3RhdGljIGZsb2F0Ci0gICAgX1RHX0FUVFJTCi0gICAgX190Z19sb2coZmxvYXQgX194KSB7cmV0dXJuIGxvZ2YoX194KTt9Ci0KLXN0YXRpYyBkb3VibGUKLSAgICBfVEdfQVRUUlMKLSAgICBfX3RnX2xvZyhkb3VibGUgX194KSB7cmV0dXJuIGxvZyhfX3gpO30KLQotc3RhdGljIGxvbmcgZG91YmxlCi0gICAgX1RHX0FUVFJTCi0gICAgX190Z19sb2cobG9uZyBkb3VibGUgX194KSB7cmV0dXJuIGxvZ2woX194KTt9Ci0KLXN0YXRpYyBmbG9hdCBfQ29tcGxleAotICAgIF9UR19BVFRSUwotICAgIF9fdGdfbG9nKGZsb2F0IF9Db21wbGV4IF9feCkge3JldHVybiBjbG9nZihfX3gpO30KLQotc3RhdGljIGRvdWJsZSBfQ29tcGxleAotICAgIF9UR19BVFRSUwotICAgIF9fdGdfbG9nKGRvdWJsZSBfQ29tcGxleCBfX3gpIHtyZXR1cm4gY2xvZyhfX3gpO30KLQotc3RhdGljIGxvbmcgZG91YmxlIF9Db21wbGV4Ci0gICAgX1RHX0FUVFJTCi0gICAgX190Z19sb2cobG9uZyBkb3VibGUgX0NvbXBsZXggX194KSB7cmV0dXJuIGNsb2dsKF9feCk7fQotCi0jdW5kZWYgbG9nCi0jZGVmaW5lIGxvZyhfX3gpIF9fdGdfbG9nKF9fdGdfcHJvbW90ZTEoKF9feCkpKF9feCkpCi0KLS8vIHBvdwotCi1zdGF0aWMgZmxvYXQKLSAgICBfVEdfQVRUUlMKLSAgICBfX3RnX3BvdyhmbG9hdCBfX3gsIGZsb2F0IF9feSkge3JldHVybiBwb3dmKF9feCwgX195KTt9Ci0KLXN0YXRpYyBkb3VibGUKLSAgICBfVEdfQVRUUlMKLSAgICBfX3RnX3Bvdyhkb3VibGUgX194LCBkb3VibGUgX195KSB7cmV0dXJuIHBvdyhfX3gsIF9feSk7fQotCi1zdGF0aWMgbG9uZyBkb3VibGUKLSAgICBfVEdfQVRUUlMKLSAgICBfX3RnX3Bvdyhsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkge3JldHVybiBwb3dsKF9feCwgX195KTt9Ci0KLXN0YXRpYyBmbG9hdCBfQ29tcGxleAotICAgIF9UR19BVFRSUwotICAgIF9fdGdfcG93KGZsb2F0IF9Db21wbGV4IF9feCwgZmxvYXQgX0NvbXBsZXggX195KSB7cmV0dXJuIGNwb3dmKF9feCwgX195KTt9Ci0KLXN0YXRpYyBkb3VibGUgX0NvbXBsZXgKLSAgICBfVEdfQVRUUlMKLSAgICBfX3RnX3Bvdyhkb3VibGUgX0NvbXBsZXggX194LCBkb3VibGUgX0NvbXBsZXggX195KSB7cmV0dXJuIGNwb3coX194LCBfX3kpO30KLQotc3RhdGljIGxvbmcgZG91YmxlIF9Db21wbGV4Ci0gICAgX1RHX0FUVFJTCi0gICAgX190Z19wb3cobG9uZyBkb3VibGUgX0NvbXBsZXggX194LCBsb25nIGRvdWJsZSBfQ29tcGxleCBfX3kpCi0gICAge3JldHVybiBjcG93bChfX3gsIF9feSk7fQotCi0jdW5kZWYgcG93Ci0jZGVmaW5lIHBvdyhfX3gsIF9feSkgX190Z19wb3coX190Z19wcm9tb3RlMigoX194KSwgKF9feSkpKF9feCksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3RnX3Byb21vdGUyKChfX3gpLCAoX195KSkoX195KSkKLQotLy8gc3FydAotCi1zdGF0aWMgZmxvYXQKLSAgICBfVEdfQVRUUlMKLSAgICBfX3RnX3NxcnQoZmxvYXQgX194KSB7cmV0dXJuIHNxcnRmKF9feCk7fQotCi1zdGF0aWMgZG91YmxlCi0gICAgX1RHX0FUVFJTCi0gICAgX190Z19zcXJ0KGRvdWJsZSBfX3gpIHtyZXR1cm4gc3FydChfX3gpO30KLQotc3RhdGljIGxvbmcgZG91YmxlCi0gICAgX1RHX0FUVFJTCi0gICAgX190Z19zcXJ0KGxvbmcgZG91YmxlIF9feCkge3JldHVybiBzcXJ0bChfX3gpO30KLQotc3RhdGljIGZsb2F0IF9Db21wbGV4Ci0gICAgX1RHX0FUVFJTCi0gICAgX190Z19zcXJ0KGZsb2F0IF9Db21wbGV4IF9feCkge3JldHVybiBjc3FydGYoX194KTt9Ci0KLXN0YXRpYyBkb3VibGUgX0NvbXBsZXgKLSAgICBfVEdfQVRUUlMKLSAgICBfX3RnX3NxcnQoZG91YmxlIF9Db21wbGV4IF9feCkge3JldHVybiBjc3FydChfX3gpO30KLQotc3RhdGljIGxvbmcgZG91YmxlIF9Db21wbGV4Ci0gICAgX1RHX0FUVFJTCi0gICAgX190Z19zcXJ0KGxvbmcgZG91YmxlIF9Db21wbGV4IF9feCkge3JldHVybiBjc3FydGwoX194KTt9Ci0KLSN1bmRlZiBzcXJ0Ci0jZGVmaW5lIHNxcnQoX194KSBfX3RnX3NxcnQoX190Z19wcm9tb3RlMSgoX194KSkoX194KSkKLQotLy8gZmFicwotCi1zdGF0aWMgZmxvYXQKLSAgICBfVEdfQVRUUlMKLSAgICBfX3RnX2ZhYnMoZmxvYXQgX194KSB7cmV0dXJuIGZhYnNmKF9feCk7fQotCi1zdGF0aWMgZG91YmxlCi0gICAgX1RHX0FUVFJTCi0gICAgX190Z19mYWJzKGRvdWJsZSBfX3gpIHtyZXR1cm4gZmFicyhfX3gpO30KLQotc3RhdGljIGxvbmcgZG91YmxlCi0gICAgX1RHX0FUVFJTCi0gICAgX190Z19mYWJzKGxvbmcgZG91YmxlIF9feCkge3JldHVybiBmYWJzbChfX3gpO30KLQotc3RhdGljIGZsb2F0Ci0gICAgX1RHX0FUVFJTCi0gICAgX190Z19mYWJzKGZsb2F0IF9Db21wbGV4IF9feCkge3JldHVybiBjYWJzZihfX3gpO30KLQotc3RhdGljIGRvdWJsZQotICAgIF9UR19BVFRSUwotICAgIF9fdGdfZmFicyhkb3VibGUgX0NvbXBsZXggX194KSB7cmV0dXJuIGNhYnMoX194KTt9Ci0KLXN0YXRpYyBsb25nIGRvdWJsZQotICAgIF9UR19BVFRSUwotICAgIF9fdGdfZmFicyhsb25nIGRvdWJsZSBfQ29tcGxleCBfX3gpIHtyZXR1cm4gY2Fic2woX194KTt9Ci0KLSN1bmRlZiBmYWJzCi0jZGVmaW5lIGZhYnMoX194KSBfX3RnX2ZhYnMoX190Z19wcm9tb3RlMSgoX194KSkoX194KSkKLQotLy8gYXRhbjIKLQotc3RhdGljIGZsb2F0Ci0gICAgX1RHX0FUVFJTCi0gICAgX190Z19hdGFuMihmbG9hdCBfX3gsIGZsb2F0IF9feSkge3JldHVybiBhdGFuMmYoX194LCBfX3kpO30KLQotc3RhdGljIGRvdWJsZQotICAgIF9UR19BVFRSUwotICAgIF9fdGdfYXRhbjIoZG91YmxlIF9feCwgZG91YmxlIF9feSkge3JldHVybiBhdGFuMihfX3gsIF9feSk7fQotCi1zdGF0aWMgbG9uZyBkb3VibGUKLSAgICBfVEdfQVRUUlMKLSAgICBfX3RnX2F0YW4yKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB7cmV0dXJuIGF0YW4ybChfX3gsIF9feSk7fQotCi0jdW5kZWYgYXRhbjIKLSNkZWZpbmUgYXRhbjIoX194LCBfX3kpIF9fdGdfYXRhbjIoX190Z19wcm9tb3RlMigoX194KSwgKF9feSkpKF9feCksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX190Z19wcm9tb3RlMigoX194KSwgKF9feSkpKF9feSkpCi0KLS8vIGNicnQKLQotc3RhdGljIGZsb2F0Ci0gICAgX1RHX0FUVFJTCi0gICAgX190Z19jYnJ0KGZsb2F0IF9feCkge3JldHVybiBjYnJ0ZihfX3gpO30KLQotc3RhdGljIGRvdWJsZQotICAgIF9UR19BVFRSUwotICAgIF9fdGdfY2JydChkb3VibGUgX194KSB7cmV0dXJuIGNicnQoX194KTt9Ci0KLXN0YXRpYyBsb25nIGRvdWJsZQotICAgIF9UR19BVFRSUwotICAgIF9fdGdfY2JydChsb25nIGRvdWJsZSBfX3gpIHtyZXR1cm4gY2JydGwoX194KTt9Ci0KLSN1bmRlZiBjYnJ0Ci0jZGVmaW5lIGNicnQoX194KSBfX3RnX2NicnQoX190Z19wcm9tb3RlMSgoX194KSkoX194KSkKLQotLy8gY2VpbAotCi1zdGF0aWMgZmxvYXQKLSAgICBfVEdfQVRUUlMKLSAgICBfX3RnX2NlaWwoZmxvYXQgX194KSB7cmV0dXJuIGNlaWxmKF9feCk7fQotCi1zdGF0aWMgZG91YmxlCi0gICAgX1RHX0FUVFJTCi0gICAgX190Z19jZWlsKGRvdWJsZSBfX3gpIHtyZXR1cm4gY2VpbChfX3gpO30KLQotc3RhdGljIGxvbmcgZG91YmxlCi0gICAgX1RHX0FUVFJTCi0gICAgX190Z19jZWlsKGxvbmcgZG91YmxlIF9feCkge3JldHVybiBjZWlsbChfX3gpO30KLQotI3VuZGVmIGNlaWwKLSNkZWZpbmUgY2VpbChfX3gpIF9fdGdfY2VpbChfX3RnX3Byb21vdGUxKChfX3gpKShfX3gpKQotCi0vLyBjb3B5c2lnbgotCi1zdGF0aWMgZmxvYXQKLSAgICBfVEdfQVRUUlMKLSAgICBfX3RnX2NvcHlzaWduKGZsb2F0IF9feCwgZmxvYXQgX195KSB7cmV0dXJuIGNvcHlzaWduZihfX3gsIF9feSk7fQotCi1zdGF0aWMgZG91YmxlCi0gICAgX1RHX0FUVFJTCi0gICAgX190Z19jb3B5c2lnbihkb3VibGUgX194LCBkb3VibGUgX195KSB7cmV0dXJuIGNvcHlzaWduKF9feCwgX195KTt9Ci0KLXN0YXRpYyBsb25nIGRvdWJsZQotICAgIF9UR19BVFRSUwotICAgIF9fdGdfY29weXNpZ24obG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHtyZXR1cm4gY29weXNpZ25sKF9feCwgX195KTt9Ci0KLSN1bmRlZiBjb3B5c2lnbgotI2RlZmluZSBjb3B5c2lnbihfX3gsIF9feSkgX190Z19jb3B5c2lnbihfX3RnX3Byb21vdGUyKChfX3gpLCAoX195KSkoX194KSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3RnX3Byb21vdGUyKChfX3gpLCAoX195KSkoX195KSkKLQotLy8gZXJmCi0KLXN0YXRpYyBmbG9hdAotICAgIF9UR19BVFRSUwotICAgIF9fdGdfZXJmKGZsb2F0IF9feCkge3JldHVybiBlcmZmKF9feCk7fQotCi1zdGF0aWMgZG91YmxlCi0gICAgX1RHX0FUVFJTCi0gICAgX190Z19lcmYoZG91YmxlIF9feCkge3JldHVybiBlcmYoX194KTt9Ci0KLXN0YXRpYyBsb25nIGRvdWJsZQotICAgIF9UR19BVFRSUwotICAgIF9fdGdfZXJmKGxvbmcgZG91YmxlIF9feCkge3JldHVybiBlcmZsKF9feCk7fQotCi0jdW5kZWYgZXJmCi0jZGVmaW5lIGVyZihfX3gpIF9fdGdfZXJmKF9fdGdfcHJvbW90ZTEoKF9feCkpKF9feCkpCi0KLS8vIGVyZmMKLQotc3RhdGljIGZsb2F0Ci0gICAgX1RHX0FUVFJTCi0gICAgX190Z19lcmZjKGZsb2F0IF9feCkge3JldHVybiBlcmZjZihfX3gpO30KLQotc3RhdGljIGRvdWJsZQotICAgIF9UR19BVFRSUwotICAgIF9fdGdfZXJmYyhkb3VibGUgX194KSB7cmV0dXJuIGVyZmMoX194KTt9Ci0KLXN0YXRpYyBsb25nIGRvdWJsZQotICAgIF9UR19BVFRSUwotICAgIF9fdGdfZXJmYyhsb25nIGRvdWJsZSBfX3gpIHtyZXR1cm4gZXJmY2woX194KTt9Ci0KLSN1bmRlZiBlcmZjCi0jZGVmaW5lIGVyZmMoX194KSBfX3RnX2VyZmMoX190Z19wcm9tb3RlMSgoX194KSkoX194KSkKLQotLy8gZXhwMgotCi1zdGF0aWMgZmxvYXQKLSAgICBfVEdfQVRUUlMKLSAgICBfX3RnX2V4cDIoZmxvYXQgX194KSB7cmV0dXJuIGV4cDJmKF9feCk7fQotCi1zdGF0aWMgZG91YmxlCi0gICAgX1RHX0FUVFJTCi0gICAgX190Z19leHAyKGRvdWJsZSBfX3gpIHtyZXR1cm4gZXhwMihfX3gpO30KLQotc3RhdGljIGxvbmcgZG91YmxlCi0gICAgX1RHX0FUVFJTCi0gICAgX190Z19leHAyKGxvbmcgZG91YmxlIF9feCkge3JldHVybiBleHAybChfX3gpO30KLQotI3VuZGVmIGV4cDIKLSNkZWZpbmUgZXhwMihfX3gpIF9fdGdfZXhwMihfX3RnX3Byb21vdGUxKChfX3gpKShfX3gpKQotCi0vLyBleHBtMQotCi1zdGF0aWMgZmxvYXQKLSAgICBfVEdfQVRUUlMKLSAgICBfX3RnX2V4cG0xKGZsb2F0IF9feCkge3JldHVybiBleHBtMWYoX194KTt9Ci0KLXN0YXRpYyBkb3VibGUKLSAgICBfVEdfQVRUUlMKLSAgICBfX3RnX2V4cG0xKGRvdWJsZSBfX3gpIHtyZXR1cm4gZXhwbTEoX194KTt9Ci0KLXN0YXRpYyBsb25nIGRvdWJsZQotICAgIF9UR19BVFRSUwotICAgIF9fdGdfZXhwbTEobG9uZyBkb3VibGUgX194KSB7cmV0dXJuIGV4cG0xbChfX3gpO30KLQotI3VuZGVmIGV4cG0xCi0jZGVmaW5lIGV4cG0xKF9feCkgX190Z19leHBtMShfX3RnX3Byb21vdGUxKChfX3gpKShfX3gpKQotCi0vLyBmZGltCi0KLXN0YXRpYyBmbG9hdAotICAgIF9UR19BVFRSUwotICAgIF9fdGdfZmRpbShmbG9hdCBfX3gsIGZsb2F0IF9feSkge3JldHVybiBmZGltZihfX3gsIF9feSk7fQotCi1zdGF0aWMgZG91YmxlCi0gICAgX1RHX0FUVFJTCi0gICAgX190Z19mZGltKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHtyZXR1cm4gZmRpbShfX3gsIF9feSk7fQotCi1zdGF0aWMgbG9uZyBkb3VibGUKLSAgICBfVEdfQVRUUlMKLSAgICBfX3RnX2ZkaW0obG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHtyZXR1cm4gZmRpbWwoX194LCBfX3kpO30KLQotI3VuZGVmIGZkaW0KLSNkZWZpbmUgZmRpbShfX3gsIF9feSkgX190Z19mZGltKF9fdGdfcHJvbW90ZTIoKF9feCksIChfX3kpKShfX3gpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3RnX3Byb21vdGUyKChfX3gpLCAoX195KSkoX195KSkKLQotLy8gZmxvb3IKLQotc3RhdGljIGZsb2F0Ci0gICAgX1RHX0FUVFJTCi0gICAgX190Z19mbG9vcihmbG9hdCBfX3gpIHtyZXR1cm4gZmxvb3JmKF9feCk7fQotCi1zdGF0aWMgZG91YmxlCi0gICAgX1RHX0FUVFJTCi0gICAgX190Z19mbG9vcihkb3VibGUgX194KSB7cmV0dXJuIGZsb29yKF9feCk7fQotCi1zdGF0aWMgbG9uZyBkb3VibGUKLSAgICBfVEdfQVRUUlMKLSAgICBfX3RnX2Zsb29yKGxvbmcgZG91YmxlIF9feCkge3JldHVybiBmbG9vcmwoX194KTt9Ci0KLSN1bmRlZiBmbG9vcgotI2RlZmluZSBmbG9vcihfX3gpIF9fdGdfZmxvb3IoX190Z19wcm9tb3RlMSgoX194KSkoX194KSkKLQotLy8gZm1hCi0KLXN0YXRpYyBmbG9hdAotICAgIF9UR19BVFRSUwotICAgIF9fdGdfZm1hKGZsb2F0IF9feCwgZmxvYXQgX195LCBmbG9hdCBfX3opCi0gICAge3JldHVybiBmbWFmKF9feCwgX195LCBfX3opO30KLQotc3RhdGljIGRvdWJsZQotICAgIF9UR19BVFRSUwotICAgIF9fdGdfZm1hKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3ksIGRvdWJsZSBfX3opCi0gICAge3JldHVybiBmbWEoX194LCBfX3ksIF9feik7fQotCi1zdGF0aWMgbG9uZyBkb3VibGUKLSAgICBfVEdfQVRUUlMKLSAgICBfX3RnX2ZtYShsb25nIGRvdWJsZSBfX3gsbG9uZyBkb3VibGUgX195LCBsb25nIGRvdWJsZSBfX3opCi0gICAge3JldHVybiBmbWFsKF9feCwgX195LCBfX3opO30KLQotI3VuZGVmIGZtYQotI2RlZmluZSBmbWEoX194LCBfX3ksIF9feikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgX190Z19mbWEoX190Z19wcm9tb3RlMygoX194KSwgKF9feSksIChfX3opKShfX3gpLCBcCi0gICAgICAgICAgICAgICAgIF9fdGdfcHJvbW90ZTMoKF9feCksIChfX3kpLCAoX196KSkoX195KSwgXAotICAgICAgICAgICAgICAgICBfX3RnX3Byb21vdGUzKChfX3gpLCAoX195KSwgKF9feikpKF9feikpCi0KLS8vIGZtYXgKLQotc3RhdGljIGZsb2F0Ci0gICAgX1RHX0FUVFJTCi0gICAgX190Z19mbWF4KGZsb2F0IF9feCwgZmxvYXQgX195KSB7cmV0dXJuIGZtYXhmKF9feCwgX195KTt9Ci0KLXN0YXRpYyBkb3VibGUKLSAgICBfVEdfQVRUUlMKLSAgICBfX3RnX2ZtYXgoZG91YmxlIF9feCwgZG91YmxlIF9feSkge3JldHVybiBmbWF4KF9feCwgX195KTt9Ci0KLXN0YXRpYyBsb25nIGRvdWJsZQotICAgIF9UR19BVFRSUwotICAgIF9fdGdfZm1heChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkge3JldHVybiBmbWF4bChfX3gsIF9feSk7fQotCi0jdW5kZWYgZm1heAotI2RlZmluZSBmbWF4KF9feCwgX195KSBfX3RnX2ZtYXgoX190Z19wcm9tb3RlMigoX194KSwgKF9feSkpKF9feCksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdGdfcHJvbW90ZTIoKF9feCksIChfX3kpKShfX3kpKQotCi0vLyBmbWluCi0KLXN0YXRpYyBmbG9hdAotICAgIF9UR19BVFRSUwotICAgIF9fdGdfZm1pbihmbG9hdCBfX3gsIGZsb2F0IF9feSkge3JldHVybiBmbWluZihfX3gsIF9feSk7fQotCi1zdGF0aWMgZG91YmxlCi0gICAgX1RHX0FUVFJTCi0gICAgX190Z19mbWluKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHtyZXR1cm4gZm1pbihfX3gsIF9feSk7fQotCi1zdGF0aWMgbG9uZyBkb3VibGUKLSAgICBfVEdfQVRUUlMKLSAgICBfX3RnX2ZtaW4obG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHtyZXR1cm4gZm1pbmwoX194LCBfX3kpO30KLQotI3VuZGVmIGZtaW4KLSNkZWZpbmUgZm1pbihfX3gsIF9feSkgX190Z19mbWluKF9fdGdfcHJvbW90ZTIoKF9feCksIChfX3kpKShfX3gpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3RnX3Byb21vdGUyKChfX3gpLCAoX195KSkoX195KSkKLQotLy8gZm1vZAotCi1zdGF0aWMgZmxvYXQKLSAgICBfVEdfQVRUUlMKLSAgICBfX3RnX2Ztb2QoZmxvYXQgX194LCBmbG9hdCBfX3kpIHtyZXR1cm4gZm1vZGYoX194LCBfX3kpO30KLQotc3RhdGljIGRvdWJsZQotICAgIF9UR19BVFRSUwotICAgIF9fdGdfZm1vZChkb3VibGUgX194LCBkb3VibGUgX195KSB7cmV0dXJuIGZtb2QoX194LCBfX3kpO30KLQotc3RhdGljIGxvbmcgZG91YmxlCi0gICAgX1RHX0FUVFJTCi0gICAgX190Z19mbW9kKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB7cmV0dXJuIGZtb2RsKF9feCwgX195KTt9Ci0KLSN1bmRlZiBmbW9kCi0jZGVmaW5lIGZtb2QoX194LCBfX3kpIF9fdGdfZm1vZChfX3RnX3Byb21vdGUyKChfX3gpLCAoX195KSkoX194KSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX190Z19wcm9tb3RlMigoX194KSwgKF9feSkpKF9feSkpCi0KLS8vIGZyZXhwCi0KLXN0YXRpYyBmbG9hdAotICAgIF9UR19BVFRSUwotICAgIF9fdGdfZnJleHAoZmxvYXQgX194LCBpbnQqIF9feSkge3JldHVybiBmcmV4cGYoX194LCBfX3kpO30KLQotc3RhdGljIGRvdWJsZQotICAgIF9UR19BVFRSUwotICAgIF9fdGdfZnJleHAoZG91YmxlIF9feCwgaW50KiBfX3kpIHtyZXR1cm4gZnJleHAoX194LCBfX3kpO30KLQotc3RhdGljIGxvbmcgZG91YmxlCi0gICAgX1RHX0FUVFJTCi0gICAgX190Z19mcmV4cChsb25nIGRvdWJsZSBfX3gsIGludCogX195KSB7cmV0dXJuIGZyZXhwbChfX3gsIF9feSk7fQotCi0jdW5kZWYgZnJleHAKLSNkZWZpbmUgZnJleHAoX194LCBfX3kpIF9fdGdfZnJleHAoX190Z19wcm9tb3RlMSgoX194KSkoX194KSwgX195KQotCi0vLyBoeXBvdAotCi1zdGF0aWMgZmxvYXQKLSAgICBfVEdfQVRUUlMKLSAgICBfX3RnX2h5cG90KGZsb2F0IF9feCwgZmxvYXQgX195KSB7cmV0dXJuIGh5cG90ZihfX3gsIF9feSk7fQotCi1zdGF0aWMgZG91YmxlCi0gICAgX1RHX0FUVFJTCi0gICAgX190Z19oeXBvdChkb3VibGUgX194LCBkb3VibGUgX195KSB7cmV0dXJuIGh5cG90KF9feCwgX195KTt9Ci0KLXN0YXRpYyBsb25nIGRvdWJsZQotICAgIF9UR19BVFRSUwotICAgIF9fdGdfaHlwb3QobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHtyZXR1cm4gaHlwb3RsKF9feCwgX195KTt9Ci0KLSN1bmRlZiBoeXBvdAotI2RlZmluZSBoeXBvdChfX3gsIF9feSkgX190Z19oeXBvdChfX3RnX3Byb21vdGUyKChfX3gpLCAoX195KSkoX194KSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3RnX3Byb21vdGUyKChfX3gpLCAoX195KSkoX195KSkKLQotLy8gaWxvZ2IKLQotc3RhdGljIGludAotICAgIF9UR19BVFRSUwotICAgIF9fdGdfaWxvZ2IoZmxvYXQgX194KSB7cmV0dXJuIGlsb2diZihfX3gpO30KLQotc3RhdGljIGludAotICAgIF9UR19BVFRSUwotICAgIF9fdGdfaWxvZ2IoZG91YmxlIF9feCkge3JldHVybiBpbG9nYihfX3gpO30KLQotc3RhdGljIGludAotICAgIF9UR19BVFRSUwotICAgIF9fdGdfaWxvZ2IobG9uZyBkb3VibGUgX194KSB7cmV0dXJuIGlsb2dibChfX3gpO30KLQotI3VuZGVmIGlsb2diCi0jZGVmaW5lIGlsb2diKF9feCkgX190Z19pbG9nYihfX3RnX3Byb21vdGUxKChfX3gpKShfX3gpKQotCi0vLyBsZGV4cAotCi1zdGF0aWMgZmxvYXQKLSAgICBfVEdfQVRUUlMKLSAgICBfX3RnX2xkZXhwKGZsb2F0IF9feCwgaW50IF9feSkge3JldHVybiBsZGV4cGYoX194LCBfX3kpO30KLQotc3RhdGljIGRvdWJsZQotICAgIF9UR19BVFRSUwotICAgIF9fdGdfbGRleHAoZG91YmxlIF9feCwgaW50IF9feSkge3JldHVybiBsZGV4cChfX3gsIF9feSk7fQotCi1zdGF0aWMgbG9uZyBkb3VibGUKLSAgICBfVEdfQVRUUlMKLSAgICBfX3RnX2xkZXhwKGxvbmcgZG91YmxlIF9feCwgaW50IF9feSkge3JldHVybiBsZGV4cGwoX194LCBfX3kpO30KLQotI3VuZGVmIGxkZXhwCi0jZGVmaW5lIGxkZXhwKF9feCwgX195KSBfX3RnX2xkZXhwKF9fdGdfcHJvbW90ZTEoKF9feCkpKF9feCksIF9feSkKLQotLy8gbGdhbW1hCi0KLXN0YXRpYyBmbG9hdAotICAgIF9UR19BVFRSUwotICAgIF9fdGdfbGdhbW1hKGZsb2F0IF9feCkge3JldHVybiBsZ2FtbWFmKF9feCk7fQotCi1zdGF0aWMgZG91YmxlCi0gICAgX1RHX0FUVFJTCi0gICAgX190Z19sZ2FtbWEoZG91YmxlIF9feCkge3JldHVybiBsZ2FtbWEoX194KTt9Ci0KLXN0YXRpYyBsb25nIGRvdWJsZQotICAgIF9UR19BVFRSUwotICAgIF9fdGdfbGdhbW1hKGxvbmcgZG91YmxlIF9feCkge3JldHVybiBsZ2FtbWFsKF9feCk7fQotCi0jdW5kZWYgbGdhbW1hCi0jZGVmaW5lIGxnYW1tYShfX3gpIF9fdGdfbGdhbW1hKF9fdGdfcHJvbW90ZTEoKF9feCkpKF9feCkpCi0KLS8vIGxscmludAotCi1zdGF0aWMgbG9uZyBsb25nCi0gICAgX1RHX0FUVFJTCi0gICAgX190Z19sbHJpbnQoZmxvYXQgX194KSB7cmV0dXJuIGxscmludGYoX194KTt9Ci0KLXN0YXRpYyBsb25nIGxvbmcKLSAgICBfVEdfQVRUUlMKLSAgICBfX3RnX2xscmludChkb3VibGUgX194KSB7cmV0dXJuIGxscmludChfX3gpO30KLQotc3RhdGljIGxvbmcgbG9uZwotICAgIF9UR19BVFRSUwotICAgIF9fdGdfbGxyaW50KGxvbmcgZG91YmxlIF9feCkge3JldHVybiBsbHJpbnRsKF9feCk7fQotCi0jdW5kZWYgbGxyaW50Ci0jZGVmaW5lIGxscmludChfX3gpIF9fdGdfbGxyaW50KF9fdGdfcHJvbW90ZTEoKF9feCkpKF9feCkpCi0KLS8vIGxscm91bmQKLQotc3RhdGljIGxvbmcgbG9uZwotICAgIF9UR19BVFRSUwotICAgIF9fdGdfbGxyb3VuZChmbG9hdCBfX3gpIHtyZXR1cm4gbGxyb3VuZGYoX194KTt9Ci0KLXN0YXRpYyBsb25nIGxvbmcKLSAgICBfVEdfQVRUUlMKLSAgICBfX3RnX2xscm91bmQoZG91YmxlIF9feCkge3JldHVybiBsbHJvdW5kKF9feCk7fQotCi1zdGF0aWMgbG9uZyBsb25nCi0gICAgX1RHX0FUVFJTCi0gICAgX190Z19sbHJvdW5kKGxvbmcgZG91YmxlIF9feCkge3JldHVybiBsbHJvdW5kbChfX3gpO30KLQotI3VuZGVmIGxscm91bmQKLSNkZWZpbmUgbGxyb3VuZChfX3gpIF9fdGdfbGxyb3VuZChfX3RnX3Byb21vdGUxKChfX3gpKShfX3gpKQotCi0vLyBsb2cxMAotCi1zdGF0aWMgZmxvYXQKLSAgICBfVEdfQVRUUlMKLSAgICBfX3RnX2xvZzEwKGZsb2F0IF9feCkge3JldHVybiBsb2cxMGYoX194KTt9Ci0KLXN0YXRpYyBkb3VibGUKLSAgICBfVEdfQVRUUlMKLSAgICBfX3RnX2xvZzEwKGRvdWJsZSBfX3gpIHtyZXR1cm4gbG9nMTAoX194KTt9Ci0KLXN0YXRpYyBsb25nIGRvdWJsZQotICAgIF9UR19BVFRSUwotICAgIF9fdGdfbG9nMTAobG9uZyBkb3VibGUgX194KSB7cmV0dXJuIGxvZzEwbChfX3gpO30KLQotI3VuZGVmIGxvZzEwCi0jZGVmaW5lIGxvZzEwKF9feCkgX190Z19sb2cxMChfX3RnX3Byb21vdGUxKChfX3gpKShfX3gpKQotCi0vLyBsb2cxcAotCi1zdGF0aWMgZmxvYXQKLSAgICBfVEdfQVRUUlMKLSAgICBfX3RnX2xvZzFwKGZsb2F0IF9feCkge3JldHVybiBsb2cxcGYoX194KTt9Ci0KLXN0YXRpYyBkb3VibGUKLSAgICBfVEdfQVRUUlMKLSAgICBfX3RnX2xvZzFwKGRvdWJsZSBfX3gpIHtyZXR1cm4gbG9nMXAoX194KTt9Ci0KLXN0YXRpYyBsb25nIGRvdWJsZQotICAgIF9UR19BVFRSUwotICAgIF9fdGdfbG9nMXAobG9uZyBkb3VibGUgX194KSB7cmV0dXJuIGxvZzFwbChfX3gpO30KLQotI3VuZGVmIGxvZzFwCi0jZGVmaW5lIGxvZzFwKF9feCkgX190Z19sb2cxcChfX3RnX3Byb21vdGUxKChfX3gpKShfX3gpKQotCi0vLyBsb2cyCi0KLXN0YXRpYyBmbG9hdAotICAgIF9UR19BVFRSUwotICAgIF9fdGdfbG9nMihmbG9hdCBfX3gpIHtyZXR1cm4gbG9nMmYoX194KTt9Ci0KLXN0YXRpYyBkb3VibGUKLSAgICBfVEdfQVRUUlMKLSAgICBfX3RnX2xvZzIoZG91YmxlIF9feCkge3JldHVybiBsb2cyKF9feCk7fQotCi1zdGF0aWMgbG9uZyBkb3VibGUKLSAgICBfVEdfQVRUUlMKLSAgICBfX3RnX2xvZzIobG9uZyBkb3VibGUgX194KSB7cmV0dXJuIGxvZzJsKF9feCk7fQotCi0jdW5kZWYgbG9nMgotI2RlZmluZSBsb2cyKF9feCkgX190Z19sb2cyKF9fdGdfcHJvbW90ZTEoKF9feCkpKF9feCkpCi0KLS8vIGxvZ2IKLQotc3RhdGljIGZsb2F0Ci0gICAgX1RHX0FUVFJTCi0gICAgX190Z19sb2diKGZsb2F0IF9feCkge3JldHVybiBsb2diZihfX3gpO30KLQotc3RhdGljIGRvdWJsZQotICAgIF9UR19BVFRSUwotICAgIF9fdGdfbG9nYihkb3VibGUgX194KSB7cmV0dXJuIGxvZ2IoX194KTt9Ci0KLXN0YXRpYyBsb25nIGRvdWJsZQotICAgIF9UR19BVFRSUwotICAgIF9fdGdfbG9nYihsb25nIGRvdWJsZSBfX3gpIHtyZXR1cm4gbG9nYmwoX194KTt9Ci0KLSN1bmRlZiBsb2diCi0jZGVmaW5lIGxvZ2IoX194KSBfX3RnX2xvZ2IoX190Z19wcm9tb3RlMSgoX194KSkoX194KSkKLQotLy8gbHJpbnQKLQotc3RhdGljIGxvbmcKLSAgICBfVEdfQVRUUlMKLSAgICBfX3RnX2xyaW50KGZsb2F0IF9feCkge3JldHVybiBscmludGYoX194KTt9Ci0KLXN0YXRpYyBsb25nCi0gICAgX1RHX0FUVFJTCi0gICAgX190Z19scmludChkb3VibGUgX194KSB7cmV0dXJuIGxyaW50KF9feCk7fQotCi1zdGF0aWMgbG9uZwotICAgIF9UR19BVFRSUwotICAgIF9fdGdfbHJpbnQobG9uZyBkb3VibGUgX194KSB7cmV0dXJuIGxyaW50bChfX3gpO30KLQotI3VuZGVmIGxyaW50Ci0jZGVmaW5lIGxyaW50KF9feCkgX190Z19scmludChfX3RnX3Byb21vdGUxKChfX3gpKShfX3gpKQotCi0vLyBscm91bmQKLQotc3RhdGljIGxvbmcKLSAgICBfVEdfQVRUUlMKLSAgICBfX3RnX2xyb3VuZChmbG9hdCBfX3gpIHtyZXR1cm4gbHJvdW5kZihfX3gpO30KLQotc3RhdGljIGxvbmcKLSAgICBfVEdfQVRUUlMKLSAgICBfX3RnX2xyb3VuZChkb3VibGUgX194KSB7cmV0dXJuIGxyb3VuZChfX3gpO30KLQotc3RhdGljIGxvbmcKLSAgICBfVEdfQVRUUlMKLSAgICBfX3RnX2xyb3VuZChsb25nIGRvdWJsZSBfX3gpIHtyZXR1cm4gbHJvdW5kbChfX3gpO30KLQotI3VuZGVmIGxyb3VuZAotI2RlZmluZSBscm91bmQoX194KSBfX3RnX2xyb3VuZChfX3RnX3Byb21vdGUxKChfX3gpKShfX3gpKQotCi0vLyBuZWFyYnlpbnQKLQotc3RhdGljIGZsb2F0Ci0gICAgX1RHX0FUVFJTCi0gICAgX190Z19uZWFyYnlpbnQoZmxvYXQgX194KSB7cmV0dXJuIG5lYXJieWludGYoX194KTt9Ci0KLXN0YXRpYyBkb3VibGUKLSAgICBfVEdfQVRUUlMKLSAgICBfX3RnX25lYXJieWludChkb3VibGUgX194KSB7cmV0dXJuIG5lYXJieWludChfX3gpO30KLQotc3RhdGljIGxvbmcgZG91YmxlCi0gICAgX1RHX0FUVFJTCi0gICAgX190Z19uZWFyYnlpbnQobG9uZyBkb3VibGUgX194KSB7cmV0dXJuIG5lYXJieWludGwoX194KTt9Ci0KLSN1bmRlZiBuZWFyYnlpbnQKLSNkZWZpbmUgbmVhcmJ5aW50KF9feCkgX190Z19uZWFyYnlpbnQoX190Z19wcm9tb3RlMSgoX194KSkoX194KSkKLQotLy8gbmV4dGFmdGVyCi0KLXN0YXRpYyBmbG9hdAotICAgIF9UR19BVFRSUwotICAgIF9fdGdfbmV4dGFmdGVyKGZsb2F0IF9feCwgZmxvYXQgX195KSB7cmV0dXJuIG5leHRhZnRlcmYoX194LCBfX3kpO30KLQotc3RhdGljIGRvdWJsZQotICAgIF9UR19BVFRSUwotICAgIF9fdGdfbmV4dGFmdGVyKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHtyZXR1cm4gbmV4dGFmdGVyKF9feCwgX195KTt9Ci0KLXN0YXRpYyBsb25nIGRvdWJsZQotICAgIF9UR19BVFRSUwotICAgIF9fdGdfbmV4dGFmdGVyKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB7cmV0dXJuIG5leHRhZnRlcmwoX194LCBfX3kpO30KLQotI3VuZGVmIG5leHRhZnRlcgotI2RlZmluZSBuZXh0YWZ0ZXIoX194LCBfX3kpIF9fdGdfbmV4dGFmdGVyKF9fdGdfcHJvbW90ZTIoKF9feCksIChfX3kpKShfX3gpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX190Z19wcm9tb3RlMigoX194KSwgKF9feSkpKF9feSkpCi0KLS8vIG5leHR0b3dhcmQKLQotc3RhdGljIGZsb2F0Ci0gICAgX1RHX0FUVFJTCi0gICAgX190Z19uZXh0dG93YXJkKGZsb2F0IF9feCwgbG9uZyBkb3VibGUgX195KSB7cmV0dXJuIG5leHR0b3dhcmRmKF9feCwgX195KTt9Ci0KLXN0YXRpYyBkb3VibGUKLSAgICBfVEdfQVRUUlMKLSAgICBfX3RnX25leHR0b3dhcmQoZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB7cmV0dXJuIG5leHR0b3dhcmQoX194LCBfX3kpO30KLQotc3RhdGljIGxvbmcgZG91YmxlCi0gICAgX1RHX0FUVFJTCi0gICAgX190Z19uZXh0dG93YXJkKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB7cmV0dXJuIG5leHR0b3dhcmRsKF9feCwgX195KTt9Ci0KLSN1bmRlZiBuZXh0dG93YXJkCi0jZGVmaW5lIG5leHR0b3dhcmQoX194LCBfX3kpIF9fdGdfbmV4dHRvd2FyZChfX3RnX3Byb21vdGUxKChfX3gpKShfX3gpLCAoX195KSkKLQotLy8gcmVtYWluZGVyCi0KLXN0YXRpYyBmbG9hdAotICAgIF9UR19BVFRSUwotICAgIF9fdGdfcmVtYWluZGVyKGZsb2F0IF9feCwgZmxvYXQgX195KSB7cmV0dXJuIHJlbWFpbmRlcmYoX194LCBfX3kpO30KLQotc3RhdGljIGRvdWJsZQotICAgIF9UR19BVFRSUwotICAgIF9fdGdfcmVtYWluZGVyKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHtyZXR1cm4gcmVtYWluZGVyKF9feCwgX195KTt9Ci0KLXN0YXRpYyBsb25nIGRvdWJsZQotICAgIF9UR19BVFRSUwotICAgIF9fdGdfcmVtYWluZGVyKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB7cmV0dXJuIHJlbWFpbmRlcmwoX194LCBfX3kpO30KLQotI3VuZGVmIHJlbWFpbmRlcgotI2RlZmluZSByZW1haW5kZXIoX194LCBfX3kpIF9fdGdfcmVtYWluZGVyKF9fdGdfcHJvbW90ZTIoKF9feCksIChfX3kpKShfX3gpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX190Z19wcm9tb3RlMigoX194KSwgKF9feSkpKF9feSkpCi0KLS8vIHJlbXF1bwotCi1zdGF0aWMgZmxvYXQKLSAgICBfVEdfQVRUUlMKLSAgICBfX3RnX3JlbXF1byhmbG9hdCBfX3gsIGZsb2F0IF9feSwgaW50KiBfX3opCi0gICAge3JldHVybiByZW1xdW9mKF9feCwgX195LCBfX3opO30KLQotc3RhdGljIGRvdWJsZQotICAgIF9UR19BVFRSUwotICAgIF9fdGdfcmVtcXVvKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3ksIGludCogX196KQotICAgIHtyZXR1cm4gcmVtcXVvKF9feCwgX195LCBfX3opO30KLQotc3RhdGljIGxvbmcgZG91YmxlCi0gICAgX1RHX0FUVFJTCi0gICAgX190Z19yZW1xdW8obG9uZyBkb3VibGUgX194LGxvbmcgZG91YmxlIF9feSwgaW50KiBfX3opCi0gICAge3JldHVybiByZW1xdW9sKF9feCwgX195LCBfX3opO30KLQotI3VuZGVmIHJlbXF1bwotI2RlZmluZSByZW1xdW8oX194LCBfX3ksIF9feikgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBfX3RnX3JlbXF1byhfX3RnX3Byb21vdGUyKChfX3gpLCAoX195KSkoX194KSwgXAotICAgICAgICAgICAgICAgICAgICBfX3RnX3Byb21vdGUyKChfX3gpLCAoX195KSkoX195KSwgXAotICAgICAgICAgICAgICAgICAgICAoX196KSkKLQotLy8gcmludAotCi1zdGF0aWMgZmxvYXQKLSAgICBfVEdfQVRUUlMKLSAgICBfX3RnX3JpbnQoZmxvYXQgX194KSB7cmV0dXJuIHJpbnRmKF9feCk7fQotCi1zdGF0aWMgZG91YmxlCi0gICAgX1RHX0FUVFJTCi0gICAgX190Z19yaW50KGRvdWJsZSBfX3gpIHtyZXR1cm4gcmludChfX3gpO30KLQotc3RhdGljIGxvbmcgZG91YmxlCi0gICAgX1RHX0FUVFJTCi0gICAgX190Z19yaW50KGxvbmcgZG91YmxlIF9feCkge3JldHVybiByaW50bChfX3gpO30KLQotI3VuZGVmIHJpbnQKLSNkZWZpbmUgcmludChfX3gpIF9fdGdfcmludChfX3RnX3Byb21vdGUxKChfX3gpKShfX3gpKQotCi0vLyByb3VuZAotCi1zdGF0aWMgZmxvYXQKLSAgICBfVEdfQVRUUlMKLSAgICBfX3RnX3JvdW5kKGZsb2F0IF9feCkge3JldHVybiByb3VuZGYoX194KTt9Ci0KLXN0YXRpYyBkb3VibGUKLSAgICBfVEdfQVRUUlMKLSAgICBfX3RnX3JvdW5kKGRvdWJsZSBfX3gpIHtyZXR1cm4gcm91bmQoX194KTt9Ci0KLXN0YXRpYyBsb25nIGRvdWJsZQotICAgIF9UR19BVFRSUwotICAgIF9fdGdfcm91bmQobG9uZyBkb3VibGUgX194KSB7cmV0dXJuIHJvdW5kbChfX3gpO30KLQotI3VuZGVmIHJvdW5kCi0jZGVmaW5lIHJvdW5kKF9feCkgX190Z19yb3VuZChfX3RnX3Byb21vdGUxKChfX3gpKShfX3gpKQotCi0vLyBzY2FsYm4KLQotc3RhdGljIGZsb2F0Ci0gICAgX1RHX0FUVFJTCi0gICAgX190Z19zY2FsYm4oZmxvYXQgX194LCBpbnQgX195KSB7cmV0dXJuIHNjYWxibmYoX194LCBfX3kpO30KLQotc3RhdGljIGRvdWJsZQotICAgIF9UR19BVFRSUwotICAgIF9fdGdfc2NhbGJuKGRvdWJsZSBfX3gsIGludCBfX3kpIHtyZXR1cm4gc2NhbGJuKF9feCwgX195KTt9Ci0KLXN0YXRpYyBsb25nIGRvdWJsZQotICAgIF9UR19BVFRSUwotICAgIF9fdGdfc2NhbGJuKGxvbmcgZG91YmxlIF9feCwgaW50IF9feSkge3JldHVybiBzY2FsYm5sKF9feCwgX195KTt9Ci0KLSN1bmRlZiBzY2FsYm4KLSNkZWZpbmUgc2NhbGJuKF9feCwgX195KSBfX3RnX3NjYWxibihfX3RnX3Byb21vdGUxKChfX3gpKShfX3gpLCBfX3kpCi0KLS8vIHNjYWxibG4KLQotc3RhdGljIGZsb2F0Ci0gICAgX1RHX0FUVFJTCi0gICAgX190Z19zY2FsYmxuKGZsb2F0IF9feCwgbG9uZyBfX3kpIHtyZXR1cm4gc2NhbGJsbmYoX194LCBfX3kpO30KLQotc3RhdGljIGRvdWJsZQotICAgIF9UR19BVFRSUwotICAgIF9fdGdfc2NhbGJsbihkb3VibGUgX194LCBsb25nIF9feSkge3JldHVybiBzY2FsYmxuKF9feCwgX195KTt9Ci0KLXN0YXRpYyBsb25nIGRvdWJsZQotICAgIF9UR19BVFRSUwotICAgIF9fdGdfc2NhbGJsbihsb25nIGRvdWJsZSBfX3gsIGxvbmcgX195KSB7cmV0dXJuIHNjYWxibG5sKF9feCwgX195KTt9Ci0KLSN1bmRlZiBzY2FsYmxuCi0jZGVmaW5lIHNjYWxibG4oX194LCBfX3kpIF9fdGdfc2NhbGJsbihfX3RnX3Byb21vdGUxKChfX3gpKShfX3gpLCBfX3kpCi0KLS8vIHRnYW1tYQotCi1zdGF0aWMgZmxvYXQKLSAgICBfVEdfQVRUUlMKLSAgICBfX3RnX3RnYW1tYShmbG9hdCBfX3gpIHtyZXR1cm4gdGdhbW1hZihfX3gpO30KLQotc3RhdGljIGRvdWJsZQotICAgIF9UR19BVFRSUwotICAgIF9fdGdfdGdhbW1hKGRvdWJsZSBfX3gpIHtyZXR1cm4gdGdhbW1hKF9feCk7fQotCi1zdGF0aWMgbG9uZyBkb3VibGUKLSAgICBfVEdfQVRUUlMKLSAgICBfX3RnX3RnYW1tYShsb25nIGRvdWJsZSBfX3gpIHtyZXR1cm4gdGdhbW1hbChfX3gpO30KLQotI3VuZGVmIHRnYW1tYQotI2RlZmluZSB0Z2FtbWEoX194KSBfX3RnX3RnYW1tYShfX3RnX3Byb21vdGUxKChfX3gpKShfX3gpKQotCi0vLyB0cnVuYwotCi1zdGF0aWMgZmxvYXQKLSAgICBfVEdfQVRUUlMKLSAgICBfX3RnX3RydW5jKGZsb2F0IF9feCkge3JldHVybiB0cnVuY2YoX194KTt9Ci0KLXN0YXRpYyBkb3VibGUKLSAgICBfVEdfQVRUUlMKLSAgICBfX3RnX3RydW5jKGRvdWJsZSBfX3gpIHtyZXR1cm4gdHJ1bmMoX194KTt9Ci0KLXN0YXRpYyBsb25nIGRvdWJsZQotICAgIF9UR19BVFRSUwotICAgIF9fdGdfdHJ1bmMobG9uZyBkb3VibGUgX194KSB7cmV0dXJuIHRydW5jbChfX3gpO30KLQotI3VuZGVmIHRydW5jCi0jZGVmaW5lIHRydW5jKF9feCkgX190Z190cnVuYyhfX3RnX3Byb21vdGUxKChfX3gpKShfX3gpKQotCi0vLyBjYXJnCi0KLXN0YXRpYyBmbG9hdAotICAgIF9UR19BVFRSUwotICAgIF9fdGdfY2FyZyhmbG9hdCBfX3gpIHtyZXR1cm4gYXRhbjJmKDAuRiwgX194KTt9Ci0KLXN0YXRpYyBkb3VibGUKLSAgICBfVEdfQVRUUlMKLSAgICBfX3RnX2NhcmcoZG91YmxlIF9feCkge3JldHVybiBhdGFuMigwLiwgX194KTt9Ci0KLXN0YXRpYyBsb25nIGRvdWJsZQotICAgIF9UR19BVFRSUwotICAgIF9fdGdfY2FyZyhsb25nIGRvdWJsZSBfX3gpIHtyZXR1cm4gYXRhbjJsKDAuTCwgX194KTt9Ci0KLXN0YXRpYyBmbG9hdAotICAgIF9UR19BVFRSUwotICAgIF9fdGdfY2FyZyhmbG9hdCBfQ29tcGxleCBfX3gpIHtyZXR1cm4gY2FyZ2YoX194KTt9Ci0KLXN0YXRpYyBkb3VibGUKLSAgICBfVEdfQVRUUlMKLSAgICBfX3RnX2NhcmcoZG91YmxlIF9Db21wbGV4IF9feCkge3JldHVybiBjYXJnKF9feCk7fQotCi1zdGF0aWMgbG9uZyBkb3VibGUKLSAgICBfVEdfQVRUUlMKLSAgICBfX3RnX2NhcmcobG9uZyBkb3VibGUgX0NvbXBsZXggX194KSB7cmV0dXJuIGNhcmdsKF9feCk7fQotCi0jdW5kZWYgY2FyZwotI2RlZmluZSBjYXJnKF9feCkgX190Z19jYXJnKF9fdGdfcHJvbW90ZTEoKF9feCkpKF9feCkpCi0KLS8vIGNpbWFnCi0KLXN0YXRpYyBmbG9hdAotICAgIF9UR19BVFRSUwotICAgIF9fdGdfY2ltYWcoZmxvYXQgX194KSB7cmV0dXJuIDA7fQotCi1zdGF0aWMgZG91YmxlCi0gICAgX1RHX0FUVFJTCi0gICAgX190Z19jaW1hZyhkb3VibGUgX194KSB7cmV0dXJuIDA7fQotCi1zdGF0aWMgbG9uZyBkb3VibGUKLSAgICBfVEdfQVRUUlMKLSAgICBfX3RnX2NpbWFnKGxvbmcgZG91YmxlIF9feCkge3JldHVybiAwO30KLQotc3RhdGljIGZsb2F0Ci0gICAgX1RHX0FUVFJTCi0gICAgX190Z19jaW1hZyhmbG9hdCBfQ29tcGxleCBfX3gpIHtyZXR1cm4gY2ltYWdmKF9feCk7fQotCi1zdGF0aWMgZG91YmxlCi0gICAgX1RHX0FUVFJTCi0gICAgX190Z19jaW1hZyhkb3VibGUgX0NvbXBsZXggX194KSB7cmV0dXJuIGNpbWFnKF9feCk7fQotCi1zdGF0aWMgbG9uZyBkb3VibGUKLSAgICBfVEdfQVRUUlMKLSAgICBfX3RnX2NpbWFnKGxvbmcgZG91YmxlIF9Db21wbGV4IF9feCkge3JldHVybiBjaW1hZ2woX194KTt9Ci0KLSN1bmRlZiBjaW1hZwotI2RlZmluZSBjaW1hZyhfX3gpIF9fdGdfY2ltYWcoX190Z19wcm9tb3RlMSgoX194KSkoX194KSkKLQotLy8gY29uagotCi1zdGF0aWMgZmxvYXQgX0NvbXBsZXgKLSAgICBfVEdfQVRUUlMKLSAgICBfX3RnX2NvbmooZmxvYXQgX194KSB7cmV0dXJuIF9feDt9Ci0KLXN0YXRpYyBkb3VibGUgX0NvbXBsZXgKLSAgICBfVEdfQVRUUlMKLSAgICBfX3RnX2NvbmooZG91YmxlIF9feCkge3JldHVybiBfX3g7fQotCi1zdGF0aWMgbG9uZyBkb3VibGUgX0NvbXBsZXgKLSAgICBfVEdfQVRUUlMKLSAgICBfX3RnX2NvbmoobG9uZyBkb3VibGUgX194KSB7cmV0dXJuIF9feDt9Ci0KLXN0YXRpYyBmbG9hdCBfQ29tcGxleAotICAgIF9UR19BVFRSUwotICAgIF9fdGdfY29uaihmbG9hdCBfQ29tcGxleCBfX3gpIHtyZXR1cm4gY29uamYoX194KTt9Ci0KLXN0YXRpYyBkb3VibGUgX0NvbXBsZXgKLSAgICBfVEdfQVRUUlMKLSAgICBfX3RnX2NvbmooZG91YmxlIF9Db21wbGV4IF9feCkge3JldHVybiBjb25qKF9feCk7fQotCi1zdGF0aWMgbG9uZyBkb3VibGUgX0NvbXBsZXgKLSAgICBfVEdfQVRUUlMKLSAgICBfX3RnX2NvbmoobG9uZyBkb3VibGUgX0NvbXBsZXggX194KSB7cmV0dXJuIGNvbmpsKF9feCk7fQotCi0jdW5kZWYgY29uagotI2RlZmluZSBjb25qKF9feCkgX190Z19jb25qKF9fdGdfcHJvbW90ZTEoKF9feCkpKF9feCkpCi0KLS8vIGNwcm9qCi0KLXN0YXRpYyBmbG9hdCBfQ29tcGxleAotICAgIF9UR19BVFRSUwotICAgIF9fdGdfY3Byb2ooZmxvYXQgX194KSB7cmV0dXJuIGNwcm9qZihfX3gpO30KLQotc3RhdGljIGRvdWJsZSBfQ29tcGxleAotICAgIF9UR19BVFRSUwotICAgIF9fdGdfY3Byb2ooZG91YmxlIF9feCkge3JldHVybiBjcHJvaihfX3gpO30KLQotc3RhdGljIGxvbmcgZG91YmxlIF9Db21wbGV4Ci0gICAgX1RHX0FUVFJTCi0gICAgX190Z19jcHJvaihsb25nIGRvdWJsZSBfX3gpIHtyZXR1cm4gY3Byb2psKF9feCk7fQotCi1zdGF0aWMgZmxvYXQgX0NvbXBsZXgKLSAgICBfVEdfQVRUUlMKLSAgICBfX3RnX2Nwcm9qKGZsb2F0IF9Db21wbGV4IF9feCkge3JldHVybiBjcHJvamYoX194KTt9Ci0KLXN0YXRpYyBkb3VibGUgX0NvbXBsZXgKLSAgICBfVEdfQVRUUlMKLSAgICBfX3RnX2Nwcm9qKGRvdWJsZSBfQ29tcGxleCBfX3gpIHtyZXR1cm4gY3Byb2ooX194KTt9Ci0KLXN0YXRpYyBsb25nIGRvdWJsZSBfQ29tcGxleAotICAgIF9UR19BVFRSUwotICAgIF9fdGdfY3Byb2oobG9uZyBkb3VibGUgX0NvbXBsZXggX194KSB7cmV0dXJuIGNwcm9qbChfX3gpO30KLQotI3VuZGVmIGNwcm9qCi0jZGVmaW5lIGNwcm9qKF9feCkgX190Z19jcHJvaihfX3RnX3Byb21vdGUxKChfX3gpKShfX3gpKQotCi0vLyBjcmVhbAotCi1zdGF0aWMgZmxvYXQKLSAgICBfVEdfQVRUUlMKLSAgICBfX3RnX2NyZWFsKGZsb2F0IF9feCkge3JldHVybiBfX3g7fQotCi1zdGF0aWMgZG91YmxlCi0gICAgX1RHX0FUVFJTCi0gICAgX190Z19jcmVhbChkb3VibGUgX194KSB7cmV0dXJuIF9feDt9Ci0KLXN0YXRpYyBsb25nIGRvdWJsZQotICAgIF9UR19BVFRSUwotICAgIF9fdGdfY3JlYWwobG9uZyBkb3VibGUgX194KSB7cmV0dXJuIF9feDt9Ci0KLXN0YXRpYyBmbG9hdAotICAgIF9UR19BVFRSUwotICAgIF9fdGdfY3JlYWwoZmxvYXQgX0NvbXBsZXggX194KSB7cmV0dXJuIGNyZWFsZihfX3gpO30KLQotc3RhdGljIGRvdWJsZQotICAgIF9UR19BVFRSUwotICAgIF9fdGdfY3JlYWwoZG91YmxlIF9Db21wbGV4IF9feCkge3JldHVybiBjcmVhbChfX3gpO30KLQotc3RhdGljIGxvbmcgZG91YmxlCi0gICAgX1RHX0FUVFJTCi0gICAgX190Z19jcmVhbChsb25nIGRvdWJsZSBfQ29tcGxleCBfX3gpIHtyZXR1cm4gY3JlYWxsKF9feCk7fQotCi0jdW5kZWYgY3JlYWwKLSNkZWZpbmUgY3JlYWwoX194KSBfX3RnX2NyZWFsKF9fdGdfcHJvbW90ZTEoKF9feCkpKF9feCkpCi0KLSN1bmRlZiBfVEdfQVRUUlNwCi0jdW5kZWYgX1RHX0FUVFJTCi0KLSNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLwotI2VuZGlmIC8qIF9fVEdNQVRIX0ggKi8KZGlmZiAtLWdpdCBhL2NsYW5nLTI1NzcxMTMvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvdG1taW50cmluLmggYi9jbGFuZy0yNTc3MTEzL2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL3RtbWludHJpbi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAyODkwLi4wMDAwMDAwCi0tLSBhL2NsYW5nLTI1NzcxMTMvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvdG1taW50cmluLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMjEgKzAsMCBAQAotLyo9PT0tLS0tIHRtbWludHJpbi5oIC0gU1NTRTMgaW50cmluc2ljcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQotICoKLSAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKLSAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCi0gKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCi0gKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCi0gKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKLSAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Ci0gKgotICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KLSAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgotICoKLSAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCi0gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKLSAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgotICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKLSAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KLSAqIFRIRSBTT0ZUV0FSRS4KLSAqCi0gKj09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09Ci0gKi8KLQotI2lmbmRlZiBfX1RNTUlOVFJJTl9ICi0jZGVmaW5lIF9fVE1NSU5UUklOX0gKLQotI2luY2x1ZGUgPHBtbWludHJpbi5oPgotCi0vKiBEZWZpbmUgdGhlIGRlZmF1bHQgYXR0cmlidXRlcyBmb3IgdGhlIGZ1bmN0aW9ucyBpbiB0aGlzIGZpbGUuICovCi0jZGVmaW5lIF9fREVGQVVMVF9GTl9BVFRSUyBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18sIF9fdGFyZ2V0X18oInNzc2UzIikpKQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9hYnNfcGk4KF9fbTY0IF9fYSkKLXsKLSAgICByZXR1cm4gKF9fbTY0KV9fYnVpbHRpbl9pYTMyX3BhYnNiKChfX3Y4cWkpX19hKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9hYnNfZXBpOChfX20xMjhpIF9fYSkKLXsKLSAgICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfcGFic2IxMjgoKF9fdjE2cWkpX19hKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fYWJzX3BpMTYoX19tNjQgX19hKQotewotICAgIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfcGFic3coKF9fdjRoaSlfX2EpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2Fic19lcGkxNihfX20xMjhpIF9fYSkKLXsKLSAgICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfcGFic3cxMjgoKF9fdjhoaSlfX2EpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9hYnNfcGkzMihfX202NCBfX2EpCi17Ci0gICAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9wYWJzZCgoX192MnNpKV9fYSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fYWJzX2VwaTMyKF9fbTEyOGkgX19hKQotewotICAgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9wYWJzZDEyOCgoX192NHNpKV9fYSk7Ci19Ci0KLSNkZWZpbmUgX21tX2FsaWducl9lcGk4KGEsIGIsIG4pIF9fZXh0ZW5zaW9uX18gKHsgXAotICAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9wYWxpZ25yMTI4KChfX3YxNnFpKShfX20xMjhpKShhKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnFpKShfX20xMjhpKShiKSwgKG4pKTsgfSkKLQotI2RlZmluZSBfbW1fYWxpZ25yX3BpOChhLCBiLCBuKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgKF9fbTY0KV9fYnVpbHRpbl9pYTMyX3BhbGlnbnIoKF9fdjhxaSkoX19tNjQpKGEpLCAoX192OHFpKShfX202NCkoYiksIChuKSk7IH0pCi0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1faGFkZF9lcGkxNihfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpCi17Ci0gICAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3BoYWRkdzEyOCgoX192OGhpKV9fYSwgKF9fdjhoaSlfX2IpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2hhZGRfZXBpMzIoX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKQotewotICAgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9waGFkZGQxMjgoKF9fdjRzaSlfX2EsIChfX3Y0c2kpX19iKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1faGFkZF9waTE2KF9fbTY0IF9fYSwgX19tNjQgX19iKQotewotICAgIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfcGhhZGR3KChfX3Y0aGkpX19hLCAoX192NGhpKV9fYik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2hhZGRfcGkzMihfX202NCBfX2EsIF9fbTY0IF9fYikKLXsKLSAgICByZXR1cm4gKF9fbTY0KV9fYnVpbHRpbl9pYTMyX3BoYWRkZCgoX192MnNpKV9fYSwgKF9fdjJzaSlfX2IpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2hhZGRzX2VwaTE2KF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikKLXsKLSAgICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfcGhhZGRzdzEyOCgoX192OGhpKV9fYSwgKF9fdjhoaSlfX2IpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9oYWRkc19waTE2KF9fbTY0IF9fYSwgX19tNjQgX19iKQotewotICAgIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfcGhhZGRzdygoX192NGhpKV9fYSwgKF9fdjRoaSlfX2IpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2hzdWJfZXBpMTYoX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKQotewotICAgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9waHN1YncxMjgoKF9fdjhoaSlfX2EsIChfX3Y4aGkpX19iKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9oc3ViX2VwaTMyKF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikKLXsKLSAgICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfcGhzdWJkMTI4KChfX3Y0c2kpX19hLCAoX192NHNpKV9fYik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2hzdWJfcGkxNihfX202NCBfX2EsIF9fbTY0IF9fYikKLXsKLSAgICByZXR1cm4gKF9fbTY0KV9fYnVpbHRpbl9pYTMyX3Boc3VidygoX192NGhpKV9fYSwgKF9fdjRoaSlfX2IpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9oc3ViX3BpMzIoX19tNjQgX19hLCBfX202NCBfX2IpCi17Ci0gICAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9waHN1YmQoKF9fdjJzaSlfX2EsIChfX3Yyc2kpX19iKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9oc3Vic19lcGkxNihfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpCi17Ci0gICAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3Boc3Vic3cxMjgoKF9fdjhoaSlfX2EsIChfX3Y4aGkpX19iKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1faHN1YnNfcGkxNihfX202NCBfX2EsIF9fbTY0IF9fYikKLXsKLSAgICByZXR1cm4gKF9fbTY0KV9fYnVpbHRpbl9pYTMyX3Boc3Vic3coKF9fdjRoaSlfX2EsIChfX3Y0aGkpX19iKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tYWRkdWJzX2VwaTE2KF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikKLXsKLSAgICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfcG1hZGR1YnN3MTI4KChfX3YxNnFpKV9fYSwgKF9fdjE2cWkpX19iKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWFkZHVic19waTE2KF9fbTY0IF9fYSwgX19tNjQgX19iKQotewotICAgIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfcG1hZGR1YnN3KChfX3Y4cWkpX19hLCAoX192OHFpKV9fYik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbXVsaHJzX2VwaTE2KF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikKLXsKLSAgICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfcG11bGhyc3cxMjgoKF9fdjhoaSlfX2EsIChfX3Y4aGkpX19iKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbXVsaHJzX3BpMTYoX19tNjQgX19hLCBfX202NCBfX2IpCi17Ci0gICAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9wbXVsaHJzdygoX192NGhpKV9fYSwgKF9fdjRoaSlfX2IpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX3NodWZmbGVfZXBpOChfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpCi17Ci0gICAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3BzaHVmYjEyOCgoX192MTZxaSlfX2EsIChfX3YxNnFpKV9fYik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX3NodWZmbGVfcGk4KF9fbTY0IF9fYSwgX19tNjQgX19iKQotewotICAgIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfcHNodWZiKChfX3Y4cWkpX19hLCAoX192OHFpKV9fYik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fc2lnbl9lcGk4KF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikKLXsKLSAgICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfcHNpZ25iMTI4KChfX3YxNnFpKV9fYSwgKF9fdjE2cWkpX19iKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9zaWduX2VwaTE2KF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikKLXsKLSAgICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfcHNpZ253MTI4KChfX3Y4aGkpX19hLCAoX192OGhpKV9fYik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fc2lnbl9lcGkzMihfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpCi17Ci0gICAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3BzaWduZDEyOCgoX192NHNpKV9fYSwgKF9fdjRzaSlfX2IpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9zaWduX3BpOChfX202NCBfX2EsIF9fbTY0IF9fYikKLXsKLSAgICByZXR1cm4gKF9fbTY0KV9fYnVpbHRpbl9pYTMyX3BzaWduYigoX192OHFpKV9fYSwgKF9fdjhxaSlfX2IpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9zaWduX3BpMTYoX19tNjQgX19hLCBfX202NCBfX2IpCi17Ci0gICAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9wc2lnbncoKF9fdjRoaSlfX2EsIChfX3Y0aGkpX19iKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fc2lnbl9waTMyKF9fbTY0IF9fYSwgX19tNjQgX19iKQotewotICAgIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfcHNpZ25kKChfX3Yyc2kpX19hLCAoX192MnNpKV9fYik7Ci19Ci0KLSN1bmRlZiBfX0RFRkFVTFRfRk5fQVRUUlMKLQotI2VuZGlmIC8qIF9fVE1NSU5UUklOX0ggKi8KZGlmZiAtLWdpdCBhL2NsYW5nLTI1NzcxMTMvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvdW53aW5kLmggYi9jbGFuZy0yNTc3MTEzL2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL3Vud2luZC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMDNkNzkyLi4wMDAwMDAwCi0tLSBhL2NsYW5nLTI1NzcxMTMvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvdW53aW5kLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyODIgKzAsMCBAQAotLyo9PT0tLS0tIHVud2luZC5oIC0gU3RhY2sgdW53aW5kaW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KLSAqCi0gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5Ci0gKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAotICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cwotICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAotICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCi0gKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgotICoKLSAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCi0gKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KLSAqCi0gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgotICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCi0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKLSAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCi0gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCi0gKiBUSEUgU09GVFdBUkUuCi0gKgotICo9PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQotICovCi0KLS8qIFNlZSAiRGF0YSBEZWZpbml0aW9ucyBmb3IgbGliZ2NjX3MiIGluIHRoZSBMaW51eCBTdGFuZGFyZCBCYXNlLiovCi0KLSNpZm5kZWYgX19DTEFOR19VTldJTkRfSAotI2RlZmluZSBfX0NMQU5HX1VOV0lORF9ICi0KLSNpZiBkZWZpbmVkKF9fQVBQTEVfXykgJiYgX19oYXNfaW5jbHVkZV9uZXh0KDx1bndpbmQuaD4pCi0vKiBEYXJ3aW4gKGZyb20gMTEueCBvbikgcHJvdmlkZSBhbiB1bndpbmQuaC4gSWYgdGhhdCdzIGF2YWlsYWJsZSwKLSAqIHVzZSBpdC4gbGlidW53aW5kIHdyYXBzIHNvbWUgb2YgaXRzIGRlZmluaXRpb25zIGluICNpZmRlZiBfR05VX1NPVVJDRSwKLSAqIHNvIGRlZmluZSB0aGF0IGFyb3VuZCB0aGUgaW5jbHVkZS4qLwotIyBpZm5kZWYgX0dOVV9TT1VSQ0UKLSMgIGRlZmluZSBfU0hPVUxEX1VOREVGSU5FX0dOVV9TT1VSQ0UKLSMgIGRlZmluZSBfR05VX1NPVVJDRQotIyBlbmRpZgotLy8gbGlidW53aW5kJ3MgdW53aW5kLmggcmVmbGVjdHMgdGhlIGN1cnJlbnQgdmlzaWJpbGl0eS4gIEhvd2V2ZXIsIE1vemlsbGEKLS8vIGJ1aWxkcyB3aXRoIC1mdmlzaWJpbGl0eT1oaWRkZW4gYW5kIHJlbGllcyBvbiBnY2MncyB1bndpbmQuaCB0byByZXNldCB0aGUKLS8vIHZpc2liaWxpdHkgdG8gZGVmYXVsdCBhbmQgZXhwb3J0IGl0cyBjb250ZW50cy4gIGdjYyBhbHNvIGFsbG93cyB1c2VycyB0bwotLy8gb3ZlcnJpZGUgaXRzIG92ZXJyaWRlIGJ5ICNkZWZpbmluZyBISURFX0VYUE9SVFMgKGJ1dCBub3RlLCB0aGlzIG9ubHkgb2JleXMKLS8vIHRoZSB1c2VyJ3MgLWZ2aXNpYmlsaXR5IHNldHRpbmc7IGl0IGRvZXNuJ3QgaGlkZSBhbnkgZXhwb3J0cyBvbiBpdHMgb3duKS4gIFdlCi0vLyBpbWl0YXRlIGdjYydzIGhlYWRlciBoZXJlOgotIyBpZmRlZiBISURFX0VYUE9SVFMKLSMgIGluY2x1ZGVfbmV4dCA8dW53aW5kLmg+Ci0jIGVsc2UKLSMgIHByYWdtYSBHQ0MgdmlzaWJpbGl0eSBwdXNoKGRlZmF1bHQpCi0jICBpbmNsdWRlX25leHQgPHVud2luZC5oPgotIyAgcHJhZ21hIEdDQyB2aXNpYmlsaXR5IHBvcAotIyBlbmRpZgotIyBpZmRlZiBfU0hPVUxEX1VOREVGSU5FX0dOVV9TT1VSQ0UKLSMgIHVuZGVmIF9HTlVfU09VUkNFCi0jICB1bmRlZiBfU0hPVUxEX1VOREVGSU5FX0dOVV9TT1VSQ0UKLSMgZW5kaWYKLSNlbHNlCi0KLSNpbmNsdWRlIDxzdGRpbnQuaD4KLQotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiIHsKLSNlbmRpZgotCi0vKiBJdCBpcyBhIGJpdCBzdHJhbmdlIGZvciBhIGhlYWRlciB0byBwbGF5IHdpdGggdGhlIHZpc2liaWxpdHkgb2YgdGhlCi0gICBzeW1ib2xzIGl0IGRlY2xhcmVzLCBidXQgdGhpcyBtYXRjaGVzIGdjYydzIGJlaGF2aW9yIGFuZCBzb21lIHByb2dyYW1zCi0gICBkZXBlbmQgb24gaXQgKi8KLSNpZm5kZWYgSElERV9FWFBPUlRTCi0jcHJhZ21hIEdDQyB2aXNpYmlsaXR5IHB1c2goZGVmYXVsdCkKLSNlbmRpZgotCi10eXBlZGVmIHVpbnRwdHJfdCBfVW53aW5kX1dvcmQ7Ci10eXBlZGVmIGludHB0cl90IF9VbndpbmRfU3dvcmQ7Ci10eXBlZGVmIHVpbnRwdHJfdCBfVW53aW5kX1B0cjsKLXR5cGVkZWYgdWludHB0cl90IF9VbndpbmRfSW50ZXJuYWxfUHRyOwotdHlwZWRlZiB1aW50NjRfdCBfVW53aW5kX0V4Y2VwdGlvbl9DbGFzczsKLQotdHlwZWRlZiBpbnRwdHJfdCBfc2xlYjEyOF90OwotdHlwZWRlZiB1aW50cHRyX3QgX3VsZWIxMjhfdDsKLQotc3RydWN0IF9VbndpbmRfQ29udGV4dDsKLXN0cnVjdCBfVW53aW5kX0V4Y2VwdGlvbjsKLXR5cGVkZWYgZW51bSB7Ci0gIF9VUkNfTk9fUkVBU09OID0gMCwKLSAgX1VSQ19GT1JFSUdOX0VYQ0VQVElPTl9DQVVHSFQgPSAxLAotCi0gIF9VUkNfRkFUQUxfUEhBU0UyX0VSUk9SID0gMiwKLSAgX1VSQ19GQVRBTF9QSEFTRTFfRVJST1IgPSAzLAotICBfVVJDX05PUk1BTF9TVE9QID0gNCwKLQotICBfVVJDX0VORF9PRl9TVEFDSyA9IDUsCi0gIF9VUkNfSEFORExFUl9GT1VORCA9IDYsCi0gIF9VUkNfSU5TVEFMTF9DT05URVhUID0gNywKLSAgX1VSQ19DT05USU5VRV9VTldJTkQgPSA4Ci19IF9VbndpbmRfUmVhc29uX0NvZGU7Ci0KLXR5cGVkZWYgZW51bSB7Ci0gIF9VQV9TRUFSQ0hfUEhBU0UgPSAxLAotICBfVUFfQ0xFQU5VUF9QSEFTRSA9IDIsCi0KLSAgX1VBX0hBTkRMRVJfRlJBTUUgPSA0LAotICBfVUFfRk9SQ0VfVU5XSU5EID0gOCwKLSAgX1VBX0VORF9PRl9TVEFDSyA9IDE2IC8qIGdjYyBleHRlbnNpb24gdG8gQysrIEFCSSAqLwotfSBfVW53aW5kX0FjdGlvbjsKLQotdHlwZWRlZiB2b2lkICgqX1Vud2luZF9FeGNlcHRpb25fQ2xlYW51cF9GbikoX1Vud2luZF9SZWFzb25fQ29kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBfVW53aW5kX0V4Y2VwdGlvbiAqKTsKLQotc3RydWN0IF9VbndpbmRfRXhjZXB0aW9uIHsKLSAgX1Vud2luZF9FeGNlcHRpb25fQ2xhc3MgZXhjZXB0aW9uX2NsYXNzOwotICBfVW53aW5kX0V4Y2VwdGlvbl9DbGVhbnVwX0ZuIGV4Y2VwdGlvbl9jbGVhbnVwOwotICBfVW53aW5kX1dvcmQgcHJpdmF0ZV8xOwotICBfVW53aW5kX1dvcmQgcHJpdmF0ZV8yOwotICAvKiBUaGUgSXRhbml1bSBBQkkgcmVxdWlyZXMgdGhhdCBfVW53aW5kX0V4Y2VwdGlvbiBvYmplY3RzIGFyZSAiZG91YmxlLXdvcmQKLSAgICogYWxpZ25lZCIuICBHQ0MgaGFzIGludGVycHJldGVkIHRoaXMgdG8gbWVhbiAidXNlIHRoZSBtYXhpbXVtIHVzZWZ1bAotICAgKiBhbGlnbm1lbnQgZm9yIHRoZSB0YXJnZXQiOyBzbyBkbyB3ZS4gKi8KLX0gX19hdHRyaWJ1dGVfXygoX19hbGlnbmVkX18pKTsKLQotdHlwZWRlZiBfVW53aW5kX1JlYXNvbl9Db2RlICgqX1Vud2luZF9TdG9wX0ZuKShpbnQsIF9VbndpbmRfQWN0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfVW53aW5kX0V4Y2VwdGlvbl9DbGFzcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IF9VbndpbmRfRXhjZXB0aW9uICosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBfVW53aW5kX0NvbnRleHQgKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqKTsKLQotdHlwZWRlZiBfVW53aW5kX1JlYXNvbl9Db2RlICgqX1Vud2luZF9QZXJzb25hbGl0eV9GbikoCi0gICAgaW50LCBfVW53aW5kX0FjdGlvbiwgX1Vud2luZF9FeGNlcHRpb25fQ2xhc3MsIHN0cnVjdCBfVW53aW5kX0V4Y2VwdGlvbiAqLAotICAgIHN0cnVjdCBfVW53aW5kX0NvbnRleHQgKik7Ci10eXBlZGVmIF9VbndpbmRfUGVyc29uYWxpdHlfRm4gX19wZXJzb25hbGl0eV9yb3V0aW5lOwotCi10eXBlZGVmIF9VbndpbmRfUmVhc29uX0NvZGUgKCpfVW53aW5kX1RyYWNlX0ZuKShzdHJ1Y3QgX1Vud2luZF9Db250ZXh0ICosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICopOwotCi0jaWYgZGVmaW5lZChfX2FybV9fKSAmJiAhZGVmaW5lZChfX0FQUExFX18pCi0KLXR5cGVkZWYgZW51bSB7Ci0gIF9VVlJTQ19DT1JFID0gMCwgICAgICAgIC8qIGludGVnZXIgcmVnaXN0ZXIgKi8KLSAgX1VWUlNDX1ZGUCA9IDEsICAgICAgICAgLyogdmZwICovCi0gIF9VVlJTQ19XTU1YRCA9IDMsICAgICAgIC8qIEludGVsIFdNTVggZGF0YSByZWdpc3RlciAqLwotICBfVVZSU0NfV01NWEMgPSA0ICAgICAgICAvKiBJbnRlbCBXTU1YIGNvbnRyb2wgcmVnaXN0ZXIgKi8KLX0gX1Vud2luZF9WUlNfUmVnQ2xhc3M7Ci0KLXR5cGVkZWYgZW51bSB7Ci0gIF9VVlJTRF9VSU5UMzIgPSAwLAotICBfVVZSU0RfVkZQWCA9IDEsCi0gIF9VVlJTRF9VSU5UNjQgPSAzLAotICBfVVZSU0RfRkxPQVQgPSA0LAotICBfVVZSU0RfRE9VQkxFID0gNQotfSBfVW53aW5kX1ZSU19EYXRhUmVwcmVzZW50YXRpb247Ci0KLXR5cGVkZWYgZW51bSB7Ci0gIF9VVlJTUl9PSyA9IDAsCi0gIF9VVlJTUl9OT1RfSU1QTEVNRU5URUQgPSAxLAotICBfVVZSU1JfRkFJTEVEID0gMgotfSBfVW53aW5kX1ZSU19SZXN1bHQ7Ci0KLV9VbndpbmRfVlJTX1Jlc3VsdCBfVW53aW5kX1ZSU19HZXQoc3RydWN0IF9VbndpbmRfQ29udGV4dCAqX19jb250ZXh0LAotICBfVW53aW5kX1ZSU19SZWdDbGFzcyBfX3JlZ2NsYXNzLAotICB1aW50MzJfdCBfX3JlZ25vLAotICBfVW53aW5kX1ZSU19EYXRhUmVwcmVzZW50YXRpb24gX19yZXByZXNlbnRhdGlvbiwKLSAgdm9pZCAqX192YWx1ZXApOwotCi1fVW53aW5kX1ZSU19SZXN1bHQgX1Vud2luZF9WUlNfU2V0KHN0cnVjdCBfVW53aW5kX0NvbnRleHQgKl9fY29udGV4dCwKLSAgX1Vud2luZF9WUlNfUmVnQ2xhc3MgX19yZWdjbGFzcywKLSAgdWludDMyX3QgX19yZWdubywKLSAgX1Vud2luZF9WUlNfRGF0YVJlcHJlc2VudGF0aW9uIF9fcmVwcmVzZW50YXRpb24sCi0gIHZvaWQgKl9fdmFsdWVwKTsKLQotc3RhdGljIF9faW5saW5lX18KLV9VbndpbmRfV29yZCBfVW53aW5kX0dldEdSKHN0cnVjdCBfVW53aW5kX0NvbnRleHQgKl9fY29udGV4dCwgaW50IF9faW5kZXgpIHsKLSAgX1Vud2luZF9Xb3JkIF9fdmFsdWU7Ci0gIF9VbndpbmRfVlJTX0dldChfX2NvbnRleHQsIF9VVlJTQ19DT1JFLCBfX2luZGV4LCBfVVZSU0RfVUlOVDMyLCAmX192YWx1ZSk7Ci0gIHJldHVybiBfX3ZhbHVlOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXwotdm9pZCBfVW53aW5kX1NldEdSKHN0cnVjdCBfVW53aW5kX0NvbnRleHQgKl9fY29udGV4dCwgaW50IF9faW5kZXgsCi0gICAgICAgICAgICAgICAgICAgX1Vud2luZF9Xb3JkIF9fdmFsdWUpIHsKLSAgX1Vud2luZF9WUlNfU2V0KF9fY29udGV4dCwgX1VWUlNDX0NPUkUsIF9faW5kZXgsIF9VVlJTRF9VSU5UMzIsICZfX3ZhbHVlKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18KLV9VbndpbmRfV29yZCBfVW53aW5kX0dldElQKHN0cnVjdCBfVW53aW5kX0NvbnRleHQgKl9fY29udGV4dCkgewotICBfVW53aW5kX1dvcmQgX19pcCA9IF9VbndpbmRfR2V0R1IoX19jb250ZXh0LCAxNSk7Ci0gIHJldHVybiBfX2lwICYgfihfVW53aW5kX1dvcmQpKDB4MSk7IC8qIFJlbW92ZSB0aHVtYiBtb2RlIGJpdC4gKi8KLX0KLQotc3RhdGljIF9faW5saW5lX18KLXZvaWQgX1Vud2luZF9TZXRJUChzdHJ1Y3QgX1Vud2luZF9Db250ZXh0ICpfX2NvbnRleHQsIF9VbndpbmRfV29yZCBfX3ZhbHVlKSB7Ci0gIF9VbndpbmRfV29yZCBfX3RodW1iX21vZGVfYml0ID0gX1Vud2luZF9HZXRHUihfX2NvbnRleHQsIDE1KSAmIDB4MTsKLSAgX1Vud2luZF9TZXRHUihfX2NvbnRleHQsIDE1LCBfX3ZhbHVlIHwgX190aHVtYl9tb2RlX2JpdCk7Ci19Ci0jZWxzZQotX1Vud2luZF9Xb3JkIF9VbndpbmRfR2V0R1Ioc3RydWN0IF9VbndpbmRfQ29udGV4dCAqLCBpbnQpOwotdm9pZCBfVW53aW5kX1NldEdSKHN0cnVjdCBfVW53aW5kX0NvbnRleHQgKiwgaW50LCBfVW53aW5kX1dvcmQpOwotCi1fVW53aW5kX1dvcmQgX1Vud2luZF9HZXRJUChzdHJ1Y3QgX1Vud2luZF9Db250ZXh0ICopOwotdm9pZCBfVW53aW5kX1NldElQKHN0cnVjdCBfVW53aW5kX0NvbnRleHQgKiwgX1Vud2luZF9Xb3JkKTsKLSNlbmRpZgotCi0KLV9VbndpbmRfV29yZCBfVW53aW5kX0dldElQSW5mbyhzdHJ1Y3QgX1Vud2luZF9Db250ZXh0ICosIGludCAqKTsKLQotX1Vud2luZF9Xb3JkIF9VbndpbmRfR2V0Q0ZBKHN0cnVjdCBfVW53aW5kX0NvbnRleHQgKik7Ci0KLV9VbndpbmRfV29yZCBfVW53aW5kX0dldEJTUChzdHJ1Y3QgX1Vud2luZF9Db250ZXh0ICopOwotCi12b2lkICpfVW53aW5kX0dldExhbmd1YWdlU3BlY2lmaWNEYXRhKHN0cnVjdCBfVW53aW5kX0NvbnRleHQgKik7Ci0KLV9VbndpbmRfUHRyIF9VbndpbmRfR2V0UmVnaW9uU3RhcnQoc3RydWN0IF9VbndpbmRfQ29udGV4dCAqKTsKLQotLyogRFdBUkYgRUggZnVuY3Rpb25zOyBjdXJyZW50bHkgbm90IGF2YWlsYWJsZSBvbiBEYXJ3aW4vQVJNICovCi0jaWYgIWRlZmluZWQoX19BUFBMRV9fKSB8fCAhZGVmaW5lZChfX2FybV9fKQotCi1fVW53aW5kX1JlYXNvbl9Db2RlIF9VbndpbmRfUmFpc2VFeGNlcHRpb24oc3RydWN0IF9VbndpbmRfRXhjZXB0aW9uICopOwotX1Vud2luZF9SZWFzb25fQ29kZSBfVW53aW5kX0ZvcmNlZFVud2luZChzdHJ1Y3QgX1Vud2luZF9FeGNlcHRpb24gKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1Vud2luZF9TdG9wX0ZuLCB2b2lkICopOwotdm9pZCBfVW53aW5kX0RlbGV0ZUV4Y2VwdGlvbihzdHJ1Y3QgX1Vud2luZF9FeGNlcHRpb24gKik7Ci12b2lkIF9VbndpbmRfUmVzdW1lKHN0cnVjdCBfVW53aW5kX0V4Y2VwdGlvbiAqKTsKLV9VbndpbmRfUmVhc29uX0NvZGUgX1Vud2luZF9SZXN1bWVfb3JfUmV0aHJvdyhzdHJ1Y3QgX1Vud2luZF9FeGNlcHRpb24gKik7Ci0KLSNlbmRpZgotCi1fVW53aW5kX1JlYXNvbl9Db2RlIF9VbndpbmRfQmFja3RyYWNlKF9VbndpbmRfVHJhY2VfRm4sIHZvaWQgKik7Ci0KLS8qIHNldGptcCgzKS9sb25nam1wKDMpIHN0dWZmICovCi10eXBlZGVmIHN0cnVjdCBTakxqX0Z1bmN0aW9uX0NvbnRleHQgKl9VbndpbmRfRnVuY3Rpb25Db250ZXh0X3Q7Ci0KLXZvaWQgX1Vud2luZF9TakxqX1JlZ2lzdGVyKF9VbndpbmRfRnVuY3Rpb25Db250ZXh0X3QpOwotdm9pZCBfVW53aW5kX1NqTGpfVW5yZWdpc3RlcihfVW53aW5kX0Z1bmN0aW9uQ29udGV4dF90KTsKLV9VbndpbmRfUmVhc29uX0NvZGUgX1Vud2luZF9TakxqX1JhaXNlRXhjZXB0aW9uKHN0cnVjdCBfVW53aW5kX0V4Y2VwdGlvbiAqKTsKLV9VbndpbmRfUmVhc29uX0NvZGUgX1Vud2luZF9TakxqX0ZvcmNlZFVud2luZChzdHJ1Y3QgX1Vud2luZF9FeGNlcHRpb24gKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfVW53aW5kX1N0b3BfRm4sIHZvaWQgKik7Ci12b2lkIF9VbndpbmRfU2pMal9SZXN1bWUoc3RydWN0IF9VbndpbmRfRXhjZXB0aW9uICopOwotX1Vud2luZF9SZWFzb25fQ29kZSBfVW53aW5kX1NqTGpfUmVzdW1lX29yX1JldGhyb3coc3RydWN0IF9VbndpbmRfRXhjZXB0aW9uICopOwotCi12b2lkICpfVW53aW5kX0ZpbmRFbmNsb3NpbmdGdW5jdGlvbih2b2lkICopOwotCi0jaWZkZWYgX19BUFBMRV9fCi0KLV9VbndpbmRfUHRyIF9VbndpbmRfR2V0RGF0YVJlbEJhc2Uoc3RydWN0IF9VbndpbmRfQ29udGV4dCAqKQotICAgIF9fYXR0cmlidXRlX18oKF9fdW5hdmFpbGFibGVfXykpOwotX1Vud2luZF9QdHIgX1Vud2luZF9HZXRUZXh0UmVsQmFzZShzdHJ1Y3QgX1Vud2luZF9Db250ZXh0ICopCi0gICAgX19hdHRyaWJ1dGVfXygoX191bmF2YWlsYWJsZV9fKSk7Ci0KLS8qIERhcndpbi1zcGVjaWZpYyBmdW5jdGlvbnMgKi8KLXZvaWQgX19yZWdpc3Rlcl9mcmFtZShjb25zdCB2b2lkICopOwotdm9pZCBfX2RlcmVnaXN0ZXJfZnJhbWUoY29uc3Qgdm9pZCAqKTsKLQotc3RydWN0IGR3YXJmX2VoX2Jhc2VzIHsKLSAgdWludHB0cl90IHRiYXNlOwotICB1aW50cHRyX3QgZGJhc2U7Ci0gIHVpbnRwdHJfdCBmdW5jOwotfTsKLXZvaWQgKl9VbndpbmRfRmluZF9GREUoY29uc3Qgdm9pZCAqLCBzdHJ1Y3QgZHdhcmZfZWhfYmFzZXMgKik7Ci0KLXZvaWQgX19yZWdpc3Rlcl9mcmFtZV9pbmZvX2Jhc2VzKGNvbnN0IHZvaWQgKiwgdm9pZCAqLCB2b2lkICosIHZvaWQgKikKLSAgX19hdHRyaWJ1dGVfXygoX191bmF2YWlsYWJsZV9fKSk7Ci12b2lkIF9fcmVnaXN0ZXJfZnJhbWVfaW5mbyhjb25zdCB2b2lkICosIHZvaWQgKikgX19hdHRyaWJ1dGVfXygoX191bmF2YWlsYWJsZV9fKSk7Ci12b2lkIF9fcmVnaXN0ZXJfZnJhbWVfaW5mb190YWJsZV9iYXNlcyhjb25zdCB2b2lkICosIHZvaWQqLCB2b2lkICosIHZvaWQgKikKLSAgX19hdHRyaWJ1dGVfXygoX191bmF2YWlsYWJsZV9fKSk7Ci12b2lkIF9fcmVnaXN0ZXJfZnJhbWVfaW5mb190YWJsZShjb25zdCB2b2lkICosIHZvaWQgKikKLSAgX19hdHRyaWJ1dGVfXygoX191bmF2YWlsYWJsZV9fKSk7Ci12b2lkIF9fcmVnaXN0ZXJfZnJhbWVfdGFibGUoY29uc3Qgdm9pZCAqKSBfX2F0dHJpYnV0ZV9fKChfX3VuYXZhaWxhYmxlX18pKTsKLXZvaWQgX19kZXJlZ2lzdGVyX2ZyYW1lX2luZm8oY29uc3Qgdm9pZCAqKSBfX2F0dHJpYnV0ZV9fKChfX3VuYXZhaWxhYmxlX18pKTsKLXZvaWQgX19kZXJlZ2lzdGVyX2ZyYW1lX2luZm9fYmFzZXMoY29uc3Qgdm9pZCAqKV9fYXR0cmlidXRlX18oKF9fdW5hdmFpbGFibGVfXykpOwotCi0jZWxzZQotCi1fVW53aW5kX1B0ciBfVW53aW5kX0dldERhdGFSZWxCYXNlKHN0cnVjdCBfVW53aW5kX0NvbnRleHQgKik7Ci1fVW53aW5kX1B0ciBfVW53aW5kX0dldFRleHRSZWxCYXNlKHN0cnVjdCBfVW53aW5kX0NvbnRleHQgKik7Ci0KLSNlbmRpZgotCi0KLSNpZm5kZWYgSElERV9FWFBPUlRTCi0jcHJhZ21hIEdDQyB2aXNpYmlsaXR5IHBvcAotI2VuZGlmCi0KLSNpZmRlZiBfX2NwbHVzcGx1cwotfQotI2VuZGlmCi0KLSNlbmRpZgotCi0jZW5kaWYgLyogX19DTEFOR19VTldJTkRfSCAqLwpkaWZmIC0tZ2l0IGEvY2xhbmctMjU3NzExMy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS92YWRlZnMuaCBiL2NsYW5nLTI1NzcxMTMvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvdmFkZWZzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdmZTlhNzQuLjAwMDAwMDAKLS0tIGEvY2xhbmctMjU3NzExMy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS92YWRlZnMuaAorKysgL2Rldi9udWxsCkBAIC0xLDY1ICswLDAgQEAKLS8qID09PS0tLS0tLS0tIHZhZGVmcy5oIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQotICoKLSAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKLSAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCi0gKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCi0gKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCi0gKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKLSAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Ci0gKgotICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KLSAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgotICoKLSAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCi0gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKLSAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgotICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKLSAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KLSAqIFRIRSBTT0ZUV0FSRS4KLSAqCi0gKj09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09Ci0gKi8KLQotLyogT25seSBpbmNsdWRlIHRoaXMgaWYgd2UgYXJlIGFpbWluZyBmb3IgTVNWQyBjb21wYXRpYmlsaXR5LiAqLwotI2lmbmRlZiBfTVNDX1ZFUgotI2luY2x1ZGVfbmV4dCA8dmFkZWZzLmg+Ci0jZWxzZQotCi0jaWZuZGVmIF9fY2xhbmdfdmFkZWZzX2gKLSNkZWZpbmUgX19jbGFuZ192YWRlZnNfaAotCi0jaW5jbHVkZV9uZXh0IDx2YWRlZnMuaD4KLQotLyogT3ZlcnJpZGUgbWFjcm9zIGZyb20gdmFkZWZzLmggd2l0aCBkZWZpbml0aW9ucyB0aGF0IHdvcmsgd2l0aCBDbGFuZy4gKi8KLSNpZmRlZiBfY3J0X3ZhX3N0YXJ0Ci0jdW5kZWYgX2NydF92YV9zdGFydAotI2RlZmluZSBfY3J0X3ZhX3N0YXJ0KGFwLCBwYXJhbSkgX19idWlsdGluX3ZhX3N0YXJ0KGFwLCBwYXJhbSkKLSNlbmRpZgotI2lmZGVmIF9jcnRfdmFfZW5kCi0jdW5kZWYgX2NydF92YV9lbmQKLSNkZWZpbmUgX2NydF92YV9lbmQoYXApICAgICAgICAgIF9fYnVpbHRpbl92YV9lbmQoYXApCi0jZW5kaWYKLSNpZmRlZiBfY3J0X3ZhX2FyZwotI3VuZGVmIF9jcnRfdmFfYXJnCi0jZGVmaW5lIF9jcnRfdmFfYXJnKGFwLCB0eXBlKSAgICBfX2J1aWx0aW5fdmFfYXJnKGFwLCB0eXBlKQotI2VuZGlmCi0KLS8qIFZTIDIwMTUgc3dpdGNoZWQgdG8gZG91YmxlIHVuZGVyc2NvcmUgbmFtZXMsIHdoaWNoIGlzIGFuIGltcHJvdmVtZW50LCBidXQgbm93Ci0gKiB3ZSBoYXZlIHRvIGludGVyY2VwdCB0aG9zZSBuYW1lcyB0b28uCi0gKi8KLSNpZmRlZiBfX2NydF92YV9zdGFydAotI3VuZGVmIF9fY3J0X3ZhX3N0YXJ0Ci0jZGVmaW5lIF9fY3J0X3ZhX3N0YXJ0KGFwLCBwYXJhbSkgX19idWlsdGluX3ZhX3N0YXJ0KGFwLCBwYXJhbSkKLSNlbmRpZgotI2lmZGVmIF9fY3J0X3ZhX2VuZAotI3VuZGVmIF9fY3J0X3ZhX2VuZAotI2RlZmluZSBfX2NydF92YV9lbmQoYXApICAgICAgICAgIF9fYnVpbHRpbl92YV9lbmQoYXApCi0jZW5kaWYKLSNpZmRlZiBfX2NydF92YV9hcmcKLSN1bmRlZiBfX2NydF92YV9hcmcKLSNkZWZpbmUgX19jcnRfdmFfYXJnKGFwLCB0eXBlKSAgICBfX2J1aWx0aW5fdmFfYXJnKGFwLCB0eXBlKQotI2VuZGlmCi0KLSNlbmRpZgotI2VuZGlmCmRpZmYgLS1naXQgYS9jbGFuZy0yNTc3MTEzL2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL3ZhcmFyZ3MuaCBiL2NsYW5nLTI1NzcxMTMvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvdmFyYXJncy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNTQ3N2QwLi4wMDAwMDAwCi0tLSBhL2NsYW5nLTI1NzcxMTMvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvdmFyYXJncy5oCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotLyo9PT0tLS0tIHZhcmFyZ3MuaCAtIFZhcmlhYmxlIGFyZ3VtZW50IGhhbmRsaW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KLSoKLSogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQotKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAotKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCi0qIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKLSogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCi0qIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Ci0qCi0qIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCi0qIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgotKgotKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgotKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKLSogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0qIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKLSogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKLSogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgotKiBUSEUgU09GVFdBUkUuCi0qCi0qPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KLSovCi0jaWZuZGVmIF9fVkFSQVJHU19ICi0jZGVmaW5lIF9fVkFSQVJHU19ICi0gICNlcnJvciAiUGxlYXNlIHVzZSA8c3RkYXJnLmg+IGluc3RlYWQgb2YgPHZhcmFyZ3MuaD4iCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2NsYW5nLTI1NzcxMTMvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvdmVjaW50cmluLmggYi9jbGFuZy0yNTc3MTEzL2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL3ZlY2ludHJpbi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYTdhY2I0Li4wMDAwMDAwCi0tLSBhL2NsYW5nLTI1NzcxMTMvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvdmVjaW50cmluLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4OTQ2ICswLDAgQEAKLS8qPT09LS0tLSB2ZWNpbnRyaW4uaCAtIFZlY3RvciBpbnRyaW5zaWNzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KLSAqCi0gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5Ci0gKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAotICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cwotICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAotICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCi0gKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgotICoKLSAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCi0gKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KLSAqCi0gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgotICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCi0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKLSAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCi0gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCi0gKiBUSEUgU09GVFdBUkUuCi0gKgotICo9PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQotICovCi0KLSNpZiBkZWZpbmVkKF9fczM5MHhfXykgJiYgZGVmaW5lZChfX1ZFQ19fKQotCi0jZGVmaW5lIF9fQVRUUlNfYWkgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQotI2RlZmluZSBfX0FUVFJTX28gX19hdHRyaWJ1dGVfXygoX19vdmVybG9hZGFibGVfXykpCi0jZGVmaW5lIF9fQVRUUlNfb19haSBfX2F0dHJpYnV0ZV9fKChfX292ZXJsb2FkYWJsZV9fLCBfX2Fsd2F5c19pbmxpbmVfXykpCi0KLSNkZWZpbmUgX19jb25zdGFudChQQVJNKSBcCi0gIF9fYXR0cmlidXRlX18oKF9fZW5hYmxlX2lmX18gKChQQVJNKSA9PSAoUEFSTSksIFwKLSAgICAgImFyZ3VtZW50IG11c3QgYmUgYSBjb25zdGFudCBpbnRlZ2VyIikpKQotI2RlZmluZSBfX2NvbnN0YW50X3JhbmdlKFBBUk0sIExPVywgSElHSCkgXAotICBfX2F0dHJpYnV0ZV9fKChfX2VuYWJsZV9pZl9fICgoUEFSTSkgPj0gKExPVykgJiYgKFBBUk0pIDw9IChISUdIKSwgXAotICAgICAiYXJndW1lbnQgbXVzdCBiZSBhIGNvbnN0YW50IGludGVnZXIgZnJvbSAiICNMT1cgIiB0byAiICNISUdIKSkpCi0jZGVmaW5lIF9fY29uc3RhbnRfcG93Ml9yYW5nZShQQVJNLCBMT1csIEhJR0gpIFwKLSAgX19hdHRyaWJ1dGVfXygoX19lbmFibGVfaWZfXyAoKFBBUk0pID49IChMT1cpICYmIChQQVJNKSA8PSAoSElHSCkgJiYgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFBBUk0pICYgKChQQVJNKSAtIDEpKSA9PSAwLCBcCi0gICAgICJhcmd1bWVudCBtdXN0IGJlIGEgY29uc3RhbnQgcG93ZXIgb2YgMiBmcm9tICIgI0xPVyAiIHRvICIgI0hJR0gpKSkKLQotLyotLSBfX2xjYmIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi1leHRlcm4gX19BVFRSU19vIHVuc2lnbmVkIGludAotX19sY2JiKGNvbnN0IHZvaWQgKl9fcHRyLCB1bnNpZ25lZCBzaG9ydCBfX2xlbikKLSAgX19jb25zdGFudF9wb3cyX3JhbmdlKF9fbGVuLCA2NCwgNDA5Nik7Ci0KLSNkZWZpbmUgX19sY2JiKFgsIFkpICgoX190eXBlb2ZfXygoX19sY2JiKSgoWCksIChZKSkpKSBcCi0gIF9fYnVpbHRpbl9zMzkwX2xjYmIoKFgpLCBfX2J1aWx0aW5fY29uc3RhbnRfcCgoWSkpPyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAoKFkpID09IDY0ID8gMCA6IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoWSkgPT0gMTI4ID8gMSA6IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoWSkgPT0gMjU2ID8gMiA6IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoWSkgPT0gNTEyID8gMyA6IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoWSkgPT0gMTAyNCA/IDQgOiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKFkpID09IDIwNDggPyA1IDogXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIChZKSA9PSA0MDk2ID8gNiA6IDApIDogMCkpCi0KLS8qLS0gdmVjX2V4dHJhY3QgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgc2lnbmVkIGNoYXIKLXZlY19leHRyYWN0KHZlY3RvciBzaWduZWQgY2hhciBfX3ZlYywgaW50IF9faW5kZXgpIHsKLSAgcmV0dXJuIF9fdmVjW19faW5kZXggJiAxNV07Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHVuc2lnbmVkIGNoYXIKLXZlY19leHRyYWN0KHZlY3RvciBib29sIGNoYXIgX192ZWMsIGludCBfX2luZGV4KSB7Ci0gIHJldHVybiBfX3ZlY1tfX2luZGV4ICYgMTVdOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB1bnNpZ25lZCBjaGFyCi12ZWNfZXh0cmFjdCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX3ZlYywgaW50IF9faW5kZXgpIHsKLSAgcmV0dXJuIF9fdmVjW19faW5kZXggJiAxNV07Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHNpZ25lZCBzaG9ydAotdmVjX2V4dHJhY3QodmVjdG9yIHNpZ25lZCBzaG9ydCBfX3ZlYywgaW50IF9faW5kZXgpIHsKLSAgcmV0dXJuIF9fdmVjW19faW5kZXggJiA3XTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdW5zaWduZWQgc2hvcnQKLXZlY19leHRyYWN0KHZlY3RvciBib29sIHNob3J0IF9fdmVjLCBpbnQgX19pbmRleCkgewotICByZXR1cm4gX192ZWNbX19pbmRleCAmIDddOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB1bnNpZ25lZCBzaG9ydAotdmVjX2V4dHJhY3QodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fdmVjLCBpbnQgX19pbmRleCkgewotICByZXR1cm4gX192ZWNbX19pbmRleCAmIDddOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBzaWduZWQgaW50Ci12ZWNfZXh0cmFjdCh2ZWN0b3Igc2lnbmVkIGludCBfX3ZlYywgaW50IF9faW5kZXgpIHsKLSAgcmV0dXJuIF9fdmVjW19faW5kZXggJiAzXTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdW5zaWduZWQgaW50Ci12ZWNfZXh0cmFjdCh2ZWN0b3IgYm9vbCBpbnQgX192ZWMsIGludCBfX2luZGV4KSB7Ci0gIHJldHVybiBfX3ZlY1tfX2luZGV4ICYgM107Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHVuc2lnbmVkIGludAotdmVjX2V4dHJhY3QodmVjdG9yIHVuc2lnbmVkIGludCBfX3ZlYywgaW50IF9faW5kZXgpIHsKLSAgcmV0dXJuIF9fdmVjW19faW5kZXggJiAzXTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgc2lnbmVkIGxvbmcgbG9uZwotdmVjX2V4dHJhY3QodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX192ZWMsIGludCBfX2luZGV4KSB7Ci0gIHJldHVybiBfX3ZlY1tfX2luZGV4ICYgMV07Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHVuc2lnbmVkIGxvbmcgbG9uZwotdmVjX2V4dHJhY3QodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fdmVjLCBpbnQgX19pbmRleCkgewotICByZXR1cm4gX192ZWNbX19pbmRleCAmIDFdOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB1bnNpZ25lZCBsb25nIGxvbmcKLXZlY19leHRyYWN0KHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX192ZWMsIGludCBfX2luZGV4KSB7Ci0gIHJldHVybiBfX3ZlY1tfX2luZGV4ICYgMV07Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGRvdWJsZQotdmVjX2V4dHJhY3QodmVjdG9yIGRvdWJsZSBfX3ZlYywgaW50IF9faW5kZXgpIHsKLSAgcmV0dXJuIF9fdmVjW19faW5kZXggJiAxXTsKLX0KLQotLyotLSB2ZWNfaW5zZXJ0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGNoYXIKLXZlY19pbnNlcnQoc2lnbmVkIGNoYXIgX19zY2FsYXIsIHZlY3RvciBzaWduZWQgY2hhciBfX3ZlYywgaW50IF9faW5kZXgpIHsKLSAgX192ZWNbX19pbmRleCAmIDE1XSA9IF9fc2NhbGFyOwotICByZXR1cm4gX192ZWM7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCi12ZWNfaW5zZXJ0KHVuc2lnbmVkIGNoYXIgX19zY2FsYXIsIHZlY3RvciBib29sIGNoYXIgX192ZWMsIGludCBfX2luZGV4KSB7Ci0gIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fbmV3dmVjID0gKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fdmVjOwotICBfX25ld3ZlY1tfX2luZGV4ICYgMTVdID0gKHVuc2lnbmVkIGNoYXIpX19zY2FsYXI7Ci0gIHJldHVybiBfX25ld3ZlYzsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKLXZlY19pbnNlcnQodW5zaWduZWQgY2hhciBfX3NjYWxhciwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX192ZWMsIGludCBfX2luZGV4KSB7Ci0gIF9fdmVjW19faW5kZXggJiAxNV0gPSBfX3NjYWxhcjsKLSAgcmV0dXJuIF9fdmVjOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIHNob3J0Ci12ZWNfaW5zZXJ0KHNpZ25lZCBzaG9ydCBfX3NjYWxhciwgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX3ZlYywgaW50IF9faW5kZXgpIHsKLSAgX192ZWNbX19pbmRleCAmIDddID0gX19zY2FsYXI7Ci0gIHJldHVybiBfX3ZlYzsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Ci12ZWNfaW5zZXJ0KHVuc2lnbmVkIHNob3J0IF9fc2NhbGFyLCB2ZWN0b3IgYm9vbCBzaG9ydCBfX3ZlYywgaW50IF9faW5kZXgpIHsKLSAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fbmV3dmVjID0gKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX3ZlYzsKLSAgX19uZXd2ZWNbX19pbmRleCAmIDddID0gKHVuc2lnbmVkIHNob3J0KV9fc2NhbGFyOwotICByZXR1cm4gX19uZXd2ZWM7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAotdmVjX2luc2VydCh1bnNpZ25lZCBzaG9ydCBfX3NjYWxhciwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fdmVjLCBpbnQgX19pbmRleCkgewotICBfX3ZlY1tfX2luZGV4ICYgN10gPSBfX3NjYWxhcjsKLSAgcmV0dXJuIF9fdmVjOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGludAotdmVjX2luc2VydChzaWduZWQgaW50IF9fc2NhbGFyLCB2ZWN0b3Igc2lnbmVkIGludCBfX3ZlYywgaW50IF9faW5kZXgpIHsKLSAgX192ZWNbX19pbmRleCAmIDNdID0gX19zY2FsYXI7Ci0gIHJldHVybiBfX3ZlYzsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAotdmVjX2luc2VydCh1bnNpZ25lZCBpbnQgX19zY2FsYXIsIHZlY3RvciBib29sIGludCBfX3ZlYywgaW50IF9faW5kZXgpIHsKLSAgdmVjdG9yIHVuc2lnbmVkIGludCBfX25ld3ZlYyA9ICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fdmVjOwotICBfX25ld3ZlY1tfX2luZGV4ICYgM10gPSBfX3NjYWxhcjsKLSAgcmV0dXJuIF9fbmV3dmVjOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Ci12ZWNfaW5zZXJ0KHVuc2lnbmVkIGludCBfX3NjYWxhciwgdmVjdG9yIHVuc2lnbmVkIGludCBfX3ZlYywgaW50IF9faW5kZXgpIHsKLSAgX192ZWNbX19pbmRleCAmIDNdID0gX19zY2FsYXI7Ci0gIHJldHVybiBfX3ZlYzsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcKLXZlY19pbnNlcnQoc2lnbmVkIGxvbmcgbG9uZyBfX3NjYWxhciwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX192ZWMsCi0gICAgICAgICAgIGludCBfX2luZGV4KSB7Ci0gIF9fdmVjW19faW5kZXggJiAxXSA9IF9fc2NhbGFyOwotICByZXR1cm4gX192ZWM7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcKLXZlY19pbnNlcnQodW5zaWduZWQgbG9uZyBsb25nIF9fc2NhbGFyLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX192ZWMsCi0gICAgICAgICAgIGludCBfX2luZGV4KSB7Ci0gIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19uZXd2ZWMgPSAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX3ZlYzsKLSAgX19uZXd2ZWNbX19pbmRleCAmIDFdID0gX19zY2FsYXI7Ci0gIHJldHVybiBfX25ld3ZlYzsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZwotdmVjX2luc2VydCh1bnNpZ25lZCBsb25nIGxvbmcgX19zY2FsYXIsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX192ZWMsCi0gICAgICAgICAgIGludCBfX2luZGV4KSB7Ci0gIF9fdmVjW19faW5kZXggJiAxXSA9IF9fc2NhbGFyOwotICByZXR1cm4gX192ZWM7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBkb3VibGUKLXZlY19pbnNlcnQoZG91YmxlIF9fc2NhbGFyLCB2ZWN0b3IgZG91YmxlIF9fdmVjLCBpbnQgX19pbmRleCkgewotICBfX3ZlY1tfX2luZGV4ICYgMV0gPSBfX3NjYWxhcjsKLSAgcmV0dXJuIF9fdmVjOwotfQotCi0vKi0tIHZlY19wcm9tb3RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgY2hhcgotdmVjX3Byb21vdGUoc2lnbmVkIGNoYXIgX19zY2FsYXIsIGludCBfX2luZGV4KSB7Ci0gIGNvbnN0IHZlY3RvciBzaWduZWQgY2hhciBfX3plcm8gPSAodmVjdG9yIHNpZ25lZCBjaGFyKTA7Ci0gIHZlY3RvciBzaWduZWQgY2hhciBfX3ZlYyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9femVybywgX196ZXJvLAotICAgIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKTsKLSAgX192ZWNbX19pbmRleCAmIDE1XSA9IF9fc2NhbGFyOwotICByZXR1cm4gX192ZWM7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCi12ZWNfcHJvbW90ZSh1bnNpZ25lZCBjaGFyIF9fc2NhbGFyLCBpbnQgX19pbmRleCkgewotICBjb25zdCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX3plcm8gPSAodmVjdG9yIHVuc2lnbmVkIGNoYXIpMDsKLSAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX192ZWMgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3plcm8sIF9femVybywKLSAgICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSk7Ci0gIF9fdmVjW19faW5kZXggJiAxNV0gPSBfX3NjYWxhcjsKLSAgcmV0dXJuIF9fdmVjOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIHNob3J0Ci12ZWNfcHJvbW90ZShzaWduZWQgc2hvcnQgX19zY2FsYXIsIGludCBfX2luZGV4KSB7Ci0gIGNvbnN0IHZlY3RvciBzaWduZWQgc2hvcnQgX196ZXJvID0gKHZlY3RvciBzaWduZWQgc2hvcnQpMDsKLSAgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX3ZlYyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9femVybywgX196ZXJvLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpOwotICBfX3ZlY1tfX2luZGV4ICYgN10gPSBfX3NjYWxhcjsKLSAgcmV0dXJuIF9fdmVjOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKLXZlY19wcm9tb3RlKHVuc2lnbmVkIHNob3J0IF9fc2NhbGFyLCBpbnQgX19pbmRleCkgewotICBjb25zdCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX196ZXJvID0gKHZlY3RvciB1bnNpZ25lZCBzaG9ydCkwOwotICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX192ZWMgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3plcm8sIF9femVybywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpOwotICBfX3ZlY1tfX2luZGV4ICYgN10gPSBfX3NjYWxhcjsKLSAgcmV0dXJuIF9fdmVjOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGludAotdmVjX3Byb21vdGUoc2lnbmVkIGludCBfX3NjYWxhciwgaW50IF9faW5kZXgpIHsKLSAgY29uc3QgdmVjdG9yIHNpZ25lZCBpbnQgX196ZXJvID0gKHZlY3RvciBzaWduZWQgaW50KTA7Ci0gIHZlY3RvciBzaWduZWQgaW50IF9fdmVjID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX196ZXJvLCBfX3plcm8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEsIC0xLCAtMSwgLTEpOwotICBfX3ZlY1tfX2luZGV4ICYgM10gPSBfX3NjYWxhcjsKLSAgcmV0dXJuIF9fdmVjOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Ci12ZWNfcHJvbW90ZSh1bnNpZ25lZCBpbnQgX19zY2FsYXIsIGludCBfX2luZGV4KSB7Ci0gIGNvbnN0IHZlY3RvciB1bnNpZ25lZCBpbnQgX196ZXJvID0gKHZlY3RvciB1bnNpZ25lZCBpbnQpMDsKLSAgdmVjdG9yIHVuc2lnbmVkIGludCBfX3ZlYyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9femVybywgX196ZXJvLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEsIC0xLCAtMSwgLTEpOwotICBfX3ZlY1tfX2luZGV4ICYgM10gPSBfX3NjYWxhcjsKLSAgcmV0dXJuIF9fdmVjOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZwotdmVjX3Byb21vdGUoc2lnbmVkIGxvbmcgbG9uZyBfX3NjYWxhciwgaW50IF9faW5kZXgpIHsKLSAgY29uc3QgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX196ZXJvID0gKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKTA7Ci0gIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fdmVjID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX196ZXJvLCBfX3plcm8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEsIC0xKTsKLSAgX192ZWNbX19pbmRleCAmIDFdID0gX19zY2FsYXI7Ci0gIHJldHVybiBfX3ZlYzsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZwotdmVjX3Byb21vdGUodW5zaWduZWQgbG9uZyBsb25nIF9fc2NhbGFyLCBpbnQgX19pbmRleCkgewotICBjb25zdCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9femVybyA9ICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKTA7Ci0gIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX192ZWMgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3plcm8sIF9femVybywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xLCAtMSk7Ci0gIF9fdmVjW19faW5kZXggJiAxXSA9IF9fc2NhbGFyOwotICByZXR1cm4gX192ZWM7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBkb3VibGUKLXZlY19wcm9tb3RlKGRvdWJsZSBfX3NjYWxhciwgaW50IF9faW5kZXgpIHsKLSAgY29uc3QgdmVjdG9yIGRvdWJsZSBfX3plcm8gPSAodmVjdG9yIGRvdWJsZSkwOwotICB2ZWN0b3IgZG91YmxlIF9fdmVjID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX196ZXJvLCBfX3plcm8sIC0xLCAtMSk7Ci0gIF9fdmVjW19faW5kZXggJiAxXSA9IF9fc2NhbGFyOwotICByZXR1cm4gX192ZWM7Ci19Ci0KLS8qLS0gdmVjX2luc2VydF9hbmRfemVybyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBjaGFyCi12ZWNfaW5zZXJ0X2FuZF96ZXJvKGNvbnN0IHNpZ25lZCBjaGFyICpfX3B0cikgewotICB2ZWN0b3Igc2lnbmVkIGNoYXIgX192ZWMgPSAodmVjdG9yIHNpZ25lZCBjaGFyKTA7Ci0gIF9fdmVjWzddID0gKl9fcHRyOwotICByZXR1cm4gX192ZWM7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCi12ZWNfaW5zZXJ0X2FuZF96ZXJvKGNvbnN0IHVuc2lnbmVkIGNoYXIgKl9fcHRyKSB7Ci0gIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fdmVjID0gKHZlY3RvciB1bnNpZ25lZCBjaGFyKTA7Ci0gIF9fdmVjWzddID0gKl9fcHRyOwotICByZXR1cm4gX192ZWM7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgc2hvcnQKLXZlY19pbnNlcnRfYW5kX3plcm8oY29uc3Qgc2lnbmVkIHNob3J0ICpfX3B0cikgewotICB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fdmVjID0gKHZlY3RvciBzaWduZWQgc2hvcnQpMDsKLSAgX192ZWNbM10gPSAqX19wdHI7Ci0gIHJldHVybiBfX3ZlYzsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Ci12ZWNfaW5zZXJ0X2FuZF96ZXJvKGNvbnN0IHVuc2lnbmVkIHNob3J0ICpfX3B0cikgewotICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX192ZWMgPSAodmVjdG9yIHVuc2lnbmVkIHNob3J0KTA7Ci0gIF9fdmVjWzNdID0gKl9fcHRyOwotICByZXR1cm4gX192ZWM7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgaW50Ci12ZWNfaW5zZXJ0X2FuZF96ZXJvKGNvbnN0IHNpZ25lZCBpbnQgKl9fcHRyKSB7Ci0gIHZlY3RvciBzaWduZWQgaW50IF9fdmVjID0gKHZlY3RvciBzaWduZWQgaW50KTA7Ci0gIF9fdmVjWzFdID0gKl9fcHRyOwotICByZXR1cm4gX192ZWM7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKLXZlY19pbnNlcnRfYW5kX3plcm8oY29uc3QgdW5zaWduZWQgaW50ICpfX3B0cikgewotICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fdmVjID0gKHZlY3RvciB1bnNpZ25lZCBpbnQpMDsKLSAgX192ZWNbMV0gPSAqX19wdHI7Ci0gIHJldHVybiBfX3ZlYzsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcKLXZlY19pbnNlcnRfYW5kX3plcm8oY29uc3Qgc2lnbmVkIGxvbmcgbG9uZyAqX19wdHIpIHsKLSAgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX192ZWMgPSAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpMDsKLSAgX192ZWNbMF0gPSAqX19wdHI7Ci0gIHJldHVybiBfX3ZlYzsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZwotdmVjX2luc2VydF9hbmRfemVybyhjb25zdCB1bnNpZ25lZCBsb25nIGxvbmcgKl9fcHRyKSB7Ci0gIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX192ZWMgPSAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZykwOwotICBfX3ZlY1swXSA9ICpfX3B0cjsKLSAgcmV0dXJuIF9fdmVjOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgZG91YmxlCi12ZWNfaW5zZXJ0X2FuZF96ZXJvKGNvbnN0IGRvdWJsZSAqX19wdHIpIHsKLSAgdmVjdG9yIGRvdWJsZSBfX3ZlYyA9ICh2ZWN0b3IgZG91YmxlKTA7Ci0gIF9fdmVjWzBdID0gKl9fcHRyOwotICByZXR1cm4gX192ZWM7Ci19Ci0KLS8qLS0gdmVjX3Blcm0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBjaGFyCi12ZWNfcGVybSh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iLAotICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19jKSB7Ci0gIHJldHVybiAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYnVpbHRpbl9zMzkwX3ZwZXJtKAotICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iLCBfX2MpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgotdmVjX3Blcm0odmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IsCi0gICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2MpIHsKLSAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2J1aWx0aW5fczM5MF92cGVybSgKLSAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYiwgX19jKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgY2hhcgotdmVjX3Blcm0odmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciBib29sIGNoYXIgX19iLAotICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19jKSB7Ci0gIHJldHVybiAodmVjdG9yIGJvb2wgY2hhcilfX2J1aWx0aW5fczM5MF92cGVybSgKLSAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYiwgX19jKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBzaG9ydAotdmVjX3Blcm0odmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBzaWduZWQgc2hvcnQgX19iLAotICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19jKSB7Ci0gIHJldHVybiAodmVjdG9yIHNpZ25lZCBzaG9ydClfX2J1aWx0aW5fczM5MF92cGVybSgKLSAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYiwgX19jKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Ci12ZWNfcGVybSh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iLAotICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19jKSB7Ci0gIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYnVpbHRpbl9zMzkwX3ZwZXJtKAotICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iLCBfX2MpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBzaG9ydAotdmVjX3Blcm0odmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IsCi0gICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2MpIHsKLSAgcmV0dXJuICh2ZWN0b3IgYm9vbCBzaG9ydClfX2J1aWx0aW5fczM5MF92cGVybSgKLSAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYiwgX19jKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBpbnQKLXZlY19wZXJtKHZlY3RvciBzaWduZWQgaW50IF9fYSwgdmVjdG9yIHNpZ25lZCBpbnQgX19iLAotICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19jKSB7Ci0gIHJldHVybiAodmVjdG9yIHNpZ25lZCBpbnQpX19idWlsdGluX3MzOTBfdnBlcm0oCi0gICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IsIF9fYyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKLXZlY19wZXJtKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYiwKLSAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYykgewotICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBpbnQpX19idWlsdGluX3MzOTBfdnBlcm0oCi0gICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IsIF9fYyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGludAotdmVjX3Blcm0odmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYiwKLSAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYykgewotICByZXR1cm4gKHZlY3RvciBib29sIGludClfX2J1aWx0aW5fczM5MF92cGVybSgKLSAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYiwgX19jKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcKLXZlY19wZXJtKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iLAotICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19jKSB7Ci0gIHJldHVybiAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19idWlsdGluX3MzOTBfdnBlcm0oCi0gICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IsIF9fYyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcKLXZlY19wZXJtKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYiwKLSAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYykgewotICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19idWlsdGluX3MzOTBfdnBlcm0oCi0gICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IsIF9fYyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGxvbmcgbG9uZwotdmVjX3Blcm0odmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYiwKLSAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYykgewotICByZXR1cm4gKHZlY3RvciBib29sIGxvbmcgbG9uZylfX2J1aWx0aW5fczM5MF92cGVybSgKLSAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYiwgX19jKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGRvdWJsZQotdmVjX3Blcm0odmVjdG9yIGRvdWJsZSBfX2EsIHZlY3RvciBkb3VibGUgX19iLAotICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19jKSB7Ci0gIHJldHVybiAodmVjdG9yIGRvdWJsZSlfX2J1aWx0aW5fczM5MF92cGVybSgKLSAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYiwgX19jKTsKLX0KLQotLyotLSB2ZWNfcGVybWkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi1leHRlcm4gX19BVFRSU19vIHZlY3RvciBzaWduZWQgbG9uZyBsb25nCi12ZWNfcGVybWkodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IsIGludCBfX2MpCi0gIF9fY29uc3RhbnRfcmFuZ2UoX19jLCAwLCAzKTsKLQotZXh0ZXJuIF9fQVRUUlNfbyB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nCi12ZWNfcGVybWkodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iLCBpbnQgX19jKQotICBfX2NvbnN0YW50X3JhbmdlKF9fYywgMCwgMyk7Ci0KLWV4dGVybiBfX0FUVFJTX28gdmVjdG9yIGJvb2wgbG9uZyBsb25nCi12ZWNfcGVybWkodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYiwgaW50IF9fYykKLSAgX19jb25zdGFudF9yYW5nZShfX2MsIDAsIDMpOwotCi1leHRlcm4gX19BVFRSU19vIHZlY3RvciBkb3VibGUKLXZlY19wZXJtaSh2ZWN0b3IgZG91YmxlIF9fYSwgdmVjdG9yIGRvdWJsZSBfX2IsIGludCBfX2MpCi0gIF9fY29uc3RhbnRfcmFuZ2UoX19jLCAwLCAzKTsKLQotI2RlZmluZSB2ZWNfcGVybWkoWCwgWSwgWikgKChfX3R5cGVvZl9fKCh2ZWNfcGVybWkpKChYKSwgKFkpLCAoWikpKSkgXAotICBfX2J1aWx0aW5fczM5MF92cGRpKCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKShYKSwgXAotICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKShZKSwgXAotICAgICAgICAgICAgICAgICAgICAgICgoKFopICYgMikgPDwgMSkgfCAoKFopICYgMSkpKQotCi0vKi0tIHZlY19zZWwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgY2hhcgotdmVjX3NlbCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iLAotICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2MpIHsKLSAgcmV0dXJuICgodmVjdG9yIHNpZ25lZCBjaGFyKV9fYyAmIF9fYikgfCAofih2ZWN0b3Igc2lnbmVkIGNoYXIpX19jICYgX19hKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBjaGFyCi12ZWNfc2VsKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IsIHZlY3RvciBib29sIGNoYXIgX19jKSB7Ci0gIHJldHVybiAoKHZlY3RvciBzaWduZWQgY2hhcilfX2MgJiBfX2IpIHwgKH4odmVjdG9yIHNpZ25lZCBjaGFyKV9fYyAmIF9fYSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGNoYXIKLXZlY19zZWwodmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciBib29sIGNoYXIgX19iLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2MpIHsKLSAgcmV0dXJuICgodmVjdG9yIGJvb2wgY2hhcilfX2MgJiBfX2IpIHwgKH4odmVjdG9yIGJvb2wgY2hhcilfX2MgJiBfX2EpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBjaGFyCi12ZWNfc2VsKHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYiwgdmVjdG9yIGJvb2wgY2hhciBfX2MpIHsKLSAgcmV0dXJuIChfX2MgJiBfX2IpIHwgKH5fX2MgJiBfX2EpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgotdmVjX3NlbCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYiwKLSAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19jKSB7Ci0gIHJldHVybiAoX19jICYgX19iKSB8ICh+X19jICYgX19hKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKLXZlY19zZWwodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IsCi0gICAgICAgIHZlY3RvciBib29sIGNoYXIgX19jKSB7Ci0gIHJldHVybiAoKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYyAmIF9fYikgfCAofih2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2MgJiBfX2EpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIHNob3J0Ci12ZWNfc2VsKHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYiwKLSAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYykgewotICByZXR1cm4gKCh2ZWN0b3Igc2lnbmVkIHNob3J0KV9fYyAmIF9fYikgfCAofih2ZWN0b3Igc2lnbmVkIHNob3J0KV9fYyAmIF9fYSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgc2hvcnQKLXZlY19zZWwodmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBzaWduZWQgc2hvcnQgX19iLAotICAgICAgICB2ZWN0b3IgYm9vbCBzaG9ydCBfX2MpIHsKLSAgcmV0dXJuICgodmVjdG9yIHNpZ25lZCBzaG9ydClfX2MgJiBfX2IpIHwgKH4odmVjdG9yIHNpZ25lZCBzaG9ydClfX2MgJiBfX2EpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBzaG9ydAotdmVjX3NlbCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciBib29sIHNob3J0IF9fYiwKLSAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYykgewotICByZXR1cm4gKCh2ZWN0b3IgYm9vbCBzaG9ydClfX2MgJiBfX2IpIHwgKH4odmVjdG9yIGJvb2wgc2hvcnQpX19jICYgX19hKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgc2hvcnQKLXZlY19zZWwodmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IsIHZlY3RvciBib29sIHNob3J0IF9fYykgewotICByZXR1cm4gKF9fYyAmIF9fYikgfCAofl9fYyAmIF9fYSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAotdmVjX3NlbCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iLAotICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19jKSB7Ci0gIHJldHVybiAoX19jICYgX19iKSB8ICh+X19jICYgX19hKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Ci12ZWNfc2VsKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IsCi0gICAgICAgIHZlY3RvciBib29sIHNob3J0IF9fYykgewotICByZXR1cm4gKCgodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYyAmIF9fYikgfAotICAgICAgICAgICh+KHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2MgJiBfX2EpKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBpbnQKLXZlY19zZWwodmVjdG9yIHNpZ25lZCBpbnQgX19hLCB2ZWN0b3Igc2lnbmVkIGludCBfX2IsCi0gICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19jKSB7Ci0gIHJldHVybiAoKHZlY3RvciBzaWduZWQgaW50KV9fYyAmIF9fYikgfCAofih2ZWN0b3Igc2lnbmVkIGludClfX2MgJiBfX2EpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGludAotdmVjX3NlbCh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYiwgdmVjdG9yIGJvb2wgaW50IF9fYykgewotICByZXR1cm4gKCh2ZWN0b3Igc2lnbmVkIGludClfX2MgJiBfX2IpIHwgKH4odmVjdG9yIHNpZ25lZCBpbnQpX19jICYgX19hKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgaW50Ci12ZWNfc2VsKHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19jKSB7Ci0gIHJldHVybiAoKHZlY3RvciBib29sIGludClfX2MgJiBfX2IpIHwgKH4odmVjdG9yIGJvb2wgaW50KV9fYyAmIF9fYSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGludAotdmVjX3NlbCh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgYm9vbCBpbnQgX19iLCB2ZWN0b3IgYm9vbCBpbnQgX19jKSB7Ci0gIHJldHVybiAoX19jICYgX19iKSB8ICh+X19jICYgX19hKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAotdmVjX3NlbCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IsCi0gICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19jKSB7Ci0gIHJldHVybiAoX19jICYgX19iKSB8ICh+X19jICYgX19hKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAotdmVjX3NlbCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IsIHZlY3RvciBib29sIGludCBfX2MpIHsKLSAgcmV0dXJuICgodmVjdG9yIHVuc2lnbmVkIGludClfX2MgJiBfX2IpIHwgKH4odmVjdG9yIHVuc2lnbmVkIGludClfX2MgJiBfX2EpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZwotdmVjX3NlbCh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYiwKLSAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2MpIHsKLSAgcmV0dXJuICgoKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYyAmIF9fYikgfAotICAgICAgICAgICh+KHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYyAmIF9fYSkpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZwotdmVjX3NlbCh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYiwKLSAgICAgICAgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYykgewotICByZXR1cm4gKCgodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19jICYgX19iKSB8Ci0gICAgICAgICAgKH4odmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19jICYgX19hKSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGxvbmcgbG9uZwotdmVjX3NlbCh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iLAotICAgICAgICB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYykgewotICByZXR1cm4gKCgodmVjdG9yIGJvb2wgbG9uZyBsb25nKV9fYyAmIF9fYikgfAotICAgICAgICAgICh+KHZlY3RvciBib29sIGxvbmcgbG9uZylfX2MgJiBfX2EpKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgbG9uZyBsb25nCi12ZWNfc2VsKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IsCi0gICAgICAgIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2MpIHsKLSAgcmV0dXJuIChfX2MgJiBfX2IpIHwgKH5fX2MgJiBfX2EpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nCi12ZWNfc2VsKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYiwKLSAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2MpIHsKLSAgcmV0dXJuIChfX2MgJiBfX2IpIHwgKH5fX2MgJiBfX2EpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nCi12ZWNfc2VsKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYiwKLSAgICAgICAgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYykgewotICByZXR1cm4gKCgodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2MgJiBfX2IpIHwKLSAgICAgICAgICAofih2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYyAmIF9fYSkpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgZG91YmxlCi12ZWNfc2VsKHZlY3RvciBkb3VibGUgX19hLCB2ZWN0b3IgZG91YmxlIF9fYiwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2MpIHsKLSAgcmV0dXJuICh2ZWN0b3IgZG91YmxlKSgoX19jICYgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19iKSB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgKH5fX2MgJiAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2EpKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGRvdWJsZQotdmVjX3NlbCh2ZWN0b3IgZG91YmxlIF9fYSwgdmVjdG9yIGRvdWJsZSBfX2IsIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2MpIHsKLSAgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2FjID0gKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19hOwotICB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYmMgPSAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2I7Ci0gIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19jYyA9ICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYzsKLSAgcmV0dXJuICh2ZWN0b3IgZG91YmxlKSgoX19jYyAmIF9fYmMpIHwgKH5fX2NjICYgX19hYykpOwotfQotCi0vKi0tIHZlY19nYXRoZXJfZWxlbWVudCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgaW50Ci12ZWNfZ2F0aGVyX2VsZW1lbnQodmVjdG9yIHNpZ25lZCBpbnQgX192ZWMsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19vZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgY29uc3Qgc2lnbmVkIGludCAqX19wdHIsIGludCBfX2luZGV4KQotICBfX2NvbnN0YW50X3JhbmdlKF9faW5kZXgsIDAsIDMpIHsKLSAgX192ZWNbX19pbmRleF0gPSAqKGNvbnN0IHNpZ25lZCBpbnQgKikoCi0gICAgKF9fSU5UUFRSX1RZUEVfXylfX3B0ciArIChfX0lOVFBUUl9UWVBFX18pX19vZmZzZXRbX19pbmRleF0pOwotICByZXR1cm4gX192ZWM7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGludAotdmVjX2dhdGhlcl9lbGVtZW50KHZlY3RvciBib29sIGludCBfX3ZlYywgdmVjdG9yIHVuc2lnbmVkIGludCBfX29mZnNldCwKLSAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgKl9fcHRyLCBpbnQgX19pbmRleCkKLSAgX19jb25zdGFudF9yYW5nZShfX2luZGV4LCAwLCAzKSB7Ci0gIF9fdmVjW19faW5kZXhdID0gKihjb25zdCB1bnNpZ25lZCBpbnQgKikoCi0gICAgKF9fSU5UUFRSX1RZUEVfXylfX3B0ciArIChfX0lOVFBUUl9UWVBFX18pX19vZmZzZXRbX19pbmRleF0pOwotICByZXR1cm4gX192ZWM7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKLXZlY19nYXRoZXJfZWxlbWVudCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fdmVjLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fb2Zmc2V0LAotICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCAqX19wdHIsIGludCBfX2luZGV4KQotICBfX2NvbnN0YW50X3JhbmdlKF9faW5kZXgsIDAsIDMpIHsKLSAgX192ZWNbX19pbmRleF0gPSAqKGNvbnN0IHVuc2lnbmVkIGludCAqKSgKLSAgICAoX19JTlRQVFJfVFlQRV9fKV9fcHRyICsgKF9fSU5UUFRSX1RZUEVfXylfX29mZnNldFtfX2luZGV4XSk7Ci0gIHJldHVybiBfX3ZlYzsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcKLXZlY19nYXRoZXJfZWxlbWVudCh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX3ZlYywKLSAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fb2Zmc2V0LAotICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpZ25lZCBsb25nIGxvbmcgKl9fcHRyLCBpbnQgX19pbmRleCkKLSAgX19jb25zdGFudF9yYW5nZShfX2luZGV4LCAwLCAxKSB7Ci0gIF9fdmVjW19faW5kZXhdID0gKihjb25zdCBzaWduZWQgbG9uZyBsb25nICopKAotICAgIChfX0lOVFBUUl9UWVBFX18pX19wdHIgKyAoX19JTlRQVFJfVFlQRV9fKV9fb2Zmc2V0W19faW5kZXhdKTsKLSAgcmV0dXJuIF9fdmVjOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBsb25nIGxvbmcKLXZlY19nYXRoZXJfZWxlbWVudCh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX192ZWMsCi0gICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX29mZnNldCwKLSAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBsb25nIGxvbmcgKl9fcHRyLCBpbnQgX19pbmRleCkKLSAgX19jb25zdGFudF9yYW5nZShfX2luZGV4LCAwLCAxKSB7Ci0gIF9fdmVjW19faW5kZXhdID0gKihjb25zdCB1bnNpZ25lZCBsb25nIGxvbmcgKikoCi0gICAgKF9fSU5UUFRSX1RZUEVfXylfX3B0ciArIChfX0lOVFBUUl9UWVBFX18pX19vZmZzZXRbX19pbmRleF0pOwotICByZXR1cm4gX192ZWM7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcKLXZlY19nYXRoZXJfZWxlbWVudCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fdmVjLAotICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19vZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgbG9uZyBsb25nICpfX3B0ciwgaW50IF9faW5kZXgpCi0gIF9fY29uc3RhbnRfcmFuZ2UoX19pbmRleCwgMCwgMSkgewotICBfX3ZlY1tfX2luZGV4XSA9ICooY29uc3QgdW5zaWduZWQgbG9uZyBsb25nICopKAotICAgIChfX0lOVFBUUl9UWVBFX18pX19wdHIgKyAoX19JTlRQVFJfVFlQRV9fKV9fb2Zmc2V0W19faW5kZXhdKTsKLSAgcmV0dXJuIF9fdmVjOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgZG91YmxlCi12ZWNfZ2F0aGVyX2VsZW1lbnQodmVjdG9yIGRvdWJsZSBfX3ZlYywgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX29mZnNldCwKLSAgICAgICAgICAgICAgICAgICBjb25zdCBkb3VibGUgKl9fcHRyLCBpbnQgX19pbmRleCkKLSAgX19jb25zdGFudF9yYW5nZShfX2luZGV4LCAwLCAxKSB7Ci0gIF9fdmVjW19faW5kZXhdID0gKihjb25zdCBkb3VibGUgKikoCi0gICAgKF9fSU5UUFRSX1RZUEVfXylfX3B0ciArIChfX0lOVFBUUl9UWVBFX18pX19vZmZzZXRbX19pbmRleF0pOwotICByZXR1cm4gX192ZWM7Ci19Ci0KLS8qLS0gdmVjX3NjYXR0ZXJfZWxlbWVudCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdm9pZAotdmVjX3NjYXR0ZXJfZWxlbWVudCh2ZWN0b3Igc2lnbmVkIGludCBfX3ZlYywgdmVjdG9yIHVuc2lnbmVkIGludCBfX29mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgc2lnbmVkIGludCAqX19wdHIsIGludCBfX2luZGV4KQotICBfX2NvbnN0YW50X3JhbmdlKF9faW5kZXgsIDAsIDMpIHsKLSAgKihzaWduZWQgaW50ICopKChfX0lOVFBUUl9UWVBFX18pX19wdHIgKyBfX29mZnNldFtfX2luZGV4XSkgPQotICAgIF9fdmVjW19faW5kZXhdOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2b2lkCi12ZWNfc2NhdHRlcl9lbGVtZW50KHZlY3RvciBib29sIGludCBfX3ZlYywgdmVjdG9yIHVuc2lnbmVkIGludCBfX29mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpfX3B0ciwgaW50IF9faW5kZXgpCi0gIF9fY29uc3RhbnRfcmFuZ2UoX19pbmRleCwgMCwgMykgewotICAqKHVuc2lnbmVkIGludCAqKSgoX19JTlRQVFJfVFlQRV9fKV9fcHRyICsgX19vZmZzZXRbX19pbmRleF0pID0KLSAgICBfX3ZlY1tfX2luZGV4XTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdm9pZAotdmVjX3NjYXR0ZXJfZWxlbWVudCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fdmVjLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fb2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKl9fcHRyLCBpbnQgX19pbmRleCkKLSAgX19jb25zdGFudF9yYW5nZShfX2luZGV4LCAwLCAzKSB7Ci0gICoodW5zaWduZWQgaW50ICopKChfX0lOVFBUUl9UWVBFX18pX19wdHIgKyBfX29mZnNldFtfX2luZGV4XSkgPQotICAgIF9fdmVjW19faW5kZXhdOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2b2lkCi12ZWNfc2NhdHRlcl9lbGVtZW50KHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fdmVjLAotICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fb2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICBzaWduZWQgbG9uZyBsb25nICpfX3B0ciwgaW50IF9faW5kZXgpCi0gIF9fY29uc3RhbnRfcmFuZ2UoX19pbmRleCwgMCwgMSkgewotICAqKHNpZ25lZCBsb25nIGxvbmcgKikoKF9fSU5UUFRSX1RZUEVfXylfX3B0ciArIF9fb2Zmc2V0W19faW5kZXhdKSA9Ci0gICAgX192ZWNbX19pbmRleF07Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZvaWQKLXZlY19zY2F0dGVyX2VsZW1lbnQodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fdmVjLAotICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fb2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgKl9fcHRyLCBpbnQgX19pbmRleCkKLSAgX19jb25zdGFudF9yYW5nZShfX2luZGV4LCAwLCAxKSB7Ci0gICoodW5zaWduZWQgbG9uZyBsb25nICopKChfX0lOVFBUUl9UWVBFX18pX19wdHIgKyBfX29mZnNldFtfX2luZGV4XSkgPQotICAgIF9fdmVjW19faW5kZXhdOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2b2lkCi12ZWNfc2NhdHRlcl9lbGVtZW50KHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX192ZWMsCi0gICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19vZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyAqX19wdHIsIGludCBfX2luZGV4KQotICBfX2NvbnN0YW50X3JhbmdlKF9faW5kZXgsIDAsIDEpIHsKLSAgKih1bnNpZ25lZCBsb25nIGxvbmcgKikoKF9fSU5UUFRSX1RZUEVfXylfX3B0ciArIF9fb2Zmc2V0W19faW5kZXhdKSA9Ci0gICAgX192ZWNbX19pbmRleF07Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZvaWQKLXZlY19zY2F0dGVyX2VsZW1lbnQodmVjdG9yIGRvdWJsZSBfX3ZlYywgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX29mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgZG91YmxlICpfX3B0ciwgaW50IF9faW5kZXgpCi0gIF9fY29uc3RhbnRfcmFuZ2UoX19pbmRleCwgMCwgMSkgewotICAqKGRvdWJsZSAqKSgoX19JTlRQVFJfVFlQRV9fKV9fcHRyICsgX19vZmZzZXRbX19pbmRleF0pID0KLSAgICBfX3ZlY1tfX2luZGV4XTsKLX0KLQotLyotLSB2ZWNfeGxkMiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGNoYXIKLXZlY194bGQyKGxvbmcgX19vZmZzZXQsIGNvbnN0IHNpZ25lZCBjaGFyICpfX3B0cikgewotICByZXR1cm4gKihjb25zdCB2ZWN0b3Igc2lnbmVkIGNoYXIgKikoKF9fSU5UUFRSX1RZUEVfXylfX3B0ciArIF9fb2Zmc2V0KTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKLXZlY194bGQyKGxvbmcgX19vZmZzZXQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKl9fcHRyKSB7Ci0gIHJldHVybiAqKGNvbnN0IHZlY3RvciB1bnNpZ25lZCBjaGFyICopKChfX0lOVFBUUl9UWVBFX18pX19wdHIgKyBfX29mZnNldCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgc2hvcnQKLXZlY194bGQyKGxvbmcgX19vZmZzZXQsIGNvbnN0IHNpZ25lZCBzaG9ydCAqX19wdHIpIHsKLSAgcmV0dXJuICooY29uc3QgdmVjdG9yIHNpZ25lZCBzaG9ydCAqKSgoX19JTlRQVFJfVFlQRV9fKV9fcHRyICsgX19vZmZzZXQpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKLXZlY194bGQyKGxvbmcgX19vZmZzZXQsIGNvbnN0IHVuc2lnbmVkIHNob3J0ICpfX3B0cikgewotICByZXR1cm4gKihjb25zdCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgKikoKF9fSU5UUFRSX1RZUEVfXylfX3B0ciArIF9fb2Zmc2V0KTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBpbnQKLXZlY194bGQyKGxvbmcgX19vZmZzZXQsIGNvbnN0IHNpZ25lZCBpbnQgKl9fcHRyKSB7Ci0gIHJldHVybiAqKGNvbnN0IHZlY3RvciBzaWduZWQgaW50ICopKChfX0lOVFBUUl9UWVBFX18pX19wdHIgKyBfX29mZnNldCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKLXZlY194bGQyKGxvbmcgX19vZmZzZXQsIGNvbnN0IHVuc2lnbmVkIGludCAqX19wdHIpIHsKLSAgcmV0dXJuICooY29uc3QgdmVjdG9yIHVuc2lnbmVkIGludCAqKSgoX19JTlRQVFJfVFlQRV9fKV9fcHRyICsgX19vZmZzZXQpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZwotdmVjX3hsZDIobG9uZyBfX29mZnNldCwgY29uc3Qgc2lnbmVkIGxvbmcgbG9uZyAqX19wdHIpIHsKLSAgcmV0dXJuICooY29uc3QgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgKikoKF9fSU5UUFRSX1RZUEVfXylfX3B0ciArIF9fb2Zmc2V0KTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZwotdmVjX3hsZDIobG9uZyBfX29mZnNldCwgY29uc3QgdW5zaWduZWQgbG9uZyBsb25nICpfX3B0cikgewotICByZXR1cm4gKihjb25zdCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nICopKChfX0lOVFBUUl9UWVBFX18pX19wdHIgKyBfX29mZnNldCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBkb3VibGUKLXZlY194bGQyKGxvbmcgX19vZmZzZXQsIGNvbnN0IGRvdWJsZSAqX19wdHIpIHsKLSAgcmV0dXJuICooY29uc3QgdmVjdG9yIGRvdWJsZSAqKSgoX19JTlRQVFJfVFlQRV9fKV9fcHRyICsgX19vZmZzZXQpOwotfQotCi0vKi0tIHZlY194bHc0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgY2hhcgotdmVjX3hsdzQobG9uZyBfX29mZnNldCwgY29uc3Qgc2lnbmVkIGNoYXIgKl9fcHRyKSB7Ci0gIHJldHVybiAqKGNvbnN0IHZlY3RvciBzaWduZWQgY2hhciAqKSgoX19JTlRQVFJfVFlQRV9fKV9fcHRyICsgX19vZmZzZXQpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgotdmVjX3hsdzQobG9uZyBfX29mZnNldCwgY29uc3QgdW5zaWduZWQgY2hhciAqX19wdHIpIHsKLSAgcmV0dXJuICooY29uc3QgdmVjdG9yIHVuc2lnbmVkIGNoYXIgKikoKF9fSU5UUFRSX1RZUEVfXylfX3B0ciArIF9fb2Zmc2V0KTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBzaG9ydAotdmVjX3hsdzQobG9uZyBfX29mZnNldCwgY29uc3Qgc2lnbmVkIHNob3J0ICpfX3B0cikgewotICByZXR1cm4gKihjb25zdCB2ZWN0b3Igc2lnbmVkIHNob3J0ICopKChfX0lOVFBUUl9UWVBFX18pX19wdHIgKyBfX29mZnNldCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAotdmVjX3hsdzQobG9uZyBfX29mZnNldCwgY29uc3QgdW5zaWduZWQgc2hvcnQgKl9fcHRyKSB7Ci0gIHJldHVybiAqKGNvbnN0IHZlY3RvciB1bnNpZ25lZCBzaG9ydCAqKSgoX19JTlRQVFJfVFlQRV9fKV9fcHRyICsgX19vZmZzZXQpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGludAotdmVjX3hsdzQobG9uZyBfX29mZnNldCwgY29uc3Qgc2lnbmVkIGludCAqX19wdHIpIHsKLSAgcmV0dXJuICooY29uc3QgdmVjdG9yIHNpZ25lZCBpbnQgKikoKF9fSU5UUFRSX1RZUEVfXylfX3B0ciArIF9fb2Zmc2V0KTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAotdmVjX3hsdzQobG9uZyBfX29mZnNldCwgY29uc3QgdW5zaWduZWQgaW50ICpfX3B0cikgewotICByZXR1cm4gKihjb25zdCB2ZWN0b3IgdW5zaWduZWQgaW50ICopKChfX0lOVFBUUl9UWVBFX18pX19wdHIgKyBfX29mZnNldCk7Ci19Ci0KLS8qLS0gdmVjX3hzdGQyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdm9pZAotdmVjX3hzdGQyKHZlY3RvciBzaWduZWQgY2hhciBfX3ZlYywgbG9uZyBfX29mZnNldCwgc2lnbmVkIGNoYXIgKl9fcHRyKSB7Ci0gICoodmVjdG9yIHNpZ25lZCBjaGFyICopKChfX0lOVFBUUl9UWVBFX18pX19wdHIgKyBfX29mZnNldCkgPSBfX3ZlYzsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdm9pZAotdmVjX3hzdGQyKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fdmVjLCBsb25nIF9fb2Zmc2V0LCB1bnNpZ25lZCBjaGFyICpfX3B0cikgewotICAqKHZlY3RvciB1bnNpZ25lZCBjaGFyICopKChfX0lOVFBUUl9UWVBFX18pX19wdHIgKyBfX29mZnNldCkgPSBfX3ZlYzsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdm9pZAotdmVjX3hzdGQyKHZlY3RvciBzaWduZWQgc2hvcnQgX192ZWMsIGxvbmcgX19vZmZzZXQsIHNpZ25lZCBzaG9ydCAqX19wdHIpIHsKLSAgKih2ZWN0b3Igc2lnbmVkIHNob3J0ICopKChfX0lOVFBUUl9UWVBFX18pX19wdHIgKyBfX29mZnNldCkgPSBfX3ZlYzsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdm9pZAotdmVjX3hzdGQyKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX3ZlYywgbG9uZyBfX29mZnNldCwgdW5zaWduZWQgc2hvcnQgKl9fcHRyKSB7Ci0gICoodmVjdG9yIHVuc2lnbmVkIHNob3J0ICopKChfX0lOVFBUUl9UWVBFX18pX19wdHIgKyBfX29mZnNldCkgPSBfX3ZlYzsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdm9pZAotdmVjX3hzdGQyKHZlY3RvciBzaWduZWQgaW50IF9fdmVjLCBsb25nIF9fb2Zmc2V0LCBzaWduZWQgaW50ICpfX3B0cikgewotICAqKHZlY3RvciBzaWduZWQgaW50ICopKChfX0lOVFBUUl9UWVBFX18pX19wdHIgKyBfX29mZnNldCkgPSBfX3ZlYzsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdm9pZAotdmVjX3hzdGQyKHZlY3RvciB1bnNpZ25lZCBpbnQgX192ZWMsIGxvbmcgX19vZmZzZXQsIHVuc2lnbmVkIGludCAqX19wdHIpIHsKLSAgKih2ZWN0b3IgdW5zaWduZWQgaW50ICopKChfX0lOVFBUUl9UWVBFX18pX19wdHIgKyBfX29mZnNldCkgPSBfX3ZlYzsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdm9pZAotdmVjX3hzdGQyKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fdmVjLCBsb25nIF9fb2Zmc2V0LAotICAgICAgICAgIHNpZ25lZCBsb25nIGxvbmcgKl9fcHRyKSB7Ci0gICoodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgKikoKF9fSU5UUFRSX1RZUEVfXylfX3B0ciArIF9fb2Zmc2V0KSA9IF9fdmVjOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2b2lkCi12ZWNfeHN0ZDIodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX3ZlYywgbG9uZyBfX29mZnNldCwKLSAgICAgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgKl9fcHRyKSB7Ci0gICoodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyAqKSgoX19JTlRQVFJfVFlQRV9fKV9fcHRyICsgX19vZmZzZXQpID0KLSAgICBfX3ZlYzsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdm9pZAotdmVjX3hzdGQyKHZlY3RvciBkb3VibGUgX192ZWMsIGxvbmcgX19vZmZzZXQsIGRvdWJsZSAqX19wdHIpIHsKLSAgKih2ZWN0b3IgZG91YmxlICopKChfX0lOVFBUUl9UWVBFX18pX19wdHIgKyBfX29mZnNldCkgPSBfX3ZlYzsKLX0KLQotLyotLSB2ZWNfeHN0dzQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2b2lkCi12ZWNfeHN0dzQodmVjdG9yIHNpZ25lZCBjaGFyIF9fdmVjLCBsb25nIF9fb2Zmc2V0LCBzaWduZWQgY2hhciAqX19wdHIpIHsKLSAgKih2ZWN0b3Igc2lnbmVkIGNoYXIgKikoKF9fSU5UUFRSX1RZUEVfXylfX3B0ciArIF9fb2Zmc2V0KSA9IF9fdmVjOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2b2lkCi12ZWNfeHN0dzQodmVjdG9yIHVuc2lnbmVkIGNoYXIgX192ZWMsIGxvbmcgX19vZmZzZXQsIHVuc2lnbmVkIGNoYXIgKl9fcHRyKSB7Ci0gICoodmVjdG9yIHVuc2lnbmVkIGNoYXIgKikoKF9fSU5UUFRSX1RZUEVfXylfX3B0ciArIF9fb2Zmc2V0KSA9IF9fdmVjOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2b2lkCi12ZWNfeHN0dzQodmVjdG9yIHNpZ25lZCBzaG9ydCBfX3ZlYywgbG9uZyBfX29mZnNldCwgc2lnbmVkIHNob3J0ICpfX3B0cikgewotICAqKHZlY3RvciBzaWduZWQgc2hvcnQgKikoKF9fSU5UUFRSX1RZUEVfXylfX3B0ciArIF9fb2Zmc2V0KSA9IF9fdmVjOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2b2lkCi12ZWNfeHN0dzQodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fdmVjLCBsb25nIF9fb2Zmc2V0LCB1bnNpZ25lZCBzaG9ydCAqX19wdHIpIHsKLSAgKih2ZWN0b3IgdW5zaWduZWQgc2hvcnQgKikoKF9fSU5UUFRSX1RZUEVfXylfX3B0ciArIF9fb2Zmc2V0KSA9IF9fdmVjOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2b2lkCi12ZWNfeHN0dzQodmVjdG9yIHNpZ25lZCBpbnQgX192ZWMsIGxvbmcgX19vZmZzZXQsIHNpZ25lZCBpbnQgKl9fcHRyKSB7Ci0gICoodmVjdG9yIHNpZ25lZCBpbnQgKikoKF9fSU5UUFRSX1RZUEVfXylfX3B0ciArIF9fb2Zmc2V0KSA9IF9fdmVjOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2b2lkCi12ZWNfeHN0dzQodmVjdG9yIHVuc2lnbmVkIGludCBfX3ZlYywgbG9uZyBfX29mZnNldCwgdW5zaWduZWQgaW50ICpfX3B0cikgewotICAqKHZlY3RvciB1bnNpZ25lZCBpbnQgKikoKF9fSU5UUFRSX1RZUEVfXylfX3B0ciArIF9fb2Zmc2V0KSA9IF9fdmVjOwotfQotCi0vKi0tIHZlY19sb2FkX2JuZHJ5IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLWV4dGVybiBfX0FUVFJTX28gdmVjdG9yIHNpZ25lZCBjaGFyCi12ZWNfbG9hZF9ibmRyeShjb25zdCBzaWduZWQgY2hhciAqX19wdHIsIHVuc2lnbmVkIHNob3J0IF9fbGVuKQotICBfX2NvbnN0YW50X3BvdzJfcmFuZ2UoX19sZW4sIDY0LCA0MDk2KTsKLQotZXh0ZXJuIF9fQVRUUlNfbyB2ZWN0b3IgdW5zaWduZWQgY2hhcgotdmVjX2xvYWRfYm5kcnkoY29uc3QgdW5zaWduZWQgY2hhciAqX19wdHIsIHVuc2lnbmVkIHNob3J0IF9fbGVuKQotICBfX2NvbnN0YW50X3BvdzJfcmFuZ2UoX19sZW4sIDY0LCA0MDk2KTsKLQotZXh0ZXJuIF9fQVRUUlNfbyB2ZWN0b3Igc2lnbmVkIHNob3J0Ci12ZWNfbG9hZF9ibmRyeShjb25zdCBzaWduZWQgc2hvcnQgKl9fcHRyLCB1bnNpZ25lZCBzaG9ydCBfX2xlbikKLSAgX19jb25zdGFudF9wb3cyX3JhbmdlKF9fbGVuLCA2NCwgNDA5Nik7Ci0KLWV4dGVybiBfX0FUVFJTX28gdmVjdG9yIHVuc2lnbmVkIHNob3J0Ci12ZWNfbG9hZF9ibmRyeShjb25zdCB1bnNpZ25lZCBzaG9ydCAqX19wdHIsIHVuc2lnbmVkIHNob3J0IF9fbGVuKQotICBfX2NvbnN0YW50X3BvdzJfcmFuZ2UoX19sZW4sIDY0LCA0MDk2KTsKLQotZXh0ZXJuIF9fQVRUUlNfbyB2ZWN0b3Igc2lnbmVkIGludAotdmVjX2xvYWRfYm5kcnkoY29uc3Qgc2lnbmVkIGludCAqX19wdHIsIHVuc2lnbmVkIHNob3J0IF9fbGVuKQotICBfX2NvbnN0YW50X3BvdzJfcmFuZ2UoX19sZW4sIDY0LCA0MDk2KTsKLQotZXh0ZXJuIF9fQVRUUlNfbyB2ZWN0b3IgdW5zaWduZWQgaW50Ci12ZWNfbG9hZF9ibmRyeShjb25zdCB1bnNpZ25lZCBpbnQgKl9fcHRyLCB1bnNpZ25lZCBzaG9ydCBfX2xlbikKLSAgX19jb25zdGFudF9wb3cyX3JhbmdlKF9fbGVuLCA2NCwgNDA5Nik7Ci0KLWV4dGVybiBfX0FUVFJTX28gdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcKLXZlY19sb2FkX2JuZHJ5KGNvbnN0IHNpZ25lZCBsb25nIGxvbmcgKl9fcHRyLCB1bnNpZ25lZCBzaG9ydCBfX2xlbikKLSAgX19jb25zdGFudF9wb3cyX3JhbmdlKF9fbGVuLCA2NCwgNDA5Nik7Ci0KLWV4dGVybiBfX0FUVFJTX28gdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZwotdmVjX2xvYWRfYm5kcnkoY29uc3QgdW5zaWduZWQgbG9uZyBsb25nICpfX3B0ciwgdW5zaWduZWQgc2hvcnQgX19sZW4pCi0gIF9fY29uc3RhbnRfcG93Ml9yYW5nZShfX2xlbiwgNjQsIDQwOTYpOwotCi1leHRlcm4gX19BVFRSU19vIHZlY3RvciBkb3VibGUKLXZlY19sb2FkX2JuZHJ5KGNvbnN0IGRvdWJsZSAqX19wdHIsIHVuc2lnbmVkIHNob3J0IF9fbGVuKQotICBfX2NvbnN0YW50X3BvdzJfcmFuZ2UoX19sZW4sIDY0LCA0MDk2KTsKLQotI2RlZmluZSB2ZWNfbG9hZF9ibmRyeShYLCBZKSAoKF9fdHlwZW9mX18oKHZlY19sb2FkX2JuZHJ5KSgoWCksIChZKSkpKSBcCi0gIF9fYnVpbHRpbl9zMzkwX3ZsYmIoKFgpLCAoKFkpID09IDY0ID8gMCA6IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoWSkgPT0gMTI4ID8gMSA6IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoWSkgPT0gMjU2ID8gMiA6IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoWSkgPT0gNTEyID8gMyA6IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoWSkgPT0gMTAyNCA/IDQgOiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKFkpID09IDIwNDggPyA1IDogXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIChZKSA9PSA0MDk2ID8gNiA6IC0xKSkpCi0KLS8qLS0gdmVjX2xvYWRfbGVuIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBjaGFyCi12ZWNfbG9hZF9sZW4oY29uc3Qgc2lnbmVkIGNoYXIgKl9fcHRyLCB1bnNpZ25lZCBpbnQgX19sZW4pIHsKLSAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19idWlsdGluX3MzOTBfdmxsKF9fbGVuLCBfX3B0cik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCi12ZWNfbG9hZF9sZW4oY29uc3QgdW5zaWduZWQgY2hhciAqX19wdHIsIHVuc2lnbmVkIGludCBfX2xlbikgewotICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYnVpbHRpbl9zMzkwX3ZsbChfX2xlbiwgX19wdHIpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIHNob3J0Ci12ZWNfbG9hZF9sZW4oY29uc3Qgc2lnbmVkIHNob3J0ICpfX3B0ciwgdW5zaWduZWQgaW50IF9fbGVuKSB7Ci0gIHJldHVybiAodmVjdG9yIHNpZ25lZCBzaG9ydClfX2J1aWx0aW5fczM5MF92bGwoX19sZW4sIF9fcHRyKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Ci12ZWNfbG9hZF9sZW4oY29uc3QgdW5zaWduZWQgc2hvcnQgKl9fcHRyLCB1bnNpZ25lZCBpbnQgX19sZW4pIHsKLSAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19idWlsdGluX3MzOTBfdmxsKF9fbGVuLCBfX3B0cik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgaW50Ci12ZWNfbG9hZF9sZW4oY29uc3Qgc2lnbmVkIGludCAqX19wdHIsIHVuc2lnbmVkIGludCBfX2xlbikgewotICByZXR1cm4gKHZlY3RvciBzaWduZWQgaW50KV9fYnVpbHRpbl9zMzkwX3ZsbChfX2xlbiwgX19wdHIpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Ci12ZWNfbG9hZF9sZW4oY29uc3QgdW5zaWduZWQgaW50ICpfX3B0ciwgdW5zaWduZWQgaW50IF9fbGVuKSB7Ci0gIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGludClfX2J1aWx0aW5fczM5MF92bGwoX19sZW4sIF9fcHRyKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcKLXZlY19sb2FkX2xlbihjb25zdCBzaWduZWQgbG9uZyBsb25nICpfX3B0ciwgdW5zaWduZWQgaW50IF9fbGVuKSB7Ci0gIHJldHVybiAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19idWlsdGluX3MzOTBfdmxsKF9fbGVuLCBfX3B0cik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcKLXZlY19sb2FkX2xlbihjb25zdCB1bnNpZ25lZCBsb25nIGxvbmcgKl9fcHRyLCB1bnNpZ25lZCBpbnQgX19sZW4pIHsKLSAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYnVpbHRpbl9zMzkwX3ZsbChfX2xlbiwgX19wdHIpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgZG91YmxlCi12ZWNfbG9hZF9sZW4oY29uc3QgZG91YmxlICpfX3B0ciwgdW5zaWduZWQgaW50IF9fbGVuKSB7Ci0gIHJldHVybiAodmVjdG9yIGRvdWJsZSlfX2J1aWx0aW5fczM5MF92bGwoX19sZW4sIF9fcHRyKTsKLX0KLQotLyotLSB2ZWNfc3RvcmVfbGVuIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2b2lkCi12ZWNfc3RvcmVfbGVuKHZlY3RvciBzaWduZWQgY2hhciBfX3ZlYywgc2lnbmVkIGNoYXIgKl9fcHRyLAotICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgX19sZW4pIHsKLSAgX19idWlsdGluX3MzOTBfdnN0bCgodmVjdG9yIHNpZ25lZCBjaGFyKV9fdmVjLCBfX2xlbiwgX19wdHIpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2b2lkCi12ZWNfc3RvcmVfbGVuKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fdmVjLCB1bnNpZ25lZCBjaGFyICpfX3B0ciwKLSAgICAgICAgICAgICAgdW5zaWduZWQgaW50IF9fbGVuKSB7Ci0gIF9fYnVpbHRpbl9zMzkwX3ZzdGwoKHZlY3RvciBzaWduZWQgY2hhcilfX3ZlYywgX19sZW4sIF9fcHRyKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdm9pZAotdmVjX3N0b3JlX2xlbih2ZWN0b3Igc2lnbmVkIHNob3J0IF9fdmVjLCBzaWduZWQgc2hvcnQgKl9fcHRyLAotICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgX19sZW4pIHsKLSAgX19idWlsdGluX3MzOTBfdnN0bCgodmVjdG9yIHNpZ25lZCBjaGFyKV9fdmVjLCBfX2xlbiwgX19wdHIpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2b2lkCi12ZWNfc3RvcmVfbGVuKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX3ZlYywgdW5zaWduZWQgc2hvcnQgKl9fcHRyLAotICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgX19sZW4pIHsKLSAgX19idWlsdGluX3MzOTBfdnN0bCgodmVjdG9yIHNpZ25lZCBjaGFyKV9fdmVjLCBfX2xlbiwgX19wdHIpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2b2lkCi12ZWNfc3RvcmVfbGVuKHZlY3RvciBzaWduZWQgaW50IF9fdmVjLCBzaWduZWQgaW50ICpfX3B0ciwKLSAgICAgICAgICAgICAgdW5zaWduZWQgaW50IF9fbGVuKSB7Ci0gIF9fYnVpbHRpbl9zMzkwX3ZzdGwoKHZlY3RvciBzaWduZWQgY2hhcilfX3ZlYywgX19sZW4sIF9fcHRyKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdm9pZAotdmVjX3N0b3JlX2xlbih2ZWN0b3IgdW5zaWduZWQgaW50IF9fdmVjLCB1bnNpZ25lZCBpbnQgKl9fcHRyLAotICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgX19sZW4pIHsKLSAgX19idWlsdGluX3MzOTBfdnN0bCgodmVjdG9yIHNpZ25lZCBjaGFyKV9fdmVjLCBfX2xlbiwgX19wdHIpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2b2lkCi12ZWNfc3RvcmVfbGVuKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fdmVjLCBzaWduZWQgbG9uZyBsb25nICpfX3B0ciwKLSAgICAgICAgICAgICAgdW5zaWduZWQgaW50IF9fbGVuKSB7Ci0gIF9fYnVpbHRpbl9zMzkwX3ZzdGwoKHZlY3RvciBzaWduZWQgY2hhcilfX3ZlYywgX19sZW4sIF9fcHRyKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdm9pZAotdmVjX3N0b3JlX2xlbih2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fdmVjLCB1bnNpZ25lZCBsb25nIGxvbmcgKl9fcHRyLAotICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgX19sZW4pIHsKLSAgX19idWlsdGluX3MzOTBfdnN0bCgodmVjdG9yIHNpZ25lZCBjaGFyKV9fdmVjLCBfX2xlbiwgX19wdHIpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2b2lkCi12ZWNfc3RvcmVfbGVuKHZlY3RvciBkb3VibGUgX192ZWMsIGRvdWJsZSAqX19wdHIsCi0gICAgICAgICAgICAgIHVuc2lnbmVkIGludCBfX2xlbikgewotICBfX2J1aWx0aW5fczM5MF92c3RsKCh2ZWN0b3Igc2lnbmVkIGNoYXIpX192ZWMsIF9fbGVuLCBfX3B0cik7Ci19Ci0KLS8qLS0gdmVjX2xvYWRfcGFpciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcKLXZlY19sb2FkX3BhaXIoc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpKF9fYSwgX19iKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZwotdmVjX2xvYWRfcGFpcih1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZykoX19hLCBfX2IpOwotfQotCi0vKi0tIHZlY19nZW5tYXNrIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCi12ZWNfZ2VubWFzayh1bnNpZ25lZCBzaG9ydCBfX21hc2spCi0gIF9fY29uc3RhbnQoX19tYXNrKSB7Ci0gIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKAotICAgIF9fbWFzayAmIDB4ODAwMCA/IDB4ZmYgOiAwLAotICAgIF9fbWFzayAmIDB4NDAwMCA/IDB4ZmYgOiAwLAotICAgIF9fbWFzayAmIDB4MjAwMCA/IDB4ZmYgOiAwLAotICAgIF9fbWFzayAmIDB4MTAwMCA/IDB4ZmYgOiAwLAotICAgIF9fbWFzayAmIDB4MDgwMCA/IDB4ZmYgOiAwLAotICAgIF9fbWFzayAmIDB4MDQwMCA/IDB4ZmYgOiAwLAotICAgIF9fbWFzayAmIDB4MDIwMCA/IDB4ZmYgOiAwLAotICAgIF9fbWFzayAmIDB4MDEwMCA/IDB4ZmYgOiAwLAotICAgIF9fbWFzayAmIDB4MDA4MCA/IDB4ZmYgOiAwLAotICAgIF9fbWFzayAmIDB4MDA0MCA/IDB4ZmYgOiAwLAotICAgIF9fbWFzayAmIDB4MDAyMCA/IDB4ZmYgOiAwLAotICAgIF9fbWFzayAmIDB4MDAxMCA/IDB4ZmYgOiAwLAotICAgIF9fbWFzayAmIDB4MDAwOCA/IDB4ZmYgOiAwLAotICAgIF9fbWFzayAmIDB4MDAwNCA/IDB4ZmYgOiAwLAotICAgIF9fbWFzayAmIDB4MDAwMiA/IDB4ZmYgOiAwLAotICAgIF9fbWFzayAmIDB4MDAwMSA/IDB4ZmYgOiAwKTsKLX0KLQotLyotLSB2ZWNfZ2VubWFza3NfKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgotdmVjX2dlbm1hc2tzXzgodW5zaWduZWQgY2hhciBfX2ZpcnN0LCB1bnNpZ25lZCBjaGFyIF9fbGFzdCkKLSAgX19jb25zdGFudChfX2ZpcnN0KSBfX2NvbnN0YW50KF9fbGFzdCkgewotICB1bnNpZ25lZCBjaGFyIF9fYml0MSA9IF9fZmlyc3QgJiA3OwotICB1bnNpZ25lZCBjaGFyIF9fYml0MiA9IF9fbGFzdCAmIDc7Ci0gIHVuc2lnbmVkIGNoYXIgX19tYXNrMSA9ICh1bnNpZ25lZCBjaGFyKSgxVSA8PCAoNyAtIF9fYml0MSkgPDwgMSkgLSAxOwotICB1bnNpZ25lZCBjaGFyIF9fbWFzazIgPSAodW5zaWduZWQgY2hhcikoMVUgPDwgKDcgLSBfX2JpdDIpKSAtIDE7Ci0gIHVuc2lnbmVkIGNoYXIgX192YWx1ZSA9IChfX2JpdDEgPD0gX19iaXQyID8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbWFzazEgJiB+X19tYXNrMiA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBfX21hc2sxIHwgfl9fbWFzazIpOwotICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fdmFsdWU7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAotdmVjX2dlbm1hc2tzXzE2KHVuc2lnbmVkIGNoYXIgX19maXJzdCwgdW5zaWduZWQgY2hhciBfX2xhc3QpCi0gIF9fY29uc3RhbnQoX19maXJzdCkgX19jb25zdGFudChfX2xhc3QpIHsKLSAgdW5zaWduZWQgY2hhciBfX2JpdDEgPSBfX2ZpcnN0ICYgMTU7Ci0gIHVuc2lnbmVkIGNoYXIgX19iaXQyID0gX19sYXN0ICYgMTU7Ci0gIHVuc2lnbmVkIHNob3J0IF9fbWFzazEgPSAodW5zaWduZWQgc2hvcnQpKDFVIDw8ICgxNSAtIF9fYml0MSkgPDwgMSkgLSAxOwotICB1bnNpZ25lZCBzaG9ydCBfX21hc2syID0gKHVuc2lnbmVkIHNob3J0KSgxVSA8PCAoMTUgLSBfX2JpdDIpKSAtIDE7Ci0gIHVuc2lnbmVkIHNob3J0IF9fdmFsdWUgPSAoX19iaXQxIDw9IF9fYml0MiA/Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgX19tYXNrMSAmIH5fX21hc2syIDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX21hc2sxIHwgfl9fbWFzazIpOwotICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX3ZhbHVlOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Ci12ZWNfZ2VubWFza3NfMzIodW5zaWduZWQgY2hhciBfX2ZpcnN0LCB1bnNpZ25lZCBjaGFyIF9fbGFzdCkKLSAgX19jb25zdGFudChfX2ZpcnN0KSBfX2NvbnN0YW50KF9fbGFzdCkgewotICB1bnNpZ25lZCBjaGFyIF9fYml0MSA9IF9fZmlyc3QgJiAzMTsKLSAgdW5zaWduZWQgY2hhciBfX2JpdDIgPSBfX2xhc3QgJiAzMTsKLSAgdW5zaWduZWQgaW50IF9fbWFzazEgPSAoMVUgPDwgKDMxIC0gX19iaXQxKSA8PCAxKSAtIDE7Ci0gIHVuc2lnbmVkIGludCBfX21hc2syID0gKDFVIDw8ICgzMSAtIF9fYml0MikpIC0gMTsKLSAgdW5zaWduZWQgaW50IF9fdmFsdWUgPSAoX19iaXQxIDw9IF9fYml0MiA/Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIF9fbWFzazEgJiB+X19tYXNrMiA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIF9fbWFzazEgfCB+X19tYXNrMik7Ci0gIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGludClfX3ZhbHVlOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nCi12ZWNfZ2VubWFza3NfNjQodW5zaWduZWQgY2hhciBfX2ZpcnN0LCB1bnNpZ25lZCBjaGFyIF9fbGFzdCkKLSAgX19jb25zdGFudChfX2ZpcnN0KSBfX2NvbnN0YW50KF9fbGFzdCkgewotICB1bnNpZ25lZCBjaGFyIF9fYml0MSA9IF9fZmlyc3QgJiA2MzsKLSAgdW5zaWduZWQgY2hhciBfX2JpdDIgPSBfX2xhc3QgJiA2MzsKLSAgdW5zaWduZWQgbG9uZyBsb25nIF9fbWFzazEgPSAoMVVMTCA8PCAoNjMgLSBfX2JpdDEpIDw8IDEpIC0gMTsKLSAgdW5zaWduZWQgbG9uZyBsb25nIF9fbWFzazIgPSAoMVVMTCA8PCAoNjMgLSBfX2JpdDIpKSAtIDE7Ci0gIHVuc2lnbmVkIGxvbmcgbG9uZyBfX3ZhbHVlID0gKF9fYml0MSA8PSBfX2JpdDIgPwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX21hc2sxICYgfl9fbWFzazIgOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX21hc2sxIHwgfl9fbWFzazIpOwotICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX192YWx1ZTsKLX0KLQotLyotLSB2ZWNfc3BsYXQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGNoYXIKLXZlY19zcGxhdCh2ZWN0b3Igc2lnbmVkIGNoYXIgX192ZWMsIGludCBfX2luZGV4KQotICBfX2NvbnN0YW50X3JhbmdlKF9faW5kZXgsIDAsIDE1KSB7Ci0gIHJldHVybiAodmVjdG9yIHNpZ25lZCBjaGFyKV9fdmVjW19faW5kZXhdOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBjaGFyCi12ZWNfc3BsYXQodmVjdG9yIGJvb2wgY2hhciBfX3ZlYywgaW50IF9faW5kZXgpCi0gIF9fY29uc3RhbnRfcmFuZ2UoX19pbmRleCwgMCwgMTUpIHsKLSAgcmV0dXJuICh2ZWN0b3IgYm9vbCBjaGFyKSh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX3ZlY1tfX2luZGV4XTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKLXZlY19zcGxhdCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX3ZlYywgaW50IF9faW5kZXgpCi0gIF9fY29uc3RhbnRfcmFuZ2UoX19pbmRleCwgMCwgMTUpIHsKLSAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX3ZlY1tfX2luZGV4XTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBzaG9ydAotdmVjX3NwbGF0KHZlY3RvciBzaWduZWQgc2hvcnQgX192ZWMsIGludCBfX2luZGV4KQotICBfX2NvbnN0YW50X3JhbmdlKF9faW5kZXgsIDAsIDcpIHsKLSAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIHNob3J0KV9fdmVjW19faW5kZXhdOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBzaG9ydAotdmVjX3NwbGF0KHZlY3RvciBib29sIHNob3J0IF9fdmVjLCBpbnQgX19pbmRleCkKLSAgX19jb25zdGFudF9yYW5nZShfX2luZGV4LCAwLCA3KSB7Ci0gIHJldHVybiAodmVjdG9yIGJvb2wgc2hvcnQpKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX3ZlY1tfX2luZGV4XTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Ci12ZWNfc3BsYXQodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fdmVjLCBpbnQgX19pbmRleCkKLSAgX19jb25zdGFudF9yYW5nZShfX2luZGV4LCAwLCA3KSB7Ci0gIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fdmVjW19faW5kZXhdOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGludAotdmVjX3NwbGF0KHZlY3RvciBzaWduZWQgaW50IF9fdmVjLCBpbnQgX19pbmRleCkKLSAgX19jb25zdGFudF9yYW5nZShfX2luZGV4LCAwLCAzKSB7Ci0gIHJldHVybiAodmVjdG9yIHNpZ25lZCBpbnQpX192ZWNbX19pbmRleF07Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGludAotdmVjX3NwbGF0KHZlY3RvciBib29sIGludCBfX3ZlYywgaW50IF9faW5kZXgpCi0gIF9fY29uc3RhbnRfcmFuZ2UoX19pbmRleCwgMCwgMykgewotICByZXR1cm4gKHZlY3RvciBib29sIGludCkodmVjdG9yIHVuc2lnbmVkIGludClfX3ZlY1tfX2luZGV4XTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAotdmVjX3NwbGF0KHZlY3RvciB1bnNpZ25lZCBpbnQgX192ZWMsIGludCBfX2luZGV4KQotICBfX2NvbnN0YW50X3JhbmdlKF9faW5kZXgsIDAsIDMpIHsKLSAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fdmVjW19faW5kZXhdOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZwotdmVjX3NwbGF0KHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fdmVjLCBpbnQgX19pbmRleCkKLSAgX19jb25zdGFudF9yYW5nZShfX2luZGV4LCAwLCAxKSB7Ci0gIHJldHVybiAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX192ZWNbX19pbmRleF07Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGxvbmcgbG9uZwotdmVjX3NwbGF0KHZlY3RvciBib29sIGxvbmcgbG9uZyBfX3ZlYywgaW50IF9faW5kZXgpCi0gIF9fY29uc3RhbnRfcmFuZ2UoX19pbmRleCwgMCwgMSkgewotICByZXR1cm4gKHZlY3RvciBib29sIGxvbmcgbG9uZykodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX3ZlY1tfX2luZGV4XTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZwotdmVjX3NwbGF0KHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX192ZWMsIGludCBfX2luZGV4KQotICBfX2NvbnN0YW50X3JhbmdlKF9faW5kZXgsIDAsIDEpIHsKLSAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fdmVjW19faW5kZXhdOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgZG91YmxlCi12ZWNfc3BsYXQodmVjdG9yIGRvdWJsZSBfX3ZlYywgaW50IF9faW5kZXgpCi0gIF9fY29uc3RhbnRfcmFuZ2UoX19pbmRleCwgMCwgMSkgewotICByZXR1cm4gKHZlY3RvciBkb3VibGUpX192ZWNbX19pbmRleF07Ci19Ci0KLS8qLS0gdmVjX3NwbGF0X3MqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX2FpIHZlY3RvciBzaWduZWQgY2hhcgotdmVjX3NwbGF0X3M4KHNpZ25lZCBjaGFyIF9fc2NhbGFyKQotICBfX2NvbnN0YW50KF9fc2NhbGFyKSB7Ci0gIHJldHVybiAodmVjdG9yIHNpZ25lZCBjaGFyKV9fc2NhbGFyOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfYWkgdmVjdG9yIHNpZ25lZCBzaG9ydAotdmVjX3NwbGF0X3MxNihzaWduZWQgc2hvcnQgX19zY2FsYXIpCi0gIF9fY29uc3RhbnQoX19zY2FsYXIpIHsKLSAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIHNob3J0KV9fc2NhbGFyOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfYWkgdmVjdG9yIHNpZ25lZCBpbnQKLXZlY19zcGxhdF9zMzIoc2lnbmVkIHNob3J0IF9fc2NhbGFyKQotICBfX2NvbnN0YW50KF9fc2NhbGFyKSB7Ci0gIHJldHVybiAodmVjdG9yIHNpZ25lZCBpbnQpKHNpZ25lZCBpbnQpX19zY2FsYXI7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19haSB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZwotdmVjX3NwbGF0X3M2NChzaWduZWQgc2hvcnQgX19zY2FsYXIpCi0gIF9fY29uc3RhbnQoX19zY2FsYXIpIHsKLSAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZykoc2lnbmVkIGxvbmcpX19zY2FsYXI7Ci19Ci0KLS8qLS0gdmVjX3NwbGF0X3UqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCi12ZWNfc3BsYXRfdTgodW5zaWduZWQgY2hhciBfX3NjYWxhcikKLSAgX19jb25zdGFudChfX3NjYWxhcikgewotICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fc2NhbGFyOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Ci12ZWNfc3BsYXRfdTE2KHVuc2lnbmVkIHNob3J0IF9fc2NhbGFyKQotICBfX2NvbnN0YW50KF9fc2NhbGFyKSB7Ci0gIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fc2NhbGFyOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfYWkgdmVjdG9yIHVuc2lnbmVkIGludAotdmVjX3NwbGF0X3UzMihzaWduZWQgc2hvcnQgX19zY2FsYXIpCi0gIF9fY29uc3RhbnQoX19zY2FsYXIpIHsKLSAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgaW50KShzaWduZWQgaW50KV9fc2NhbGFyOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfYWkgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZwotdmVjX3NwbGF0X3U2NChzaWduZWQgc2hvcnQgX19zY2FsYXIpCi0gIF9fY29uc3RhbnQoX19zY2FsYXIpIHsKLSAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKShzaWduZWQgbG9uZyBsb25nKV9fc2NhbGFyOwotfQotCi0vKi0tIHZlY19zcGxhdHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgY2hhcgotdmVjX3NwbGF0cyhzaWduZWQgY2hhciBfX3NjYWxhcikgewotICByZXR1cm4gKHZlY3RvciBzaWduZWQgY2hhcilfX3NjYWxhcjsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKLXZlY19zcGxhdHModW5zaWduZWQgY2hhciBfX3NjYWxhcikgewotICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fc2NhbGFyOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIHNob3J0Ci12ZWNfc3BsYXRzKHNpZ25lZCBzaG9ydCBfX3NjYWxhcikgewotICByZXR1cm4gKHZlY3RvciBzaWduZWQgc2hvcnQpX19zY2FsYXI7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAotdmVjX3NwbGF0cyh1bnNpZ25lZCBzaG9ydCBfX3NjYWxhcikgewotICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX3NjYWxhcjsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBpbnQKLXZlY19zcGxhdHMoc2lnbmVkIGludCBfX3NjYWxhcikgewotICByZXR1cm4gKHZlY3RvciBzaWduZWQgaW50KV9fc2NhbGFyOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Ci12ZWNfc3BsYXRzKHVuc2lnbmVkIGludCBfX3NjYWxhcikgewotICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBpbnQpX19zY2FsYXI7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgbG9uZyBsb25nCi12ZWNfc3BsYXRzKHNpZ25lZCBsb25nIGxvbmcgX19zY2FsYXIpIHsKLSAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX3NjYWxhcjsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZwotdmVjX3NwbGF0cyh1bnNpZ25lZCBsb25nIGxvbmcgX19zY2FsYXIpIHsKLSAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fc2NhbGFyOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgZG91YmxlCi12ZWNfc3BsYXRzKGRvdWJsZSBfX3NjYWxhcikgewotICByZXR1cm4gKHZlY3RvciBkb3VibGUpX19zY2FsYXI7Ci19Ci0KLS8qLS0gdmVjX2V4dGVuZF9zNjQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcKLXZlY19leHRlbmRfczY0KHZlY3RvciBzaWduZWQgY2hhciBfX2EpIHsKLSAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZykoX19hWzddLCBfX2FbMTVdKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcKLXZlY19leHRlbmRfczY0KHZlY3RvciBzaWduZWQgc2hvcnQgX19hKSB7Ci0gIHJldHVybiAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpKF9fYVszXSwgX19hWzddKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcKLXZlY19leHRlbmRfczY0KHZlY3RvciBzaWduZWQgaW50IF9fYSkgewotICByZXR1cm4gKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKShfX2FbMV0sIF9fYVszXSk7Ci19Ci0KLS8qLS0gdmVjX21lcmdlaCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBjaGFyCi12ZWNfbWVyZ2VoKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpKAotICAgIF9fYVswXSwgX19iWzBdLCBfX2FbMV0sIF9fYlsxXSwgX19hWzJdLCBfX2JbMl0sIF9fYVszXSwgX19iWzNdLAotICAgIF9fYVs0XSwgX19iWzRdLCBfX2FbNV0sIF9fYls1XSwgX19hWzZdLCBfX2JbNl0sIF9fYVs3XSwgX19iWzddKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgY2hhcgotdmVjX21lcmdlaCh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgYm9vbCBjaGFyKSgKLSAgICBfX2FbMF0sIF9fYlswXSwgX19hWzFdLCBfX2JbMV0sIF9fYVsyXSwgX19iWzJdLCBfX2FbM10sIF9fYlszXSwKLSAgICBfX2FbNF0sIF9fYls0XSwgX19hWzVdLCBfX2JbNV0sIF9fYVs2XSwgX19iWzZdLCBfX2FbN10sIF9fYls3XSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCi12ZWNfbWVyZ2VoKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKAotICAgIF9fYVswXSwgX19iWzBdLCBfX2FbMV0sIF9fYlsxXSwgX19hWzJdLCBfX2JbMl0sIF9fYVszXSwgX19iWzNdLAotICAgIF9fYVs0XSwgX19iWzRdLCBfX2FbNV0sIF9fYls1XSwgX19hWzZdLCBfX2JbNl0sIF9fYVs3XSwgX19iWzddKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBzaG9ydAotdmVjX21lcmdlaCh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIHNob3J0KSgKLSAgICBfX2FbMF0sIF9fYlswXSwgX19hWzFdLCBfX2JbMV0sIF9fYVsyXSwgX19iWzJdLCBfX2FbM10sIF9fYlszXSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIHNob3J0Ci12ZWNfbWVyZ2VoKHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIGJvb2wgc2hvcnQpKAotICAgIF9fYVswXSwgX19iWzBdLCBfX2FbMV0sIF9fYlsxXSwgX19hWzJdLCBfX2JbMl0sIF9fYVszXSwgX19iWzNdKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Ci12ZWNfbWVyZ2VoKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpKAotICAgIF9fYVswXSwgX19iWzBdLCBfX2FbMV0sIF9fYlsxXSwgX19hWzJdLCBfX2JbMl0sIF9fYVszXSwgX19iWzNdKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBpbnQKLXZlY19tZXJnZWgodmVjdG9yIHNpZ25lZCBpbnQgX19hLCB2ZWN0b3Igc2lnbmVkIGludCBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGludCkoX19hWzBdLCBfX2JbMF0sIF9fYVsxXSwgX19iWzFdKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgaW50Ci12ZWNfbWVyZ2VoKHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgYm9vbCBpbnQpKF9fYVswXSwgX19iWzBdLCBfX2FbMV0sIF9fYlsxXSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKLXZlY19tZXJnZWgodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGludCkoX19hWzBdLCBfX2JbMF0sIF9fYVsxXSwgX19iWzFdKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcKLXZlY19tZXJnZWgodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZykoX19hWzBdLCBfX2JbMF0pOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBsb25nIGxvbmcKLXZlY19tZXJnZWgodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgewotICByZXR1cm4gKHZlY3RvciBib29sIGxvbmcgbG9uZykoX19hWzBdLCBfX2JbMF0pOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nCi12ZWNfbWVyZ2VoKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgewotICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpKF9fYVswXSwgX19iWzBdKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGRvdWJsZQotdmVjX21lcmdlaCh2ZWN0b3IgZG91YmxlIF9fYSwgdmVjdG9yIGRvdWJsZSBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgZG91YmxlKShfX2FbMF0sIF9fYlswXSk7Ci19Ci0KLS8qLS0gdmVjX21lcmdlbCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBjaGFyCi12ZWNfbWVyZ2VsKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpKAotICAgIF9fYVs4XSwgX19iWzhdLCBfX2FbOV0sIF9fYls5XSwgX19hWzEwXSwgX19iWzEwXSwgX19hWzExXSwgX19iWzExXSwKLSAgICBfX2FbMTJdLCBfX2JbMTJdLCBfX2FbMTNdLCBfX2JbMTNdLCBfX2FbMTRdLCBfX2JbMTRdLCBfX2FbMTVdLCBfX2JbMTVdKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgY2hhcgotdmVjX21lcmdlbCh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgYm9vbCBjaGFyKSgKLSAgICBfX2FbOF0sIF9fYls4XSwgX19hWzldLCBfX2JbOV0sIF9fYVsxMF0sIF9fYlsxMF0sIF9fYVsxMV0sIF9fYlsxMV0sCi0gICAgX19hWzEyXSwgX19iWzEyXSwgX19hWzEzXSwgX19iWzEzXSwgX19hWzE0XSwgX19iWzE0XSwgX19hWzE1XSwgX19iWzE1XSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCi12ZWNfbWVyZ2VsKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKAotICAgIF9fYVs4XSwgX19iWzhdLCBfX2FbOV0sIF9fYls5XSwgX19hWzEwXSwgX19iWzEwXSwgX19hWzExXSwgX19iWzExXSwKLSAgICBfX2FbMTJdLCBfX2JbMTJdLCBfX2FbMTNdLCBfX2JbMTNdLCBfX2FbMTRdLCBfX2JbMTRdLCBfX2FbMTVdLCBfX2JbMTVdKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBzaG9ydAotdmVjX21lcmdlbCh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIHNob3J0KSgKLSAgICBfX2FbNF0sIF9fYls0XSwgX19hWzVdLCBfX2JbNV0sIF9fYVs2XSwgX19iWzZdLCBfX2FbN10sIF9fYls3XSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIHNob3J0Ci12ZWNfbWVyZ2VsKHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIGJvb2wgc2hvcnQpKAotICAgIF9fYVs0XSwgX19iWzRdLCBfX2FbNV0sIF9fYls1XSwgX19hWzZdLCBfX2JbNl0sIF9fYVs3XSwgX19iWzddKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Ci12ZWNfbWVyZ2VsKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpKAotICAgIF9fYVs0XSwgX19iWzRdLCBfX2FbNV0sIF9fYls1XSwgX19hWzZdLCBfX2JbNl0sIF9fYVs3XSwgX19iWzddKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBpbnQKLXZlY19tZXJnZWwodmVjdG9yIHNpZ25lZCBpbnQgX19hLCB2ZWN0b3Igc2lnbmVkIGludCBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGludCkoX19hWzJdLCBfX2JbMl0sIF9fYVszXSwgX19iWzNdKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgaW50Ci12ZWNfbWVyZ2VsKHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgYm9vbCBpbnQpKF9fYVsyXSwgX19iWzJdLCBfX2FbM10sIF9fYlszXSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKLXZlY19tZXJnZWwodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGludCkoX19hWzJdLCBfX2JbMl0sIF9fYVszXSwgX19iWzNdKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcKLXZlY19tZXJnZWwodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZykoX19hWzFdLCBfX2JbMV0pOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBsb25nIGxvbmcKLXZlY19tZXJnZWwodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgewotICByZXR1cm4gKHZlY3RvciBib29sIGxvbmcgbG9uZykoX19hWzFdLCBfX2JbMV0pOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nCi12ZWNfbWVyZ2VsKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgewotICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpKF9fYVsxXSwgX19iWzFdKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGRvdWJsZQotdmVjX21lcmdlbCh2ZWN0b3IgZG91YmxlIF9fYSwgdmVjdG9yIGRvdWJsZSBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgZG91YmxlKShfX2FbMV0sIF9fYlsxXSk7Ci19Ci0KLS8qLS0gdmVjX3BhY2sgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBjaGFyCi12ZWNfcGFjayh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2IpIHsKLSAgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYWMgPSAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYTsKLSAgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYmMgPSAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYjsKLSAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpKAotICAgIF9fYWNbMV0sIF9fYWNbM10sIF9fYWNbNV0sIF9fYWNbN10sIF9fYWNbOV0sIF9fYWNbMTFdLCBfX2FjWzEzXSwgX19hY1sxNV0sCi0gICAgX19iY1sxXSwgX19iY1szXSwgX19iY1s1XSwgX19iY1s3XSwgX19iY1s5XSwgX19iY1sxMV0sIF9fYmNbMTNdLCBfX2JjWzE1XSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGNoYXIKLXZlY19wYWNrKHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7Ci0gIHZlY3RvciBib29sIGNoYXIgX19hYyA9ICh2ZWN0b3IgYm9vbCBjaGFyKV9fYTsKLSAgdmVjdG9yIGJvb2wgY2hhciBfX2JjID0gKHZlY3RvciBib29sIGNoYXIpX19iOwotICByZXR1cm4gKHZlY3RvciBib29sIGNoYXIpKAotICAgIF9fYWNbMV0sIF9fYWNbM10sIF9fYWNbNV0sIF9fYWNbN10sIF9fYWNbOV0sIF9fYWNbMTFdLCBfX2FjWzEzXSwgX19hY1sxNV0sCi0gICAgX19iY1sxXSwgX19iY1szXSwgX19iY1s1XSwgX19iY1s3XSwgX19iY1s5XSwgX19iY1sxMV0sIF9fYmNbMTNdLCBfX2JjWzE1XSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCi12ZWNfcGFjayh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7Ci0gIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYWMgPSAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hOwotICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2JjID0gKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYjsKLSAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoCi0gICAgX19hY1sxXSwgX19hY1szXSwgX19hY1s1XSwgX19hY1s3XSwgX19hY1s5XSwgX19hY1sxMV0sIF9fYWNbMTNdLCBfX2FjWzE1XSwKLSAgICBfX2JjWzFdLCBfX2JjWzNdLCBfX2JjWzVdLCBfX2JjWzddLCBfX2JjWzldLCBfX2JjWzExXSwgX19iY1sxM10sIF9fYmNbMTVdKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBzaG9ydAotdmVjX3BhY2sodmVjdG9yIHNpZ25lZCBpbnQgX19hLCB2ZWN0b3Igc2lnbmVkIGludCBfX2IpIHsKLSAgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2FjID0gKHZlY3RvciBzaWduZWQgc2hvcnQpX19hOwotICB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYmMgPSAodmVjdG9yIHNpZ25lZCBzaG9ydClfX2I7Ci0gIHJldHVybiAodmVjdG9yIHNpZ25lZCBzaG9ydCkoCi0gICAgX19hY1sxXSwgX19hY1szXSwgX19hY1s1XSwgX19hY1s3XSwKLSAgICBfX2JjWzFdLCBfX2JjWzNdLCBfX2JjWzVdLCBfX2JjWzddKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgc2hvcnQKLXZlY19wYWNrKHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IpIHsKLSAgdmVjdG9yIGJvb2wgc2hvcnQgX19hYyA9ICh2ZWN0b3IgYm9vbCBzaG9ydClfX2E7Ci0gIHZlY3RvciBib29sIHNob3J0IF9fYmMgPSAodmVjdG9yIGJvb2wgc2hvcnQpX19iOwotICByZXR1cm4gKHZlY3RvciBib29sIHNob3J0KSgKLSAgICBfX2FjWzFdLCBfX2FjWzNdLCBfX2FjWzVdLCBfX2FjWzddLAotICAgIF9fYmNbMV0sIF9fYmNbM10sIF9fYmNbNV0sIF9fYmNbN10pOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKLXZlY19wYWNrKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgewotICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hYyA9ICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hOwotICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iYyA9ICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19iOwotICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBzaG9ydCkoCi0gICAgX19hY1sxXSwgX19hY1szXSwgX19hY1s1XSwgX19hY1s3XSwKLSAgICBfX2JjWzFdLCBfX2JjWzNdLCBfX2JjWzVdLCBfX2JjWzddKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBpbnQKLXZlY19wYWNrKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7Ci0gIHZlY3RvciBzaWduZWQgaW50IF9fYWMgPSAodmVjdG9yIHNpZ25lZCBpbnQpX19hOwotICB2ZWN0b3Igc2lnbmVkIGludCBfX2JjID0gKHZlY3RvciBzaWduZWQgaW50KV9fYjsKLSAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGludCkoX19hY1sxXSwgX19hY1szXSwgX19iY1sxXSwgX19iY1szXSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGludAotdmVjX3BhY2sodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgewotICB2ZWN0b3IgYm9vbCBpbnQgX19hYyA9ICh2ZWN0b3IgYm9vbCBpbnQpX19hOwotICB2ZWN0b3IgYm9vbCBpbnQgX19iYyA9ICh2ZWN0b3IgYm9vbCBpbnQpX19iOwotICByZXR1cm4gKHZlY3RvciBib29sIGludCkoX19hY1sxXSwgX19hY1szXSwgX19iY1sxXSwgX19iY1szXSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKLXZlY19wYWNrKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgewotICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYWMgPSAodmVjdG9yIHVuc2lnbmVkIGludClfX2E7Ci0gIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iYyA9ICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYjsKLSAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgaW50KShfX2FjWzFdLCBfX2FjWzNdLCBfX2JjWzFdLCBfX2JjWzNdKTsKLX0KLQotLyotLSB2ZWNfcGFja3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGNoYXIKLXZlY19wYWNrcyh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3Zwa3NoKF9fYSwgX19iKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKLXZlY19wYWNrcyh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fczM5MF92cGtsc2goX19hLCBfX2IpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIHNob3J0Ci12ZWNfcGFja3ModmVjdG9yIHNpZ25lZCBpbnQgX19hLCB2ZWN0b3Igc2lnbmVkIGludCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3Zwa3NmKF9fYSwgX19iKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Ci12ZWNfcGFja3ModmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fczM5MF92cGtsc2YoX19hLCBfX2IpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGludAotdmVjX3BhY2tzKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fczM5MF92cGtzZyhfX2EsIF9fYik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKLXZlY19wYWNrcyh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3Zwa2xzZyhfX2EsIF9fYik7Ci19Ci0KLS8qLS0gdmVjX3BhY2tzX2NjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBjaGFyCi12ZWNfcGFja3NfY2ModmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBzaWduZWQgc2hvcnQgX19iLCBpbnQgKl9fY2MpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3Zwa3NocyhfX2EsIF9fYiwgX19jYyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCi12ZWNfcGFja3NfY2ModmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYiwgaW50ICpfX2NjKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fczM5MF92cGtsc2hzKF9fYSwgX19iLCBfX2NjKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBzaG9ydAotdmVjX3BhY2tzX2NjKHZlY3RvciBzaWduZWQgaW50IF9fYSwgdmVjdG9yIHNpZ25lZCBpbnQgX19iLCBpbnQgKl9fY2MpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3Zwa3NmcyhfX2EsIF9fYiwgX19jYyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAotdmVjX3BhY2tzX2NjKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYiwgaW50ICpfX2NjKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fczM5MF92cGtsc2ZzKF9fYSwgX19iLCBfX2NjKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBpbnQKLXZlY19wYWNrc19jYyh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYiwKLSAgICAgICAgICAgICBpbnQgKl9fY2MpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3Zwa3NncyhfX2EsIF9fYiwgX19jYyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKLXZlY19wYWNrc19jYyh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IsCi0gICAgICAgICAgICAgaW50ICpfX2NjKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fczM5MF92cGtsc2dzKF9fYSwgX19iLCBfX2NjKTsKLX0KLQotLyotLSB2ZWNfcGFja3N1IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgotdmVjX3BhY2tzdSh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2IpIHsKLSAgY29uc3QgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX3plcm8gPSAodmVjdG9yIHNpZ25lZCBzaG9ydCkwOwotICByZXR1cm4gX19idWlsdGluX3MzOTBfdnBrbHNoKAotICAgICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpKF9fYSA+PSBfX3plcm8pICYgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EsCi0gICAgKHZlY3RvciB1bnNpZ25lZCBzaG9ydCkoX19iID49IF9femVybykgJiAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCi12ZWNfcGFja3N1KHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3Zwa2xzaChfX2EsIF9fYik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAotdmVjX3BhY2tzdSh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYikgewotICBjb25zdCB2ZWN0b3Igc2lnbmVkIGludCBfX3plcm8gPSAodmVjdG9yIHNpZ25lZCBpbnQpMDsKLSAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3Zwa2xzZigKLSAgICAodmVjdG9yIHVuc2lnbmVkIGludCkoX19hID49IF9femVybykgJiAodmVjdG9yIHVuc2lnbmVkIGludClfX2EsCi0gICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpKF9fYiA+PSBfX3plcm8pICYgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Ci12ZWNfcGFja3N1KHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgewotICByZXR1cm4gX19idWlsdGluX3MzOTBfdnBrbHNmKF9fYSwgX19iKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAotdmVjX3BhY2tzdSh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgewotICBjb25zdCB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX3plcm8gPSAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpMDsKLSAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3Zwa2xzZygKLSAgICAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZykoX19hID49IF9femVybykgJgotICAgICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYSwKLSAgICAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZykoX19iID49IF9femVybykgJgotICAgICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKLXZlY19wYWNrc3UodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fczM5MF92cGtsc2coX19hLCBfX2IpOwotfQotCi0vKi0tIHZlY19wYWNrc3VfY2MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCi12ZWNfcGFja3N1X2NjKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IsIGludCAqX19jYykgewotICByZXR1cm4gX19idWlsdGluX3MzOTBfdnBrbHNocyhfX2EsIF9fYiwgX19jYyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAotdmVjX3BhY2tzdV9jYyh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IsIGludCAqX19jYykgewotICByZXR1cm4gX19idWlsdGluX3MzOTBfdnBrbHNmcyhfX2EsIF9fYiwgX19jYyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKLXZlY19wYWNrc3VfY2ModmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iLAotICAgICAgICAgICAgICBpbnQgKl9fY2MpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3Zwa2xzZ3MoX19hLCBfX2IsIF9fY2MpOwotfQotCi0vKi0tIHZlY191bnBhY2toIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgc2hvcnQKLXZlY191bnBhY2toKHZlY3RvciBzaWduZWQgY2hhciBfX2EpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3Z1cGhiKF9fYSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIHNob3J0Ci12ZWNfdW5wYWNraCh2ZWN0b3IgYm9vbCBjaGFyIF9fYSkgewotICByZXR1cm4gKHZlY3RvciBib29sIHNob3J0KV9fYnVpbHRpbl9zMzkwX3Z1cGhiKCh2ZWN0b3Igc2lnbmVkIGNoYXIpX19hKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Ci12ZWNfdW5wYWNraCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3Z1cGxoYihfX2EpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGludAotdmVjX3VucGFja2godmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3Z1cGhoKF9fYSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGludAotdmVjX3VucGFja2godmVjdG9yIGJvb2wgc2hvcnQgX19hKSB7Ci0gIHJldHVybiAodmVjdG9yIGJvb2wgaW50KV9fYnVpbHRpbl9zMzkwX3Z1cGhoKCh2ZWN0b3Igc2lnbmVkIHNob3J0KV9fYSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKLXZlY191bnBhY2toKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3Z1cGxoaChfX2EpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZwotdmVjX3VucGFja2godmVjdG9yIHNpZ25lZCBpbnQgX19hKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fczM5MF92dXBoZihfX2EpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBsb25nIGxvbmcKLXZlY191bnBhY2toKHZlY3RvciBib29sIGludCBfX2EpIHsKLSAgcmV0dXJuICh2ZWN0b3IgYm9vbCBsb25nIGxvbmcpX19idWlsdGluX3MzOTBfdnVwaGYoKHZlY3RvciBzaWduZWQgaW50KV9fYSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcKLXZlY191bnBhY2toKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fczM5MF92dXBsaGYoX19hKTsKLX0KLQotLyotLSB2ZWNfdW5wYWNrbCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIHNob3J0Ci12ZWNfdW5wYWNrbCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fczM5MF92dXBsYihfX2EpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBzaG9ydAotdmVjX3VucGFja2wodmVjdG9yIGJvb2wgY2hhciBfX2EpIHsKLSAgcmV0dXJuICh2ZWN0b3IgYm9vbCBzaG9ydClfX2J1aWx0aW5fczM5MF92dXBsYigodmVjdG9yIHNpZ25lZCBjaGFyKV9fYSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAotdmVjX3VucGFja2wodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fczM5MF92dXBsbGIoX19hKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBpbnQKLXZlY191bnBhY2tsKHZlY3RvciBzaWduZWQgc2hvcnQgX19hKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fczM5MF92dXBsaHcoX19hKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgaW50Ci12ZWNfdW5wYWNrbCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EpIHsKLSAgcmV0dXJuICh2ZWN0b3IgYm9vbCBpbnQpX19idWlsdGluX3MzOTBfdnVwbGh3KCh2ZWN0b3Igc2lnbmVkIHNob3J0KV9fYSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKLXZlY191bnBhY2tsKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3Z1cGxsaChfX2EpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZwotdmVjX3VucGFja2wodmVjdG9yIHNpZ25lZCBpbnQgX19hKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fczM5MF92dXBsZihfX2EpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBsb25nIGxvbmcKLXZlY191bnBhY2tsKHZlY3RvciBib29sIGludCBfX2EpIHsKLSAgcmV0dXJuICh2ZWN0b3IgYm9vbCBsb25nIGxvbmcpX19idWlsdGluX3MzOTBfdnVwbGYoKHZlY3RvciBzaWduZWQgaW50KV9fYSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcKLXZlY191bnBhY2tsKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fczM5MF92dXBsbGYoX19hKTsKLX0KLQotLyotLSB2ZWNfY21wZXEgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBjaGFyCi12ZWNfY21wZXEodmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciBib29sIGNoYXIgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIGJvb2wgY2hhcikoX19hID09IF9fYik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGNoYXIKLXZlY19jbXBlcSh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIGJvb2wgY2hhcikoX19hID09IF9fYik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGNoYXIKLXZlY19jbXBlcSh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gKHZlY3RvciBib29sIGNoYXIpKF9fYSA9PSBfX2IpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBzaG9ydAotdmVjX2NtcGVxKHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIGJvb2wgc2hvcnQpKF9fYSA9PSBfX2IpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBzaG9ydAotdmVjX2NtcGVxKHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYikgewotICByZXR1cm4gKHZlY3RvciBib29sIHNob3J0KShfX2EgPT0gX19iKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgc2hvcnQKLXZlY19jbXBlcSh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIGJvb2wgc2hvcnQpKF9fYSA9PSBfX2IpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBpbnQKLXZlY19jbXBlcSh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIGJvb2wgaW50KShfX2EgPT0gX19iKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgaW50Ci12ZWNfY21wZXEodmVjdG9yIHNpZ25lZCBpbnQgX19hLCB2ZWN0b3Igc2lnbmVkIGludCBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgYm9vbCBpbnQpKF9fYSA9PSBfX2IpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBpbnQKLXZlY19jbXBlcSh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgYm9vbCBpbnQpKF9fYSA9PSBfX2IpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBsb25nIGxvbmcKLXZlY19jbXBlcSh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIGJvb2wgbG9uZyBsb25nKShfX2EgPT0gX19iKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgbG9uZyBsb25nCi12ZWNfY21wZXEodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgYm9vbCBsb25nIGxvbmcpKF9fYSA9PSBfX2IpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBsb25nIGxvbmcKLXZlY19jbXBlcSh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgYm9vbCBsb25nIGxvbmcpKF9fYSA9PSBfX2IpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBsb25nIGxvbmcKLXZlY19jbXBlcSh2ZWN0b3IgZG91YmxlIF9fYSwgdmVjdG9yIGRvdWJsZSBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgYm9vbCBsb25nIGxvbmcpKF9fYSA9PSBfX2IpOwotfQotCi0vKi0tIHZlY19jbXBnZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGNoYXIKLXZlY19jbXBnZSh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIGJvb2wgY2hhcikoX19hID49IF9fYik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGNoYXIKLXZlY19jbXBnZSh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gKHZlY3RvciBib29sIGNoYXIpKF9fYSA+PSBfX2IpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBzaG9ydAotdmVjX2NtcGdlKHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYikgewotICByZXR1cm4gKHZlY3RvciBib29sIHNob3J0KShfX2EgPj0gX19iKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgc2hvcnQKLXZlY19jbXBnZSh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIGJvb2wgc2hvcnQpKF9fYSA+PSBfX2IpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBpbnQKLXZlY19jbXBnZSh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYikgewotICByZXR1cm4gKHZlY3RvciBib29sIGludCkoX19hID49IF9fYik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGludAotdmVjX2NtcGdlKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgewotICByZXR1cm4gKHZlY3RvciBib29sIGludCkoX19hID49IF9fYik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGxvbmcgbG9uZwotdmVjX2NtcGdlKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIGJvb2wgbG9uZyBsb25nKShfX2EgPj0gX19iKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgbG9uZyBsb25nCi12ZWNfY21wZ2UodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIGJvb2wgbG9uZyBsb25nKShfX2EgPj0gX19iKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgbG9uZyBsb25nCi12ZWNfY21wZ2UodmVjdG9yIGRvdWJsZSBfX2EsIHZlY3RvciBkb3VibGUgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIGJvb2wgbG9uZyBsb25nKShfX2EgPj0gX19iKTsKLX0KLQotLyotLSB2ZWNfY21wZ3QgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBjaGFyCi12ZWNfY21wZ3QodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gKHZlY3RvciBib29sIGNoYXIpKF9fYSA+IF9fYik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGNoYXIKLXZlY19jbXBndCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gKHZlY3RvciBib29sIGNoYXIpKF9fYSA+IF9fYik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIHNob3J0Ci12ZWNfY21wZ3QodmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBzaWduZWQgc2hvcnQgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIGJvb2wgc2hvcnQpKF9fYSA+IF9fYik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIHNob3J0Ci12ZWNfY21wZ3QodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgewotICByZXR1cm4gKHZlY3RvciBib29sIHNob3J0KShfX2EgPiBfX2IpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBpbnQKLXZlY19jbXBndCh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYikgewotICByZXR1cm4gKHZlY3RvciBib29sIGludCkoX19hID4gX19iKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgaW50Ci12ZWNfY21wZ3QodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIGJvb2wgaW50KShfX2EgPiBfX2IpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBsb25nIGxvbmcKLXZlY19jbXBndCh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgewotICByZXR1cm4gKHZlY3RvciBib29sIGxvbmcgbG9uZykoX19hID4gX19iKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgbG9uZyBsb25nCi12ZWNfY21wZ3QodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIGJvb2wgbG9uZyBsb25nKShfX2EgPiBfX2IpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBsb25nIGxvbmcKLXZlY19jbXBndCh2ZWN0b3IgZG91YmxlIF9fYSwgdmVjdG9yIGRvdWJsZSBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgYm9vbCBsb25nIGxvbmcpKF9fYSA+IF9fYik7Ci19Ci0KLS8qLS0gdmVjX2NtcGxlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgY2hhcgotdmVjX2NtcGxlKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgYm9vbCBjaGFyKShfX2EgPD0gX19iKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgY2hhcgotdmVjX2NtcGxlKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIGJvb2wgY2hhcikoX19hIDw9IF9fYik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIHNob3J0Ci12ZWNfY21wbGUodmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBzaWduZWQgc2hvcnQgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIGJvb2wgc2hvcnQpKF9fYSA8PSBfX2IpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBzaG9ydAotdmVjX2NtcGxlKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgYm9vbCBzaG9ydCkoX19hIDw9IF9fYik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGludAotdmVjX2NtcGxlKHZlY3RvciBzaWduZWQgaW50IF9fYSwgdmVjdG9yIHNpZ25lZCBpbnQgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIGJvb2wgaW50KShfX2EgPD0gX19iKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgaW50Ci12ZWNfY21wbGUodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIGJvb2wgaW50KShfX2EgPD0gX19iKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgbG9uZyBsb25nCi12ZWNfY21wbGUodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgYm9vbCBsb25nIGxvbmcpKF9fYSA8PSBfX2IpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBsb25nIGxvbmcKLXZlY19jbXBsZSh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgYm9vbCBsb25nIGxvbmcpKF9fYSA8PSBfX2IpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBsb25nIGxvbmcKLXZlY19jbXBsZSh2ZWN0b3IgZG91YmxlIF9fYSwgdmVjdG9yIGRvdWJsZSBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgYm9vbCBsb25nIGxvbmcpKF9fYSA8PSBfX2IpOwotfQotCi0vKi0tIHZlY19jbXBsdCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGNoYXIKLXZlY19jbXBsdCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIGJvb2wgY2hhcikoX19hIDwgX19iKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgY2hhcgotdmVjX2NtcGx0KHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIGJvb2wgY2hhcikoX19hIDwgX19iKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgc2hvcnQKLXZlY19jbXBsdCh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgYm9vbCBzaG9ydCkoX19hIDwgX19iKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgc2hvcnQKLXZlY19jbXBsdCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIGJvb2wgc2hvcnQpKF9fYSA8IF9fYik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGludAotdmVjX2NtcGx0KHZlY3RvciBzaWduZWQgaW50IF9fYSwgdmVjdG9yIHNpZ25lZCBpbnQgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIGJvb2wgaW50KShfX2EgPCBfX2IpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBpbnQKLXZlY19jbXBsdCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgYm9vbCBpbnQpKF9fYSA8IF9fYik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGxvbmcgbG9uZwotdmVjX2NtcGx0KHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIGJvb2wgbG9uZyBsb25nKShfX2EgPCBfX2IpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBsb25nIGxvbmcKLXZlY19jbXBsdCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgYm9vbCBsb25nIGxvbmcpKF9fYSA8IF9fYik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGxvbmcgbG9uZwotdmVjX2NtcGx0KHZlY3RvciBkb3VibGUgX19hLCB2ZWN0b3IgZG91YmxlIF9fYikgewotICByZXR1cm4gKHZlY3RvciBib29sIGxvbmcgbG9uZykoX19hIDwgX19iKTsKLX0KLQotLyotLSB2ZWNfYWxsX2VxIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKLXZlY19hbGxfZXEodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgewotICBpbnQgX19jYzsKLSAgX19idWlsdGluX3MzOTBfdmNlcWJzKF9fYSwgX19iLCAmX19jYyk7Ci0gIHJldHVybiBfX2NjID09IDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAotdmVjX2FsbF9lcSh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgewotICBpbnQgX19jYzsKLSAgX19idWlsdGluX3MzOTBfdmNlcWJzKF9fYSwgKHZlY3RvciBzaWduZWQgY2hhcilfX2IsICZfX2NjKTsKLSAgcmV0dXJuIF9fY2MgPT0gMDsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Ci12ZWNfYWxsX2VxKHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7Ci0gIGludCBfX2NjOwotICBfX2J1aWx0aW5fczM5MF92Y2VxYnMoKHZlY3RvciBzaWduZWQgY2hhcilfX2EsIF9fYiwgJl9fY2MpOwotICByZXR1cm4gX19jYyA9PSAwOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKLXZlY19hbGxfZXEodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKLSAgaW50IF9fY2M7Ci0gIF9fYnVpbHRpbl9zMzkwX3ZjZXFicygodmVjdG9yIHNpZ25lZCBjaGFyKV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19iLCAmX19jYyk7Ci0gIHJldHVybiBfX2NjID09IDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAotdmVjX2FsbF9lcSh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciBib29sIGNoYXIgX19iKSB7Ci0gIGludCBfX2NjOwotICBfX2J1aWx0aW5fczM5MF92Y2VxYnMoKHZlY3RvciBzaWduZWQgY2hhcilfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYiwgJl9fY2MpOwotICByZXR1cm4gX19jYyA9PSAwOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKLXZlY19hbGxfZXEodmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgewotICBpbnQgX19jYzsKLSAgX19idWlsdGluX3MzOTBfdmNlcWJzKCh2ZWN0b3Igc2lnbmVkIGNoYXIpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaWduZWQgY2hhcilfX2IsICZfX2NjKTsKLSAgcmV0dXJuIF9fY2MgPT0gMDsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Ci12ZWNfYWxsX2VxKHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgewotICBpbnQgX19jYzsKLSAgX19idWlsdGluX3MzOTBfdmNlcWJzKCh2ZWN0b3Igc2lnbmVkIGNoYXIpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaWduZWQgY2hhcilfX2IsICZfX2NjKTsKLSAgcmV0dXJuIF9fY2MgPT0gMDsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Ci12ZWNfYWxsX2VxKHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYikgewotICBpbnQgX19jYzsKLSAgX19idWlsdGluX3MzOTBfdmNlcWhzKF9fYSwgX19iLCAmX19jYyk7Ci0gIHJldHVybiBfX2NjID09IDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAotdmVjX2FsbF9lcSh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7Ci0gIGludCBfX2NjOwotICBfX2J1aWx0aW5fczM5MF92Y2VxaHMoX19hLCAodmVjdG9yIHNpZ25lZCBzaG9ydClfX2IsICZfX2NjKTsKLSAgcmV0dXJuIF9fY2MgPT0gMDsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Ci12ZWNfYWxsX2VxKHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2IpIHsKLSAgaW50IF9fY2M7Ci0gIF9fYnVpbHRpbl9zMzkwX3ZjZXFocygodmVjdG9yIHNpZ25lZCBzaG9ydClfX2EsIF9fYiwgJl9fY2MpOwotICByZXR1cm4gX19jYyA9PSAwOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKLXZlY19hbGxfZXEodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgewotICBpbnQgX19jYzsKLSAgX19idWlsdGluX3MzOTBfdmNlcWhzKCh2ZWN0b3Igc2lnbmVkIHNob3J0KV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3Igc2lnbmVkIHNob3J0KV9fYiwgJl9fY2MpOwotICByZXR1cm4gX19jYyA9PSAwOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKLXZlY19hbGxfZXEodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7Ci0gIGludCBfX2NjOwotICBfX2J1aWx0aW5fczM5MF92Y2VxaHMoKHZlY3RvciBzaWduZWQgc2hvcnQpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaWduZWQgc2hvcnQpX19iLCAmX19jYyk7Ci0gIHJldHVybiBfX2NjID09IDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAotdmVjX2FsbF9lcSh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKLSAgaW50IF9fY2M7Ci0gIF9fYnVpbHRpbl9zMzkwX3ZjZXFocygodmVjdG9yIHNpZ25lZCBzaG9ydClfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNpZ25lZCBzaG9ydClfX2IsICZfX2NjKTsKLSAgcmV0dXJuIF9fY2MgPT0gMDsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Ci12ZWNfYWxsX2VxKHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7Ci0gIGludCBfX2NjOwotICBfX2J1aWx0aW5fczM5MF92Y2VxaHMoKHZlY3RvciBzaWduZWQgc2hvcnQpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaWduZWQgc2hvcnQpX19iLCAmX19jYyk7Ci0gIHJldHVybiBfX2NjID09IDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAotdmVjX2FsbF9lcSh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYikgewotICBpbnQgX19jYzsKLSAgX19idWlsdGluX3MzOTBfdmNlcWZzKF9fYSwgX19iLCAmX19jYyk7Ci0gIHJldHVybiBfX2NjID09IDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAotdmVjX2FsbF9lcSh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IpIHsKLSAgaW50IF9fY2M7Ci0gIF9fYnVpbHRpbl9zMzkwX3ZjZXFmcyhfX2EsICh2ZWN0b3Igc2lnbmVkIGludClfX2IsICZfX2NjKTsKLSAgcmV0dXJuIF9fY2MgPT0gMDsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Ci12ZWNfYWxsX2VxKHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYikgewotICBpbnQgX19jYzsKLSAgX19idWlsdGluX3MzOTBfdmNlcWZzKCh2ZWN0b3Igc2lnbmVkIGludClfX2EsIF9fYiwgJl9fY2MpOwotICByZXR1cm4gX19jYyA9PSAwOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKLXZlY19hbGxfZXEodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7Ci0gIGludCBfX2NjOwotICBfX2J1aWx0aW5fczM5MF92Y2VxZnMoKHZlY3RvciBzaWduZWQgaW50KV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3Igc2lnbmVkIGludClfX2IsICZfX2NjKTsKLSAgcmV0dXJuIF9fY2MgPT0gMDsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Ci12ZWNfYWxsX2VxKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7Ci0gIGludCBfX2NjOwotICBfX2J1aWx0aW5fczM5MF92Y2VxZnMoKHZlY3RvciBzaWduZWQgaW50KV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3Igc2lnbmVkIGludClfX2IsICZfX2NjKTsKLSAgcmV0dXJuIF9fY2MgPT0gMDsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Ci12ZWNfYWxsX2VxKHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7Ci0gIGludCBfX2NjOwotICBfX2J1aWx0aW5fczM5MF92Y2VxZnMoKHZlY3RvciBzaWduZWQgaW50KV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3Igc2lnbmVkIGludClfX2IsICZfX2NjKTsKLSAgcmV0dXJuIF9fY2MgPT0gMDsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Ci12ZWNfYWxsX2VxKHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IpIHsKLSAgaW50IF9fY2M7Ci0gIF9fYnVpbHRpbl9zMzkwX3ZjZXFmcygodmVjdG9yIHNpZ25lZCBpbnQpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaWduZWQgaW50KV9fYiwgJl9fY2MpOwotICByZXR1cm4gX19jYyA9PSAwOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKLXZlY19hbGxfZXEodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKLSAgaW50IF9fY2M7Ci0gIF9fYnVpbHRpbl9zMzkwX3ZjZXFncyhfX2EsIF9fYiwgJl9fY2MpOwotICByZXR1cm4gX19jYyA9PSAwOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKLXZlY19hbGxfZXEodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7Ci0gIGludCBfX2NjOwotICBfX2J1aWx0aW5fczM5MF92Y2VxZ3MoX19hLCAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19iLCAmX19jYyk7Ci0gIHJldHVybiBfX2NjID09IDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAotdmVjX2FsbF9lcSh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKLSAgaW50IF9fY2M7Ci0gIF9fYnVpbHRpbl9zMzkwX3ZjZXFncygodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19hLCBfX2IsICZfX2NjKTsKLSAgcmV0dXJuIF9fY2MgPT0gMDsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Ci12ZWNfYWxsX2VxKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgewotICBpbnQgX19jYzsKLSAgX19idWlsdGluX3MzOTBfdmNlcWdzKCh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19iLCAmX19jYyk7Ci0gIHJldHVybiBfX2NjID09IDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAotdmVjX2FsbF9lcSh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgewotICBpbnQgX19jYzsKLSAgX19idWlsdGluX3MzOTBfdmNlcWdzKCh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19iLCAmX19jYyk7Ci0gIHJldHVybiBfX2NjID09IDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAotdmVjX2FsbF9lcSh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgewotICBpbnQgX19jYzsKLSAgX19idWlsdGluX3MzOTBfdmNlcWdzKCh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19iLCAmX19jYyk7Ci0gIHJldHVybiBfX2NjID09IDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAotdmVjX2FsbF9lcSh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7Ci0gIGludCBfX2NjOwotICBfX2J1aWx0aW5fczM5MF92Y2VxZ3MoKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2IsICZfX2NjKTsKLSAgcmV0dXJuIF9fY2MgPT0gMDsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Ci12ZWNfYWxsX2VxKHZlY3RvciBkb3VibGUgX19hLCB2ZWN0b3IgZG91YmxlIF9fYikgewotICBpbnQgX19jYzsKLSAgX19idWlsdGluX3MzOTBfdmZjZWRicyhfX2EsIF9fYiwgJl9fY2MpOwotICByZXR1cm4gX19jYyA9PSAwOwotfQotCi0vKi0tIHZlY19hbGxfbmUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAotdmVjX2FsbF9uZSh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7Ci0gIGludCBfX2NjOwotICBfX2J1aWx0aW5fczM5MF92Y2VxYnMoX19hLCBfX2IsICZfX2NjKTsKLSAgcmV0dXJuIF9fY2MgPT0gMzsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Ci12ZWNfYWxsX25lKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBib29sIGNoYXIgX19iKSB7Ci0gIGludCBfX2NjOwotICBfX2J1aWx0aW5fczM5MF92Y2VxYnMoX19hLCAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYiwgJl9fY2MpOwotICByZXR1cm4gX19jYyA9PSAzOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKLXZlY19hbGxfbmUodmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKLSAgaW50IF9fY2M7Ci0gIF9fYnVpbHRpbl9zMzkwX3ZjZXFicygodmVjdG9yIHNpZ25lZCBjaGFyKV9fYSwgX19iLCAmX19jYyk7Ci0gIHJldHVybiBfX2NjID09IDM7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAotdmVjX2FsbF9uZSh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgewotICBpbnQgX19jYzsKLSAgX19idWlsdGluX3MzOTBfdmNlcWJzKCh2ZWN0b3Igc2lnbmVkIGNoYXIpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaWduZWQgY2hhcilfX2IsICZfX2NjKTsKLSAgcmV0dXJuIF9fY2MgPT0gMzsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Ci12ZWNfYWxsX25lKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKLSAgaW50IF9fY2M7Ci0gIF9fYnVpbHRpbl9zMzkwX3ZjZXFicygodmVjdG9yIHNpZ25lZCBjaGFyKV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19iLCAmX19jYyk7Ci0gIHJldHVybiBfX2NjID09IDM7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAotdmVjX2FsbF9uZSh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7Ci0gIGludCBfX2NjOwotICBfX2J1aWx0aW5fczM5MF92Y2VxYnMoKHZlY3RvciBzaWduZWQgY2hhcilfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYiwgJl9fY2MpOwotICByZXR1cm4gX19jYyA9PSAzOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKLXZlY19hbGxfbmUodmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciBib29sIGNoYXIgX19iKSB7Ci0gIGludCBfX2NjOwotICBfX2J1aWx0aW5fczM5MF92Y2VxYnMoKHZlY3RvciBzaWduZWQgY2hhcilfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYiwgJl9fY2MpOwotICByZXR1cm4gX19jYyA9PSAzOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKLXZlY19hbGxfbmUodmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBzaWduZWQgc2hvcnQgX19iKSB7Ci0gIGludCBfX2NjOwotICBfX2J1aWx0aW5fczM5MF92Y2VxaHMoX19hLCBfX2IsICZfX2NjKTsKLSAgcmV0dXJuIF9fY2MgPT0gMzsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Ci12ZWNfYWxsX25lKHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKLSAgaW50IF9fY2M7Ci0gIF9fYnVpbHRpbl9zMzkwX3ZjZXFocyhfX2EsICh2ZWN0b3Igc2lnbmVkIHNob3J0KV9fYiwgJl9fY2MpOwotICByZXR1cm4gX19jYyA9PSAzOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKLXZlY19hbGxfbmUodmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYikgewotICBpbnQgX19jYzsKLSAgX19idWlsdGluX3MzOTBfdmNlcWhzKCh2ZWN0b3Igc2lnbmVkIHNob3J0KV9fYSwgX19iLCAmX19jYyk7Ci0gIHJldHVybiBfX2NjID09IDM7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAotdmVjX2FsbF9uZSh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7Ci0gIGludCBfX2NjOwotICBfX2J1aWx0aW5fczM5MF92Y2VxaHMoKHZlY3RvciBzaWduZWQgc2hvcnQpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaWduZWQgc2hvcnQpX19iLCAmX19jYyk7Ci0gIHJldHVybiBfX2NjID09IDM7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAotdmVjX2FsbF9uZSh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKLSAgaW50IF9fY2M7Ci0gIF9fYnVpbHRpbl9zMzkwX3ZjZXFocygodmVjdG9yIHNpZ25lZCBzaG9ydClfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNpZ25lZCBzaG9ydClfX2IsICZfX2NjKTsKLSAgcmV0dXJuIF9fY2MgPT0gMzsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Ci12ZWNfYWxsX25lKHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgewotICBpbnQgX19jYzsKLSAgX19idWlsdGluX3MzOTBfdmNlcWhzKCh2ZWN0b3Igc2lnbmVkIHNob3J0KV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3Igc2lnbmVkIHNob3J0KV9fYiwgJl9fY2MpOwotICByZXR1cm4gX19jYyA9PSAzOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKLXZlY19hbGxfbmUodmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKLSAgaW50IF9fY2M7Ci0gIF9fYnVpbHRpbl9zMzkwX3ZjZXFocygodmVjdG9yIHNpZ25lZCBzaG9ydClfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNpZ25lZCBzaG9ydClfX2IsICZfX2NjKTsKLSAgcmV0dXJuIF9fY2MgPT0gMzsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Ci12ZWNfYWxsX25lKHZlY3RvciBzaWduZWQgaW50IF9fYSwgdmVjdG9yIHNpZ25lZCBpbnQgX19iKSB7Ci0gIGludCBfX2NjOwotICBfX2J1aWx0aW5fczM5MF92Y2VxZnMoX19hLCBfX2IsICZfX2NjKTsKLSAgcmV0dXJuIF9fY2MgPT0gMzsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Ci12ZWNfYWxsX25lKHZlY3RvciBzaWduZWQgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYikgewotICBpbnQgX19jYzsKLSAgX19idWlsdGluX3MzOTBfdmNlcWZzKF9fYSwgKHZlY3RvciBzaWduZWQgaW50KV9fYiwgJl9fY2MpOwotICByZXR1cm4gX19jYyA9PSAzOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKLXZlY19hbGxfbmUodmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIHNpZ25lZCBpbnQgX19iKSB7Ci0gIGludCBfX2NjOwotICBfX2J1aWx0aW5fczM5MF92Y2VxZnMoKHZlY3RvciBzaWduZWQgaW50KV9fYSwgX19iLCAmX19jYyk7Ci0gIHJldHVybiBfX2NjID09IDM7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAotdmVjX2FsbF9uZSh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKLSAgaW50IF9fY2M7Ci0gIF9fYnVpbHRpbl9zMzkwX3ZjZXFmcygodmVjdG9yIHNpZ25lZCBpbnQpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaWduZWQgaW50KV9fYiwgJl9fY2MpOwotICByZXR1cm4gX19jYyA9PSAzOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKLXZlY19hbGxfbmUodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IpIHsKLSAgaW50IF9fY2M7Ci0gIF9fYnVpbHRpbl9zMzkwX3ZjZXFmcygodmVjdG9yIHNpZ25lZCBpbnQpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaWduZWQgaW50KV9fYiwgJl9fY2MpOwotICByZXR1cm4gX19jYyA9PSAzOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKLXZlY19hbGxfbmUodmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKLSAgaW50IF9fY2M7Ci0gIF9fYnVpbHRpbl9zMzkwX3ZjZXFmcygodmVjdG9yIHNpZ25lZCBpbnQpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaWduZWQgaW50KV9fYiwgJl9fY2MpOwotICByZXR1cm4gX19jYyA9PSAzOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKLXZlY19hbGxfbmUodmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYikgewotICBpbnQgX19jYzsKLSAgX19idWlsdGluX3MzOTBfdmNlcWZzKCh2ZWN0b3Igc2lnbmVkIGludClfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNpZ25lZCBpbnQpX19iLCAmX19jYyk7Ci0gIHJldHVybiBfX2NjID09IDM7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAotdmVjX2FsbF9uZSh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgewotICBpbnQgX19jYzsKLSAgX19idWlsdGluX3MzOTBfdmNlcWdzKF9fYSwgX19iLCAmX19jYyk7Ci0gIHJldHVybiBfX2NjID09IDM7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAotdmVjX2FsbF9uZSh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKLSAgaW50IF9fY2M7Ci0gIF9fYnVpbHRpbl9zMzkwX3ZjZXFncyhfX2EsICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2IsICZfX2NjKTsKLSAgcmV0dXJuIF9fY2MgPT0gMzsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Ci12ZWNfYWxsX25lKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgewotICBpbnQgX19jYzsKLSAgX19idWlsdGluX3MzOTBfdmNlcWdzKCh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2EsIF9fYiwgJl9fY2MpOwotICByZXR1cm4gX19jYyA9PSAzOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKLXZlY19hbGxfbmUodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7Ci0gIGludCBfX2NjOwotICBfX2J1aWx0aW5fczM5MF92Y2VxZ3MoKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2IsICZfX2NjKTsKLSAgcmV0dXJuIF9fY2MgPT0gMzsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Ci12ZWNfYWxsX25lKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7Ci0gIGludCBfX2NjOwotICBfX2J1aWx0aW5fczM5MF92Y2VxZ3MoKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2IsICZfX2NjKTsKLSAgcmV0dXJuIF9fY2MgPT0gMzsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Ci12ZWNfYWxsX25lKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7Ci0gIGludCBfX2NjOwotICBfX2J1aWx0aW5fczM5MF92Y2VxZ3MoKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2IsICZfX2NjKTsKLSAgcmV0dXJuIF9fY2MgPT0gMzsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Ci12ZWNfYWxsX25lKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKLSAgaW50IF9fY2M7Ci0gIF9fYnVpbHRpbl9zMzkwX3ZjZXFncygodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYiwgJl9fY2MpOwotICByZXR1cm4gX19jYyA9PSAzOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKLXZlY19hbGxfbmUodmVjdG9yIGRvdWJsZSBfX2EsIHZlY3RvciBkb3VibGUgX19iKSB7Ci0gIGludCBfX2NjOwotICBfX2J1aWx0aW5fczM5MF92ZmNlZGJzKF9fYSwgX19iLCAmX19jYyk7Ci0gIHJldHVybiBfX2NjID09IDM7Ci19Ci0KLS8qLS0gdmVjX2FsbF9nZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Ci12ZWNfYWxsX2dlKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKLSAgaW50IF9fY2M7Ci0gIF9fYnVpbHRpbl9zMzkwX3ZjaGJzKF9fYiwgX19hLCAmX19jYyk7Ci0gIHJldHVybiBfX2NjID09IDM7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAotdmVjX2FsbF9nZSh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgewotICBpbnQgX19jYzsKLSAgX19idWlsdGluX3MzOTBfdmNoYnMoKHZlY3RvciBzaWduZWQgY2hhcilfX2IsIF9fYSwgJl9fY2MpOwotICByZXR1cm4gX19jYyA9PSAzOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKLXZlY19hbGxfZ2UodmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKLSAgaW50IF9fY2M7Ci0gIF9fYnVpbHRpbl9zMzkwX3ZjaGJzKF9fYiwgKHZlY3RvciBzaWduZWQgY2hhcilfX2EsICZfX2NjKTsKLSAgcmV0dXJuIF9fY2MgPT0gMzsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Ci12ZWNfYWxsX2dlKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7Ci0gIGludCBfX2NjOwotICBfX2J1aWx0aW5fczM5MF92Y2hsYnMoX19iLCBfX2EsICZfX2NjKTsKLSAgcmV0dXJuIF9fY2MgPT0gMzsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Ci12ZWNfYWxsX2dlKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKLSAgaW50IF9fY2M7Ci0gIF9fYnVpbHRpbl9zMzkwX3ZjaGxicygodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iLCBfX2EsICZfX2NjKTsKLSAgcmV0dXJuIF9fY2MgPT0gMzsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Ci12ZWNfYWxsX2dlKHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKLSAgaW50IF9fY2M7Ci0gIF9fYnVpbHRpbl9zMzkwX3ZjaGxicyhfX2IsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICZfX2NjKTsKLSAgcmV0dXJuIF9fY2MgPT0gMzsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Ci12ZWNfYWxsX2dlKHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgewotICBpbnQgX19jYzsKLSAgX19idWlsdGluX3MzOTBfdmNobGJzKCh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAmX19jYyk7Ci0gIHJldHVybiBfX2NjID09IDM7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAotdmVjX2FsbF9nZSh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2IpIHsKLSAgaW50IF9fY2M7Ci0gIF9fYnVpbHRpbl9zMzkwX3ZjaGhzKF9fYiwgX19hLCAmX19jYyk7Ci0gIHJldHVybiBfX2NjID09IDM7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAotdmVjX2FsbF9nZSh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7Ci0gIGludCBfX2NjOwotICBfX2J1aWx0aW5fczM5MF92Y2hocygodmVjdG9yIHNpZ25lZCBzaG9ydClfX2IsIF9fYSwgJl9fY2MpOwotICByZXR1cm4gX19jYyA9PSAzOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKLXZlY19hbGxfZ2UodmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYikgewotICBpbnQgX19jYzsKLSAgX19idWlsdGluX3MzOTBfdmNoaHMoX19iLCAodmVjdG9yIHNpZ25lZCBzaG9ydClfX2EsICZfX2NjKTsKLSAgcmV0dXJuIF9fY2MgPT0gMzsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Ci12ZWNfYWxsX2dlKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKLSAgaW50IF9fY2M7Ci0gIF9fYnVpbHRpbl9zMzkwX3ZjaGxocyhfX2IsIF9fYSwgJl9fY2MpOwotICByZXR1cm4gX19jYyA9PSAzOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKLXZlY19hbGxfZ2UodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7Ci0gIGludCBfX2NjOwotICBfX2J1aWx0aW5fczM5MF92Y2hsaHMoKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2IsIF9fYSwgJl9fY2MpOwotICByZXR1cm4gX19jYyA9PSAzOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKLXZlY19hbGxfZ2UodmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7Ci0gIGludCBfX2NjOwotICBfX2J1aWx0aW5fczM5MF92Y2hsaHMoX19iLCAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSwgJl9fY2MpOwotICByZXR1cm4gX19jYyA9PSAzOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKLXZlY19hbGxfZ2UodmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKLSAgaW50IF9fY2M7Ci0gIF9fYnVpbHRpbl9zMzkwX3ZjaGxocygodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hLCAmX19jYyk7Ci0gIHJldHVybiBfX2NjID09IDM7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAotdmVjX2FsbF9nZSh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYikgewotICBpbnQgX19jYzsKLSAgX19idWlsdGluX3MzOTBfdmNoZnMoX19iLCBfX2EsICZfX2NjKTsKLSAgcmV0dXJuIF9fY2MgPT0gMzsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Ci12ZWNfYWxsX2dlKHZlY3RvciBzaWduZWQgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYikgewotICBpbnQgX19jYzsKLSAgX19idWlsdGluX3MzOTBfdmNoZnMoKHZlY3RvciBzaWduZWQgaW50KV9fYiwgX19hLCAmX19jYyk7Ci0gIHJldHVybiBfX2NjID09IDM7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAotdmVjX2FsbF9nZSh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3Igc2lnbmVkIGludCBfX2IpIHsKLSAgaW50IF9fY2M7Ci0gIF9fYnVpbHRpbl9zMzkwX3ZjaGZzKF9fYiwgKHZlY3RvciBzaWduZWQgaW50KV9fYSwgJl9fY2MpOwotICByZXR1cm4gX19jYyA9PSAzOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKLXZlY19hbGxfZ2UodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7Ci0gIGludCBfX2NjOwotICBfX2J1aWx0aW5fczM5MF92Y2hsZnMoX19iLCBfX2EsICZfX2NjKTsKLSAgcmV0dXJuIF9fY2MgPT0gMzsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Ci12ZWNfYWxsX2dlKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7Ci0gIGludCBfX2NjOwotICBfX2J1aWx0aW5fczM5MF92Y2hsZnMoKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iLCBfX2EsICZfX2NjKTsKLSAgcmV0dXJuIF9fY2MgPT0gMzsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Ci12ZWNfYWxsX2dlKHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7Ci0gIGludCBfX2NjOwotICBfX2J1aWx0aW5fczM5MF92Y2hsZnMoX19iLCAodmVjdG9yIHVuc2lnbmVkIGludClfX2EsICZfX2NjKTsKLSAgcmV0dXJuIF9fY2MgPT0gMzsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Ci12ZWNfYWxsX2dlKHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IpIHsKLSAgaW50IF9fY2M7Ci0gIF9fYnVpbHRpbl9zMzkwX3ZjaGxmcygodmVjdG9yIHVuc2lnbmVkIGludClfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2EsICZfX2NjKTsKLSAgcmV0dXJuIF9fY2MgPT0gMzsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Ci12ZWNfYWxsX2dlKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7Ci0gIGludCBfX2NjOwotICBfX2J1aWx0aW5fczM5MF92Y2hncyhfX2IsIF9fYSwgJl9fY2MpOwotICByZXR1cm4gX19jYyA9PSAzOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKLXZlY19hbGxfZ2UodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7Ci0gIGludCBfX2NjOwotICBfX2J1aWx0aW5fczM5MF92Y2hncygodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19iLCBfX2EsICZfX2NjKTsKLSAgcmV0dXJuIF9fY2MgPT0gMzsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Ci12ZWNfYWxsX2dlKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgewotICBpbnQgX19jYzsKLSAgX19idWlsdGluX3MzOTBfdmNoZ3MoX19iLCAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19hLCAmX19jYyk7Ci0gIHJldHVybiBfX2NjID09IDM7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAotdmVjX2FsbF9nZSh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKLSAgaW50IF9fY2M7Ci0gIF9fYnVpbHRpbl9zMzkwX3ZjaGxncyhfX2IsIF9fYSwgJl9fY2MpOwotICByZXR1cm4gX19jYyA9PSAzOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKLXZlY19hbGxfZ2UodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKLSAgaW50IF9fY2M7Ci0gIF9fYnVpbHRpbl9zMzkwX3ZjaGxncygodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2IsIF9fYSwgJl9fY2MpOwotICByZXR1cm4gX19jYyA9PSAzOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKLXZlY19hbGxfZ2UodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKLSAgaW50IF9fY2M7Ci0gIF9fYnVpbHRpbl9zMzkwX3ZjaGxncyhfX2IsICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYSwgJl9fY2MpOwotICByZXR1cm4gX19jYyA9PSAzOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKLXZlY19hbGxfZ2UodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgewotICBpbnQgX19jYzsKLSAgX19idWlsdGluX3MzOTBfdmNobGdzKCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYSwgJl9fY2MpOwotICByZXR1cm4gX19jYyA9PSAzOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKLXZlY19hbGxfZ2UodmVjdG9yIGRvdWJsZSBfX2EsIHZlY3RvciBkb3VibGUgX19iKSB7Ci0gIGludCBfX2NjOwotICBfX2J1aWx0aW5fczM5MF92ZmNoZWRicyhfX2EsIF9fYiwgJl9fY2MpOwotICByZXR1cm4gX19jYyA9PSAwOwotfQotCi0vKi0tIHZlY19hbGxfZ3QgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAotdmVjX2FsbF9ndCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7Ci0gIGludCBfX2NjOwotICBfX2J1aWx0aW5fczM5MF92Y2hicyhfX2EsIF9fYiwgJl9fY2MpOwotICByZXR1cm4gX19jYyA9PSAwOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKLXZlY19hbGxfZ3QodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKLSAgaW50IF9fY2M7Ci0gIF9fYnVpbHRpbl9zMzkwX3ZjaGJzKF9fYSwgKHZlY3RvciBzaWduZWQgY2hhcilfX2IsICZfX2NjKTsKLSAgcmV0dXJuIF9fY2MgPT0gMDsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Ci12ZWNfYWxsX2d0KHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7Ci0gIGludCBfX2NjOwotICBfX2J1aWx0aW5fczM5MF92Y2hicygodmVjdG9yIHNpZ25lZCBjaGFyKV9fYSwgX19iLCAmX19jYyk7Ci0gIHJldHVybiBfX2NjID09IDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAotdmVjX2FsbF9ndCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgewotICBpbnQgX19jYzsKLSAgX19idWlsdGluX3MzOTBfdmNobGJzKF9fYSwgX19iLCAmX19jYyk7Ci0gIHJldHVybiBfX2NjID09IDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAotdmVjX2FsbF9ndCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciBib29sIGNoYXIgX19iKSB7Ci0gIGludCBfX2NjOwotICBfX2J1aWx0aW5fczM5MF92Y2hsYnMoX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iLCAmX19jYyk7Ci0gIHJldHVybiBfX2NjID09IDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAotdmVjX2FsbF9ndCh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7Ci0gIGludCBfX2NjOwotICBfX2J1aWx0aW5fczM5MF92Y2hsYnMoKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgX19iLCAmX19jYyk7Ci0gIHJldHVybiBfX2NjID09IDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAotdmVjX2FsbF9ndCh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKLSAgaW50IF9fY2M7Ci0gIF9fYnVpbHRpbl9zMzkwX3ZjaGxicygodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYiwgJl9fY2MpOwotICByZXR1cm4gX19jYyA9PSAwOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKLXZlY19hbGxfZ3QodmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBzaWduZWQgc2hvcnQgX19iKSB7Ci0gIGludCBfX2NjOwotICBfX2J1aWx0aW5fczM5MF92Y2hocyhfX2EsIF9fYiwgJl9fY2MpOwotICByZXR1cm4gX19jYyA9PSAwOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKLXZlY19hbGxfZ3QodmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBib29sIHNob3J0IF9fYikgewotICBpbnQgX19jYzsKLSAgX19idWlsdGluX3MzOTBfdmNoaHMoX19hLCAodmVjdG9yIHNpZ25lZCBzaG9ydClfX2IsICZfX2NjKTsKLSAgcmV0dXJuIF9fY2MgPT0gMDsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Ci12ZWNfYWxsX2d0KHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2IpIHsKLSAgaW50IF9fY2M7Ci0gIF9fYnVpbHRpbl9zMzkwX3ZjaGhzKCh2ZWN0b3Igc2lnbmVkIHNob3J0KV9fYSwgX19iLCAmX19jYyk7Ci0gIHJldHVybiBfX2NjID09IDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAotdmVjX2FsbF9ndCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7Ci0gIGludCBfX2NjOwotICBfX2J1aWx0aW5fczM5MF92Y2hsaHMoX19hLCBfX2IsICZfX2NjKTsKLSAgcmV0dXJuIF9fY2MgPT0gMDsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Ci12ZWNfYWxsX2d0KHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBib29sIHNob3J0IF9fYikgewotICBpbnQgX19jYzsKLSAgX19idWlsdGluX3MzOTBfdmNobGhzKF9fYSwgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2IsICZfX2NjKTsKLSAgcmV0dXJuIF9fY2MgPT0gMDsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Ci12ZWNfYWxsX2d0KHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgewotICBpbnQgX19jYzsKLSAgX19idWlsdGluX3MzOTBfdmNobGhzKCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hLCBfX2IsICZfX2NjKTsKLSAgcmV0dXJuIF9fY2MgPT0gMDsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Ci12ZWNfYWxsX2d0KHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7Ci0gIGludCBfX2NjOwotICBfX2J1aWx0aW5fczM5MF92Y2hsaHMoKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYiwgJl9fY2MpOwotICByZXR1cm4gX19jYyA9PSAwOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKLXZlY19hbGxfZ3QodmVjdG9yIHNpZ25lZCBpbnQgX19hLCB2ZWN0b3Igc2lnbmVkIGludCBfX2IpIHsKLSAgaW50IF9fY2M7Ci0gIF9fYnVpbHRpbl9zMzkwX3ZjaGZzKF9fYSwgX19iLCAmX19jYyk7Ci0gIHJldHVybiBfX2NjID09IDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAotdmVjX2FsbF9ndCh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IpIHsKLSAgaW50IF9fY2M7Ci0gIF9fYnVpbHRpbl9zMzkwX3ZjaGZzKF9fYSwgKHZlY3RvciBzaWduZWQgaW50KV9fYiwgJl9fY2MpOwotICByZXR1cm4gX19jYyA9PSAwOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKLXZlY19hbGxfZ3QodmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIHNpZ25lZCBpbnQgX19iKSB7Ci0gIGludCBfX2NjOwotICBfX2J1aWx0aW5fczM5MF92Y2hmcygodmVjdG9yIHNpZ25lZCBpbnQpX19hLCBfX2IsICZfX2NjKTsKLSAgcmV0dXJuIF9fY2MgPT0gMDsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Ci12ZWNfYWxsX2d0KHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgewotICBpbnQgX19jYzsKLSAgX19idWlsdGluX3MzOTBfdmNobGZzKF9fYSwgX19iLCAmX19jYyk7Ci0gIHJldHVybiBfX2NjID09IDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAotdmVjX2FsbF9ndCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYikgewotICBpbnQgX19jYzsKLSAgX19idWlsdGluX3MzOTBfdmNobGZzKF9fYSwgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iLCAmX19jYyk7Ci0gIHJldHVybiBfX2NjID09IDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAotdmVjX2FsbF9ndCh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgewotICBpbnQgX19jYzsKLSAgX19idWlsdGluX3MzOTBfdmNobGZzKCh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSwgX19iLCAmX19jYyk7Ci0gIHJldHVybiBfX2NjID09IDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAotdmVjX2FsbF9ndCh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7Ci0gIGludCBfX2NjOwotICBfX2J1aWx0aW5fczM5MF92Y2hsZnMoKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iLCAmX19jYyk7Ci0gIHJldHVybiBfX2NjID09IDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAotdmVjX2FsbF9ndCh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgewotICBpbnQgX19jYzsKLSAgX19idWlsdGluX3MzOTBfdmNoZ3MoX19hLCBfX2IsICZfX2NjKTsKLSAgcmV0dXJuIF9fY2MgPT0gMDsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Ci12ZWNfYWxsX2d0KHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgewotICBpbnQgX19jYzsKLSAgX19idWlsdGluX3MzOTBfdmNoZ3MoX19hLCAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19iLCAmX19jYyk7Ci0gIHJldHVybiBfX2NjID09IDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAotdmVjX2FsbF9ndCh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKLSAgaW50IF9fY2M7Ci0gIF9fYnVpbHRpbl9zMzkwX3ZjaGdzKCh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2EsIF9fYiwgJl9fY2MpOwotICByZXR1cm4gX19jYyA9PSAwOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKLXZlY19hbGxfZ3QodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7Ci0gIGludCBfX2NjOwotICBfX2J1aWx0aW5fczM5MF92Y2hsZ3MoX19hLCBfX2IsICZfX2NjKTsKLSAgcmV0dXJuIF9fY2MgPT0gMDsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Ci12ZWNfYWxsX2d0KHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7Ci0gIGludCBfX2NjOwotICBfX2J1aWx0aW5fczM5MF92Y2hsZ3MoX19hLCAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2IsICZfX2NjKTsKLSAgcmV0dXJuIF9fY2MgPT0gMDsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Ci12ZWNfYWxsX2d0KHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7Ci0gIGludCBfX2NjOwotICBfX2J1aWx0aW5fczM5MF92Y2hsZ3MoKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19hLCBfX2IsICZfX2NjKTsKLSAgcmV0dXJuIF9fY2MgPT0gMDsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Ci12ZWNfYWxsX2d0KHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKLSAgaW50IF9fY2M7Ci0gIF9fYnVpbHRpbl9zMzkwX3ZjaGxncygodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2IsICZfX2NjKTsKLSAgcmV0dXJuIF9fY2MgPT0gMDsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Ci12ZWNfYWxsX2d0KHZlY3RvciBkb3VibGUgX19hLCB2ZWN0b3IgZG91YmxlIF9fYikgewotICBpbnQgX19jYzsKLSAgX19idWlsdGluX3MzOTBfdmZjaGRicyhfX2EsIF9fYiwgJl9fY2MpOwotICByZXR1cm4gX19jYyA9PSAwOwotfQotCi0vKi0tIHZlY19hbGxfbGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAotdmVjX2FsbF9sZSh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7Ci0gIGludCBfX2NjOwotICBfX2J1aWx0aW5fczM5MF92Y2hicyhfX2EsIF9fYiwgJl9fY2MpOwotICByZXR1cm4gX19jYyA9PSAzOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKLXZlY19hbGxfbGUodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKLSAgaW50IF9fY2M7Ci0gIF9fYnVpbHRpbl9zMzkwX3ZjaGJzKF9fYSwgKHZlY3RvciBzaWduZWQgY2hhcilfX2IsICZfX2NjKTsKLSAgcmV0dXJuIF9fY2MgPT0gMzsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Ci12ZWNfYWxsX2xlKHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7Ci0gIGludCBfX2NjOwotICBfX2J1aWx0aW5fczM5MF92Y2hicygodmVjdG9yIHNpZ25lZCBjaGFyKV9fYSwgX19iLCAmX19jYyk7Ci0gIHJldHVybiBfX2NjID09IDM7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAotdmVjX2FsbF9sZSh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgewotICBpbnQgX19jYzsKLSAgX19idWlsdGluX3MzOTBfdmNobGJzKF9fYSwgX19iLCAmX19jYyk7Ci0gIHJldHVybiBfX2NjID09IDM7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAotdmVjX2FsbF9sZSh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciBib29sIGNoYXIgX19iKSB7Ci0gIGludCBfX2NjOwotICBfX2J1aWx0aW5fczM5MF92Y2hsYnMoX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iLCAmX19jYyk7Ci0gIHJldHVybiBfX2NjID09IDM7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAotdmVjX2FsbF9sZSh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7Ci0gIGludCBfX2NjOwotICBfX2J1aWx0aW5fczM5MF92Y2hsYnMoKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgX19iLCAmX19jYyk7Ci0gIHJldHVybiBfX2NjID09IDM7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAotdmVjX2FsbF9sZSh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKLSAgaW50IF9fY2M7Ci0gIF9fYnVpbHRpbl9zMzkwX3ZjaGxicygodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYiwgJl9fY2MpOwotICByZXR1cm4gX19jYyA9PSAzOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKLXZlY19hbGxfbGUodmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBzaWduZWQgc2hvcnQgX19iKSB7Ci0gIGludCBfX2NjOwotICBfX2J1aWx0aW5fczM5MF92Y2hocyhfX2EsIF9fYiwgJl9fY2MpOwotICByZXR1cm4gX19jYyA9PSAzOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKLXZlY19hbGxfbGUodmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBib29sIHNob3J0IF9fYikgewotICBpbnQgX19jYzsKLSAgX19idWlsdGluX3MzOTBfdmNoaHMoX19hLCAodmVjdG9yIHNpZ25lZCBzaG9ydClfX2IsICZfX2NjKTsKLSAgcmV0dXJuIF9fY2MgPT0gMzsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Ci12ZWNfYWxsX2xlKHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2IpIHsKLSAgaW50IF9fY2M7Ci0gIF9fYnVpbHRpbl9zMzkwX3ZjaGhzKCh2ZWN0b3Igc2lnbmVkIHNob3J0KV9fYSwgX19iLCAmX19jYyk7Ci0gIHJldHVybiBfX2NjID09IDM7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAotdmVjX2FsbF9sZSh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7Ci0gIGludCBfX2NjOwotICBfX2J1aWx0aW5fczM5MF92Y2hsaHMoX19hLCBfX2IsICZfX2NjKTsKLSAgcmV0dXJuIF9fY2MgPT0gMzsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Ci12ZWNfYWxsX2xlKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBib29sIHNob3J0IF9fYikgewotICBpbnQgX19jYzsKLSAgX19idWlsdGluX3MzOTBfdmNobGhzKF9fYSwgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2IsICZfX2NjKTsKLSAgcmV0dXJuIF9fY2MgPT0gMzsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Ci12ZWNfYWxsX2xlKHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgewotICBpbnQgX19jYzsKLSAgX19idWlsdGluX3MzOTBfdmNobGhzKCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hLCBfX2IsICZfX2NjKTsKLSAgcmV0dXJuIF9fY2MgPT0gMzsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Ci12ZWNfYWxsX2xlKHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7Ci0gIGludCBfX2NjOwotICBfX2J1aWx0aW5fczM5MF92Y2hsaHMoKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYiwgJl9fY2MpOwotICByZXR1cm4gX19jYyA9PSAzOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKLXZlY19hbGxfbGUodmVjdG9yIHNpZ25lZCBpbnQgX19hLCB2ZWN0b3Igc2lnbmVkIGludCBfX2IpIHsKLSAgaW50IF9fY2M7Ci0gIF9fYnVpbHRpbl9zMzkwX3ZjaGZzKF9fYSwgX19iLCAmX19jYyk7Ci0gIHJldHVybiBfX2NjID09IDM7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAotdmVjX2FsbF9sZSh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IpIHsKLSAgaW50IF9fY2M7Ci0gIF9fYnVpbHRpbl9zMzkwX3ZjaGZzKF9fYSwgKHZlY3RvciBzaWduZWQgaW50KV9fYiwgJl9fY2MpOwotICByZXR1cm4gX19jYyA9PSAzOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKLXZlY19hbGxfbGUodmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIHNpZ25lZCBpbnQgX19iKSB7Ci0gIGludCBfX2NjOwotICBfX2J1aWx0aW5fczM5MF92Y2hmcygodmVjdG9yIHNpZ25lZCBpbnQpX19hLCBfX2IsICZfX2NjKTsKLSAgcmV0dXJuIF9fY2MgPT0gMzsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Ci12ZWNfYWxsX2xlKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgewotICBpbnQgX19jYzsKLSAgX19idWlsdGluX3MzOTBfdmNobGZzKF9fYSwgX19iLCAmX19jYyk7Ci0gIHJldHVybiBfX2NjID09IDM7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAotdmVjX2FsbF9sZSh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYikgewotICBpbnQgX19jYzsKLSAgX19idWlsdGluX3MzOTBfdmNobGZzKF9fYSwgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iLCAmX19jYyk7Ci0gIHJldHVybiBfX2NjID09IDM7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAotdmVjX2FsbF9sZSh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgewotICBpbnQgX19jYzsKLSAgX19idWlsdGluX3MzOTBfdmNobGZzKCh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSwgX19iLCAmX19jYyk7Ci0gIHJldHVybiBfX2NjID09IDM7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAotdmVjX2FsbF9sZSh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7Ci0gIGludCBfX2NjOwotICBfX2J1aWx0aW5fczM5MF92Y2hsZnMoKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iLCAmX19jYyk7Ci0gIHJldHVybiBfX2NjID09IDM7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAotdmVjX2FsbF9sZSh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgewotICBpbnQgX19jYzsKLSAgX19idWlsdGluX3MzOTBfdmNoZ3MoX19hLCBfX2IsICZfX2NjKTsKLSAgcmV0dXJuIF9fY2MgPT0gMzsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Ci12ZWNfYWxsX2xlKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgewotICBpbnQgX19jYzsKLSAgX19idWlsdGluX3MzOTBfdmNoZ3MoX19hLCAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19iLCAmX19jYyk7Ci0gIHJldHVybiBfX2NjID09IDM7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAotdmVjX2FsbF9sZSh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKLSAgaW50IF9fY2M7Ci0gIF9fYnVpbHRpbl9zMzkwX3ZjaGdzKCh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2EsIF9fYiwgJl9fY2MpOwotICByZXR1cm4gX19jYyA9PSAzOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKLXZlY19hbGxfbGUodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7Ci0gIGludCBfX2NjOwotICBfX2J1aWx0aW5fczM5MF92Y2hsZ3MoX19hLCBfX2IsICZfX2NjKTsKLSAgcmV0dXJuIF9fY2MgPT0gMzsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Ci12ZWNfYWxsX2xlKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7Ci0gIGludCBfX2NjOwotICBfX2J1aWx0aW5fczM5MF92Y2hsZ3MoX19hLCAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2IsICZfX2NjKTsKLSAgcmV0dXJuIF9fY2MgPT0gMzsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Ci12ZWNfYWxsX2xlKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7Ci0gIGludCBfX2NjOwotICBfX2J1aWx0aW5fczM5MF92Y2hsZ3MoKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19hLCBfX2IsICZfX2NjKTsKLSAgcmV0dXJuIF9fY2MgPT0gMzsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Ci12ZWNfYWxsX2xlKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKLSAgaW50IF9fY2M7Ci0gIF9fYnVpbHRpbl9zMzkwX3ZjaGxncygodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2IsICZfX2NjKTsKLSAgcmV0dXJuIF9fY2MgPT0gMzsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Ci12ZWNfYWxsX2xlKHZlY3RvciBkb3VibGUgX19hLCB2ZWN0b3IgZG91YmxlIF9fYikgewotICBpbnQgX19jYzsKLSAgX19idWlsdGluX3MzOTBfdmZjaGVkYnMoX19iLCBfX2EsICZfX2NjKTsKLSAgcmV0dXJuIF9fY2MgPT0gMDsKLX0KLQotLyotLSB2ZWNfYWxsX2x0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKLXZlY19hbGxfbHQodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgewotICBpbnQgX19jYzsKLSAgX19idWlsdGluX3MzOTBfdmNoYnMoX19iLCBfX2EsICZfX2NjKTsKLSAgcmV0dXJuIF9fY2MgPT0gMDsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Ci12ZWNfYWxsX2x0KHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBib29sIGNoYXIgX19iKSB7Ci0gIGludCBfX2NjOwotICBfX2J1aWx0aW5fczM5MF92Y2hicygodmVjdG9yIHNpZ25lZCBjaGFyKV9fYiwgX19hLCAmX19jYyk7Ci0gIHJldHVybiBfX2NjID09IDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAotdmVjX2FsbF9sdCh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgewotICBpbnQgX19jYzsKLSAgX19idWlsdGluX3MzOTBfdmNoYnMoX19iLCAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYSwgJl9fY2MpOwotICByZXR1cm4gX19jYyA9PSAwOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKLXZlY19hbGxfbHQodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKLSAgaW50IF9fY2M7Ci0gIF9fYnVpbHRpbl9zMzkwX3ZjaGxicyhfX2IsIF9fYSwgJl9fY2MpOwotICByZXR1cm4gX19jYyA9PSAwOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKLXZlY19hbGxfbHQodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgewotICBpbnQgX19jYzsKLSAgX19idWlsdGluX3MzOTBfdmNobGJzKCh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IsIF9fYSwgJl9fY2MpOwotICByZXR1cm4gX19jYyA9PSAwOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKLXZlY19hbGxfbHQodmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgewotICBpbnQgX19jYzsKLSAgX19idWlsdGluX3MzOTBfdmNobGJzKF9fYiwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgJl9fY2MpOwotICByZXR1cm4gX19jYyA9PSAwOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKLXZlY19hbGxfbHQodmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciBib29sIGNoYXIgX19iKSB7Ci0gIGludCBfX2NjOwotICBfX2J1aWx0aW5fczM5MF92Y2hsYnMoKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICZfX2NjKTsKLSAgcmV0dXJuIF9fY2MgPT0gMDsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Ci12ZWNfYWxsX2x0KHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYikgewotICBpbnQgX19jYzsKLSAgX19idWlsdGluX3MzOTBfdmNoaHMoX19iLCBfX2EsICZfX2NjKTsKLSAgcmV0dXJuIF9fY2MgPT0gMDsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Ci12ZWNfYWxsX2x0KHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKLSAgaW50IF9fY2M7Ci0gIF9fYnVpbHRpbl9zMzkwX3ZjaGhzKCh2ZWN0b3Igc2lnbmVkIHNob3J0KV9fYiwgX19hLCAmX19jYyk7Ci0gIHJldHVybiBfX2NjID09IDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAotdmVjX2FsbF9sdCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciBzaWduZWQgc2hvcnQgX19iKSB7Ci0gIGludCBfX2NjOwotICBfX2J1aWx0aW5fczM5MF92Y2hocyhfX2IsICh2ZWN0b3Igc2lnbmVkIHNob3J0KV9fYSwgJl9fY2MpOwotICByZXR1cm4gX19jYyA9PSAwOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKLXZlY19hbGxfbHQodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgewotICBpbnQgX19jYzsKLSAgX19idWlsdGluX3MzOTBfdmNobGhzKF9fYiwgX19hLCAmX19jYyk7Ci0gIHJldHVybiBfX2NjID09IDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAotdmVjX2FsbF9sdCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKLSAgaW50IF9fY2M7Ci0gIF9fYnVpbHRpbl9zMzkwX3ZjaGxocygodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYiwgX19hLCAmX19jYyk7Ci0gIHJldHVybiBfX2NjID09IDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAotdmVjX2FsbF9sdCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKLSAgaW50IF9fY2M7Ci0gIF9fYnVpbHRpbl9zMzkwX3ZjaGxocyhfX2IsICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hLCAmX19jYyk7Ci0gIHJldHVybiBfX2NjID09IDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAotdmVjX2FsbF9sdCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciBib29sIHNob3J0IF9fYikgewotICBpbnQgX19jYzsKLSAgX19idWlsdGluX3MzOTBfdmNobGhzKCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EsICZfX2NjKTsKLSAgcmV0dXJuIF9fY2MgPT0gMDsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Ci12ZWNfYWxsX2x0KHZlY3RvciBzaWduZWQgaW50IF9fYSwgdmVjdG9yIHNpZ25lZCBpbnQgX19iKSB7Ci0gIGludCBfX2NjOwotICBfX2J1aWx0aW5fczM5MF92Y2hmcyhfX2IsIF9fYSwgJl9fY2MpOwotICByZXR1cm4gX19jYyA9PSAwOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKLXZlY19hbGxfbHQodmVjdG9yIHNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7Ci0gIGludCBfX2NjOwotICBfX2J1aWx0aW5fczM5MF92Y2hmcygodmVjdG9yIHNpZ25lZCBpbnQpX19iLCBfX2EsICZfX2NjKTsKLSAgcmV0dXJuIF9fY2MgPT0gMDsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Ci12ZWNfYWxsX2x0KHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYikgewotICBpbnQgX19jYzsKLSAgX19idWlsdGluX3MzOTBfdmNoZnMoX19iLCAodmVjdG9yIHNpZ25lZCBpbnQpX19hLCAmX19jYyk7Ci0gIHJldHVybiBfX2NjID09IDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAotdmVjX2FsbF9sdCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKLSAgaW50IF9fY2M7Ci0gIF9fYnVpbHRpbl9zMzkwX3ZjaGxmcyhfX2IsIF9fYSwgJl9fY2MpOwotICByZXR1cm4gX19jYyA9PSAwOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKLXZlY19hbGxfbHQodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IpIHsKLSAgaW50IF9fY2M7Ci0gIF9fYnVpbHRpbl9zMzkwX3ZjaGxmcygodmVjdG9yIHVuc2lnbmVkIGludClfX2IsIF9fYSwgJl9fY2MpOwotICByZXR1cm4gX19jYyA9PSAwOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKLXZlY19hbGxfbHQodmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKLSAgaW50IF9fY2M7Ci0gIF9fYnVpbHRpbl9zMzkwX3ZjaGxmcyhfX2IsICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSwgJl9fY2MpOwotICByZXR1cm4gX19jYyA9PSAwOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKLXZlY19hbGxfbHQodmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYikgewotICBpbnQgX19jYzsKLSAgX19idWlsdGluX3MzOTBfdmNobGZzKCh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSwgJl9fY2MpOwotICByZXR1cm4gX19jYyA9PSAwOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKLXZlY19hbGxfbHQodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKLSAgaW50IF9fY2M7Ci0gIF9fYnVpbHRpbl9zMzkwX3ZjaGdzKF9fYiwgX19hLCAmX19jYyk7Ci0gIHJldHVybiBfX2NjID09IDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAotdmVjX2FsbF9sdCh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKLSAgaW50IF9fY2M7Ci0gIF9fYnVpbHRpbl9zMzkwX3ZjaGdzKCh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2IsIF9fYSwgJl9fY2MpOwotICByZXR1cm4gX19jYyA9PSAwOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKLXZlY19hbGxfbHQodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7Ci0gIGludCBfX2NjOwotICBfX2J1aWx0aW5fczM5MF92Y2hncyhfX2IsICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2EsICZfX2NjKTsKLSAgcmV0dXJuIF9fY2MgPT0gMDsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Ci12ZWNfYWxsX2x0KHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgewotICBpbnQgX19jYzsKLSAgX19idWlsdGluX3MzOTBfdmNobGdzKF9fYiwgX19hLCAmX19jYyk7Ci0gIHJldHVybiBfX2NjID09IDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAotdmVjX2FsbF9sdCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgewotICBpbnQgX19jYzsKLSAgX19idWlsdGluX3MzOTBfdmNobGdzKCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYiwgX19hLCAmX19jYyk7Ci0gIHJldHVybiBfX2NjID09IDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAotdmVjX2FsbF9sdCh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgewotICBpbnQgX19jYzsKLSAgX19idWlsdGluX3MzOTBfdmNobGdzKF9fYiwgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19hLCAmX19jYyk7Ci0gIHJldHVybiBfX2NjID09IDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAotdmVjX2FsbF9sdCh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7Ci0gIGludCBfX2NjOwotICBfX2J1aWx0aW5fczM5MF92Y2hsZ3MoKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19hLCAmX19jYyk7Ci0gIHJldHVybiBfX2NjID09IDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAotdmVjX2FsbF9sdCh2ZWN0b3IgZG91YmxlIF9fYSwgdmVjdG9yIGRvdWJsZSBfX2IpIHsKLSAgaW50IF9fY2M7Ci0gIF9fYnVpbHRpbl9zMzkwX3ZmY2hkYnMoX19iLCBfX2EsICZfX2NjKTsKLSAgcmV0dXJuIF9fY2MgPT0gMDsKLX0KLQotLyotLSB2ZWNfYWxsX25nZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfYWkgaW50Ci12ZWNfYWxsX25nZSh2ZWN0b3IgZG91YmxlIF9fYSwgdmVjdG9yIGRvdWJsZSBfX2IpIHsKLSAgaW50IF9fY2M7Ci0gIF9fYnVpbHRpbl9zMzkwX3ZmY2hlZGJzKF9fYSwgX19iLCAmX19jYyk7Ci0gIHJldHVybiBfX2NjID09IDM7Ci19Ci0KLS8qLS0gdmVjX2FsbF9uZ3QgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX2FpIGludAotdmVjX2FsbF9uZ3QodmVjdG9yIGRvdWJsZSBfX2EsIHZlY3RvciBkb3VibGUgX19iKSB7Ci0gIGludCBfX2NjOwotICBfX2J1aWx0aW5fczM5MF92ZmNoZGJzKF9fYSwgX19iLCAmX19jYyk7Ci0gIHJldHVybiBfX2NjID09IDM7Ci19Ci0KLS8qLS0gdmVjX2FsbF9ubGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX2FpIGludAotdmVjX2FsbF9ubGUodmVjdG9yIGRvdWJsZSBfX2EsIHZlY3RvciBkb3VibGUgX19iKSB7Ci0gIGludCBfX2NjOwotICBfX2J1aWx0aW5fczM5MF92ZmNoZWRicyhfX2IsIF9fYSwgJl9fY2MpOwotICByZXR1cm4gX19jYyA9PSAzOwotfQotCi0vKi0tIHZlY19hbGxfbmx0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19haSBpbnQKLXZlY19hbGxfbmx0KHZlY3RvciBkb3VibGUgX19hLCB2ZWN0b3IgZG91YmxlIF9fYikgewotICBpbnQgX19jYzsKLSAgX19idWlsdGluX3MzOTBfdmZjaGRicyhfX2IsIF9fYSwgJl9fY2MpOwotICByZXR1cm4gX19jYyA9PSAzOwotfQotCi0vKi0tIHZlY19hbGxfbmFuIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19haSBpbnQKLXZlY19hbGxfbmFuKHZlY3RvciBkb3VibGUgX19hKSB7Ci0gIGludCBfX2NjOwotICBfX2J1aWx0aW5fczM5MF92ZnRjaWRiKF9fYSwgMTUsICZfX2NjKTsKLSAgcmV0dXJuIF9fY2MgPT0gMDsKLX0KLQotLyotLSB2ZWNfYWxsX251bWVyaWMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfYWkgaW50Ci12ZWNfYWxsX251bWVyaWModmVjdG9yIGRvdWJsZSBfX2EpIHsKLSAgaW50IF9fY2M7Ci0gIF9fYnVpbHRpbl9zMzkwX3ZmdGNpZGIoX19hLCAxNSwgJl9fY2MpOwotICByZXR1cm4gX19jYyA9PSAzOwotfQotCi0vKi0tIHZlY19hbnlfZXEgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAotdmVjX2FueV9lcSh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7Ci0gIGludCBfX2NjOwotICBfX2J1aWx0aW5fczM5MF92Y2VxYnMoX19hLCBfX2IsICZfX2NjKTsKLSAgcmV0dXJuIF9fY2MgPD0gMTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Ci12ZWNfYW55X2VxKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBib29sIGNoYXIgX19iKSB7Ci0gIGludCBfX2NjOwotICBfX2J1aWx0aW5fczM5MF92Y2VxYnMoX19hLCAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYiwgJl9fY2MpOwotICByZXR1cm4gX19jYyA8PSAxOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKLXZlY19hbnlfZXEodmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKLSAgaW50IF9fY2M7Ci0gIF9fYnVpbHRpbl9zMzkwX3ZjZXFicygodmVjdG9yIHNpZ25lZCBjaGFyKV9fYSwgX19iLCAmX19jYyk7Ci0gIHJldHVybiBfX2NjIDw9IDE7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAotdmVjX2FueV9lcSh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgewotICBpbnQgX19jYzsKLSAgX19idWlsdGluX3MzOTBfdmNlcWJzKCh2ZWN0b3Igc2lnbmVkIGNoYXIpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaWduZWQgY2hhcilfX2IsICZfX2NjKTsKLSAgcmV0dXJuIF9fY2MgPD0gMTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Ci12ZWNfYW55X2VxKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKLSAgaW50IF9fY2M7Ci0gIF9fYnVpbHRpbl9zMzkwX3ZjZXFicygodmVjdG9yIHNpZ25lZCBjaGFyKV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19iLCAmX19jYyk7Ci0gIHJldHVybiBfX2NjIDw9IDE7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAotdmVjX2FueV9lcSh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7Ci0gIGludCBfX2NjOwotICBfX2J1aWx0aW5fczM5MF92Y2VxYnMoKHZlY3RvciBzaWduZWQgY2hhcilfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYiwgJl9fY2MpOwotICByZXR1cm4gX19jYyA8PSAxOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKLXZlY19hbnlfZXEodmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciBib29sIGNoYXIgX19iKSB7Ci0gIGludCBfX2NjOwotICBfX2J1aWx0aW5fczM5MF92Y2VxYnMoKHZlY3RvciBzaWduZWQgY2hhcilfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYiwgJl9fY2MpOwotICByZXR1cm4gX19jYyA8PSAxOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKLXZlY19hbnlfZXEodmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBzaWduZWQgc2hvcnQgX19iKSB7Ci0gIGludCBfX2NjOwotICBfX2J1aWx0aW5fczM5MF92Y2VxaHMoX19hLCBfX2IsICZfX2NjKTsKLSAgcmV0dXJuIF9fY2MgPD0gMTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Ci12ZWNfYW55X2VxKHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKLSAgaW50IF9fY2M7Ci0gIF9fYnVpbHRpbl9zMzkwX3ZjZXFocyhfX2EsICh2ZWN0b3Igc2lnbmVkIHNob3J0KV9fYiwgJl9fY2MpOwotICByZXR1cm4gX19jYyA8PSAxOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKLXZlY19hbnlfZXEodmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYikgewotICBpbnQgX19jYzsKLSAgX19idWlsdGluX3MzOTBfdmNlcWhzKCh2ZWN0b3Igc2lnbmVkIHNob3J0KV9fYSwgX19iLCAmX19jYyk7Ci0gIHJldHVybiBfX2NjIDw9IDE7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAotdmVjX2FueV9lcSh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7Ci0gIGludCBfX2NjOwotICBfX2J1aWx0aW5fczM5MF92Y2VxaHMoKHZlY3RvciBzaWduZWQgc2hvcnQpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaWduZWQgc2hvcnQpX19iLCAmX19jYyk7Ci0gIHJldHVybiBfX2NjIDw9IDE7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAotdmVjX2FueV9lcSh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKLSAgaW50IF9fY2M7Ci0gIF9fYnVpbHRpbl9zMzkwX3ZjZXFocygodmVjdG9yIHNpZ25lZCBzaG9ydClfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNpZ25lZCBzaG9ydClfX2IsICZfX2NjKTsKLSAgcmV0dXJuIF9fY2MgPD0gMTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Ci12ZWNfYW55X2VxKHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgewotICBpbnQgX19jYzsKLSAgX19idWlsdGluX3MzOTBfdmNlcWhzKCh2ZWN0b3Igc2lnbmVkIHNob3J0KV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3Igc2lnbmVkIHNob3J0KV9fYiwgJl9fY2MpOwotICByZXR1cm4gX19jYyA8PSAxOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKLXZlY19hbnlfZXEodmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKLSAgaW50IF9fY2M7Ci0gIF9fYnVpbHRpbl9zMzkwX3ZjZXFocygodmVjdG9yIHNpZ25lZCBzaG9ydClfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNpZ25lZCBzaG9ydClfX2IsICZfX2NjKTsKLSAgcmV0dXJuIF9fY2MgPD0gMTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Ci12ZWNfYW55X2VxKHZlY3RvciBzaWduZWQgaW50IF9fYSwgdmVjdG9yIHNpZ25lZCBpbnQgX19iKSB7Ci0gIGludCBfX2NjOwotICBfX2J1aWx0aW5fczM5MF92Y2VxZnMoX19hLCBfX2IsICZfX2NjKTsKLSAgcmV0dXJuIF9fY2MgPD0gMTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Ci12ZWNfYW55X2VxKHZlY3RvciBzaWduZWQgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYikgewotICBpbnQgX19jYzsKLSAgX19idWlsdGluX3MzOTBfdmNlcWZzKF9fYSwgKHZlY3RvciBzaWduZWQgaW50KV9fYiwgJl9fY2MpOwotICByZXR1cm4gX19jYyA8PSAxOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKLXZlY19hbnlfZXEodmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIHNpZ25lZCBpbnQgX19iKSB7Ci0gIGludCBfX2NjOwotICBfX2J1aWx0aW5fczM5MF92Y2VxZnMoKHZlY3RvciBzaWduZWQgaW50KV9fYSwgX19iLCAmX19jYyk7Ci0gIHJldHVybiBfX2NjIDw9IDE7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAotdmVjX2FueV9lcSh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKLSAgaW50IF9fY2M7Ci0gIF9fYnVpbHRpbl9zMzkwX3ZjZXFmcygodmVjdG9yIHNpZ25lZCBpbnQpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaWduZWQgaW50KV9fYiwgJl9fY2MpOwotICByZXR1cm4gX19jYyA8PSAxOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKLXZlY19hbnlfZXEodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IpIHsKLSAgaW50IF9fY2M7Ci0gIF9fYnVpbHRpbl9zMzkwX3ZjZXFmcygodmVjdG9yIHNpZ25lZCBpbnQpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaWduZWQgaW50KV9fYiwgJl9fY2MpOwotICByZXR1cm4gX19jYyA8PSAxOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKLXZlY19hbnlfZXEodmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKLSAgaW50IF9fY2M7Ci0gIF9fYnVpbHRpbl9zMzkwX3ZjZXFmcygodmVjdG9yIHNpZ25lZCBpbnQpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaWduZWQgaW50KV9fYiwgJl9fY2MpOwotICByZXR1cm4gX19jYyA8PSAxOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKLXZlY19hbnlfZXEodmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYikgewotICBpbnQgX19jYzsKLSAgX19idWlsdGluX3MzOTBfdmNlcWZzKCh2ZWN0b3Igc2lnbmVkIGludClfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNpZ25lZCBpbnQpX19iLCAmX19jYyk7Ci0gIHJldHVybiBfX2NjIDw9IDE7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAotdmVjX2FueV9lcSh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgewotICBpbnQgX19jYzsKLSAgX19idWlsdGluX3MzOTBfdmNlcWdzKF9fYSwgX19iLCAmX19jYyk7Ci0gIHJldHVybiBfX2NjIDw9IDE7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAotdmVjX2FueV9lcSh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKLSAgaW50IF9fY2M7Ci0gIF9fYnVpbHRpbl9zMzkwX3ZjZXFncyhfX2EsICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2IsICZfX2NjKTsKLSAgcmV0dXJuIF9fY2MgPD0gMTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Ci12ZWNfYW55X2VxKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgewotICBpbnQgX19jYzsKLSAgX19idWlsdGluX3MzOTBfdmNlcWdzKCh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2EsIF9fYiwgJl9fY2MpOwotICByZXR1cm4gX19jYyA8PSAxOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKLXZlY19hbnlfZXEodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7Ci0gIGludCBfX2NjOwotICBfX2J1aWx0aW5fczM5MF92Y2VxZ3MoKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2IsICZfX2NjKTsKLSAgcmV0dXJuIF9fY2MgPD0gMTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Ci12ZWNfYW55X2VxKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7Ci0gIGludCBfX2NjOwotICBfX2J1aWx0aW5fczM5MF92Y2VxZ3MoKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2IsICZfX2NjKTsKLSAgcmV0dXJuIF9fY2MgPD0gMTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Ci12ZWNfYW55X2VxKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7Ci0gIGludCBfX2NjOwotICBfX2J1aWx0aW5fczM5MF92Y2VxZ3MoKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2IsICZfX2NjKTsKLSAgcmV0dXJuIF9fY2MgPD0gMTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Ci12ZWNfYW55X2VxKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKLSAgaW50IF9fY2M7Ci0gIF9fYnVpbHRpbl9zMzkwX3ZjZXFncygodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYiwgJl9fY2MpOwotICByZXR1cm4gX19jYyA8PSAxOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKLXZlY19hbnlfZXEodmVjdG9yIGRvdWJsZSBfX2EsIHZlY3RvciBkb3VibGUgX19iKSB7Ci0gIGludCBfX2NjOwotICBfX2J1aWx0aW5fczM5MF92ZmNlZGJzKF9fYSwgX19iLCAmX19jYyk7Ci0gIHJldHVybiBfX2NjIDw9IDE7Ci19Ci0KLS8qLS0gdmVjX2FueV9uZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Ci12ZWNfYW55X25lKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKLSAgaW50IF9fY2M7Ci0gIF9fYnVpbHRpbl9zMzkwX3ZjZXFicyhfX2EsIF9fYiwgJl9fY2MpOwotICByZXR1cm4gX19jYyAhPSAwOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKLXZlY19hbnlfbmUodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKLSAgaW50IF9fY2M7Ci0gIF9fYnVpbHRpbl9zMzkwX3ZjZXFicyhfX2EsICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19iLCAmX19jYyk7Ci0gIHJldHVybiBfX2NjICE9IDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAotdmVjX2FueV9uZSh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgewotICBpbnQgX19jYzsKLSAgX19idWlsdGluX3MzOTBfdmNlcWJzKCh2ZWN0b3Igc2lnbmVkIGNoYXIpX19hLCBfX2IsICZfX2NjKTsKLSAgcmV0dXJuIF9fY2MgIT0gMDsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Ci12ZWNfYW55X25lKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7Ci0gIGludCBfX2NjOwotICBfX2J1aWx0aW5fczM5MF92Y2VxYnMoKHZlY3RvciBzaWduZWQgY2hhcilfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYiwgJl9fY2MpOwotICByZXR1cm4gX19jYyAhPSAwOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKLXZlY19hbnlfbmUodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgewotICBpbnQgX19jYzsKLSAgX19idWlsdGluX3MzOTBfdmNlcWJzKCh2ZWN0b3Igc2lnbmVkIGNoYXIpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaWduZWQgY2hhcilfX2IsICZfX2NjKTsKLSAgcmV0dXJuIF9fY2MgIT0gMDsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Ci12ZWNfYW55X25lKHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKLSAgaW50IF9fY2M7Ci0gIF9fYnVpbHRpbl9zMzkwX3ZjZXFicygodmVjdG9yIHNpZ25lZCBjaGFyKV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19iLCAmX19jYyk7Ci0gIHJldHVybiBfX2NjICE9IDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAotdmVjX2FueV9uZSh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKLSAgaW50IF9fY2M7Ci0gIF9fYnVpbHRpbl9zMzkwX3ZjZXFicygodmVjdG9yIHNpZ25lZCBjaGFyKV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19iLCAmX19jYyk7Ci0gIHJldHVybiBfX2NjICE9IDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAotdmVjX2FueV9uZSh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2IpIHsKLSAgaW50IF9fY2M7Ci0gIF9fYnVpbHRpbl9zMzkwX3ZjZXFocyhfX2EsIF9fYiwgJl9fY2MpOwotICByZXR1cm4gX19jYyAhPSAwOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKLXZlY19hbnlfbmUodmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBib29sIHNob3J0IF9fYikgewotICBpbnQgX19jYzsKLSAgX19idWlsdGluX3MzOTBfdmNlcWhzKF9fYSwgKHZlY3RvciBzaWduZWQgc2hvcnQpX19iLCAmX19jYyk7Ci0gIHJldHVybiBfX2NjICE9IDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAotdmVjX2FueV9uZSh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciBzaWduZWQgc2hvcnQgX19iKSB7Ci0gIGludCBfX2NjOwotICBfX2J1aWx0aW5fczM5MF92Y2VxaHMoKHZlY3RvciBzaWduZWQgc2hvcnQpX19hLCBfX2IsICZfX2NjKTsKLSAgcmV0dXJuIF9fY2MgIT0gMDsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Ci12ZWNfYW55X25lKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKLSAgaW50IF9fY2M7Ci0gIF9fYnVpbHRpbl9zMzkwX3ZjZXFocygodmVjdG9yIHNpZ25lZCBzaG9ydClfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNpZ25lZCBzaG9ydClfX2IsICZfX2NjKTsKLSAgcmV0dXJuIF9fY2MgIT0gMDsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Ci12ZWNfYW55X25lKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBib29sIHNob3J0IF9fYikgewotICBpbnQgX19jYzsKLSAgX19idWlsdGluX3MzOTBfdmNlcWhzKCh2ZWN0b3Igc2lnbmVkIHNob3J0KV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3Igc2lnbmVkIHNob3J0KV9fYiwgJl9fY2MpOwotICByZXR1cm4gX19jYyAhPSAwOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKLXZlY19hbnlfbmUodmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7Ci0gIGludCBfX2NjOwotICBfX2J1aWx0aW5fczM5MF92Y2VxaHMoKHZlY3RvciBzaWduZWQgc2hvcnQpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaWduZWQgc2hvcnQpX19iLCAmX19jYyk7Ci0gIHJldHVybiBfX2NjICE9IDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAotdmVjX2FueV9uZSh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciBib29sIHNob3J0IF9fYikgewotICBpbnQgX19jYzsKLSAgX19idWlsdGluX3MzOTBfdmNlcWhzKCh2ZWN0b3Igc2lnbmVkIHNob3J0KV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3Igc2lnbmVkIHNob3J0KV9fYiwgJl9fY2MpOwotICByZXR1cm4gX19jYyAhPSAwOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKLXZlY19hbnlfbmUodmVjdG9yIHNpZ25lZCBpbnQgX19hLCB2ZWN0b3Igc2lnbmVkIGludCBfX2IpIHsKLSAgaW50IF9fY2M7Ci0gIF9fYnVpbHRpbl9zMzkwX3ZjZXFmcyhfX2EsIF9fYiwgJl9fY2MpOwotICByZXR1cm4gX19jYyAhPSAwOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKLXZlY19hbnlfbmUodmVjdG9yIHNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7Ci0gIGludCBfX2NjOwotICBfX2J1aWx0aW5fczM5MF92Y2VxZnMoX19hLCAodmVjdG9yIHNpZ25lZCBpbnQpX19iLCAmX19jYyk7Ci0gIHJldHVybiBfX2NjICE9IDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAotdmVjX2FueV9uZSh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3Igc2lnbmVkIGludCBfX2IpIHsKLSAgaW50IF9fY2M7Ci0gIF9fYnVpbHRpbl9zMzkwX3ZjZXFmcygodmVjdG9yIHNpZ25lZCBpbnQpX19hLCBfX2IsICZfX2NjKTsKLSAgcmV0dXJuIF9fY2MgIT0gMDsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Ci12ZWNfYW55X25lKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgewotICBpbnQgX19jYzsKLSAgX19idWlsdGluX3MzOTBfdmNlcWZzKCh2ZWN0b3Igc2lnbmVkIGludClfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNpZ25lZCBpbnQpX19iLCAmX19jYyk7Ci0gIHJldHVybiBfX2NjICE9IDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAotdmVjX2FueV9uZSh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYikgewotICBpbnQgX19jYzsKLSAgX19idWlsdGluX3MzOTBfdmNlcWZzKCh2ZWN0b3Igc2lnbmVkIGludClfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNpZ25lZCBpbnQpX19iLCAmX19jYyk7Ci0gIHJldHVybiBfX2NjICE9IDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAotdmVjX2FueV9uZSh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgewotICBpbnQgX19jYzsKLSAgX19idWlsdGluX3MzOTBfdmNlcWZzKCh2ZWN0b3Igc2lnbmVkIGludClfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNpZ25lZCBpbnQpX19iLCAmX19jYyk7Ci0gIHJldHVybiBfX2NjICE9IDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAotdmVjX2FueV9uZSh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7Ci0gIGludCBfX2NjOwotICBfX2J1aWx0aW5fczM5MF92Y2VxZnMoKHZlY3RvciBzaWduZWQgaW50KV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3Igc2lnbmVkIGludClfX2IsICZfX2NjKTsKLSAgcmV0dXJuIF9fY2MgIT0gMDsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Ci12ZWNfYW55X25lKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7Ci0gIGludCBfX2NjOwotICBfX2J1aWx0aW5fczM5MF92Y2VxZ3MoX19hLCBfX2IsICZfX2NjKTsKLSAgcmV0dXJuIF9fY2MgIT0gMDsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Ci12ZWNfYW55X25lKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgewotICBpbnQgX19jYzsKLSAgX19idWlsdGluX3MzOTBfdmNlcWdzKF9fYSwgKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYiwgJl9fY2MpOwotICByZXR1cm4gX19jYyAhPSAwOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKLXZlY19hbnlfbmUodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7Ci0gIGludCBfX2NjOwotICBfX2J1aWx0aW5fczM5MF92Y2VxZ3MoKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYSwgX19iLCAmX19jYyk7Ci0gIHJldHVybiBfX2NjICE9IDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAotdmVjX2FueV9uZSh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKLSAgaW50IF9fY2M7Ci0gIF9fYnVpbHRpbl9zMzkwX3ZjZXFncygodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYiwgJl9fY2MpOwotICByZXR1cm4gX19jYyAhPSAwOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKLXZlY19hbnlfbmUodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKLSAgaW50IF9fY2M7Ci0gIF9fYnVpbHRpbl9zMzkwX3ZjZXFncygodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYiwgJl9fY2MpOwotICByZXR1cm4gX19jYyAhPSAwOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKLXZlY19hbnlfbmUodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKLSAgaW50IF9fY2M7Ci0gIF9fYnVpbHRpbl9zMzkwX3ZjZXFncygodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYiwgJl9fY2MpOwotICByZXR1cm4gX19jYyAhPSAwOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKLXZlY19hbnlfbmUodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgewotICBpbnQgX19jYzsKLSAgX19idWlsdGluX3MzOTBfdmNlcWdzKCh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19iLCAmX19jYyk7Ci0gIHJldHVybiBfX2NjICE9IDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAotdmVjX2FueV9uZSh2ZWN0b3IgZG91YmxlIF9fYSwgdmVjdG9yIGRvdWJsZSBfX2IpIHsKLSAgaW50IF9fY2M7Ci0gIF9fYnVpbHRpbl9zMzkwX3ZmY2VkYnMoX19hLCBfX2IsICZfX2NjKTsKLSAgcmV0dXJuIF9fY2MgIT0gMDsKLX0KLQotLyotLSB2ZWNfYW55X2dlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKLXZlY19hbnlfZ2UodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgewotICBpbnQgX19jYzsKLSAgX19idWlsdGluX3MzOTBfdmNoYnMoX19iLCBfX2EsICZfX2NjKTsKLSAgcmV0dXJuIF9fY2MgIT0gMDsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Ci12ZWNfYW55X2dlKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBib29sIGNoYXIgX19iKSB7Ci0gIGludCBfX2NjOwotICBfX2J1aWx0aW5fczM5MF92Y2hicygodmVjdG9yIHNpZ25lZCBjaGFyKV9fYiwgX19hLCAmX19jYyk7Ci0gIHJldHVybiBfX2NjICE9IDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAotdmVjX2FueV9nZSh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgewotICBpbnQgX19jYzsKLSAgX19idWlsdGluX3MzOTBfdmNoYnMoX19iLCAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYSwgJl9fY2MpOwotICByZXR1cm4gX19jYyAhPSAwOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKLXZlY19hbnlfZ2UodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKLSAgaW50IF9fY2M7Ci0gIF9fYnVpbHRpbl9zMzkwX3ZjaGxicyhfX2IsIF9fYSwgJl9fY2MpOwotICByZXR1cm4gX19jYyAhPSAwOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKLXZlY19hbnlfZ2UodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgewotICBpbnQgX19jYzsKLSAgX19idWlsdGluX3MzOTBfdmNobGJzKCh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IsIF9fYSwgJl9fY2MpOwotICByZXR1cm4gX19jYyAhPSAwOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKLXZlY19hbnlfZ2UodmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgewotICBpbnQgX19jYzsKLSAgX19idWlsdGluX3MzOTBfdmNobGJzKF9fYiwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgJl9fY2MpOwotICByZXR1cm4gX19jYyAhPSAwOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKLXZlY19hbnlfZ2UodmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciBib29sIGNoYXIgX19iKSB7Ci0gIGludCBfX2NjOwotICBfX2J1aWx0aW5fczM5MF92Y2hsYnMoKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICZfX2NjKTsKLSAgcmV0dXJuIF9fY2MgIT0gMDsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Ci12ZWNfYW55X2dlKHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYikgewotICBpbnQgX19jYzsKLSAgX19idWlsdGluX3MzOTBfdmNoaHMoX19iLCBfX2EsICZfX2NjKTsKLSAgcmV0dXJuIF9fY2MgIT0gMDsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Ci12ZWNfYW55X2dlKHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKLSAgaW50IF9fY2M7Ci0gIF9fYnVpbHRpbl9zMzkwX3ZjaGhzKCh2ZWN0b3Igc2lnbmVkIHNob3J0KV9fYiwgX19hLCAmX19jYyk7Ci0gIHJldHVybiBfX2NjICE9IDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAotdmVjX2FueV9nZSh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciBzaWduZWQgc2hvcnQgX19iKSB7Ci0gIGludCBfX2NjOwotICBfX2J1aWx0aW5fczM5MF92Y2hocyhfX2IsICh2ZWN0b3Igc2lnbmVkIHNob3J0KV9fYSwgJl9fY2MpOwotICByZXR1cm4gX19jYyAhPSAwOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKLXZlY19hbnlfZ2UodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgewotICBpbnQgX19jYzsKLSAgX19idWlsdGluX3MzOTBfdmNobGhzKF9fYiwgX19hLCAmX19jYyk7Ci0gIHJldHVybiBfX2NjICE9IDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAotdmVjX2FueV9nZSh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKLSAgaW50IF9fY2M7Ci0gIF9fYnVpbHRpbl9zMzkwX3ZjaGxocygodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYiwgX19hLCAmX19jYyk7Ci0gIHJldHVybiBfX2NjICE9IDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAotdmVjX2FueV9nZSh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKLSAgaW50IF9fY2M7Ci0gIF9fYnVpbHRpbl9zMzkwX3ZjaGxocyhfX2IsICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hLCAmX19jYyk7Ci0gIHJldHVybiBfX2NjICE9IDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAotdmVjX2FueV9nZSh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciBib29sIHNob3J0IF9fYikgewotICBpbnQgX19jYzsKLSAgX19idWlsdGluX3MzOTBfdmNobGhzKCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EsICZfX2NjKTsKLSAgcmV0dXJuIF9fY2MgIT0gMDsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Ci12ZWNfYW55X2dlKHZlY3RvciBzaWduZWQgaW50IF9fYSwgdmVjdG9yIHNpZ25lZCBpbnQgX19iKSB7Ci0gIGludCBfX2NjOwotICBfX2J1aWx0aW5fczM5MF92Y2hmcyhfX2IsIF9fYSwgJl9fY2MpOwotICByZXR1cm4gX19jYyAhPSAwOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKLXZlY19hbnlfZ2UodmVjdG9yIHNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7Ci0gIGludCBfX2NjOwotICBfX2J1aWx0aW5fczM5MF92Y2hmcygodmVjdG9yIHNpZ25lZCBpbnQpX19iLCBfX2EsICZfX2NjKTsKLSAgcmV0dXJuIF9fY2MgIT0gMDsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Ci12ZWNfYW55X2dlKHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYikgewotICBpbnQgX19jYzsKLSAgX19idWlsdGluX3MzOTBfdmNoZnMoX19iLCAodmVjdG9yIHNpZ25lZCBpbnQpX19hLCAmX19jYyk7Ci0gIHJldHVybiBfX2NjICE9IDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAotdmVjX2FueV9nZSh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKLSAgaW50IF9fY2M7Ci0gIF9fYnVpbHRpbl9zMzkwX3ZjaGxmcyhfX2IsIF9fYSwgJl9fY2MpOwotICByZXR1cm4gX19jYyAhPSAwOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKLXZlY19hbnlfZ2UodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IpIHsKLSAgaW50IF9fY2M7Ci0gIF9fYnVpbHRpbl9zMzkwX3ZjaGxmcygodmVjdG9yIHVuc2lnbmVkIGludClfX2IsIF9fYSwgJl9fY2MpOwotICByZXR1cm4gX19jYyAhPSAwOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKLXZlY19hbnlfZ2UodmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKLSAgaW50IF9fY2M7Ci0gIF9fYnVpbHRpbl9zMzkwX3ZjaGxmcyhfX2IsICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSwgJl9fY2MpOwotICByZXR1cm4gX19jYyAhPSAwOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKLXZlY19hbnlfZ2UodmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYikgewotICBpbnQgX19jYzsKLSAgX19idWlsdGluX3MzOTBfdmNobGZzKCh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSwgJl9fY2MpOwotICByZXR1cm4gX19jYyAhPSAwOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKLXZlY19hbnlfZ2UodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKLSAgaW50IF9fY2M7Ci0gIF9fYnVpbHRpbl9zMzkwX3ZjaGdzKF9fYiwgX19hLCAmX19jYyk7Ci0gIHJldHVybiBfX2NjICE9IDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAotdmVjX2FueV9nZSh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKLSAgaW50IF9fY2M7Ci0gIF9fYnVpbHRpbl9zMzkwX3ZjaGdzKCh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2IsIF9fYSwgJl9fY2MpOwotICByZXR1cm4gX19jYyAhPSAwOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKLXZlY19hbnlfZ2UodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7Ci0gIGludCBfX2NjOwotICBfX2J1aWx0aW5fczM5MF92Y2hncyhfX2IsICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2EsICZfX2NjKTsKLSAgcmV0dXJuIF9fY2MgIT0gMDsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Ci12ZWNfYW55X2dlKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgewotICBpbnQgX19jYzsKLSAgX19idWlsdGluX3MzOTBfdmNobGdzKF9fYiwgX19hLCAmX19jYyk7Ci0gIHJldHVybiBfX2NjICE9IDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAotdmVjX2FueV9nZSh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgewotICBpbnQgX19jYzsKLSAgX19idWlsdGluX3MzOTBfdmNobGdzKCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYiwgX19hLCAmX19jYyk7Ci0gIHJldHVybiBfX2NjICE9IDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAotdmVjX2FueV9nZSh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgewotICBpbnQgX19jYzsKLSAgX19idWlsdGluX3MzOTBfdmNobGdzKF9fYiwgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19hLCAmX19jYyk7Ci0gIHJldHVybiBfX2NjICE9IDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAotdmVjX2FueV9nZSh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7Ci0gIGludCBfX2NjOwotICBfX2J1aWx0aW5fczM5MF92Y2hsZ3MoKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19hLCAmX19jYyk7Ci0gIHJldHVybiBfX2NjICE9IDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAotdmVjX2FueV9nZSh2ZWN0b3IgZG91YmxlIF9fYSwgdmVjdG9yIGRvdWJsZSBfX2IpIHsKLSAgaW50IF9fY2M7Ci0gIF9fYnVpbHRpbl9zMzkwX3ZmY2hlZGJzKF9fYSwgX19iLCAmX19jYyk7Ci0gIHJldHVybiBfX2NjIDw9IDE7Ci19Ci0KLS8qLS0gdmVjX2FueV9ndCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Ci12ZWNfYW55X2d0KHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKLSAgaW50IF9fY2M7Ci0gIF9fYnVpbHRpbl9zMzkwX3ZjaGJzKF9fYSwgX19iLCAmX19jYyk7Ci0gIHJldHVybiBfX2NjIDw9IDE7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAotdmVjX2FueV9ndCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgewotICBpbnQgX19jYzsKLSAgX19idWlsdGluX3MzOTBfdmNoYnMoX19hLCAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYiwgJl9fY2MpOwotICByZXR1cm4gX19jYyA8PSAxOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKLXZlY19hbnlfZ3QodmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKLSAgaW50IF9fY2M7Ci0gIF9fYnVpbHRpbl9zMzkwX3ZjaGJzKCh2ZWN0b3Igc2lnbmVkIGNoYXIpX19hLCBfX2IsICZfX2NjKTsKLSAgcmV0dXJuIF9fY2MgPD0gMTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Ci12ZWNfYW55X2d0KHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7Ci0gIGludCBfX2NjOwotICBfX2J1aWx0aW5fczM5MF92Y2hsYnMoX19hLCBfX2IsICZfX2NjKTsKLSAgcmV0dXJuIF9fY2MgPD0gMTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Ci12ZWNfYW55X2d0KHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKLSAgaW50IF9fY2M7Ci0gIF9fYnVpbHRpbl9zMzkwX3ZjaGxicyhfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IsICZfX2NjKTsKLSAgcmV0dXJuIF9fY2MgPD0gMTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Ci12ZWNfYW55X2d0KHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKLSAgaW50IF9fY2M7Ci0gIF9fYnVpbHRpbl9zMzkwX3ZjaGxicygodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCBfX2IsICZfX2NjKTsKLSAgcmV0dXJuIF9fY2MgPD0gMTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Ci12ZWNfYW55X2d0KHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgewotICBpbnQgX19jYzsKLSAgX19idWlsdGluX3MzOTBfdmNobGJzKCh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iLCAmX19jYyk7Ci0gIHJldHVybiBfX2NjIDw9IDE7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAotdmVjX2FueV9ndCh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2IpIHsKLSAgaW50IF9fY2M7Ci0gIF9fYnVpbHRpbl9zMzkwX3ZjaGhzKF9fYSwgX19iLCAmX19jYyk7Ci0gIHJldHVybiBfX2NjIDw9IDE7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAotdmVjX2FueV9ndCh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7Ci0gIGludCBfX2NjOwotICBfX2J1aWx0aW5fczM5MF92Y2hocyhfX2EsICh2ZWN0b3Igc2lnbmVkIHNob3J0KV9fYiwgJl9fY2MpOwotICByZXR1cm4gX19jYyA8PSAxOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKLXZlY19hbnlfZ3QodmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYikgewotICBpbnQgX19jYzsKLSAgX19idWlsdGluX3MzOTBfdmNoaHMoKHZlY3RvciBzaWduZWQgc2hvcnQpX19hLCBfX2IsICZfX2NjKTsKLSAgcmV0dXJuIF9fY2MgPD0gMTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Ci12ZWNfYW55X2d0KHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKLSAgaW50IF9fY2M7Ci0gIF9fYnVpbHRpbl9zMzkwX3ZjaGxocyhfX2EsIF9fYiwgJl9fY2MpOwotICByZXR1cm4gX19jYyA8PSAxOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKLXZlY19hbnlfZ3QodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7Ci0gIGludCBfX2NjOwotICBfX2J1aWx0aW5fczM5MF92Y2hsaHMoX19hLCAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYiwgJl9fY2MpOwotICByZXR1cm4gX19jYyA8PSAxOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKLXZlY19hbnlfZ3QodmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7Ci0gIGludCBfX2NjOwotICBfX2J1aWx0aW5fczM5MF92Y2hsaHMoKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EsIF9fYiwgJl9fY2MpOwotICByZXR1cm4gX19jYyA8PSAxOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKLXZlY19hbnlfZ3QodmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKLSAgaW50IF9fY2M7Ci0gIF9fYnVpbHRpbl9zMzkwX3ZjaGxocygodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19iLCAmX19jYyk7Ci0gIHJldHVybiBfX2NjIDw9IDE7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAotdmVjX2FueV9ndCh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYikgewotICBpbnQgX19jYzsKLSAgX19idWlsdGluX3MzOTBfdmNoZnMoX19hLCBfX2IsICZfX2NjKTsKLSAgcmV0dXJuIF9fY2MgPD0gMTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Ci12ZWNfYW55X2d0KHZlY3RvciBzaWduZWQgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYikgewotICBpbnQgX19jYzsKLSAgX19idWlsdGluX3MzOTBfdmNoZnMoX19hLCAodmVjdG9yIHNpZ25lZCBpbnQpX19iLCAmX19jYyk7Ci0gIHJldHVybiBfX2NjIDw9IDE7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAotdmVjX2FueV9ndCh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3Igc2lnbmVkIGludCBfX2IpIHsKLSAgaW50IF9fY2M7Ci0gIF9fYnVpbHRpbl9zMzkwX3ZjaGZzKCh2ZWN0b3Igc2lnbmVkIGludClfX2EsIF9fYiwgJl9fY2MpOwotICByZXR1cm4gX19jYyA8PSAxOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKLXZlY19hbnlfZ3QodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7Ci0gIGludCBfX2NjOwotICBfX2J1aWx0aW5fczM5MF92Y2hsZnMoX19hLCBfX2IsICZfX2NjKTsKLSAgcmV0dXJuIF9fY2MgPD0gMTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Ci12ZWNfYW55X2d0KHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7Ci0gIGludCBfX2NjOwotICBfX2J1aWx0aW5fczM5MF92Y2hsZnMoX19hLCAodmVjdG9yIHVuc2lnbmVkIGludClfX2IsICZfX2NjKTsKLSAgcmV0dXJuIF9fY2MgPD0gMTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Ci12ZWNfYW55X2d0KHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7Ci0gIGludCBfX2NjOwotICBfX2J1aWx0aW5fczM5MF92Y2hsZnMoKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hLCBfX2IsICZfX2NjKTsKLSAgcmV0dXJuIF9fY2MgPD0gMTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Ci12ZWNfYW55X2d0KHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IpIHsKLSAgaW50IF9fY2M7Ci0gIF9fYnVpbHRpbl9zMzkwX3ZjaGxmcygodmVjdG9yIHVuc2lnbmVkIGludClfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2IsICZfX2NjKTsKLSAgcmV0dXJuIF9fY2MgPD0gMTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Ci12ZWNfYW55X2d0KHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7Ci0gIGludCBfX2NjOwotICBfX2J1aWx0aW5fczM5MF92Y2hncyhfX2EsIF9fYiwgJl9fY2MpOwotICByZXR1cm4gX19jYyA8PSAxOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKLXZlY19hbnlfZ3QodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7Ci0gIGludCBfX2NjOwotICBfX2J1aWx0aW5fczM5MF92Y2hncyhfX2EsICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2IsICZfX2NjKTsKLSAgcmV0dXJuIF9fY2MgPD0gMTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Ci12ZWNfYW55X2d0KHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgewotICBpbnQgX19jYzsKLSAgX19idWlsdGluX3MzOTBfdmNoZ3MoKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYSwgX19iLCAmX19jYyk7Ci0gIHJldHVybiBfX2NjIDw9IDE7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAotdmVjX2FueV9ndCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKLSAgaW50IF9fY2M7Ci0gIF9fYnVpbHRpbl9zMzkwX3ZjaGxncyhfX2EsIF9fYiwgJl9fY2MpOwotICByZXR1cm4gX19jYyA8PSAxOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKLXZlY19hbnlfZ3QodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKLSAgaW50IF9fY2M7Ci0gIF9fYnVpbHRpbl9zMzkwX3ZjaGxncyhfX2EsICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYiwgJl9fY2MpOwotICByZXR1cm4gX19jYyA8PSAxOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKLXZlY19hbnlfZ3QodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKLSAgaW50IF9fY2M7Ci0gIF9fYnVpbHRpbl9zMzkwX3ZjaGxncygodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2EsIF9fYiwgJl9fY2MpOwotICByZXR1cm4gX19jYyA8PSAxOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKLXZlY19hbnlfZ3QodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgewotICBpbnQgX19jYzsKLSAgX19idWlsdGluX3MzOTBfdmNobGdzKCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYiwgJl9fY2MpOwotICByZXR1cm4gX19jYyA8PSAxOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKLXZlY19hbnlfZ3QodmVjdG9yIGRvdWJsZSBfX2EsIHZlY3RvciBkb3VibGUgX19iKSB7Ci0gIGludCBfX2NjOwotICBfX2J1aWx0aW5fczM5MF92ZmNoZGJzKF9fYSwgX19iLCAmX19jYyk7Ci0gIHJldHVybiBfX2NjIDw9IDE7Ci19Ci0KLS8qLS0gdmVjX2FueV9sZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Ci12ZWNfYW55X2xlKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKLSAgaW50IF9fY2M7Ci0gIF9fYnVpbHRpbl9zMzkwX3ZjaGJzKF9fYSwgX19iLCAmX19jYyk7Ci0gIHJldHVybiBfX2NjICE9IDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAotdmVjX2FueV9sZSh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgewotICBpbnQgX19jYzsKLSAgX19idWlsdGluX3MzOTBfdmNoYnMoX19hLCAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYiwgJl9fY2MpOwotICByZXR1cm4gX19jYyAhPSAwOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKLXZlY19hbnlfbGUodmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKLSAgaW50IF9fY2M7Ci0gIF9fYnVpbHRpbl9zMzkwX3ZjaGJzKCh2ZWN0b3Igc2lnbmVkIGNoYXIpX19hLCBfX2IsICZfX2NjKTsKLSAgcmV0dXJuIF9fY2MgIT0gMDsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Ci12ZWNfYW55X2xlKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7Ci0gIGludCBfX2NjOwotICBfX2J1aWx0aW5fczM5MF92Y2hsYnMoX19hLCBfX2IsICZfX2NjKTsKLSAgcmV0dXJuIF9fY2MgIT0gMDsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Ci12ZWNfYW55X2xlKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKLSAgaW50IF9fY2M7Ci0gIF9fYnVpbHRpbl9zMzkwX3ZjaGxicyhfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IsICZfX2NjKTsKLSAgcmV0dXJuIF9fY2MgIT0gMDsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Ci12ZWNfYW55X2xlKHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKLSAgaW50IF9fY2M7Ci0gIF9fYnVpbHRpbl9zMzkwX3ZjaGxicygodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCBfX2IsICZfX2NjKTsKLSAgcmV0dXJuIF9fY2MgIT0gMDsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Ci12ZWNfYW55X2xlKHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgewotICBpbnQgX19jYzsKLSAgX19idWlsdGluX3MzOTBfdmNobGJzKCh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iLCAmX19jYyk7Ci0gIHJldHVybiBfX2NjICE9IDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAotdmVjX2FueV9sZSh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2IpIHsKLSAgaW50IF9fY2M7Ci0gIF9fYnVpbHRpbl9zMzkwX3ZjaGhzKF9fYSwgX19iLCAmX19jYyk7Ci0gIHJldHVybiBfX2NjICE9IDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAotdmVjX2FueV9sZSh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7Ci0gIGludCBfX2NjOwotICBfX2J1aWx0aW5fczM5MF92Y2hocyhfX2EsICh2ZWN0b3Igc2lnbmVkIHNob3J0KV9fYiwgJl9fY2MpOwotICByZXR1cm4gX19jYyAhPSAwOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKLXZlY19hbnlfbGUodmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYikgewotICBpbnQgX19jYzsKLSAgX19idWlsdGluX3MzOTBfdmNoaHMoKHZlY3RvciBzaWduZWQgc2hvcnQpX19hLCBfX2IsICZfX2NjKTsKLSAgcmV0dXJuIF9fY2MgIT0gMDsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Ci12ZWNfYW55X2xlKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKLSAgaW50IF9fY2M7Ci0gIF9fYnVpbHRpbl9zMzkwX3ZjaGxocyhfX2EsIF9fYiwgJl9fY2MpOwotICByZXR1cm4gX19jYyAhPSAwOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKLXZlY19hbnlfbGUodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7Ci0gIGludCBfX2NjOwotICBfX2J1aWx0aW5fczM5MF92Y2hsaHMoX19hLCAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYiwgJl9fY2MpOwotICByZXR1cm4gX19jYyAhPSAwOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKLXZlY19hbnlfbGUodmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7Ci0gIGludCBfX2NjOwotICBfX2J1aWx0aW5fczM5MF92Y2hsaHMoKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EsIF9fYiwgJl9fY2MpOwotICByZXR1cm4gX19jYyAhPSAwOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKLXZlY19hbnlfbGUodmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKLSAgaW50IF9fY2M7Ci0gIF9fYnVpbHRpbl9zMzkwX3ZjaGxocygodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19iLCAmX19jYyk7Ci0gIHJldHVybiBfX2NjICE9IDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAotdmVjX2FueV9sZSh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYikgewotICBpbnQgX19jYzsKLSAgX19idWlsdGluX3MzOTBfdmNoZnMoX19hLCBfX2IsICZfX2NjKTsKLSAgcmV0dXJuIF9fY2MgIT0gMDsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Ci12ZWNfYW55X2xlKHZlY3RvciBzaWduZWQgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYikgewotICBpbnQgX19jYzsKLSAgX19idWlsdGluX3MzOTBfdmNoZnMoX19hLCAodmVjdG9yIHNpZ25lZCBpbnQpX19iLCAmX19jYyk7Ci0gIHJldHVybiBfX2NjICE9IDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAotdmVjX2FueV9sZSh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3Igc2lnbmVkIGludCBfX2IpIHsKLSAgaW50IF9fY2M7Ci0gIF9fYnVpbHRpbl9zMzkwX3ZjaGZzKCh2ZWN0b3Igc2lnbmVkIGludClfX2EsIF9fYiwgJl9fY2MpOwotICByZXR1cm4gX19jYyAhPSAwOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKLXZlY19hbnlfbGUodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7Ci0gIGludCBfX2NjOwotICBfX2J1aWx0aW5fczM5MF92Y2hsZnMoX19hLCBfX2IsICZfX2NjKTsKLSAgcmV0dXJuIF9fY2MgIT0gMDsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Ci12ZWNfYW55X2xlKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7Ci0gIGludCBfX2NjOwotICBfX2J1aWx0aW5fczM5MF92Y2hsZnMoX19hLCAodmVjdG9yIHVuc2lnbmVkIGludClfX2IsICZfX2NjKTsKLSAgcmV0dXJuIF9fY2MgIT0gMDsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Ci12ZWNfYW55X2xlKHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7Ci0gIGludCBfX2NjOwotICBfX2J1aWx0aW5fczM5MF92Y2hsZnMoKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hLCBfX2IsICZfX2NjKTsKLSAgcmV0dXJuIF9fY2MgIT0gMDsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Ci12ZWNfYW55X2xlKHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IpIHsKLSAgaW50IF9fY2M7Ci0gIF9fYnVpbHRpbl9zMzkwX3ZjaGxmcygodmVjdG9yIHVuc2lnbmVkIGludClfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2IsICZfX2NjKTsKLSAgcmV0dXJuIF9fY2MgIT0gMDsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Ci12ZWNfYW55X2xlKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7Ci0gIGludCBfX2NjOwotICBfX2J1aWx0aW5fczM5MF92Y2hncyhfX2EsIF9fYiwgJl9fY2MpOwotICByZXR1cm4gX19jYyAhPSAwOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKLXZlY19hbnlfbGUodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7Ci0gIGludCBfX2NjOwotICBfX2J1aWx0aW5fczM5MF92Y2hncyhfX2EsICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2IsICZfX2NjKTsKLSAgcmV0dXJuIF9fY2MgIT0gMDsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Ci12ZWNfYW55X2xlKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgewotICBpbnQgX19jYzsKLSAgX19idWlsdGluX3MzOTBfdmNoZ3MoKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYSwgX19iLCAmX19jYyk7Ci0gIHJldHVybiBfX2NjICE9IDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAotdmVjX2FueV9sZSh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKLSAgaW50IF9fY2M7Ci0gIF9fYnVpbHRpbl9zMzkwX3ZjaGxncyhfX2EsIF9fYiwgJl9fY2MpOwotICByZXR1cm4gX19jYyAhPSAwOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKLXZlY19hbnlfbGUodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKLSAgaW50IF9fY2M7Ci0gIF9fYnVpbHRpbl9zMzkwX3ZjaGxncyhfX2EsICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYiwgJl9fY2MpOwotICByZXR1cm4gX19jYyAhPSAwOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKLXZlY19hbnlfbGUodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKLSAgaW50IF9fY2M7Ci0gIF9fYnVpbHRpbl9zMzkwX3ZjaGxncygodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2EsIF9fYiwgJl9fY2MpOwotICByZXR1cm4gX19jYyAhPSAwOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKLXZlY19hbnlfbGUodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgewotICBpbnQgX19jYzsKLSAgX19idWlsdGluX3MzOTBfdmNobGdzKCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYiwgJl9fY2MpOwotICByZXR1cm4gX19jYyAhPSAwOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKLXZlY19hbnlfbGUodmVjdG9yIGRvdWJsZSBfX2EsIHZlY3RvciBkb3VibGUgX19iKSB7Ci0gIGludCBfX2NjOwotICBfX2J1aWx0aW5fczM5MF92ZmNoZWRicyhfX2IsIF9fYSwgJl9fY2MpOwotICByZXR1cm4gX19jYyA8PSAxOwotfQotCi0vKi0tIHZlY19hbnlfbHQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAotdmVjX2FueV9sdCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7Ci0gIGludCBfX2NjOwotICBfX2J1aWx0aW5fczM5MF92Y2hicyhfX2IsIF9fYSwgJl9fY2MpOwotICByZXR1cm4gX19jYyA8PSAxOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKLXZlY19hbnlfbHQodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKLSAgaW50IF9fY2M7Ci0gIF9fYnVpbHRpbl9zMzkwX3ZjaGJzKCh2ZWN0b3Igc2lnbmVkIGNoYXIpX19iLCBfX2EsICZfX2NjKTsKLSAgcmV0dXJuIF9fY2MgPD0gMTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Ci12ZWNfYW55X2x0KHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7Ci0gIGludCBfX2NjOwotICBfX2J1aWx0aW5fczM5MF92Y2hicyhfX2IsICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19hLCAmX19jYyk7Ci0gIHJldHVybiBfX2NjIDw9IDE7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAotdmVjX2FueV9sdCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgewotICBpbnQgX19jYzsKLSAgX19idWlsdGluX3MzOTBfdmNobGJzKF9fYiwgX19hLCAmX19jYyk7Ci0gIHJldHVybiBfX2NjIDw9IDE7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAotdmVjX2FueV9sdCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciBib29sIGNoYXIgX19iKSB7Ci0gIGludCBfX2NjOwotICBfX2J1aWx0aW5fczM5MF92Y2hsYnMoKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYiwgX19hLCAmX19jYyk7Ci0gIHJldHVybiBfX2NjIDw9IDE7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAotdmVjX2FueV9sdCh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7Ci0gIGludCBfX2NjOwotICBfX2J1aWx0aW5fczM5MF92Y2hsYnMoX19iLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAmX19jYyk7Ci0gIHJldHVybiBfX2NjIDw9IDE7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAotdmVjX2FueV9sdCh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKLSAgaW50IF9fY2M7Ci0gIF9fYnVpbHRpbl9zMzkwX3ZjaGxicygodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgJl9fY2MpOwotICByZXR1cm4gX19jYyA8PSAxOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKLXZlY19hbnlfbHQodmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBzaWduZWQgc2hvcnQgX19iKSB7Ci0gIGludCBfX2NjOwotICBfX2J1aWx0aW5fczM5MF92Y2hocyhfX2IsIF9fYSwgJl9fY2MpOwotICByZXR1cm4gX19jYyA8PSAxOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKLXZlY19hbnlfbHQodmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBib29sIHNob3J0IF9fYikgewotICBpbnQgX19jYzsKLSAgX19idWlsdGluX3MzOTBfdmNoaHMoKHZlY3RvciBzaWduZWQgc2hvcnQpX19iLCBfX2EsICZfX2NjKTsKLSAgcmV0dXJuIF9fY2MgPD0gMTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Ci12ZWNfYW55X2x0KHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2IpIHsKLSAgaW50IF9fY2M7Ci0gIF9fYnVpbHRpbl9zMzkwX3ZjaGhzKF9fYiwgKHZlY3RvciBzaWduZWQgc2hvcnQpX19hLCAmX19jYyk7Ci0gIHJldHVybiBfX2NjIDw9IDE7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAotdmVjX2FueV9sdCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7Ci0gIGludCBfX2NjOwotICBfX2J1aWx0aW5fczM5MF92Y2hsaHMoX19iLCBfX2EsICZfX2NjKTsKLSAgcmV0dXJuIF9fY2MgPD0gMTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Ci12ZWNfYW55X2x0KHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBib29sIHNob3J0IF9fYikgewotICBpbnQgX19jYzsKLSAgX19idWlsdGluX3MzOTBfdmNobGhzKCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19iLCBfX2EsICZfX2NjKTsKLSAgcmV0dXJuIF9fY2MgPD0gMTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Ci12ZWNfYW55X2x0KHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgewotICBpbnQgX19jYzsKLSAgX19idWlsdGluX3MzOTBfdmNobGhzKF9fYiwgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EsICZfX2NjKTsKLSAgcmV0dXJuIF9fY2MgPD0gMTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Ci12ZWNfYW55X2x0KHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7Ci0gIGludCBfX2NjOwotICBfX2J1aWx0aW5fczM5MF92Y2hsaHMoKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSwgJl9fY2MpOwotICByZXR1cm4gX19jYyA8PSAxOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKLXZlY19hbnlfbHQodmVjdG9yIHNpZ25lZCBpbnQgX19hLCB2ZWN0b3Igc2lnbmVkIGludCBfX2IpIHsKLSAgaW50IF9fY2M7Ci0gIF9fYnVpbHRpbl9zMzkwX3ZjaGZzKF9fYiwgX19hLCAmX19jYyk7Ci0gIHJldHVybiBfX2NjIDw9IDE7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAotdmVjX2FueV9sdCh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IpIHsKLSAgaW50IF9fY2M7Ci0gIF9fYnVpbHRpbl9zMzkwX3ZjaGZzKCh2ZWN0b3Igc2lnbmVkIGludClfX2IsIF9fYSwgJl9fY2MpOwotICByZXR1cm4gX19jYyA8PSAxOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKLXZlY19hbnlfbHQodmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIHNpZ25lZCBpbnQgX19iKSB7Ci0gIGludCBfX2NjOwotICBfX2J1aWx0aW5fczM5MF92Y2hmcyhfX2IsICh2ZWN0b3Igc2lnbmVkIGludClfX2EsICZfX2NjKTsKLSAgcmV0dXJuIF9fY2MgPD0gMTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Ci12ZWNfYW55X2x0KHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgewotICBpbnQgX19jYzsKLSAgX19idWlsdGluX3MzOTBfdmNobGZzKF9fYiwgX19hLCAmX19jYyk7Ci0gIHJldHVybiBfX2NjIDw9IDE7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAotdmVjX2FueV9sdCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYikgewotICBpbnQgX19jYzsKLSAgX19idWlsdGluX3MzOTBfdmNobGZzKCh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYiwgX19hLCAmX19jYyk7Ci0gIHJldHVybiBfX2NjIDw9IDE7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAotdmVjX2FueV9sdCh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgewotICBpbnQgX19jYzsKLSAgX19idWlsdGluX3MzOTBfdmNobGZzKF9fYiwgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hLCAmX19jYyk7Ci0gIHJldHVybiBfX2NjIDw9IDE7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAotdmVjX2FueV9sdCh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7Ci0gIGludCBfX2NjOwotICBfX2J1aWx0aW5fczM5MF92Y2hsZnMoKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hLCAmX19jYyk7Ci0gIHJldHVybiBfX2NjIDw9IDE7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAotdmVjX2FueV9sdCh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgewotICBpbnQgX19jYzsKLSAgX19idWlsdGluX3MzOTBfdmNoZ3MoX19iLCBfX2EsICZfX2NjKTsKLSAgcmV0dXJuIF9fY2MgPD0gMTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Ci12ZWNfYW55X2x0KHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgewotICBpbnQgX19jYzsKLSAgX19idWlsdGluX3MzOTBfdmNoZ3MoKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYiwgX19hLCAmX19jYyk7Ci0gIHJldHVybiBfX2NjIDw9IDE7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAotdmVjX2FueV9sdCh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKLSAgaW50IF9fY2M7Ci0gIF9fYnVpbHRpbl9zMzkwX3ZjaGdzKF9fYiwgKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYSwgJl9fY2MpOwotICByZXR1cm4gX19jYyA8PSAxOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKLXZlY19hbnlfbHQodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7Ci0gIGludCBfX2NjOwotICBfX2J1aWx0aW5fczM5MF92Y2hsZ3MoX19iLCBfX2EsICZfX2NjKTsKLSAgcmV0dXJuIF9fY2MgPD0gMTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Ci12ZWNfYW55X2x0KHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7Ci0gIGludCBfX2NjOwotICBfX2J1aWx0aW5fczM5MF92Y2hsZ3MoKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19iLCBfX2EsICZfX2NjKTsKLSAgcmV0dXJuIF9fY2MgPD0gMTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Ci12ZWNfYW55X2x0KHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7Ci0gIGludCBfX2NjOwotICBfX2J1aWx0aW5fczM5MF92Y2hsZ3MoX19iLCAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2EsICZfX2NjKTsKLSAgcmV0dXJuIF9fY2MgPD0gMTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Ci12ZWNfYW55X2x0KHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKLSAgaW50IF9fY2M7Ci0gIF9fYnVpbHRpbl9zMzkwX3ZjaGxncygodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2EsICZfX2NjKTsKLSAgcmV0dXJuIF9fY2MgPD0gMTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Ci12ZWNfYW55X2x0KHZlY3RvciBkb3VibGUgX19hLCB2ZWN0b3IgZG91YmxlIF9fYikgewotICBpbnQgX19jYzsKLSAgX19idWlsdGluX3MzOTBfdmZjaGRicyhfX2IsIF9fYSwgJl9fY2MpOwotICByZXR1cm4gX19jYyA8PSAxOwotfQotCi0vKi0tIHZlY19hbnlfbmdlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19haSBpbnQKLXZlY19hbnlfbmdlKHZlY3RvciBkb3VibGUgX19hLCB2ZWN0b3IgZG91YmxlIF9fYikgewotICBpbnQgX19jYzsKLSAgX19idWlsdGluX3MzOTBfdmZjaGVkYnMoX19hLCBfX2IsICZfX2NjKTsKLSAgcmV0dXJuIF9fY2MgIT0gMDsKLX0KLQotLyotLSB2ZWNfYW55X25ndCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfYWkgaW50Ci12ZWNfYW55X25ndCh2ZWN0b3IgZG91YmxlIF9fYSwgdmVjdG9yIGRvdWJsZSBfX2IpIHsKLSAgaW50IF9fY2M7Ci0gIF9fYnVpbHRpbl9zMzkwX3ZmY2hkYnMoX19hLCBfX2IsICZfX2NjKTsKLSAgcmV0dXJuIF9fY2MgIT0gMDsKLX0KLQotLyotLSB2ZWNfYW55X25sZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfYWkgaW50Ci12ZWNfYW55X25sZSh2ZWN0b3IgZG91YmxlIF9fYSwgdmVjdG9yIGRvdWJsZSBfX2IpIHsKLSAgaW50IF9fY2M7Ci0gIF9fYnVpbHRpbl9zMzkwX3ZmY2hlZGJzKF9fYiwgX19hLCAmX19jYyk7Ci0gIHJldHVybiBfX2NjICE9IDA7Ci19Ci0KLS8qLS0gdmVjX2FueV9ubHQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX2FpIGludAotdmVjX2FueV9ubHQodmVjdG9yIGRvdWJsZSBfX2EsIHZlY3RvciBkb3VibGUgX19iKSB7Ci0gIGludCBfX2NjOwotICBfX2J1aWx0aW5fczM5MF92ZmNoZGJzKF9fYiwgX19hLCAmX19jYyk7Ci0gIHJldHVybiBfX2NjICE9IDA7Ci19Ci0KLS8qLS0gdmVjX2FueV9uYW4gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX2FpIGludAotdmVjX2FueV9uYW4odmVjdG9yIGRvdWJsZSBfX2EpIHsKLSAgaW50IF9fY2M7Ci0gIF9fYnVpbHRpbl9zMzkwX3ZmdGNpZGIoX19hLCAxNSwgJl9fY2MpOwotICByZXR1cm4gX19jYyAhPSAzOwotfQotCi0vKi0tIHZlY19hbnlfbnVtZXJpYyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19haSBpbnQKLXZlY19hbnlfbnVtZXJpYyh2ZWN0b3IgZG91YmxlIF9fYSkgewotICBpbnQgX19jYzsKLSAgX19idWlsdGluX3MzOTBfdmZ0Y2lkYihfX2EsIDE1LCAmX19jYyk7Ci0gIHJldHVybiBfX2NjICE9IDA7Ci19Ci0KLS8qLS0gdmVjX2FuZGMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgY2hhcgotdmVjX2FuZGModmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciBib29sIGNoYXIgX19iKSB7Ci0gIHJldHVybiBfX2EgJiB+X19iOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGNoYXIKLXZlY19hbmRjKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKLSAgcmV0dXJuIF9fYSAmIH5fX2I7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgY2hhcgotdmVjX2FuZGModmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKLSAgcmV0dXJuIF9fYSAmIH5fX2I7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgY2hhcgotdmVjX2FuZGModmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKLSAgcmV0dXJuIF9fYSAmIH5fX2I7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCi12ZWNfYW5kYyh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gX19hICYgfl9fYjsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKLXZlY19hbmRjKHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKLSAgcmV0dXJuIF9fYSAmIH5fX2I7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCi12ZWNfYW5kYyh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciBib29sIGNoYXIgX19iKSB7Ci0gIHJldHVybiBfX2EgJiB+X19iOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBzaG9ydAotdmVjX2FuZGModmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuIF9fYSAmIH5fX2I7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgc2hvcnQKLXZlY19hbmRjKHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYikgewotICByZXR1cm4gX19hICYgfl9fYjsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBzaG9ydAotdmVjX2FuZGModmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYikgewotICByZXR1cm4gX19hICYgfl9fYjsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBzaG9ydAotdmVjX2FuZGModmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBib29sIHNob3J0IF9fYikgewotICByZXR1cm4gX19hICYgfl9fYjsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Ci12ZWNfYW5kYyh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7Ci0gIHJldHVybiBfX2EgJiB+X19iOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKLXZlY19hbmRjKHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgewotICByZXR1cm4gX19hICYgfl9fYjsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Ci12ZWNfYW5kYyh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuIF9fYSAmIH5fX2I7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGludAotdmVjX2FuZGModmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYikgewotICByZXR1cm4gX19hICYgfl9fYjsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBpbnQKLXZlY19hbmRjKHZlY3RvciBzaWduZWQgaW50IF9fYSwgdmVjdG9yIHNpZ25lZCBpbnQgX19iKSB7Ci0gIHJldHVybiBfX2EgJiB+X19iOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGludAotdmVjX2FuZGModmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIHNpZ25lZCBpbnQgX19iKSB7Ci0gIHJldHVybiBfX2EgJiB+X19iOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGludAotdmVjX2FuZGModmVjdG9yIHNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7Ci0gIHJldHVybiBfX2EgJiB+X19iOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Ci12ZWNfYW5kYyh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKLSAgcmV0dXJuIF9fYSAmIH5fX2I7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKLXZlY19hbmRjKHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7Ci0gIHJldHVybiBfX2EgJiB+X19iOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Ci12ZWNfYW5kYyh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYikgewotICByZXR1cm4gX19hICYgfl9fYjsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgbG9uZyBsb25nCi12ZWNfYW5kYyh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7Ci0gIHJldHVybiBfX2EgJiB+X19iOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZwotdmVjX2FuZGModmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKLSAgcmV0dXJuIF9fYSAmIH5fX2I7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgbG9uZyBsb25nCi12ZWNfYW5kYyh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKLSAgcmV0dXJuIF9fYSAmIH5fX2I7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgbG9uZyBsb25nCi12ZWNfYW5kYyh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKLSAgcmV0dXJuIF9fYSAmIH5fX2I7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcKLXZlY19hbmRjKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgewotICByZXR1cm4gX19hICYgfl9fYjsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZwotdmVjX2FuZGModmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKLSAgcmV0dXJuIF9fYSAmIH5fX2I7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcKLXZlY19hbmRjKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7Ci0gIHJldHVybiBfX2EgJiB+X19iOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgZG91YmxlCi12ZWNfYW5kYyh2ZWN0b3IgZG91YmxlIF9fYSwgdmVjdG9yIGRvdWJsZSBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgZG91YmxlKSgodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2EgJgotICAgICAgICAgICAgICAgICAgICAgICAgIH4odmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2IpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgZG91YmxlCi12ZWNfYW5kYyh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgZG91YmxlIF9fYikgewotICByZXR1cm4gKHZlY3RvciBkb3VibGUpKCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYSAmCi0gICAgICAgICAgICAgICAgICAgICAgICAgfih2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBkb3VibGUKLXZlY19hbmRjKHZlY3RvciBkb3VibGUgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIGRvdWJsZSkoKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19hICYKLSAgICAgICAgICAgICAgICAgICAgICAgICB+KHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19iKTsKLX0KLQotLyotLSB2ZWNfbm9yIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBjaGFyCi12ZWNfbm9yKHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgewotICByZXR1cm4gfihfX2EgfCBfX2IpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGNoYXIKLXZlY19ub3IodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gfihfX2EgfCBfX2IpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGNoYXIKLXZlY19ub3IodmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKLSAgcmV0dXJuIH4oX19hIHwgX19iKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBjaGFyCi12ZWNfbm9yKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBib29sIGNoYXIgX19iKSB7Ci0gIHJldHVybiB+KF9fYSB8IF9fYik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCi12ZWNfbm9yKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7Ci0gIHJldHVybiB+KF9fYSB8IF9fYik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCi12ZWNfbm9yKHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKLSAgcmV0dXJuIH4oX19hIHwgX19iKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKLXZlY19ub3IodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgewotICByZXR1cm4gfihfX2EgfCBfX2IpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBzaG9ydAotdmVjX25vcih2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciBib29sIHNob3J0IF9fYikgewotICByZXR1cm4gfihfX2EgfCBfX2IpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIHNob3J0Ci12ZWNfbm9yKHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYikgewotICByZXR1cm4gfihfX2EgfCBfX2IpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIHNob3J0Ci12ZWNfbm9yKHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuIH4oX19hIHwgX19iKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBzaG9ydAotdmVjX25vcih2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7Ci0gIHJldHVybiB+KF9fYSB8IF9fYik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAotdmVjX25vcih2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7Ci0gIHJldHVybiB+KF9fYSB8IF9fYik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAotdmVjX25vcih2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuIH4oX19hIHwgX19iKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Ci12ZWNfbm9yKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBib29sIHNob3J0IF9fYikgewotICByZXR1cm4gfihfX2EgfCBfX2IpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBpbnQKLXZlY19ub3IodmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYikgewotICByZXR1cm4gfihfX2EgfCBfX2IpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGludAotdmVjX25vcih2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYikgewotICByZXR1cm4gfihfX2EgfCBfX2IpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGludAotdmVjX25vcih2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3Igc2lnbmVkIGludCBfX2IpIHsKLSAgcmV0dXJuIH4oX19hIHwgX19iKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBpbnQKLXZlY19ub3IodmVjdG9yIHNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7Ci0gIHJldHVybiB+KF9fYSB8IF9fYik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKLXZlY19ub3IodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7Ci0gIHJldHVybiB+KF9fYSB8IF9fYik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKLXZlY19ub3IodmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKLSAgcmV0dXJuIH4oX19hIHwgX19iKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAotdmVjX25vcih2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYikgewotICByZXR1cm4gfihfX2EgfCBfX2IpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBsb25nIGxvbmcKLXZlY19ub3IodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgewotICByZXR1cm4gfihfX2EgfCBfX2IpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZwotdmVjX25vcih2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgewotICByZXR1cm4gfihfX2EgfCBfX2IpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZwotdmVjX25vcih2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKLSAgcmV0dXJuIH4oX19hIHwgX19iKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcKLXZlY19ub3IodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7Ci0gIHJldHVybiB+KF9fYSB8IF9fYik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcKLXZlY19ub3IodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7Ci0gIHJldHVybiB+KF9fYSB8IF9fYik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcKLXZlY19ub3IodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKLSAgcmV0dXJuIH4oX19hIHwgX19iKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZwotdmVjX25vcih2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgewotICByZXR1cm4gfihfX2EgfCBfX2IpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgZG91YmxlCi12ZWNfbm9yKHZlY3RvciBkb3VibGUgX19hLCB2ZWN0b3IgZG91YmxlIF9fYikgewotICByZXR1cm4gKHZlY3RvciBkb3VibGUpfigodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2EgfAotICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2IpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgZG91YmxlCi12ZWNfbm9yKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBkb3VibGUgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIGRvdWJsZSl+KCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYSB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBkb3VibGUKLXZlY19ub3IodmVjdG9yIGRvdWJsZSBfX2EsIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgZG91YmxlKX4oKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19hIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19iKTsKLX0KLQotLyotLSB2ZWNfY250bHogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgotdmVjX2NudGx6KHZlY3RvciBzaWduZWQgY2hhciBfX2EpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZjbHpiKCh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgotdmVjX2NudGx6KHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSkgewotICByZXR1cm4gX19idWlsdGluX3MzOTBfdmNsemIoX19hKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Ci12ZWNfY250bHoodmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZjbHpoKCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Ci12ZWNfY250bHoodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSkgewotICByZXR1cm4gX19idWlsdGluX3MzOTBfdmNsemgoX19hKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAotdmVjX2NudGx6KHZlY3RvciBzaWduZWQgaW50IF9fYSkgewotICByZXR1cm4gX19idWlsdGluX3MzOTBfdmNsemYoKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAotdmVjX2NudGx6KHZlY3RvciB1bnNpZ25lZCBpbnQgX19hKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fczM5MF92Y2x6ZihfX2EpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nCi12ZWNfY250bHoodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fczM5MF92Y2x6ZygodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2EpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nCi12ZWNfY250bHoodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZjbHpnKF9fYSk7Ci19Ci0KLS8qLS0gdmVjX2NudHR6IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKLXZlY19jbnR0eih2ZWN0b3Igc2lnbmVkIGNoYXIgX19hKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fczM5MF92Y3R6YigodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKLXZlY19jbnR0eih2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZjdHpiKF9fYSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAotdmVjX2NudHR6KHZlY3RvciBzaWduZWQgc2hvcnQgX19hKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fczM5MF92Y3R6aCgodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAotdmVjX2NudHR6KHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZjdHpoKF9fYSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKLXZlY19jbnR0eih2ZWN0b3Igc2lnbmVkIGludCBfX2EpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZjdHpmKCh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKLXZlY19jbnR0eih2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSkgewotICByZXR1cm4gX19idWlsdGluX3MzOTBfdmN0emYoX19hKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZwotdmVjX2NudHR6KHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSkgewotICByZXR1cm4gX19idWlsdGluX3MzOTBfdmN0emcoKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19hKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZwotdmVjX2NudHR6KHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fczM5MF92Y3R6ZyhfX2EpOwotfQotCi0vKi0tIHZlY19wb3BjbnQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCi12ZWNfcG9wY250KHZlY3RvciBzaWduZWQgY2hhciBfX2EpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3Zwb3BjdGIoKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCi12ZWNfcG9wY250KHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSkgewotICByZXR1cm4gX19idWlsdGluX3MzOTBfdnBvcGN0YihfX2EpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKLXZlY19wb3BjbnQodmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3Zwb3BjdGgoKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKLXZlY19wb3BjbnQodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSkgewotICByZXR1cm4gX19idWlsdGluX3MzOTBfdnBvcGN0aChfX2EpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Ci12ZWNfcG9wY250KHZlY3RvciBzaWduZWQgaW50IF9fYSkgewotICByZXR1cm4gX19idWlsdGluX3MzOTBfdnBvcGN0ZigodmVjdG9yIHVuc2lnbmVkIGludClfX2EpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Ci12ZWNfcG9wY250KHZlY3RvciB1bnNpZ25lZCBpbnQgX19hKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fczM5MF92cG9wY3RmKF9fYSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcKLXZlY19wb3BjbnQodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fczM5MF92cG9wY3RnKCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcKLXZlY19wb3BjbnQodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3Zwb3BjdGcoX19hKTsKLX0KLQotLyotLSB2ZWNfcmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGNoYXIKLXZlY19ybCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19idWlsdGluX3MzOTBfdmVybGx2YigKLSAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCBfX2IpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgotdmVjX3JsKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZXJsbHZiKF9fYSwgX19iKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBzaG9ydAotdmVjX3JsKHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHNpZ25lZCBzaG9ydClfX2J1aWx0aW5fczM5MF92ZXJsbHZoKAotICAgICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hLCBfX2IpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKLXZlY19ybCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZXJsbHZoKF9fYSwgX19iKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBpbnQKLXZlY19ybCh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHNpZ25lZCBpbnQpX19idWlsdGluX3MzOTBfdmVybGx2ZigKLSAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2EsIF9fYik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKLXZlY19ybCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZlcmxsdmYoX19hLCBfX2IpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZwotdmVjX3JsKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2J1aWx0aW5fczM5MF92ZXJsbHZnKAotICAgICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYSwgX19iKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZwotdmVjX3JsKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgewotICByZXR1cm4gX19idWlsdGluX3MzOTBfdmVybGx2ZyhfX2EsIF9fYik7Ci19Ci0KLS8qLS0gdmVjX3JsaSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBjaGFyCi12ZWNfcmxpKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHVuc2lnbmVkIGxvbmcgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYnVpbHRpbl9zMzkwX3ZlcmxsYigKLSAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAoaW50KV9fYik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCi12ZWNfcmxpKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdW5zaWduZWQgbG9uZyBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZlcmxsYihfX2EsIChpbnQpX19iKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBzaG9ydAotdmVjX3JsaSh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdW5zaWduZWQgbG9uZyBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIHNob3J0KV9fYnVpbHRpbl9zMzkwX3ZlcmxsaCgKLSAgICAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSwgKGludClfX2IpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKLXZlY19ybGkodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdW5zaWduZWQgbG9uZyBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZlcmxsaChfX2EsIChpbnQpX19iKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBpbnQKLXZlY19ybGkodmVjdG9yIHNpZ25lZCBpbnQgX19hLCB1bnNpZ25lZCBsb25nIF9fYikgewotICByZXR1cm4gKHZlY3RvciBzaWduZWQgaW50KV9fYnVpbHRpbl9zMzkwX3ZlcmxsZigKLSAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2EsIChpbnQpX19iKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAotdmVjX3JsaSh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdW5zaWduZWQgbG9uZyBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZlcmxsZihfX2EsIChpbnQpX19iKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcKLXZlY19ybGkodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB1bnNpZ25lZCBsb25nIF9fYikgewotICByZXR1cm4gKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYnVpbHRpbl9zMzkwX3ZlcmxsZygKLSAgICAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2EsIChpbnQpX19iKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZwotdmVjX3JsaSh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdW5zaWduZWQgbG9uZyBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZlcmxsZyhfX2EsIChpbnQpX19iKTsKLX0KLQotLyotLSB2ZWNfcmxfbWFzayAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi1leHRlcm4gX19BVFRSU19vIHZlY3RvciBzaWduZWQgY2hhcgotdmVjX3JsX21hc2sodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iLAotICAgICAgICAgICAgdW5zaWduZWQgY2hhciBfX2MpIF9fY29uc3RhbnQoX19jKTsKLQotZXh0ZXJuIF9fQVRUUlNfbyB2ZWN0b3IgdW5zaWduZWQgY2hhcgotdmVjX3JsX21hc2sodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IsCi0gICAgICAgICAgICB1bnNpZ25lZCBjaGFyIF9fYykgX19jb25zdGFudChfX2MpOwotCi1leHRlcm4gX19BVFRSU19vIHZlY3RvciBzaWduZWQgc2hvcnQKLXZlY19ybF9tYXNrKHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iLAotICAgICAgICAgICAgdW5zaWduZWQgY2hhciBfX2MpIF9fY29uc3RhbnQoX19jKTsKLQotZXh0ZXJuIF9fQVRUUlNfbyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKLXZlY19ybF9tYXNrKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IsCi0gICAgICAgICAgICB1bnNpZ25lZCBjaGFyIF9fYykgX19jb25zdGFudChfX2MpOwotCi1leHRlcm4gX19BVFRSU19vIHZlY3RvciBzaWduZWQgaW50Ci12ZWNfcmxfbWFzayh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iLAotICAgICAgICAgICAgdW5zaWduZWQgY2hhciBfX2MpIF9fY29uc3RhbnQoX19jKTsKLQotZXh0ZXJuIF9fQVRUUlNfbyB2ZWN0b3IgdW5zaWduZWQgaW50Ci12ZWNfcmxfbWFzayh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IsCi0gICAgICAgICAgICB1bnNpZ25lZCBjaGFyIF9fYykgX19jb25zdGFudChfX2MpOwotCi1leHRlcm4gX19BVFRSU19vIHZlY3RvciBzaWduZWQgbG9uZyBsb25nCi12ZWNfcmxfbWFzayh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iLAotICAgICAgICAgICAgdW5zaWduZWQgY2hhciBfX2MpIF9fY29uc3RhbnQoX19jKTsKLQotZXh0ZXJuIF9fQVRUUlNfbyB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nCi12ZWNfcmxfbWFzayh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IsCi0gICAgICAgICAgICB1bnNpZ25lZCBjaGFyIF9fYykgX19jb25zdGFudChfX2MpOwotCi0jZGVmaW5lIHZlY19ybF9tYXNrKFgsIFksIFopICgoX190eXBlb2ZfXygodmVjX3JsX21hc2spKChYKSwgKFkpLCAoWikpKSkgXAotICBfX2V4dGVuc2lvbl9fICh7IFwKLSAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX3JlczsgXAotICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9feCA9ICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoWCk7IFwKLSAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX3kgPSAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKFkpOyBcCi0gICAgc3dpdGNoIChzaXplb2YgKChYKVswXSkpIHsgXAotICAgIGNhc2UgMTogX19yZXMgPSAodmVjdG9yIHVuc2lnbmVkIGNoYXIpIF9fYnVpbHRpbl9zMzkwX3ZlcmltYiggXAotICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX3gsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX3gsIFwKLSAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX195LCAoWikpOyBicmVhazsgXAotICAgIGNhc2UgMjogX19yZXMgPSAodmVjdG9yIHVuc2lnbmVkIGNoYXIpIF9fYnVpbHRpbl9zMzkwX3ZlcmltaCggXAotICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX194LCAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9feCwgXAotICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX195LCAoWikpOyBicmVhazsgXAotICAgIGNhc2UgNDogX19yZXMgPSAodmVjdG9yIHVuc2lnbmVkIGNoYXIpIF9fYnVpbHRpbl9zMzkwX3ZlcmltZiggXAotICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9feCwgKHZlY3RvciB1bnNpZ25lZCBpbnQpX194LCBcCi0gICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX195LCAoWikpOyBicmVhazsgXAotICAgIGRlZmF1bHQ6IF9fcmVzID0gKHZlY3RvciB1bnNpZ25lZCBjaGFyKSBfX2J1aWx0aW5fczM5MF92ZXJpbWcoIFwKLSAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX3gsICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9feCwgXAotICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9feSwgKFopKTsgYnJlYWs7IFwKLSAgICB9IF9fcmVzOyB9KSkKLQotLyotLSB2ZWNfc2xsIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGNoYXIKLXZlY19zbGwodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYnVpbHRpbl9zMzkwX3ZzbCgKLSAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCBfX2IpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGNoYXIKLXZlY19zbGwodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgewotICByZXR1cm4gKHZlY3RvciBzaWduZWQgY2hhcilfX2J1aWx0aW5fczM5MF92c2woCi0gICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgY2hhcgotdmVjX3NsbCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgewotICByZXR1cm4gKHZlY3RvciBzaWduZWQgY2hhcilfX2J1aWx0aW5fczM5MF92c2woCi0gICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGNoYXIKLXZlY19zbGwodmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gKHZlY3RvciBib29sIGNoYXIpX19idWlsdGluX3MzOTBfdnNsKAotICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsIF9fYik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGNoYXIKLXZlY19zbGwodmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgYm9vbCBjaGFyKV9fYnVpbHRpbl9zMzkwX3ZzbCgKLSAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgY2hhcgotdmVjX3NsbCh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgYm9vbCBjaGFyKV9fYnVpbHRpbl9zMzkwX3ZzbCgKLSAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKLXZlY19zbGwodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZzbChfX2EsIF9fYik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCi12ZWNfc2xsKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgewotICByZXR1cm4gX19idWlsdGluX3MzOTBfdnNsKF9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCi12ZWNfc2xsKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZzbChfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIHNob3J0Ci12ZWNfc2xsKHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIHNob3J0KV9fYnVpbHRpbl9zMzkwX3ZzbCgKLSAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCBfX2IpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIHNob3J0Ci12ZWNfc2xsKHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHNpZ25lZCBzaG9ydClfX2J1aWx0aW5fczM5MF92c2woCi0gICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgc2hvcnQKLXZlY19zbGwodmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHNpZ25lZCBzaG9ydClfX2J1aWx0aW5fczM5MF92c2woCi0gICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIHNob3J0Ci12ZWNfc2xsKHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIGJvb2wgc2hvcnQpX19idWlsdGluX3MzOTBfdnNsKAotICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsIF9fYik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIHNob3J0Ci12ZWNfc2xsKHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgewotICByZXR1cm4gKHZlY3RvciBib29sIHNob3J0KV9fYnVpbHRpbl9zMzkwX3ZzbCgKLSAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgc2hvcnQKLXZlY19zbGwodmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgewotICByZXR1cm4gKHZlY3RvciBib29sIHNob3J0KV9fYnVpbHRpbl9zMzkwX3ZzbCgKLSAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Ci12ZWNfc2xsKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2J1aWx0aW5fczM5MF92c2woCi0gICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgX19iKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Ci12ZWNfc2xsKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19idWlsdGluX3MzOTBfdnNsKAotICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKLXZlY19zbGwodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19idWlsdGluX3MzOTBfdnNsKAotICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGludAotdmVjX3NsbCh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gKHZlY3RvciBzaWduZWQgaW50KV9fYnVpbHRpbl9zMzkwX3ZzbCgKLSAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCBfX2IpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGludAotdmVjX3NsbCh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGludClfX2J1aWx0aW5fczM5MF92c2woCi0gICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgaW50Ci12ZWNfc2xsKHZlY3RvciBzaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGludClfX2J1aWx0aW5fczM5MF92c2woCi0gICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGludAotdmVjX3NsbCh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgYm9vbCBpbnQpX19idWlsdGluX3MzOTBfdnNsKAotICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsIF9fYik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGludAotdmVjX3NsbCh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIGJvb2wgaW50KV9fYnVpbHRpbl9zMzkwX3ZzbCgKLSAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgaW50Ci12ZWNfc2xsKHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIGJvb2wgaW50KV9fYnVpbHRpbl9zMzkwX3ZzbCgKLSAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAotdmVjX3NsbCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGludClfX2J1aWx0aW5fczM5MF92c2woCi0gICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgX19iKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAotdmVjX3NsbCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgewotICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBpbnQpX19idWlsdGluX3MzOTBfdnNsKAotICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Ci12ZWNfc2xsKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgewotICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBpbnQpX19idWlsdGluX3MzOTBfdnNsKAotICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZwotdmVjX3NsbCh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYnVpbHRpbl9zMzkwX3ZzbCgKLSAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCBfX2IpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZwotdmVjX3NsbCh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2J1aWx0aW5fczM5MF92c2woCi0gICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgbG9uZyBsb25nCi12ZWNfc2xsKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2J1aWx0aW5fczM5MF92c2woCi0gICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGxvbmcgbG9uZwotdmVjX3NsbCh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgYm9vbCBsb25nIGxvbmcpX19idWlsdGluX3MzOTBfdnNsKAotICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsIF9fYik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGxvbmcgbG9uZwotdmVjX3NsbCh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIGJvb2wgbG9uZyBsb25nKV9fYnVpbHRpbl9zMzkwX3ZzbCgKLSAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgbG9uZyBsb25nCi12ZWNfc2xsKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIGJvb2wgbG9uZyBsb25nKV9fYnVpbHRpbl9zMzkwX3ZzbCgKLSAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZwotdmVjX3NsbCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2J1aWx0aW5fczM5MF92c2woCi0gICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgX19iKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZwotdmVjX3NsbCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgewotICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19idWlsdGluX3MzOTBfdnNsKAotICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nCi12ZWNfc2xsKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgewotICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19idWlsdGluX3MzOTBfdnNsKAotICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOwotfQotCi0vKi0tIHZlY19zbGIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgY2hhcgotdmVjX3NsYih2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYnVpbHRpbl9zMzkwX3ZzbGIoCi0gICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgY2hhcgotdmVjX3NsYih2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19idWlsdGluX3MzOTBfdnNsYigKLSAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCBfX2IpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgotdmVjX3NsYih2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZzbGIoX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKLXZlY19zbGIodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZzbGIoX19hLCBfX2IpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIHNob3J0Ci12ZWNfc2xiKHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYikgewotICByZXR1cm4gKHZlY3RvciBzaWduZWQgc2hvcnQpX19idWlsdGluX3MzOTBfdnNsYigKLSAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBzaG9ydAotdmVjX3NsYih2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgewotICByZXR1cm4gKHZlY3RvciBzaWduZWQgc2hvcnQpX19idWlsdGluX3MzOTBfdnNsYigKLSAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Ci12ZWNfc2xiKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBzaWduZWQgc2hvcnQgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYnVpbHRpbl9zMzkwX3ZzbGIoCi0gICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAotdmVjX3NsYih2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYnVpbHRpbl9zMzkwX3ZzbGIoCi0gICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgaW50Ci12ZWNfc2xiKHZlY3RvciBzaWduZWQgaW50IF9fYSwgdmVjdG9yIHNpZ25lZCBpbnQgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHNpZ25lZCBpbnQpX19idWlsdGluX3MzOTBfdnNsYigKLSAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBpbnQKLXZlY19zbGIodmVjdG9yIHNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgewotICByZXR1cm4gKHZlY3RvciBzaWduZWQgaW50KV9fYnVpbHRpbl9zMzkwX3ZzbGIoCi0gICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKLXZlY19zbGIodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYikgewotICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBpbnQpX19idWlsdGluX3MzOTBfdnNsYigKLSAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAotdmVjX3NsYih2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYnVpbHRpbl9zMzkwX3ZzbGIoCi0gICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgbG9uZyBsb25nCi12ZWNfc2xiKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19idWlsdGluX3MzOTBfdnNsYigKLSAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcKLXZlY19zbGIodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgewotICByZXR1cm4gKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYnVpbHRpbl9zMzkwX3ZzbGIoCi0gICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcKLXZlY19zbGIodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgewotICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19idWlsdGluX3MzOTBfdnNsYigKLSAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZwotdmVjX3NsYih2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYnVpbHRpbl9zMzkwX3ZzbGIoCi0gICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBkb3VibGUKLXZlY19zbGIodmVjdG9yIGRvdWJsZSBfX2EsIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgewotICByZXR1cm4gKHZlY3RvciBkb3VibGUpX19idWlsdGluX3MzOTBfdnNsYigKLSAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGRvdWJsZQotdmVjX3NsYih2ZWN0b3IgZG91YmxlIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgZG91YmxlKV9fYnVpbHRpbl9zMzkwX3ZzbGIoCi0gICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Ci19Ci0KLS8qLS0gdmVjX3NsZCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotZXh0ZXJuIF9fQVRUUlNfbyB2ZWN0b3Igc2lnbmVkIGNoYXIKLXZlY19zbGQodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYiwgaW50IF9fYykKLSAgX19jb25zdGFudF9yYW5nZShfX2MsIDAsIDE1KTsKLQotZXh0ZXJuIF9fQVRUUlNfbyB2ZWN0b3IgdW5zaWduZWQgY2hhcgotdmVjX3NsZCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYiwgaW50IF9fYykKLSAgX19jb25zdGFudF9yYW5nZShfX2MsIDAsIDE1KTsKLQotZXh0ZXJuIF9fQVRUUlNfbyB2ZWN0b3Igc2lnbmVkIHNob3J0Ci12ZWNfc2xkKHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYiwgaW50IF9fYykKLSAgX19jb25zdGFudF9yYW5nZShfX2MsIDAsIDE1KTsKLQotZXh0ZXJuIF9fQVRUUlNfbyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKLXZlY19zbGQodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYiwgaW50IF9fYykKLSAgX19jb25zdGFudF9yYW5nZShfX2MsIDAsIDE1KTsKLQotZXh0ZXJuIF9fQVRUUlNfbyB2ZWN0b3Igc2lnbmVkIGludAotdmVjX3NsZCh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYiwgaW50IF9fYykKLSAgX19jb25zdGFudF9yYW5nZShfX2MsIDAsIDE1KTsKLQotZXh0ZXJuIF9fQVRUUlNfbyB2ZWN0b3IgdW5zaWduZWQgaW50Ci12ZWNfc2xkKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYiwgaW50IF9fYykKLSAgX19jb25zdGFudF9yYW5nZShfX2MsIDAsIDE1KTsKLQotZXh0ZXJuIF9fQVRUUlNfbyB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZwotdmVjX3NsZCh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYiwgaW50IF9fYykKLSAgX19jb25zdGFudF9yYW5nZShfX2MsIDAsIDE1KTsKLQotZXh0ZXJuIF9fQVRUUlNfbyB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nCi12ZWNfc2xkKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYiwgaW50IF9fYykKLSAgX19jb25zdGFudF9yYW5nZShfX2MsIDAsIDE1KTsKLQotZXh0ZXJuIF9fQVRUUlNfbyB2ZWN0b3IgZG91YmxlCi12ZWNfc2xkKHZlY3RvciBkb3VibGUgX19hLCB2ZWN0b3IgZG91YmxlIF9fYiwgaW50IF9fYykKLSAgX19jb25zdGFudF9yYW5nZShfX2MsIDAsIDE1KTsKLQotI2RlZmluZSB2ZWNfc2xkKFgsIFksIFopICgoX190eXBlb2ZfXygodmVjX3NsZCkoKFgpLCAoWSksIChaKSkpKSBcCi0gIF9fYnVpbHRpbl9zMzkwX3ZzbGRiKCh2ZWN0b3IgdW5zaWduZWQgY2hhcikoWCksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKShZKSwgKFopKSkKLQotLyotLSB2ZWNfc2xkdyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi1leHRlcm4gX19BVFRSU19vIHZlY3RvciBzaWduZWQgY2hhcgotdmVjX3NsZHcodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYiwgaW50IF9fYykKLSAgX19jb25zdGFudF9yYW5nZShfX2MsIDAsIDMpOwotCi1leHRlcm4gX19BVFRSU19vIHZlY3RvciB1bnNpZ25lZCBjaGFyCi12ZWNfc2xkdyh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYiwgaW50IF9fYykKLSAgX19jb25zdGFudF9yYW5nZShfX2MsIDAsIDMpOwotCi1leHRlcm4gX19BVFRSU19vIHZlY3RvciBzaWduZWQgc2hvcnQKLXZlY19zbGR3KHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYiwgaW50IF9fYykKLSAgX19jb25zdGFudF9yYW5nZShfX2MsIDAsIDMpOwotCi1leHRlcm4gX19BVFRSU19vIHZlY3RvciB1bnNpZ25lZCBzaG9ydAotdmVjX3NsZHcodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYiwgaW50IF9fYykKLSAgX19jb25zdGFudF9yYW5nZShfX2MsIDAsIDMpOwotCi1leHRlcm4gX19BVFRSU19vIHZlY3RvciBzaWduZWQgaW50Ci12ZWNfc2xkdyh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYiwgaW50IF9fYykKLSAgX19jb25zdGFudF9yYW5nZShfX2MsIDAsIDMpOwotCi1leHRlcm4gX19BVFRSU19vIHZlY3RvciB1bnNpZ25lZCBpbnQKLXZlY19zbGR3KHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYiwgaW50IF9fYykKLSAgX19jb25zdGFudF9yYW5nZShfX2MsIDAsIDMpOwotCi1leHRlcm4gX19BVFRSU19vIHZlY3RvciBzaWduZWQgbG9uZyBsb25nCi12ZWNfc2xkdyh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYiwgaW50IF9fYykKLSAgX19jb25zdGFudF9yYW5nZShfX2MsIDAsIDMpOwotCi1leHRlcm4gX19BVFRSU19vIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcKLXZlY19zbGR3KHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYiwgaW50IF9fYykKLSAgX19jb25zdGFudF9yYW5nZShfX2MsIDAsIDMpOwotCi1leHRlcm4gX19BVFRSU19vIHZlY3RvciBkb3VibGUKLXZlY19zbGR3KHZlY3RvciBkb3VibGUgX19hLCB2ZWN0b3IgZG91YmxlIF9fYiwgaW50IF9fYykKLSAgX19jb25zdGFudF9yYW5nZShfX2MsIDAsIDMpOwotCi0jZGVmaW5lIHZlY19zbGR3KFgsIFksIFopICgoX190eXBlb2ZfXygodmVjX3NsZHcpKChYKSwgKFkpLCAoWikpKSkgXAotICBfX2J1aWx0aW5fczM5MF92c2xkYigodmVjdG9yIHVuc2lnbmVkIGNoYXIpKFgpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoWSksIChaKSAqIDQpKQotCi0vKi0tIHZlY19zcmFsIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgY2hhcgotdmVjX3NyYWwodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYnVpbHRpbl9zMzkwX3ZzcmEoCi0gICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgX19iKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBjaGFyCi12ZWNfc3JhbCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYnVpbHRpbl9zMzkwX3ZzcmEoCi0gICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgY2hhcgotdmVjX3NyYWwodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19idWlsdGluX3MzOTBfdnNyYSgKLSAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgY2hhcgotdmVjX3NyYWwodmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gKHZlY3RvciBib29sIGNoYXIpX19idWlsdGluX3MzOTBfdnNyYSgKLSAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCBfX2IpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBjaGFyCi12ZWNfc3JhbCh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgewotICByZXR1cm4gKHZlY3RvciBib29sIGNoYXIpX19idWlsdGluX3MzOTBfdnNyYSgKLSAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgY2hhcgotdmVjX3NyYWwodmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIGJvb2wgY2hhcilfX2J1aWx0aW5fczM5MF92c3JhKAotICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgotdmVjX3NyYWwodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZzcmEoX19hLCBfX2IpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgotdmVjX3NyYWwodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fczM5MF92c3JhKF9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCi12ZWNfc3JhbCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fczM5MF92c3JhKF9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgc2hvcnQKLXZlY19zcmFsKHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIHNob3J0KV9fYnVpbHRpbl9zMzkwX3ZzcmEoCi0gICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgX19iKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBzaG9ydAotdmVjX3NyYWwodmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIHNob3J0KV9fYnVpbHRpbl9zMzkwX3ZzcmEoCi0gICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgc2hvcnQKLXZlY19zcmFsKHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgewotICByZXR1cm4gKHZlY3RvciBzaWduZWQgc2hvcnQpX19idWlsdGluX3MzOTBfdnNyYSgKLSAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgc2hvcnQKLXZlY19zcmFsKHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIGJvb2wgc2hvcnQpX19idWlsdGluX3MzOTBfdnNyYSgKLSAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCBfX2IpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBzaG9ydAotdmVjX3NyYWwodmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIGJvb2wgc2hvcnQpX19idWlsdGluX3MzOTBfdnNyYSgKLSAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgc2hvcnQKLXZlY19zcmFsKHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgYm9vbCBzaG9ydClfX2J1aWx0aW5fczM5MF92c3JhKAotICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKLXZlY19zcmFsKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2J1aWx0aW5fczM5MF92c3JhKAotICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsIF9fYik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAotdmVjX3NyYWwodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgewotICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2J1aWx0aW5fczM5MF92c3JhKAotICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKLXZlY19zcmFsKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYnVpbHRpbl9zMzkwX3ZzcmEoCi0gICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgaW50Ci12ZWNfc3JhbCh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gKHZlY3RvciBzaWduZWQgaW50KV9fYnVpbHRpbl9zMzkwX3ZzcmEoCi0gICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgX19iKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBpbnQKLXZlY19zcmFsKHZlY3RvciBzaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgewotICByZXR1cm4gKHZlY3RvciBzaWduZWQgaW50KV9fYnVpbHRpbl9zMzkwX3ZzcmEoCi0gICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgaW50Ci12ZWNfc3JhbCh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHNpZ25lZCBpbnQpX19idWlsdGluX3MzOTBfdnNyYSgKLSAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgaW50Ci12ZWNfc3JhbCh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgYm9vbCBpbnQpX19idWlsdGluX3MzOTBfdnNyYSgKLSAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCBfX2IpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBpbnQKLXZlY19zcmFsKHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgYm9vbCBpbnQpX19idWlsdGluX3MzOTBfdnNyYSgKLSAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgaW50Ci12ZWNfc3JhbCh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgewotICByZXR1cm4gKHZlY3RvciBib29sIGludClfX2J1aWx0aW5fczM5MF92c3JhKAotICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Ci12ZWNfc3JhbCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGludClfX2J1aWx0aW5fczM5MF92c3JhKAotICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsIF9fYik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKLXZlY19zcmFsKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGludClfX2J1aWx0aW5fczM5MF92c3JhKAotICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Ci12ZWNfc3JhbCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYnVpbHRpbl9zMzkwX3ZzcmEoCi0gICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgbG9uZyBsb25nCi12ZWNfc3JhbCh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYnVpbHRpbl9zMzkwX3ZzcmEoCi0gICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgX19iKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcKLXZlY19zcmFsKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgewotICByZXR1cm4gKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYnVpbHRpbl9zMzkwX3ZzcmEoCi0gICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgbG9uZyBsb25nCi12ZWNfc3JhbCh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19idWlsdGluX3MzOTBfdnNyYSgKLSAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgbG9uZyBsb25nCi12ZWNfc3JhbCh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgYm9vbCBsb25nIGxvbmcpX19idWlsdGluX3MzOTBfdnNyYSgKLSAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCBfX2IpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBsb25nIGxvbmcKLXZlY19zcmFsKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgYm9vbCBsb25nIGxvbmcpX19idWlsdGluX3MzOTBfdnNyYSgKLSAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgbG9uZyBsb25nCi12ZWNfc3JhbCh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgewotICByZXR1cm4gKHZlY3RvciBib29sIGxvbmcgbG9uZylfX2J1aWx0aW5fczM5MF92c3JhKAotICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nCi12ZWNfc3JhbCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2J1aWx0aW5fczM5MF92c3JhKAotICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsIF9fYik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcKLXZlY19zcmFsKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2J1aWx0aW5fczM5MF92c3JhKAotICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nCi12ZWNfc3JhbCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYnVpbHRpbl9zMzkwX3ZzcmEoCi0gICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Ci19Ci0KLS8qLS0gdmVjX3NyYWIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBjaGFyCi12ZWNfc3JhYih2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYnVpbHRpbl9zMzkwX3ZzcmFiKAotICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGNoYXIKLXZlY19zcmFiKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gKHZlY3RvciBzaWduZWQgY2hhcilfX2J1aWx0aW5fczM5MF92c3JhYigKLSAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCBfX2IpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgotdmVjX3NyYWIodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fczM5MF92c3JhYihfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgotdmVjX3NyYWIodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZzcmFiKF9fYSwgX19iKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBzaG9ydAotdmVjX3NyYWIodmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBzaWduZWQgc2hvcnQgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHNpZ25lZCBzaG9ydClfX2J1aWx0aW5fczM5MF92c3JhYigKLSAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBzaG9ydAotdmVjX3NyYWIodmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIHNob3J0KV9fYnVpbHRpbl9zMzkwX3ZzcmFiKAotICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKLXZlY19zcmFiKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBzaWduZWQgc2hvcnQgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYnVpbHRpbl9zMzkwX3ZzcmFiKAotICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKLXZlY19zcmFiKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19idWlsdGluX3MzOTBfdnNyYWIoCi0gICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgaW50Ci12ZWNfc3JhYih2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYikgewotICByZXR1cm4gKHZlY3RvciBzaWduZWQgaW50KV9fYnVpbHRpbl9zMzkwX3ZzcmFiKAotICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGludAotdmVjX3NyYWIodmVjdG9yIHNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgewotICByZXR1cm4gKHZlY3RvciBzaWduZWQgaW50KV9fYnVpbHRpbl9zMzkwX3ZzcmFiKAotICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Ci12ZWNfc3JhYih2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHNpZ25lZCBpbnQgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGludClfX2J1aWx0aW5fczM5MF92c3JhYigKLSAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAotdmVjX3NyYWIodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGludClfX2J1aWx0aW5fczM5MF92c3JhYigKLSAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcKLXZlY19zcmFiKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19idWlsdGluX3MzOTBfdnNyYWIoCi0gICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgbG9uZyBsb25nCi12ZWNfc3JhYih2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19idWlsdGluX3MzOTBfdnNyYWIoCi0gICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcKLXZlY19zcmFiKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYnVpbHRpbl9zMzkwX3ZzcmFiKAotICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nCi12ZWNfc3JhYih2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYnVpbHRpbl9zMzkwX3ZzcmFiKAotICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgZG91YmxlCi12ZWNfc3JhYih2ZWN0b3IgZG91YmxlIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIGRvdWJsZSlfX2J1aWx0aW5fczM5MF92c3JhYigKLSAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGRvdWJsZQotdmVjX3NyYWIodmVjdG9yIGRvdWJsZSBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIGRvdWJsZSlfX2J1aWx0aW5fczM5MF92c3JhYigKLSAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKLX0KLQotLyotLSB2ZWNfc3JsIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGNoYXIKLXZlY19zcmwodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYnVpbHRpbl9zMzkwX3ZzcmwoCi0gICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgX19iKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBjaGFyCi12ZWNfc3JsKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19idWlsdGluX3MzOTBfdnNybCgKLSAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBjaGFyCi12ZWNfc3JsKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYnVpbHRpbl9zMzkwX3ZzcmwoCi0gICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGNoYXIKLXZlY19zcmwodmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gKHZlY3RvciBib29sIGNoYXIpX19idWlsdGluX3MzOTBfdnNybCgKLSAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCBfX2IpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBjaGFyCi12ZWNfc3JsKHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIGJvb2wgY2hhcilfX2J1aWx0aW5fczM5MF92c3JsKAotICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBjaGFyCi12ZWNfc3JsKHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgewotICByZXR1cm4gKHZlY3RvciBib29sIGNoYXIpX19idWlsdGluX3MzOTBfdnNybCgKLSAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKLXZlY19zcmwodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZzcmwoX19hLCBfX2IpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgotdmVjX3NybCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZzcmwoX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKLXZlY19zcmwodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgewotICByZXR1cm4gX19idWlsdGluX3MzOTBfdnNybChfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIHNob3J0Ci12ZWNfc3JsKHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIHNob3J0KV9fYnVpbHRpbl9zMzkwX3ZzcmwoCi0gICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgX19iKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBzaG9ydAotdmVjX3NybCh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgewotICByZXR1cm4gKHZlY3RvciBzaWduZWQgc2hvcnQpX19idWlsdGluX3MzOTBfdnNybCgKLSAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBzaG9ydAotdmVjX3NybCh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIHNob3J0KV9fYnVpbHRpbl9zMzkwX3ZzcmwoCi0gICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIHNob3J0Ci12ZWNfc3JsKHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIGJvb2wgc2hvcnQpX19idWlsdGluX3MzOTBfdnNybCgKLSAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCBfX2IpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBzaG9ydAotdmVjX3NybCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgYm9vbCBzaG9ydClfX2J1aWx0aW5fczM5MF92c3JsKAotICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBzaG9ydAotdmVjX3NybCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIGJvb2wgc2hvcnQpX19idWlsdGluX3MzOTBfdnNybCgKLSAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Ci12ZWNfc3JsKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2J1aWx0aW5fczM5MF92c3JsKAotICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsIF9fYik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAotdmVjX3NybCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYnVpbHRpbl9zMzkwX3ZzcmwoCi0gICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAotdmVjX3NybCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgewotICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2J1aWx0aW5fczM5MF92c3JsKAotICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGludAotdmVjX3NybCh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gKHZlY3RvciBzaWduZWQgaW50KV9fYnVpbHRpbl9zMzkwX3ZzcmwoCi0gICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgX19iKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBpbnQKLXZlY19zcmwodmVjdG9yIHNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHNpZ25lZCBpbnQpX19idWlsdGluX3MzOTBfdnNybCgKLSAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBpbnQKLXZlY19zcmwodmVjdG9yIHNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgewotICByZXR1cm4gKHZlY3RvciBzaWduZWQgaW50KV9fYnVpbHRpbl9zMzkwX3ZzcmwoCi0gICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGludAotdmVjX3NybCh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgYm9vbCBpbnQpX19idWlsdGluX3MzOTBfdnNybCgKLSAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCBfX2IpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBpbnQKLXZlY19zcmwodmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgewotICByZXR1cm4gKHZlY3RvciBib29sIGludClfX2J1aWx0aW5fczM5MF92c3JsKAotICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBpbnQKLXZlY19zcmwodmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgYm9vbCBpbnQpX19idWlsdGluX3MzOTBfdnNybCgKLSAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAotdmVjX3NybCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGludClfX2J1aWx0aW5fczM5MF92c3JsKAotICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsIF9fYik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKLXZlY19zcmwodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYnVpbHRpbl9zMzkwX3ZzcmwoCi0gICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKLXZlY19zcmwodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGludClfX2J1aWx0aW5fczM5MF92c3JsKAotICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZwotdmVjX3NybCh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYnVpbHRpbl9zMzkwX3ZzcmwoCi0gICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgX19iKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcKLXZlY19zcmwodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19idWlsdGluX3MzOTBfdnNybCgKLSAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcKLXZlY19zcmwodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgewotICByZXR1cm4gKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYnVpbHRpbl9zMzkwX3ZzcmwoCi0gICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGxvbmcgbG9uZwotdmVjX3NybCh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgYm9vbCBsb25nIGxvbmcpX19idWlsdGluX3MzOTBfdnNybCgKLSAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCBfX2IpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBsb25nIGxvbmcKLXZlY19zcmwodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgewotICByZXR1cm4gKHZlY3RvciBib29sIGxvbmcgbG9uZylfX2J1aWx0aW5fczM5MF92c3JsKAotICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBsb25nIGxvbmcKLXZlY19zcmwodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgYm9vbCBsb25nIGxvbmcpX19idWlsdGluX3MzOTBfdnNybCgKLSAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZwotdmVjX3NybCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2J1aWx0aW5fczM5MF92c3JsKAotICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsIF9fYik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcKLXZlY19zcmwodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYnVpbHRpbl9zMzkwX3ZzcmwoCi0gICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcKLXZlY19zcmwodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2J1aWx0aW5fczM5MF92c3JsKAotICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOwotfQotCi0vKi0tIHZlY19zcmIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgY2hhcgotdmVjX3NyYih2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYnVpbHRpbl9zMzkwX3ZzcmxiKAotICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGNoYXIKLXZlY19zcmIodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYnVpbHRpbl9zMzkwX3ZzcmxiKAotICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsIF9fYik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCi12ZWNfc3JiKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gX19idWlsdGluX3MzOTBfdnNybGIoX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKLXZlY19zcmIodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZzcmxiKF9fYSwgX19iKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBzaG9ydAotdmVjX3NyYih2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIHNob3J0KV9fYnVpbHRpbl9zMzkwX3ZzcmxiKAotICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIHNob3J0Ci12ZWNfc3JiKHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHNpZ25lZCBzaG9ydClfX2J1aWx0aW5fczM5MF92c3JsYigKLSAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Ci12ZWNfc3JiKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBzaWduZWQgc2hvcnQgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYnVpbHRpbl9zMzkwX3ZzcmxiKAotICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKLXZlY19zcmIodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgewotICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2J1aWx0aW5fczM5MF92c3JsYigKLSAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBpbnQKLXZlY19zcmIodmVjdG9yIHNpZ25lZCBpbnQgX19hLCB2ZWN0b3Igc2lnbmVkIGludCBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGludClfX2J1aWx0aW5fczM5MF92c3JsYigKLSAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBpbnQKLXZlY19zcmIodmVjdG9yIHNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgewotICByZXR1cm4gKHZlY3RvciBzaWduZWQgaW50KV9fYnVpbHRpbl9zMzkwX3ZzcmxiKAotICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Ci12ZWNfc3JiKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3Igc2lnbmVkIGludCBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYnVpbHRpbl9zMzkwX3ZzcmxiKAotICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Ci12ZWNfc3JiKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgewotICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBpbnQpX19idWlsdGluX3MzOTBfdnNybGIoCi0gICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgbG9uZyBsb25nCi12ZWNfc3JiKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19idWlsdGluX3MzOTBfdnNybGIoCi0gICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgbG9uZyBsb25nCi12ZWNfc3JiKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2J1aWx0aW5fczM5MF92c3JsYigKLSAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZwotdmVjX3NyYih2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2J1aWx0aW5fczM5MF92c3JsYigKLSAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZwotdmVjX3NyYih2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYnVpbHRpbl9zMzkwX3ZzcmxiKAotICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgZG91YmxlCi12ZWNfc3JiKHZlY3RvciBkb3VibGUgX19hLCB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgZG91YmxlKV9fYnVpbHRpbl9zMzkwX3ZzcmxiKAotICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgZG91YmxlCi12ZWNfc3JiKHZlY3RvciBkb3VibGUgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgewotICByZXR1cm4gKHZlY3RvciBkb3VibGUpX19idWlsdGluX3MzOTBfdnNybGIoCi0gICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Ci19Ci0KLS8qLS0gdmVjX2FicyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBjaGFyCi12ZWNfYWJzKHZlY3RvciBzaWduZWQgY2hhciBfX2EpIHsKLSAgcmV0dXJuIHZlY19zZWwoX19hLCAtX19hLCB2ZWNfY21wbHQoX19hLCAodmVjdG9yIHNpZ25lZCBjaGFyKTApKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBzaG9ydAotdmVjX2Ficyh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSkgewotICByZXR1cm4gdmVjX3NlbChfX2EsIC1fX2EsIHZlY19jbXBsdChfX2EsICh2ZWN0b3Igc2lnbmVkIHNob3J0KTApKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBpbnQKLXZlY19hYnModmVjdG9yIHNpZ25lZCBpbnQgX19hKSB7Ci0gIHJldHVybiB2ZWNfc2VsKF9fYSwgLV9fYSwgdmVjX2NtcGx0KF9fYSwgKHZlY3RvciBzaWduZWQgaW50KTApKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcKLXZlY19hYnModmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hKSB7Ci0gIHJldHVybiB2ZWNfc2VsKF9fYSwgLV9fYSwgdmVjX2NtcGx0KF9fYSwgKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKTApKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGRvdWJsZQotdmVjX2Ficyh2ZWN0b3IgZG91YmxlIF9fYSkgewotICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZscGRiKF9fYSk7Ci19Ci0KLS8qLS0gdmVjX25hYnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX2FpIHZlY3RvciBkb3VibGUKLXZlY19uYWJzKHZlY3RvciBkb3VibGUgX19hKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmxuZGIoX19hKTsKLX0KLQotLyotLSB2ZWNfbWF4IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGNoYXIKLXZlY19tYXgodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gdmVjX3NlbChfX2IsIF9fYSwgdmVjX2NtcGd0KF9fYSwgX19iKSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgY2hhcgotdmVjX21heCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgewotICB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iYyA9ICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19iOwotICByZXR1cm4gdmVjX3NlbChfX2JjLCBfX2EsIHZlY19jbXBndChfX2EsIF9fYmMpKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBjaGFyCi12ZWNfbWF4KHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7Ci0gIHZlY3RvciBzaWduZWQgY2hhciBfX2FjID0gKHZlY3RvciBzaWduZWQgY2hhcilfX2E7Ci0gIHJldHVybiB2ZWNfc2VsKF9fYiwgX19hYywgdmVjX2NtcGd0KF9fYWMsIF9fYikpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgotdmVjX21heCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gdmVjX3NlbChfX2IsIF9fYSwgdmVjX2NtcGd0KF9fYSwgX19iKSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCi12ZWNfbWF4KHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKLSAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iYyA9ICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2I7Ci0gIHJldHVybiB2ZWNfc2VsKF9fYmMsIF9fYSwgdmVjX2NtcGd0KF9fYSwgX19iYykpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgotdmVjX21heCh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7Ci0gIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYWMgPSAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hOwotICByZXR1cm4gdmVjX3NlbChfX2IsIF9fYWMsIHZlY19jbXBndChfX2FjLCBfX2IpKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBzaG9ydAotdmVjX21heCh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuIHZlY19zZWwoX19iLCBfX2EsIHZlY19jbXBndChfX2EsIF9fYikpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIHNob3J0Ci12ZWNfbWF4KHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKLSAgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2JjID0gKHZlY3RvciBzaWduZWQgc2hvcnQpX19iOwotICByZXR1cm4gdmVjX3NlbChfX2JjLCBfX2EsIHZlY19jbXBndChfX2EsIF9fYmMpKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBzaG9ydAotdmVjX21heCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciBzaWduZWQgc2hvcnQgX19iKSB7Ci0gIHZlY3RvciBzaWduZWQgc2hvcnQgX19hYyA9ICh2ZWN0b3Igc2lnbmVkIHNob3J0KV9fYTsKLSAgcmV0dXJuIHZlY19zZWwoX19iLCBfX2FjLCB2ZWNfY21wZ3QoX19hYywgX19iKSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAotdmVjX21heCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7Ci0gIHJldHVybiB2ZWNfc2VsKF9fYiwgX19hLCB2ZWNfY21wZ3QoX19hLCBfX2IpKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Ci12ZWNfbWF4KHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBib29sIHNob3J0IF9fYikgewotICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iYyA9ICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19iOwotICByZXR1cm4gdmVjX3NlbChfX2JjLCBfX2EsIHZlY19jbXBndChfX2EsIF9fYmMpKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Ci12ZWNfbWF4KHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgewotICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hYyA9ICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hOwotICByZXR1cm4gdmVjX3NlbChfX2IsIF9fYWMsIHZlY19jbXBndChfX2FjLCBfX2IpKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBpbnQKLXZlY19tYXgodmVjdG9yIHNpZ25lZCBpbnQgX19hLCB2ZWN0b3Igc2lnbmVkIGludCBfX2IpIHsKLSAgcmV0dXJuIHZlY19zZWwoX19iLCBfX2EsIHZlY19jbXBndChfX2EsIF9fYikpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGludAotdmVjX21heCh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IpIHsKLSAgdmVjdG9yIHNpZ25lZCBpbnQgX19iYyA9ICh2ZWN0b3Igc2lnbmVkIGludClfX2I7Ci0gIHJldHVybiB2ZWNfc2VsKF9fYmMsIF9fYSwgdmVjX2NtcGd0KF9fYSwgX19iYykpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGludAotdmVjX21heCh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3Igc2lnbmVkIGludCBfX2IpIHsKLSAgdmVjdG9yIHNpZ25lZCBpbnQgX19hYyA9ICh2ZWN0b3Igc2lnbmVkIGludClfX2E7Ci0gIHJldHVybiB2ZWNfc2VsKF9fYiwgX19hYywgdmVjX2NtcGd0KF9fYWMsIF9fYikpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Ci12ZWNfbWF4KHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgewotICByZXR1cm4gdmVjX3NlbChfX2IsIF9fYSwgdmVjX2NtcGd0KF9fYSwgX19iKSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKLXZlY19tYXgodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IpIHsKLSAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2JjID0gKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iOwotICByZXR1cm4gdmVjX3NlbChfX2JjLCBfX2EsIHZlY19jbXBndChfX2EsIF9fYmMpKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAotdmVjX21heCh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgewotICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYWMgPSAodmVjdG9yIHVuc2lnbmVkIGludClfX2E7Ci0gIHJldHVybiB2ZWNfc2VsKF9fYiwgX19hYywgdmVjX2NtcGd0KF9fYWMsIF9fYikpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZwotdmVjX21heCh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgewotICByZXR1cm4gdmVjX3NlbChfX2IsIF9fYSwgdmVjX2NtcGd0KF9fYSwgX19iKSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgbG9uZyBsb25nCi12ZWNfbWF4KHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgewotICB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2JjID0gKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYjsKLSAgcmV0dXJuIHZlY19zZWwoX19iYywgX19hLCB2ZWNfY21wZ3QoX19hLCBfX2JjKSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgbG9uZyBsb25nCi12ZWNfbWF4KHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgewotICB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2FjID0gKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYTsKLSAgcmV0dXJuIHZlY19zZWwoX19iLCBfX2FjLCB2ZWNfY21wZ3QoX19hYywgX19iKSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcKLXZlY19tYXgodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7Ci0gIHJldHVybiB2ZWNfc2VsKF9fYiwgX19hLCB2ZWNfY21wZ3QoX19hLCBfX2IpKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZwotdmVjX21heCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgewotICB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYmMgPSAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2I7Ci0gIHJldHVybiB2ZWNfc2VsKF9fYmMsIF9fYSwgdmVjX2NtcGd0KF9fYSwgX19iYykpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nCi12ZWNfbWF4KHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7Ci0gIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hYyA9ICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYTsKLSAgcmV0dXJuIHZlY19zZWwoX19iLCBfX2FjLCB2ZWNfY21wZ3QoX19hYywgX19iKSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBkb3VibGUKLXZlY19tYXgodmVjdG9yIGRvdWJsZSBfX2EsIHZlY3RvciBkb3VibGUgX19iKSB7Ci0gIHJldHVybiB2ZWNfc2VsKF9fYiwgX19hLCB2ZWNfY21wZ3QoX19hLCBfX2IpKTsKLX0KLQotLyotLSB2ZWNfbWluIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGNoYXIKLXZlY19taW4odmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gdmVjX3NlbChfX2EsIF9fYiwgdmVjX2NtcGd0KF9fYSwgX19iKSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgY2hhcgotdmVjX21pbih2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgewotICB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iYyA9ICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19iOwotICByZXR1cm4gdmVjX3NlbChfX2EsIF9fYmMsIHZlY19jbXBndChfX2EsIF9fYmMpKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBjaGFyCi12ZWNfbWluKHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7Ci0gIHZlY3RvciBzaWduZWQgY2hhciBfX2FjID0gKHZlY3RvciBzaWduZWQgY2hhcilfX2E7Ci0gIHJldHVybiB2ZWNfc2VsKF9fYWMsIF9fYiwgdmVjX2NtcGd0KF9fYWMsIF9fYikpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgotdmVjX21pbih2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gdmVjX3NlbChfX2EsIF9fYiwgdmVjX2NtcGd0KF9fYSwgX19iKSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCi12ZWNfbWluKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKLSAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iYyA9ICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2I7Ci0gIHJldHVybiB2ZWNfc2VsKF9fYSwgX19iYywgdmVjX2NtcGd0KF9fYSwgX19iYykpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgotdmVjX21pbih2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7Ci0gIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYWMgPSAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hOwotICByZXR1cm4gdmVjX3NlbChfX2FjLCBfX2IsIHZlY19jbXBndChfX2FjLCBfX2IpKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBzaG9ydAotdmVjX21pbih2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuIHZlY19zZWwoX19hLCBfX2IsIHZlY19jbXBndChfX2EsIF9fYikpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIHNob3J0Ci12ZWNfbWluKHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKLSAgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2JjID0gKHZlY3RvciBzaWduZWQgc2hvcnQpX19iOwotICByZXR1cm4gdmVjX3NlbChfX2EsIF9fYmMsIHZlY19jbXBndChfX2EsIF9fYmMpKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBzaG9ydAotdmVjX21pbih2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciBzaWduZWQgc2hvcnQgX19iKSB7Ci0gIHZlY3RvciBzaWduZWQgc2hvcnQgX19hYyA9ICh2ZWN0b3Igc2lnbmVkIHNob3J0KV9fYTsKLSAgcmV0dXJuIHZlY19zZWwoX19hYywgX19iLCB2ZWNfY21wZ3QoX19hYywgX19iKSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAotdmVjX21pbih2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7Ci0gIHJldHVybiB2ZWNfc2VsKF9fYSwgX19iLCB2ZWNfY21wZ3QoX19hLCBfX2IpKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Ci12ZWNfbWluKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBib29sIHNob3J0IF9fYikgewotICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iYyA9ICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19iOwotICByZXR1cm4gdmVjX3NlbChfX2EsIF9fYmMsIHZlY19jbXBndChfX2EsIF9fYmMpKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Ci12ZWNfbWluKHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgewotICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hYyA9ICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hOwotICByZXR1cm4gdmVjX3NlbChfX2FjLCBfX2IsIHZlY19jbXBndChfX2FjLCBfX2IpKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBpbnQKLXZlY19taW4odmVjdG9yIHNpZ25lZCBpbnQgX19hLCB2ZWN0b3Igc2lnbmVkIGludCBfX2IpIHsKLSAgcmV0dXJuIHZlY19zZWwoX19hLCBfX2IsIHZlY19jbXBndChfX2EsIF9fYikpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGludAotdmVjX21pbih2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IpIHsKLSAgdmVjdG9yIHNpZ25lZCBpbnQgX19iYyA9ICh2ZWN0b3Igc2lnbmVkIGludClfX2I7Ci0gIHJldHVybiB2ZWNfc2VsKF9fYSwgX19iYywgdmVjX2NtcGd0KF9fYSwgX19iYykpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGludAotdmVjX21pbih2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3Igc2lnbmVkIGludCBfX2IpIHsKLSAgdmVjdG9yIHNpZ25lZCBpbnQgX19hYyA9ICh2ZWN0b3Igc2lnbmVkIGludClfX2E7Ci0gIHJldHVybiB2ZWNfc2VsKF9fYWMsIF9fYiwgdmVjX2NtcGd0KF9fYWMsIF9fYikpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Ci12ZWNfbWluKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgewotICByZXR1cm4gdmVjX3NlbChfX2EsIF9fYiwgdmVjX2NtcGd0KF9fYSwgX19iKSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKLXZlY19taW4odmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IpIHsKLSAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2JjID0gKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iOwotICByZXR1cm4gdmVjX3NlbChfX2EsIF9fYmMsIHZlY19jbXBndChfX2EsIF9fYmMpKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAotdmVjX21pbih2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgewotICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYWMgPSAodmVjdG9yIHVuc2lnbmVkIGludClfX2E7Ci0gIHJldHVybiB2ZWNfc2VsKF9fYWMsIF9fYiwgdmVjX2NtcGd0KF9fYWMsIF9fYikpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZwotdmVjX21pbih2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgewotICByZXR1cm4gdmVjX3NlbChfX2EsIF9fYiwgdmVjX2NtcGd0KF9fYSwgX19iKSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgbG9uZyBsb25nCi12ZWNfbWluKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgewotICB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2JjID0gKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYjsKLSAgcmV0dXJuIHZlY19zZWwoX19hLCBfX2JjLCB2ZWNfY21wZ3QoX19hLCBfX2JjKSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgbG9uZyBsb25nCi12ZWNfbWluKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgewotICB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2FjID0gKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYTsKLSAgcmV0dXJuIHZlY19zZWwoX19hYywgX19iLCB2ZWNfY21wZ3QoX19hYywgX19iKSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcKLXZlY19taW4odmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7Ci0gIHJldHVybiB2ZWNfc2VsKF9fYSwgX19iLCB2ZWNfY21wZ3QoX19hLCBfX2IpKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZwotdmVjX21pbih2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgewotICB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYmMgPSAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2I7Ci0gIHJldHVybiB2ZWNfc2VsKF9fYSwgX19iYywgdmVjX2NtcGd0KF9fYSwgX19iYykpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nCi12ZWNfbWluKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7Ci0gIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hYyA9ICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYTsKLSAgcmV0dXJuIHZlY19zZWwoX19hYywgX19iLCB2ZWNfY21wZ3QoX19hYywgX19iKSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBkb3VibGUKLXZlY19taW4odmVjdG9yIGRvdWJsZSBfX2EsIHZlY3RvciBkb3VibGUgX19iKSB7Ci0gIHJldHVybiB2ZWNfc2VsKF9fYSwgX19iLCB2ZWNfY21wZ3QoX19hLCBfX2IpKTsKLX0KLQotLyotLSB2ZWNfYWRkX3UxMjggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKLXZlY19hZGRfdTEyOCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gX19idWlsdGluX3MzOTBfdmFxKF9fYSwgX19iKTsKLX0KLQotLyotLSB2ZWNfYWRkYyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgotdmVjX2FkZGModmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZhY2NiKF9fYSwgX19iKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Ci12ZWNfYWRkYyh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fczM5MF92YWNjaChfX2EsIF9fYik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKLXZlY19hZGRjKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgewotICByZXR1cm4gX19idWlsdGluX3MzOTBfdmFjY2YoX19hLCBfX2IpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nCi12ZWNfYWRkYyh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZhY2NnKF9fYSwgX19iKTsKLX0KLQotLyotLSB2ZWNfYWRkY191MTI4IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKLXZlY19hZGRjX3UxMjgodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZhY2NxKF9fYSwgX19iKTsKLX0KLQotLyotLSB2ZWNfYWRkZV91MTI4IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKLXZlY19hZGRlX3UxMjgodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IsCi0gICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYykgewotICByZXR1cm4gX19idWlsdGluX3MzOTBfdmFjcShfX2EsIF9fYiwgX19jKTsKLX0KLQotLyotLSB2ZWNfYWRkZWNfdTEyOCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKLXZlY19hZGRlY191MTI4KHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iLAotICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19jKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fczM5MF92YWNjY3EoX19hLCBfX2IsIF9fYyk7Ci19Ci0KLS8qLS0gdmVjX2F2ZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBjaGFyCi12ZWNfYXZnKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZhdmdiKF9fYSwgX19iKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBzaG9ydAotdmVjX2F2Zyh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZhdmdoKF9fYSwgX19iKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBpbnQKLXZlY19hdmcodmVjdG9yIHNpZ25lZCBpbnQgX19hLCB2ZWN0b3Igc2lnbmVkIGludCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZhdmdmKF9fYSwgX19iKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcKLXZlY19hdmcodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZhdmdnKF9fYSwgX19iKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKLXZlY19hdmcodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZhdmdsYihfX2EsIF9fYik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAotdmVjX2F2Zyh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fczM5MF92YXZnbGgoX19hLCBfX2IpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Ci12ZWNfYXZnKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgewotICByZXR1cm4gX19idWlsdGluX3MzOTBfdmF2Z2xmKF9fYSwgX19iKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZwotdmVjX2F2Zyh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZhdmdsZyhfX2EsIF9fYik7Ci19Ci0KLS8qLS0gdmVjX2NoZWNrc3VtIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKLXZlY19jaGVja3N1bSh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3Zja3NtKF9fYSwgX19iKTsKLX0KLQotLyotLSB2ZWNfZ2Ztc3VtIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKLXZlY19nZm1zdW0odmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZnZm1iKF9fYSwgX19iKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAotdmVjX2dmbXN1bSh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fczM5MF92Z2ZtaChfX2EsIF9fYik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcKLXZlY19nZm1zdW0odmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fczM5MF92Z2ZtZihfX2EsIF9fYik7Ci19Ci0KLS8qLS0gdmVjX2dmbXN1bV8xMjggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKLXZlY19nZm1zdW1fMTI4KHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgewotICByZXR1cm4gX19idWlsdGluX3MzOTBfdmdmbWcoX19hLCBfX2IpOwotfQotCi0vKi0tIHZlY19nZm1zdW1fYWNjdW0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAotdmVjX2dmbXN1bV9hY2N1bSh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYiwKLSAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYykgewotICByZXR1cm4gX19idWlsdGluX3MzOTBfdmdmbWFiKF9fYSwgX19iLCBfX2MpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Ci12ZWNfZ2Ztc3VtX2FjY3VtKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IsCi0gICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19jKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fczM5MF92Z2ZtYWgoX19hLCBfX2IsIF9fYyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcKLXZlY19nZm1zdW1fYWNjdW0odmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iLAotICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYykgewotICByZXR1cm4gX19idWlsdGluX3MzOTBfdmdmbWFmKF9fYSwgX19iLCBfX2MpOwotfQotCi0vKi0tIHZlY19nZm1zdW1fYWNjdW1fMTI4IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCi12ZWNfZ2Ztc3VtX2FjY3VtXzEyOCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwKLSAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iLAotICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19jKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fczM5MF92Z2ZtYWcoX19hLCBfX2IsIF9fYyk7Ci19Ci0KLS8qLS0gdmVjX21sYWRkIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBjaGFyCi12ZWNfbWxhZGQodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYiwKLSAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgX19jKSB7Ci0gIHJldHVybiBfX2EgKiBfX2IgKyBfX2M7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgY2hhcgotdmVjX21sYWRkKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYiwKLSAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgX19jKSB7Ci0gIHJldHVybiAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYSAqIF9fYiArIF9fYzsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBjaGFyCi12ZWNfbWxhZGQodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iLAotICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYykgewotICByZXR1cm4gX19hICogKHZlY3RvciBzaWduZWQgY2hhcilfX2IgKyAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYzsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKLXZlY19tbGFkZCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYiwKLSAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2MpIHsKLSAgcmV0dXJuIF9fYSAqIF9fYiArIF9fYzsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBzaG9ydAotdmVjX21sYWRkKHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYiwKLSAgICAgICAgICB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYykgewotICByZXR1cm4gX19hICogX19iICsgX19jOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIHNob3J0Ci12ZWNfbWxhZGQodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2IsCi0gICAgICAgICAgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2MpIHsKLSAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIHNob3J0KV9fYSAqIF9fYiArIF9fYzsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBzaG9ydAotdmVjX21sYWRkKHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iLAotICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2MpIHsKLSAgcmV0dXJuIF9fYSAqICh2ZWN0b3Igc2lnbmVkIHNob3J0KV9fYiArICh2ZWN0b3Igc2lnbmVkIHNob3J0KV9fYzsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Ci12ZWNfbWxhZGQodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYiwKLSAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19jKSB7Ci0gIHJldHVybiBfX2EgKiBfX2IgKyBfX2M7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgaW50Ci12ZWNfbWxhZGQodmVjdG9yIHNpZ25lZCBpbnQgX19hLCB2ZWN0b3Igc2lnbmVkIGludCBfX2IsCi0gICAgICAgICAgdmVjdG9yIHNpZ25lZCBpbnQgX19jKSB7Ci0gIHJldHVybiBfX2EgKiBfX2IgKyBfX2M7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgaW50Ci12ZWNfbWxhZGQodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYiwKLSAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGludCBfX2MpIHsKLSAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGludClfX2EgKiBfX2IgKyBfX2M7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgaW50Ci12ZWNfbWxhZGQodmVjdG9yIHNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYiwKLSAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYykgewotICByZXR1cm4gX19hICogKHZlY3RvciBzaWduZWQgaW50KV9fYiArICh2ZWN0b3Igc2lnbmVkIGludClfX2M7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKLXZlY19tbGFkZCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IsCi0gICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2MpIHsKLSAgcmV0dXJuIF9fYSAqIF9fYiArIF9fYzsKLX0KLQotLyotLSB2ZWNfbWhhZGQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGNoYXIKLXZlY19taGFkZCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iLAotICAgICAgICAgIHZlY3RvciBzaWduZWQgY2hhciBfX2MpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZtYWhiKF9fYSwgX19iLCBfX2MpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgotdmVjX21oYWRkKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iLAotICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYykgewotICByZXR1cm4gX19idWlsdGluX3MzOTBfdm1hbGhiKF9fYSwgX19iLCBfX2MpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIHNob3J0Ci12ZWNfbWhhZGQodmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBzaWduZWQgc2hvcnQgX19iLAotICAgICAgICAgIHZlY3RvciBzaWduZWQgc2hvcnQgX19jKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fczM5MF92bWFoaChfX2EsIF9fYiwgX19jKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Ci12ZWNfbWhhZGQodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYiwKLSAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19jKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fczM5MF92bWFsaGgoX19hLCBfX2IsIF9fYyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgaW50Ci12ZWNfbWhhZGQodmVjdG9yIHNpZ25lZCBpbnQgX19hLCB2ZWN0b3Igc2lnbmVkIGludCBfX2IsCi0gICAgICAgICAgdmVjdG9yIHNpZ25lZCBpbnQgX19jKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fczM5MF92bWFoZihfX2EsIF9fYiwgX19jKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAotdmVjX21oYWRkKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYiwKLSAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYykgewotICByZXR1cm4gX19idWlsdGluX3MzOTBfdm1hbGhmKF9fYSwgX19iLCBfX2MpOwotfQotCi0vKi0tIHZlY19tZWFkZCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgc2hvcnQKLXZlY19tZWFkZCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iLAotICAgICAgICAgIHZlY3RvciBzaWduZWQgc2hvcnQgX19jKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fczM5MF92bWFlYihfX2EsIF9fYiwgX19jKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Ci12ZWNfbWVhZGQodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IsCi0gICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYykgewotICByZXR1cm4gX19idWlsdGluX3MzOTBfdm1hbGViKF9fYSwgX19iLCBfX2MpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGludAotdmVjX21lYWRkKHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYiwKLSAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGludCBfX2MpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZtYWVoKF9fYSwgX19iLCBfX2MpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Ci12ZWNfbWVhZGQodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYiwKLSAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYykgewotICByZXR1cm4gX19idWlsdGluX3MzOTBfdm1hbGVoKF9fYSwgX19iLCBfX2MpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZwotdmVjX21lYWRkKHZlY3RvciBzaWduZWQgaW50IF9fYSwgdmVjdG9yIHNpZ25lZCBpbnQgX19iLAotICAgICAgICAgIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYykgewotICByZXR1cm4gX19idWlsdGluX3MzOTBfdm1hZWYoX19hLCBfX2IsIF9fYyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcKLXZlY19tZWFkZCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IsCi0gICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2MpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZtYWxlZihfX2EsIF9fYiwgX19jKTsKLX0KLQotLyotLSB2ZWNfbW9hZGQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIHNob3J0Ci12ZWNfbW9hZGQodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYiwKLSAgICAgICAgICB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYykgewotICByZXR1cm4gX19idWlsdGluX3MzOTBfdm1hb2IoX19hLCBfX2IsIF9fYyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAotdmVjX21vYWRkKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iLAotICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2MpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZtYWxvYihfX2EsIF9fYiwgX19jKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBpbnQKLXZlY19tb2FkZCh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2IsCi0gICAgICAgICAgdmVjdG9yIHNpZ25lZCBpbnQgX19jKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fczM5MF92bWFvaChfX2EsIF9fYiwgX19jKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAotdmVjX21vYWRkKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IsCi0gICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2MpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZtYWxvaChfX2EsIF9fYiwgX19jKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcKLXZlY19tb2FkZCh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYiwKLSAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2MpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZtYW9mKF9fYSwgX19iLCBfX2MpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nCi12ZWNfbW9hZGQodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iLAotICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19jKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fczM5MF92bWFsb2YoX19hLCBfX2IsIF9fYyk7Ci19Ci0KLS8qLS0gdmVjX211bGggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBjaGFyCi12ZWNfbXVsaCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fczM5MF92bWhiKF9fYSwgX19iKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKLXZlY19tdWxoKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fczM5MF92bWxoYihfX2EsIF9fYik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgc2hvcnQKLXZlY19tdWxoKHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYikgewotICByZXR1cm4gX19idWlsdGluX3MzOTBfdm1oaChfX2EsIF9fYik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAotdmVjX211bGgodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgewotICByZXR1cm4gX19idWlsdGluX3MzOTBfdm1saGgoX19hLCBfX2IpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGludAotdmVjX211bGgodmVjdG9yIHNpZ25lZCBpbnQgX19hLCB2ZWN0b3Igc2lnbmVkIGludCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZtaGYoX19hLCBfX2IpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Ci12ZWNfbXVsaCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZtbGhmKF9fYSwgX19iKTsKLX0KLQotLyotLSB2ZWNfbXVsZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIHNob3J0Ci12ZWNfbXVsZSh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fczM5MF92bWViKF9fYSwgX19iKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Ci12ZWNfbXVsZSh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gX19idWlsdGluX3MzOTBfdm1sZWIoX19hLCBfX2IpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGludAotdmVjX211bGUodmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBzaWduZWQgc2hvcnQgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fczM5MF92bWVoKF9fYSwgX19iKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAotdmVjX211bGUodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgewotICByZXR1cm4gX19idWlsdGluX3MzOTBfdm1sZWgoX19hLCBfX2IpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZwotdmVjX211bGUodmVjdG9yIHNpZ25lZCBpbnQgX19hLCB2ZWN0b3Igc2lnbmVkIGludCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZtZWYoX19hLCBfX2IpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nCi12ZWNfbXVsZSh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZtbGVmKF9fYSwgX19iKTsKLX0KLQotLyotLSB2ZWNfbXVsbyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIHNob3J0Ci12ZWNfbXVsbyh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fczM5MF92bW9iKF9fYSwgX19iKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Ci12ZWNfbXVsbyh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gX19idWlsdGluX3MzOTBfdm1sb2IoX19hLCBfX2IpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGludAotdmVjX211bG8odmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBzaWduZWQgc2hvcnQgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fczM5MF92bW9oKF9fYSwgX19iKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAotdmVjX211bG8odmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgewotICByZXR1cm4gX19idWlsdGluX3MzOTBfdm1sb2goX19hLCBfX2IpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZwotdmVjX211bG8odmVjdG9yIHNpZ25lZCBpbnQgX19hLCB2ZWN0b3Igc2lnbmVkIGludCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3Ztb2YoX19hLCBfX2IpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nCi12ZWNfbXVsbyh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZtbG9mKF9fYSwgX19iKTsKLX0KLQotLyotLSB2ZWNfc3ViX3UxMjggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKLXZlY19zdWJfdTEyOCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gX19idWlsdGluX3MzOTBfdnNxKF9fYSwgX19iKTsKLX0KLQotLyotLSB2ZWNfc3ViYyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgotdmVjX3N1YmModmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZzY2JpYihfX2EsIF9fYik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAotdmVjX3N1YmModmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgewotICByZXR1cm4gX19idWlsdGluX3MzOTBfdnNjYmloKF9fYSwgX19iKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAotdmVjX3N1YmModmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fczM5MF92c2NiaWYoX19hLCBfX2IpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nCi12ZWNfc3ViYyh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZzY2JpZyhfX2EsIF9fYik7Ci19Ci0KLS8qLS0gdmVjX3N1YmNfdTEyOCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCi12ZWNfc3ViY191MTI4KHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fczM5MF92c2NiaXEoX19hLCBfX2IpOwotfQotCi0vKi0tIHZlY19zdWJlX3UxMjggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgotdmVjX3N1YmVfdTEyOCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYiwKLSAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19jKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fczM5MF92c2JpcShfX2EsIF9fYiwgX19jKTsKLX0KLQotLyotLSB2ZWNfc3ViZWNfdTEyOCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKLXZlY19zdWJlY191MTI4KHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iLAotICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19jKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fczM5MF92c2JjYmlxKF9fYSwgX19iLCBfX2MpOwotfQotCi0vKi0tIHZlY19zdW0yIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcKLXZlY19zdW0yKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZzdW1naChfX2EsIF9fYik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcKLXZlY19zdW0yKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgewotICByZXR1cm4gX19idWlsdGluX3MzOTBfdnN1bWdmKF9fYSwgX19iKTsKLX0KLQotLyotLSB2ZWNfc3VtX3UxMjggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgotdmVjX3N1bV91MTI4KHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgewotICByZXR1cm4gX19idWlsdGluX3MzOTBfdnN1bXFmKF9fYSwgX19iKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKLXZlY19zdW1fdTEyOCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZzdW1xZyhfX2EsIF9fYik7Ci19Ci0KLS8qLS0gdmVjX3N1bTQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAotdmVjX3N1bTQodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZzdW1iKF9fYSwgX19iKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAotdmVjX3N1bTQodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgewotICByZXR1cm4gX19idWlsdGluX3MzOTBfdnN1bWgoX19hLCBfX2IpOwotfQotCi0vKi0tIHZlY190ZXN0X21hc2sgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAotdmVjX3Rlc3RfbWFzayh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3Z0bSgodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKLXZlY190ZXN0X21hc2sodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3Z0bShfX2EsIF9fYik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAotdmVjX3Rlc3RfbWFzayh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgewotICByZXR1cm4gX19idWlsdGluX3MzOTBfdnRtKCh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAotdmVjX3Rlc3RfbWFzayh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fczM5MF92dG0oKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Ci12ZWNfdGVzdF9tYXNrKHZlY3RvciBzaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3Z0bSgodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKLXZlY190ZXN0X21hc2sodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fczM5MF92dG0oKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Ci12ZWNfdGVzdF9tYXNrKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3Z0bSgodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKLXZlY190ZXN0X21hc2sodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fczM5MF92dG0oKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Ci12ZWNfdGVzdF9tYXNrKHZlY3RvciBkb3VibGUgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgewotICByZXR1cm4gX19idWlsdGluX3MzOTBfdnRtKCh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Ci19Ci0KLS8qLS0gdmVjX21hZGQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX2FpIHZlY3RvciBkb3VibGUKLXZlY19tYWRkKHZlY3RvciBkb3VibGUgX19hLCB2ZWN0b3IgZG91YmxlIF9fYiwgdmVjdG9yIGRvdWJsZSBfX2MpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmbWFkYihfX2EsIF9fYiwgX19jKTsKLX0KLQotLyotLSB2ZWNfbXN1YiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfYWkgdmVjdG9yIGRvdWJsZQotdmVjX21zdWIodmVjdG9yIGRvdWJsZSBfX2EsIHZlY3RvciBkb3VibGUgX19iLCB2ZWN0b3IgZG91YmxlIF9fYykgewotICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZtc2RiKF9fYSwgX19iLCBfX2MpOwotfQotCi0vKi0tIHZlY19zcXJ0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19haSB2ZWN0b3IgZG91YmxlCi12ZWNfc3FydCh2ZWN0b3IgZG91YmxlIF9fYSkgewotICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZzcWRiKF9fYSk7Ci19Ci0KLS8qLS0gdmVjX2xkMmYgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX2FpIHZlY3RvciBkb3VibGUKLXZlY19sZDJmKGNvbnN0IGZsb2F0ICpfX3B0cikgewotICB0eXBlZGVmIGZsb2F0IF9fdjJmMzIgX19hdHRyaWJ1dGVfXygoX192ZWN0b3Jfc2l6ZV9fKDgpKSk7Ci0gIHJldHVybiBfX2J1aWx0aW5fY29udmVydHZlY3RvcigqKGNvbnN0IF9fdjJmMzIgKilfX3B0ciwgdmVjdG9yIGRvdWJsZSk7Ci19Ci0KLS8qLS0gdmVjX3N0MmYgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX2FpIHZvaWQKLXZlY19zdDJmKHZlY3RvciBkb3VibGUgX19hLCBmbG9hdCAqX19wdHIpIHsKLSAgdHlwZWRlZiBmbG9hdCBfX3YyZjMyIF9fYXR0cmlidXRlX18oKF9fdmVjdG9yX3NpemVfXyg4KSkpOwotICAqKF9fdjJmMzIgKilfX3B0ciA9IF9fYnVpbHRpbl9jb252ZXJ0dmVjdG9yKF9fYSwgX192MmYzMik7Ci19Ci0KLS8qLS0gdmVjX2N0ZCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGRvdWJsZQotdmVjX2N0ZCh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIGludCBfX2IpCi0gIF9fY29uc3RhbnRfcmFuZ2UoX19iLCAwLCAzMSkgewotICB2ZWN0b3IgZG91YmxlIF9fY29udiA9IF9fYnVpbHRpbl9jb252ZXJ0dmVjdG9yKF9fYSwgdmVjdG9yIGRvdWJsZSk7Ci0gIF9fY29udiAqPSAodmVjdG9yIGRvdWJsZSkodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZykoKDB4M2ZmVUxMIC0gX19iKSA8PCA1Mik7Ci0gIHJldHVybiBfX2NvbnY7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBkb3VibGUKLXZlY19jdGQodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIGludCBfX2IpCi0gIF9fY29uc3RhbnRfcmFuZ2UoX19iLCAwLCAzMSkgewotICB2ZWN0b3IgZG91YmxlIF9fY29udiA9IF9fYnVpbHRpbl9jb252ZXJ0dmVjdG9yKF9fYSwgdmVjdG9yIGRvdWJsZSk7Ci0gIF9fY29udiAqPSAodmVjdG9yIGRvdWJsZSkodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZykoKDB4M2ZmVUxMIC0gX19iKSA8PCA1Mik7Ci0gIHJldHVybiBfX2NvbnY7Ci19Ci0KLS8qLS0gdmVjX2N0c2wgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcKLXZlY19jdHNsKHZlY3RvciBkb3VibGUgX19hLCBpbnQgX19iKQotICBfX2NvbnN0YW50X3JhbmdlKF9fYiwgMCwgMzEpIHsKLSAgX19hICo9ICh2ZWN0b3IgZG91YmxlKSh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKSgoMHgzZmZVTEwgKyBfX2IpIDw8IDUyKTsKLSAgcmV0dXJuIF9fYnVpbHRpbl9jb252ZXJ0dmVjdG9yKF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpOwotfQotCi0vKi0tIHZlY19jdHVsIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcKLXZlY19jdHVsKHZlY3RvciBkb3VibGUgX19hLCBpbnQgX19iKQotICBfX2NvbnN0YW50X3JhbmdlKF9fYiwgMCwgMzEpIHsKLSAgX19hICo9ICh2ZWN0b3IgZG91YmxlKSh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKSgoMHgzZmZVTEwgKyBfX2IpIDw8IDUyKTsKLSAgcmV0dXJuIF9fYnVpbHRpbl9jb252ZXJ0dmVjdG9yKF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyk7Ci19Ci0KLS8qLS0gdmVjX3JvdW5kcCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX2FpIHZlY3RvciBkb3VibGUKLXZlY19yb3VuZHAodmVjdG9yIGRvdWJsZSBfX2EpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmaWRiKF9fYSwgNCwgNik7Ci19Ci0KLS8qLS0gdmVjX2NlaWwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX2FpIHZlY3RvciBkb3VibGUKLXZlY19jZWlsKHZlY3RvciBkb3VibGUgX19hKSB7Ci0gIC8vIE9uIHRoaXMgcGxhdGZvcm0sIHZlY19jZWlsIG5ldmVyIHRyaWdnZXJzIHRoZSBJRUVFLWluZXhhY3QgZXhjZXB0aW9uLgotICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZpZGIoX19hLCA0LCA2KTsKLX0KLQotLyotLSB2ZWNfcm91bmRtIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfYWkgdmVjdG9yIGRvdWJsZQotdmVjX3JvdW5kbSh2ZWN0b3IgZG91YmxlIF9fYSkgewotICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZpZGIoX19hLCA0LCA3KTsKLX0KLQotLyotLSB2ZWNfZmxvb3IgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfYWkgdmVjdG9yIGRvdWJsZQotdmVjX2Zsb29yKHZlY3RvciBkb3VibGUgX19hKSB7Ci0gIC8vIE9uIHRoaXMgcGxhdGZvcm0sIHZlY19mbG9vciBuZXZlciB0cmlnZ2VycyB0aGUgSUVFRS1pbmV4YWN0IGV4Y2VwdGlvbi4KLSAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmaWRiKF9fYSwgNCwgNyk7Ci19Ci0KLS8qLS0gdmVjX3JvdW5keiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX2FpIHZlY3RvciBkb3VibGUKLXZlY19yb3VuZHoodmVjdG9yIGRvdWJsZSBfX2EpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmaWRiKF9fYSwgNCwgNSk7Ci19Ci0KLS8qLS0gdmVjX3RydW5jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX2FpIHZlY3RvciBkb3VibGUKLXZlY190cnVuYyh2ZWN0b3IgZG91YmxlIF9fYSkgewotICAvLyBPbiB0aGlzIHBsYXRmb3JtLCB2ZWNfdHJ1bmMgbmV2ZXIgdHJpZ2dlcnMgdGhlIElFRUUtaW5leGFjdCBleGNlcHRpb24uCi0gIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmlkYihfX2EsIDQsIDUpOwotfQotCi0vKi0tIHZlY19yb3VuZGMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19haSB2ZWN0b3IgZG91YmxlCi12ZWNfcm91bmRjKHZlY3RvciBkb3VibGUgX19hKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmlkYihfX2EsIDQsIDApOwotfQotCi0vKi0tIHZlY19yb3VuZCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19haSB2ZWN0b3IgZG91YmxlCi12ZWNfcm91bmQodmVjdG9yIGRvdWJsZSBfX2EpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmaWRiKF9fYSwgNCwgNCk7Ci19Ci0KLS8qLS0gdmVjX2ZwX3Rlc3RfZGF0YV9jbGFzcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotI2RlZmluZSB2ZWNfZnBfdGVzdF9kYXRhX2NsYXNzKFgsIFksIFopIFwKLSAgKCh2ZWN0b3IgYm9vbCBsb25nIGxvbmcpX19idWlsdGluX3MzOTBfdmZ0Y2lkYigoWCksIChZKSwgKFopKSkKLQotLyotLSB2ZWNfY3BfdW50aWxfemVybyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGNoYXIKLXZlY19jcF91bnRpbF96ZXJvKHZlY3RvciBzaWduZWQgY2hhciBfX2EpIHsKLSAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19idWlsdGluX3MzOTBfdmlzdHJiKCh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBjaGFyCi12ZWNfY3BfdW50aWxfemVybyh2ZWN0b3IgYm9vbCBjaGFyIF9fYSkgewotICByZXR1cm4gKHZlY3RvciBib29sIGNoYXIpX19idWlsdGluX3MzOTBfdmlzdHJiKCh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgotdmVjX2NwX3VudGlsX3plcm8odmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fczM5MF92aXN0cmIoX19hKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBzaG9ydAotdmVjX2NwX3VudGlsX3plcm8odmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EpIHsKLSAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIHNob3J0KV9fYnVpbHRpbl9zMzkwX3Zpc3RyaCgodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIHNob3J0Ci12ZWNfY3BfdW50aWxfemVybyh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EpIHsKLSAgcmV0dXJuICh2ZWN0b3IgYm9vbCBzaG9ydClfX2J1aWx0aW5fczM5MF92aXN0cmgoKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKLXZlY19jcF91bnRpbF96ZXJvKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3Zpc3RyaChfX2EpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGludAotdmVjX2NwX3VudGlsX3plcm8odmVjdG9yIHNpZ25lZCBpbnQgX19hKSB7Ci0gIHJldHVybiAodmVjdG9yIHNpZ25lZCBpbnQpX19idWlsdGluX3MzOTBfdmlzdHJmKCh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGludAotdmVjX2NwX3VudGlsX3plcm8odmVjdG9yIGJvb2wgaW50IF9fYSkgewotICByZXR1cm4gKHZlY3RvciBib29sIGludClfX2J1aWx0aW5fczM5MF92aXN0cmYoKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAotdmVjX2NwX3VudGlsX3plcm8odmVjdG9yIHVuc2lnbmVkIGludCBfX2EpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3Zpc3RyZihfX2EpOwotfQotCi0vKi0tIHZlY19jcF91bnRpbF96ZXJvX2NjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgY2hhcgotdmVjX2NwX3VudGlsX3plcm9fY2ModmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgaW50ICpfX2NjKSB7Ci0gIHJldHVybiAodmVjdG9yIHNpZ25lZCBjaGFyKQotICAgIF9fYnVpbHRpbl9zMzkwX3Zpc3RyYnMoKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgX19jYyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGNoYXIKLXZlY19jcF91bnRpbF96ZXJvX2NjKHZlY3RvciBib29sIGNoYXIgX19hLCBpbnQgKl9fY2MpIHsKLSAgcmV0dXJuICh2ZWN0b3IgYm9vbCBjaGFyKQotICAgIF9fYnVpbHRpbl9zMzkwX3Zpc3RyYnMoKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgX19jYyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCi12ZWNfY3BfdW50aWxfemVyb19jYyh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIGludCAqX19jYykgewotICByZXR1cm4gX19idWlsdGluX3MzOTBfdmlzdHJicyhfX2EsIF9fY2MpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIHNob3J0Ci12ZWNfY3BfdW50aWxfemVyb19jYyh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgaW50ICpfX2NjKSB7Ci0gIHJldHVybiAodmVjdG9yIHNpZ25lZCBzaG9ydCkKLSAgICBfX2J1aWx0aW5fczM5MF92aXN0cmhzKCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hLCBfX2NjKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgc2hvcnQKLXZlY19jcF91bnRpbF96ZXJvX2NjKHZlY3RvciBib29sIHNob3J0IF9fYSwgaW50ICpfX2NjKSB7Ci0gIHJldHVybiAodmVjdG9yIGJvb2wgc2hvcnQpCi0gICAgX19idWlsdGluX3MzOTBfdmlzdHJocygodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSwgX19jYyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAotdmVjX2NwX3VudGlsX3plcm9fY2ModmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgaW50ICpfX2NjKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fczM5MF92aXN0cmhzKF9fYSwgX19jYyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgaW50Ci12ZWNfY3BfdW50aWxfemVyb19jYyh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIGludCAqX19jYykgewotICByZXR1cm4gKHZlY3RvciBzaWduZWQgaW50KQotICAgIF9fYnVpbHRpbl9zMzkwX3Zpc3RyZnMoKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hLCBfX2NjKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgaW50Ci12ZWNfY3BfdW50aWxfemVyb19jYyh2ZWN0b3IgYm9vbCBpbnQgX19hLCBpbnQgKl9fY2MpIHsKLSAgcmV0dXJuICh2ZWN0b3IgYm9vbCBpbnQpX19idWlsdGluX3MzOTBfdmlzdHJmcygodmVjdG9yIHVuc2lnbmVkIGludClfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jYyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKLXZlY19jcF91bnRpbF96ZXJvX2NjKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCBpbnQgKl9fY2MpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3Zpc3RyZnMoX19hLCBfX2NjKTsKLX0KLQotLyotLSB2ZWNfY21wZXFfaWR4IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGNoYXIKLXZlY19jbXBlcV9pZHgodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gKHZlY3RvciBzaWduZWQgY2hhcikKLSAgICBfX2J1aWx0aW5fczM5MF92ZmVlYigodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgotdmVjX2NtcGVxX2lkeCh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmZWViKCh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKLXZlY19jbXBlcV9pZHgodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmZWViKF9fYSwgX19iKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBzaG9ydAotdmVjX2NtcGVxX2lkeCh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIHNob3J0KQotICAgIF9fYnVpbHRpbl9zMzkwX3ZmZWVoKCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19iKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Ci12ZWNfY21wZXFfaWR4KHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmVlaCgodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19iKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Ci12ZWNfY21wZXFfaWR4KHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmZWVoKF9fYSwgX19iKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBpbnQKLXZlY19jbXBlcV9pZHgodmVjdG9yIHNpZ25lZCBpbnQgX19hLCB2ZWN0b3Igc2lnbmVkIGludCBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGludCkKLSAgICBfX2J1aWx0aW5fczM5MF92ZmVlZigodmVjdG9yIHVuc2lnbmVkIGludClfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAotdmVjX2NtcGVxX2lkeCh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmVlZigodmVjdG9yIHVuc2lnbmVkIGludClfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2IpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Ci12ZWNfY21wZXFfaWR4KHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgewotICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZlZWYoX19hLCBfX2IpOwotfQotCi0vKi0tIHZlY19jbXBlcV9pZHhfY2MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgY2hhcgotdmVjX2NtcGVxX2lkeF9jYyh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iLCBpbnQgKl9fY2MpIHsKLSAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpCi0gICAgX19idWlsdGluX3MzOTBfdmZlZWJzKCh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IsIF9fY2MpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgotdmVjX2NtcGVxX2lkeF9jYyh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIGJvb2wgY2hhciBfX2IsIGludCAqX19jYykgewotICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZlZWJzKCh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYiwgX19jYyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCi12ZWNfY21wZXFfaWR4X2NjKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iLAotICAgICAgICAgICAgICAgICBpbnQgKl9fY2MpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmZWVicyhfX2EsIF9fYiwgX19jYyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgc2hvcnQKLXZlY19jbXBlcV9pZHhfY2ModmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBzaWduZWQgc2hvcnQgX19iLCBpbnQgKl9fY2MpIHsKLSAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIHNob3J0KQotICAgIF9fYnVpbHRpbl9zMzkwX3ZmZWVocygodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2IsIF9fY2MpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKLXZlY19jbXBlcV9pZHhfY2ModmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IsIGludCAqX19jYykgewotICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZlZWhzKCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19iLCBfX2NjKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Ci12ZWNfY21wZXFfaWR4X2NjKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IsCi0gICAgICAgICAgICAgICAgIGludCAqX19jYykgewotICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZlZWhzKF9fYSwgX19iLCBfX2NjKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBpbnQKLXZlY19jbXBlcV9pZHhfY2ModmVjdG9yIHNpZ25lZCBpbnQgX19hLCB2ZWN0b3Igc2lnbmVkIGludCBfX2IsIGludCAqX19jYykgewotICByZXR1cm4gKHZlY3RvciBzaWduZWQgaW50KQotICAgIF9fYnVpbHRpbl9zMzkwX3ZmZWVmcygodmVjdG9yIHVuc2lnbmVkIGludClfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYiwgX19jYyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKLXZlY19jbXBlcV9pZHhfY2ModmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYiwgaW50ICpfX2NjKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmVlZnMoKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYiwgX19jYyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKLXZlY19jbXBlcV9pZHhfY2ModmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iLCBpbnQgKl9fY2MpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmZWVmcyhfX2EsIF9fYiwgX19jYyk7Ci19Ci0KLS8qLS0gdmVjX2NtcGVxX29yXzBfaWR4IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBjaGFyCi12ZWNfY21wZXFfb3JfMF9pZHgodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gKHZlY3RvciBzaWduZWQgY2hhcikKLSAgICBfX2J1aWx0aW5fczM5MF92ZmVlemIoKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCi12ZWNfY21wZXFfb3JfMF9pZHgodmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciBib29sIGNoYXIgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmVlemIoKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKLXZlY19jbXBlcV9vcl8wX2lkeCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZlZXpiKF9fYSwgX19iKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBzaG9ydAotdmVjX2NtcGVxX29yXzBfaWR4KHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYikgewotICByZXR1cm4gKHZlY3RvciBzaWduZWQgc2hvcnQpCi0gICAgX19idWlsdGluX3MzOTBfdmZlZXpoKCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAotdmVjX2NtcGVxX29yXzBfaWR4KHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmVlemgoKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2IpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKLXZlY19jbXBlcV9vcl8wX2lkeCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmVlemgoX19hLCBfX2IpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGludAotdmVjX2NtcGVxX29yXzBfaWR4KHZlY3RvciBzaWduZWQgaW50IF9fYSwgdmVjdG9yIHNpZ25lZCBpbnQgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHNpZ25lZCBpbnQpCi0gICAgX19idWlsdGluX3MzOTBfdmZlZXpmKCh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAotdmVjX2NtcGVxX29yXzBfaWR4KHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmZWV6ZigodmVjdG9yIHVuc2lnbmVkIGludClfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAotdmVjX2NtcGVxX29yXzBfaWR4KHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgewotICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZlZXpmKF9fYSwgX19iKTsKLX0KLQotLyotLSB2ZWNfY21wZXFfb3JfMF9pZHhfY2MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGNoYXIKLXZlY19jbXBlcV9vcl8wX2lkeF9jYyh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iLAotICAgICAgICAgICAgICAgICAgICAgIGludCAqX19jYykgewotICByZXR1cm4gKHZlY3RvciBzaWduZWQgY2hhcikKLSAgICBfX2J1aWx0aW5fczM5MF92ZmVlemJzKCh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iLCBfX2NjKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKLXZlY19jbXBlcV9vcl8wX2lkeF9jYyh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIGJvb2wgY2hhciBfX2IsIGludCAqX19jYykgewotICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZlZXpicygodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iLCBfX2NjKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKLXZlY19jbXBlcV9vcl8wX2lkeF9jYyh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYiwKLSAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9fY2MpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmZWV6YnMoX19hLCBfX2IsIF9fY2MpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIHNob3J0Ci12ZWNfY21wZXFfb3JfMF9pZHhfY2ModmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBzaWduZWQgc2hvcnQgX19iLAotICAgICAgICAgICAgICAgICAgICAgIGludCAqX19jYykgewotICByZXR1cm4gKHZlY3RvciBzaWduZWQgc2hvcnQpCi0gICAgX19idWlsdGluX3MzOTBfdmZlZXpocygodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19iLCBfX2NjKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Ci12ZWNfY21wZXFfb3JfMF9pZHhfY2ModmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IsIGludCAqX19jYykgewotICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZlZXpocygodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2IsIF9fY2MpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKLXZlY19jbXBlcV9vcl8wX2lkeF9jYyh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iLAotICAgICAgICAgICAgICAgICAgICAgIGludCAqX19jYykgewotICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZlZXpocyhfX2EsIF9fYiwgX19jYyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgaW50Ci12ZWNfY21wZXFfb3JfMF9pZHhfY2ModmVjdG9yIHNpZ25lZCBpbnQgX19hLCB2ZWN0b3Igc2lnbmVkIGludCBfX2IsIGludCAqX19jYykgewotICByZXR1cm4gKHZlY3RvciBzaWduZWQgaW50KQotICAgIF9fYnVpbHRpbl9zMzkwX3ZmZWV6ZnMoKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iLCBfX2NjKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAotdmVjX2NtcGVxX29yXzBfaWR4X2NjKHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IsIGludCAqX19jYykgewotICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZlZXpmcygodmVjdG9yIHVuc2lnbmVkIGludClfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYiwgX19jYyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKLXZlY19jbXBlcV9vcl8wX2lkeF9jYyh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgaW50ICpfX2NjKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmVlemZzKF9fYSwgX19iLCBfX2NjKTsKLX0KLQotLyotLSB2ZWNfY21wbmVfaWR4IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGNoYXIKLXZlY19jbXBuZV9pZHgodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gKHZlY3RvciBzaWduZWQgY2hhcikKLSAgICBfX2J1aWx0aW5fczM5MF92ZmVuZWIoKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCi12ZWNfY21wbmVfaWR4KHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgewotICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZlbmViKCh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCi12ZWNfY21wbmVfaWR4KHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmVuZWIoX19hLCBfX2IpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIHNob3J0Ci12ZWNfY21wbmVfaWR4KHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYikgewotICByZXR1cm4gKHZlY3RvciBzaWduZWQgc2hvcnQpCi0gICAgX19idWlsdGluX3MzOTBfdmZlbmVoKCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAotdmVjX2NtcG5lX2lkeCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciBib29sIHNob3J0IF9fYikgewotICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZlbmVoKCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19iKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Ci12ZWNfY21wbmVfaWR4KHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmZW5laChfX2EsIF9fYik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgaW50Ci12ZWNfY21wbmVfaWR4KHZlY3RvciBzaWduZWQgaW50IF9fYSwgdmVjdG9yIHNpZ25lZCBpbnQgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHNpZ25lZCBpbnQpCi0gICAgX19idWlsdGluX3MzOTBfdmZlbmVmKCh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAotdmVjX2NtcG5lX2lkeCh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmVuZWYoKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKLXZlY19jbXBuZV9pZHgodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmVuZWYoX19hLCBfX2IpOwotfQotCi0vKi0tIHZlY19jbXBuZV9pZHhfY2MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgY2hhcgotdmVjX2NtcG5lX2lkeF9jYyh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iLCBpbnQgKl9fY2MpIHsKLSAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpCi0gICAgX19idWlsdGluX3MzOTBfdmZlbmVicygodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYiwgX19jYyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCi12ZWNfY21wbmVfaWR4X2NjKHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYiwgaW50ICpfX2NjKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmVuZWJzKCh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IsIF9fY2MpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgotdmVjX2NtcG5lX2lkeF9jYyh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYiwKLSAgICAgICAgICAgICAgICAgaW50ICpfX2NjKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmVuZWJzKF9fYSwgX19iLCBfX2NjKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBzaG9ydAotdmVjX2NtcG5lX2lkeF9jYyh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2IsIGludCAqX19jYykgewotICByZXR1cm4gKHZlY3RvciBzaWduZWQgc2hvcnQpCi0gICAgX19idWlsdGluX3MzOTBfdmZlbmVocygodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19iLCBfX2NjKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Ci12ZWNfY21wbmVfaWR4X2NjKHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iLCBpbnQgKl9fY2MpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmZW5laHMoKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19iLCBfX2NjKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Ci12ZWNfY21wbmVfaWR4X2NjKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IsCi0gICAgICAgICAgICAgICAgIGludCAqX19jYykgewotICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZlbmVocyhfX2EsIF9fYiwgX19jYyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgaW50Ci12ZWNfY21wbmVfaWR4X2NjKHZlY3RvciBzaWduZWQgaW50IF9fYSwgdmVjdG9yIHNpZ25lZCBpbnQgX19iLCBpbnQgKl9fY2MpIHsKLSAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGludCkKLSAgICBfX2J1aWx0aW5fczM5MF92ZmVuZWZzKCh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYiwgX19jYyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKLXZlY19jbXBuZV9pZHhfY2ModmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYiwgaW50ICpfX2NjKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmVuZWZzKCh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iLCBfX2NjKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAotdmVjX2NtcG5lX2lkeF9jYyh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IsIGludCAqX19jYykgewotICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZlbmVmcyhfX2EsIF9fYiwgX19jYyk7Ci19Ci0KLS8qLS0gdmVjX2NtcG5lX29yXzBfaWR4IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBjaGFyCi12ZWNfY21wbmVfb3JfMF9pZHgodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gKHZlY3RvciBzaWduZWQgY2hhcikKLSAgICBfX2J1aWx0aW5fczM5MF92ZmVuZXpiKCh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKLXZlY19jbXBuZV9vcl8wX2lkeCh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmZW5lemIoKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCi12ZWNfY21wbmVfb3JfMF9pZHgodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmZW5lemIoX19hLCBfX2IpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIHNob3J0Ci12ZWNfY21wbmVfb3JfMF9pZHgodmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBzaWduZWQgc2hvcnQgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHNpZ25lZCBzaG9ydCkKLSAgICBfX2J1aWx0aW5fczM5MF92ZmVuZXpoKCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2IpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKLXZlY19jbXBuZV9vcl8wX2lkeCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciBib29sIHNob3J0IF9fYikgewotICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZlbmV6aCgodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2IpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKLXZlY19jbXBuZV9vcl8wX2lkeCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmVuZXpoKF9fYSwgX19iKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBpbnQKLXZlY19jbXBuZV9vcl8wX2lkeCh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYikgewotICByZXR1cm4gKHZlY3RvciBzaWduZWQgaW50KQotICAgIF9fYnVpbHRpbl9zMzkwX3ZmZW5lemYoKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAotdmVjX2NtcG5lX29yXzBfaWR4KHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmZW5lemYoKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2IpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Ci12ZWNfY21wbmVfb3JfMF9pZHgodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmVuZXpmKF9fYSwgX19iKTsKLX0KLQotLyotLSB2ZWNfY21wbmVfb3JfMF9pZHhfY2MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGNoYXIKLXZlY19jbXBuZV9vcl8wX2lkeF9jYyh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iLAotICAgICAgICAgICAgICAgICAgICAgIGludCAqX19jYykgewotICByZXR1cm4gKHZlY3RvciBzaWduZWQgY2hhcikKLSAgICBfX2J1aWx0aW5fczM5MF92ZmVuZXpicygodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IsIF9fY2MpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgotdmVjX2NtcG5lX29yXzBfaWR4X2NjKHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYiwgaW50ICpfX2NjKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmVuZXpicygodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYiwgX19jYyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCi12ZWNfY21wbmVfb3JfMF9pZHhfY2ModmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgaW50ICpfX2NjKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmVuZXpicyhfX2EsIF9fYiwgX19jYyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgc2hvcnQKLXZlY19jbXBuZV9vcl8wX2lkeF9jYyh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgaW50ICpfX2NjKSB7Ci0gIHJldHVybiAodmVjdG9yIHNpZ25lZCBzaG9ydCkKLSAgICBfX2J1aWx0aW5fczM5MF92ZmVuZXpocygodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYiwgX19jYyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAotdmVjX2NtcG5lX29yXzBfaWR4X2NjKHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iLCBpbnQgKl9fY2MpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmZW5lemhzKCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2IsIF9fY2MpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKLXZlY19jbXBuZV9vcl8wX2lkeF9jYyh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iLAotICAgICAgICAgICAgICAgICAgICAgIGludCAqX19jYykgewotICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZlbmV6aHMoX19hLCBfX2IsIF9fY2MpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGludAotdmVjX2NtcG5lX29yXzBfaWR4X2NjKHZlY3RvciBzaWduZWQgaW50IF9fYSwgdmVjdG9yIHNpZ25lZCBpbnQgX19iLCBpbnQgKl9fY2MpIHsKLSAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGludCkKLSAgICBfX2J1aWx0aW5fczM5MF92ZmVuZXpmcygodmVjdG9yIHVuc2lnbmVkIGludClfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iLCBfX2NjKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAotdmVjX2NtcG5lX29yXzBfaWR4X2NjKHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IsIGludCAqX19jYykgewotICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZlbmV6ZnMoKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iLCBfX2NjKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAotdmVjX2NtcG5lX29yXzBfaWR4X2NjKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYiwKLSAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9fY2MpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmZW5lemZzKF9fYSwgX19iLCBfX2NjKTsKLX0KLQotLyotLSB2ZWNfY21wcmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBjaGFyCi12ZWNfY21wcmcodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IsCi0gICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19jKSB7Ci0gIHJldHVybiAodmVjdG9yIGJvb2wgY2hhcilfX2J1aWx0aW5fczM5MF92c3RyY2IoX19hLCBfX2IsIF9fYywgNCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIHNob3J0Ci12ZWNfY21wcmcodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYiwKLSAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19jKSB7Ci0gIHJldHVybiAodmVjdG9yIGJvb2wgc2hvcnQpX19idWlsdGluX3MzOTBfdnN0cmNoKF9fYSwgX19iLCBfX2MsIDQpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBpbnQKLXZlY19jbXByZyh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IsCi0gICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2MpIHsKLSAgcmV0dXJuICh2ZWN0b3IgYm9vbCBpbnQpX19idWlsdGluX3MzOTBfdnN0cmNmKF9fYSwgX19iLCBfX2MsIDQpOwotfQotCi0vKi0tIHZlY19jbXByZ19jYyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGNoYXIKLXZlY19jbXByZ19jYyh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYiwKLSAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2MsIGludCAqX19jYykgewotICByZXR1cm4gKHZlY3RvciBib29sIGNoYXIpX19idWlsdGluX3MzOTBfdnN0cmNicyhfX2EsIF9fYiwgX19jLCA0LCBfX2NjKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgc2hvcnQKLXZlY19jbXByZ19jYyh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iLAotICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2MsIGludCAqX19jYykgewotICByZXR1cm4gKHZlY3RvciBib29sIHNob3J0KV9fYnVpbHRpbl9zMzkwX3ZzdHJjaHMoX19hLCBfX2IsIF9fYywgNCwgX19jYyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGludAotdmVjX2NtcHJnX2NjKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYiwKLSAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYywgaW50ICpfX2NjKSB7Ci0gIHJldHVybiAodmVjdG9yIGJvb2wgaW50KV9fYnVpbHRpbl9zMzkwX3ZzdHJjZnMoX19hLCBfX2IsIF9fYywgNCwgX19jYyk7Ci19Ci0KLS8qLS0gdmVjX2NtcHJnX2lkeCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKLXZlY19jbXByZ19pZHgodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IsCi0gICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYykgewotICByZXR1cm4gX19idWlsdGluX3MzOTBfdnN0cmNiKF9fYSwgX19iLCBfX2MsIDApOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKLXZlY19jbXByZ19pZHgodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYiwKLSAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYykgewotICByZXR1cm4gX19idWlsdGluX3MzOTBfdnN0cmNoKF9fYSwgX19iLCBfX2MsIDApOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Ci12ZWNfY21wcmdfaWR4KHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYiwKLSAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2MpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZzdHJjZihfX2EsIF9fYiwgX19jLCAwKTsKLX0KLQotLyotLSB2ZWNfY21wcmdfaWR4X2NjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgotdmVjX2NtcHJnX2lkeF9jYyh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYiwKLSAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19jLCBpbnQgKl9fY2MpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZzdHJjYnMoX19hLCBfX2IsIF9fYywgMCwgX19jYyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAotdmVjX2NtcHJnX2lkeF9jYyh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iLAotICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19jLCBpbnQgKl9fY2MpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZzdHJjaHMoX19hLCBfX2IsIF9fYywgMCwgX19jYyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKLXZlY19jbXByZ19pZHhfY2ModmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iLAotICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYywgaW50ICpfX2NjKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fczM5MF92c3RyY2ZzKF9fYSwgX19iLCBfX2MsIDAsIF9fY2MpOwotfQotCi0vKi0tIHZlY19jbXByZ19vcl8wX2lkeCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCi12ZWNfY21wcmdfb3JfMF9pZHgodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IsCi0gICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19jKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fczM5MF92c3RyY3piKF9fYSwgX19iLCBfX2MsIDApOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKLXZlY19jbXByZ19vcl8wX2lkeCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iLAotICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2MpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZzdHJjemgoX19hLCBfX2IsIF9fYywgMCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKLXZlY19jbXByZ19vcl8wX2lkeCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IsCi0gICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2MpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZzdHJjemYoX19hLCBfX2IsIF9fYywgMCk7Ci19Ci0KLS8qLS0gdmVjX2NtcHJnX29yXzBfaWR4X2NjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKLXZlY19jbXByZ19vcl8wX2lkeF9jYyh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYiwKLSAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2MsIGludCAqX19jYykgewotICByZXR1cm4gX19idWlsdGluX3MzOTBfdnN0cmN6YnMoX19hLCBfX2IsIF9fYywgMCwgX19jYyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAotdmVjX2NtcHJnX29yXzBfaWR4X2NjKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYywgaW50ICpfX2NjKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fczM5MF92c3RyY3pocyhfX2EsIF9fYiwgX19jLCAwLCBfX2NjKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAotdmVjX2NtcHJnX29yXzBfaWR4X2NjKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYiwKLSAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYywgaW50ICpfX2NjKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fczM5MF92c3RyY3pmcyhfX2EsIF9fYiwgX19jLCAwLCBfX2NjKTsKLX0KLQotLyotLSB2ZWNfY21wbnJnIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBjaGFyCi12ZWNfY21wbnJnKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iLAotICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2MpIHsKLSAgcmV0dXJuICh2ZWN0b3IgYm9vbCBjaGFyKV9fYnVpbHRpbl9zMzkwX3ZzdHJjYihfX2EsIF9fYiwgX19jLCAxMik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIHNob3J0Ci12ZWNfY21wbnJnKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IsCi0gICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2MpIHsKLSAgcmV0dXJuICh2ZWN0b3IgYm9vbCBzaG9ydClfX2J1aWx0aW5fczM5MF92c3RyY2goX19hLCBfX2IsIF9fYywgMTIpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBpbnQKLXZlY19jbXBucmcodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iLAotICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYykgewotICByZXR1cm4gKHZlY3RvciBib29sIGludClfX2J1aWx0aW5fczM5MF92c3RyY2YoX19hLCBfX2IsIF9fYywgMTIpOwotfQotCi0vKi0tIHZlY19jbXBucmdfY2MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGNoYXIKLXZlY19jbXBucmdfY2ModmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IsCi0gICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYywgaW50ICpfX2NjKSB7Ci0gIHJldHVybiAodmVjdG9yIGJvb2wgY2hhcilfX2J1aWx0aW5fczM5MF92c3RyY2JzKF9fYSwgX19iLCBfX2MsIDEyLCBfX2NjKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgc2hvcnQKLXZlY19jbXBucmdfY2ModmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYiwKLSAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYywgaW50ICpfX2NjKSB7Ci0gIHJldHVybiAodmVjdG9yIGJvb2wgc2hvcnQpX19idWlsdGluX3MzOTBfdnN0cmNocyhfX2EsIF9fYiwgX19jLCAxMiwgX19jYyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGludAotdmVjX2NtcG5yZ19jYyh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IsCi0gICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19jLCBpbnQgKl9fY2MpIHsKLSAgcmV0dXJuICh2ZWN0b3IgYm9vbCBpbnQpX19idWlsdGluX3MzOTBfdnN0cmNmcyhfX2EsIF9fYiwgX19jLCAxMiwgX19jYyk7Ci19Ci0KLS8qLS0gdmVjX2NtcG5yZ19pZHggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKLXZlY19jbXBucmdfaWR4KHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iLAotICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19jKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fczM5MF92c3RyY2IoX19hLCBfX2IsIF9fYywgOCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAotdmVjX2NtcG5yZ19pZHgodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYiwKLSAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2MpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZzdHJjaChfX2EsIF9fYiwgX19jLCA4KTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAotdmVjX2NtcG5yZ19pZHgodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iLAotICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2MpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZzdHJjZihfX2EsIF9fYiwgX19jLCA4KTsKLX0KLQotLyotLSB2ZWNfY21wbnJnX2lkeF9jYyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgotdmVjX2NtcG5yZ19pZHhfY2ModmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IsCi0gICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2MsIGludCAqX19jYykgewotICByZXR1cm4gX19idWlsdGluX3MzOTBfdnN0cmNicyhfX2EsIF9fYiwgX19jLCA4LCBfX2NjKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Ci12ZWNfY21wbnJnX2lkeF9jYyh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iLAotICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYywgaW50ICpfX2NjKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fczM5MF92c3RyY2hzKF9fYSwgX19iLCBfX2MsIDgsIF9fY2MpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Ci12ZWNfY21wbnJnX2lkeF9jYyh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IsCi0gICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYywgaW50ICpfX2NjKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fczM5MF92c3RyY2ZzKF9fYSwgX19iLCBfX2MsIDgsIF9fY2MpOwotfQotCi0vKi0tIHZlY19jbXBucmdfb3JfMF9pZHggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCi12ZWNfY21wbnJnX29yXzBfaWR4KHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iLAotICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2MpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZzdHJjemIoX19hLCBfX2IsIF9fYywgOCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAotdmVjX2NtcG5yZ19vcl8wX2lkeCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iLAotICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19jKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fczM5MF92c3RyY3poKF9fYSwgX19iLCBfX2MsIDgpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Ci12ZWNfY21wbnJnX29yXzBfaWR4KHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYiwKLSAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2MpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZzdHJjemYoX19hLCBfX2IsIF9fYywgOCk7Ci19Ci0KLS8qLS0gdmVjX2NtcG5yZ19vcl8wX2lkeF9jYyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKLXZlY19jbXBucmdfb3JfMF9pZHhfY2ModmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYywgaW50ICpfX2NjKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fczM5MF92c3RyY3picyhfX2EsIF9fYiwgX19jLCA4LCBfX2NjKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Ci12ZWNfY21wbnJnX29yXzBfaWR4X2NjKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2MsIGludCAqX19jYykgewotICByZXR1cm4gX19idWlsdGluX3MzOTBfdnN0cmN6aHMoX19hLCBfX2IsIF9fYywgOCwgX19jYyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKLXZlY19jbXBucmdfb3JfMF9pZHhfY2ModmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iLAotICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYywgaW50ICpfX2NjKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fczM5MF92c3RyY3pmcyhfX2EsIF9fYiwgX19jLCA4LCBfX2NjKTsKLX0KLQotLyotLSB2ZWNfZmluZF9hbnlfZXEgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBjaGFyCi12ZWNfZmluZF9hbnlfZXEodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gKHZlY3RvciBib29sIGNoYXIpCi0gICAgX19idWlsdGluX3MzOTBfdmZhZWIoKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iLCA0KTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgY2hhcgotdmVjX2ZpbmRfYW55X2VxKHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgewotICByZXR1cm4gKHZlY3RvciBib29sIGNoYXIpCi0gICAgX19idWlsdGluX3MzOTBfdmZhZWIoKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iLCA0KTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgY2hhcgotdmVjX2ZpbmRfYW55X2VxKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIGJvb2wgY2hhcilfX2J1aWx0aW5fczM5MF92ZmFlYihfX2EsIF9fYiwgNCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIHNob3J0Ci12ZWNfZmluZF9hbnlfZXEodmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBzaWduZWQgc2hvcnQgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIGJvb2wgc2hvcnQpCi0gICAgX19idWlsdGluX3MzOTBfdmZhZWgoKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2IsIDQpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBzaG9ydAotdmVjX2ZpbmRfYW55X2VxKHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIGJvb2wgc2hvcnQpCi0gICAgX19idWlsdGluX3MzOTBfdmZhZWgoKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2IsIDQpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBzaG9ydAotdmVjX2ZpbmRfYW55X2VxKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgYm9vbCBzaG9ydClfX2J1aWx0aW5fczM5MF92ZmFlaChfX2EsIF9fYiwgNCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGludAotdmVjX2ZpbmRfYW55X2VxKHZlY3RvciBzaWduZWQgaW50IF9fYSwgdmVjdG9yIHNpZ25lZCBpbnQgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIGJvb2wgaW50KQotICAgIF9fYnVpbHRpbl9zMzkwX3ZmYWVmKCh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2IsIDQpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBpbnQKLXZlY19maW5kX2FueV9lcSh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIGJvb2wgaW50KQotICAgIF9fYnVpbHRpbl9zMzkwX3ZmYWVmKCh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2IsIDQpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBpbnQKLXZlY19maW5kX2FueV9lcSh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgYm9vbCBpbnQpX19idWlsdGluX3MzOTBfdmZhZWYoX19hLCBfX2IsIDQpOwotfQotCi0vKi0tIHZlY19maW5kX2FueV9lcV9jYyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGNoYXIKLXZlY19maW5kX2FueV9lcV9jYyh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iLCBpbnQgKl9fY2MpIHsKLSAgcmV0dXJuICh2ZWN0b3IgYm9vbCBjaGFyKQotICAgIF9fYnVpbHRpbl9zMzkwX3ZmYWVicygodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iLCA0LCBfX2NjKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgY2hhcgotdmVjX2ZpbmRfYW55X2VxX2NjKHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYiwgaW50ICpfX2NjKSB7Ci0gIHJldHVybiAodmVjdG9yIGJvb2wgY2hhcikKLSAgICBfX2J1aWx0aW5fczM5MF92ZmFlYnMoKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYiwgNCwgX19jYyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGNoYXIKLXZlY19maW5kX2FueV9lcV9jYyh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYiwKLSAgICAgICAgICAgICAgICAgICBpbnQgKl9fY2MpIHsKLSAgcmV0dXJuICh2ZWN0b3IgYm9vbCBjaGFyKV9fYnVpbHRpbl9zMzkwX3ZmYWVicyhfX2EsIF9fYiwgNCwgX19jYyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIHNob3J0Ci12ZWNfZmluZF9hbnlfZXFfY2ModmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBzaWduZWQgc2hvcnQgX19iLAotICAgICAgICAgICAgICAgICAgIGludCAqX19jYykgewotICByZXR1cm4gKHZlY3RvciBib29sIHNob3J0KQotICAgIF9fYnVpbHRpbl9zMzkwX3ZmYWVocygodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2IsIDQsIF9fY2MpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBzaG9ydAotdmVjX2ZpbmRfYW55X2VxX2NjKHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iLCBpbnQgKl9fY2MpIHsKLSAgcmV0dXJuICh2ZWN0b3IgYm9vbCBzaG9ydCkKLSAgICBfX2J1aWx0aW5fczM5MF92ZmFlaHMoKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19iLCA0LCBfX2NjKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgc2hvcnQKLXZlY19maW5kX2FueV9lcV9jYyh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iLAotICAgICAgICAgICAgICAgICAgIGludCAqX19jYykgewotICByZXR1cm4gKHZlY3RvciBib29sIHNob3J0KV9fYnVpbHRpbl9zMzkwX3ZmYWVocyhfX2EsIF9fYiwgNCwgX19jYyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGludAotdmVjX2ZpbmRfYW55X2VxX2NjKHZlY3RvciBzaWduZWQgaW50IF9fYSwgdmVjdG9yIHNpZ25lZCBpbnQgX19iLCBpbnQgKl9fY2MpIHsKLSAgcmV0dXJuICh2ZWN0b3IgYm9vbCBpbnQpCi0gICAgX19idWlsdGluX3MzOTBfdmZhZWZzKCh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iLCA0LCBfX2NjKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgaW50Ci12ZWNfZmluZF9hbnlfZXFfY2ModmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYiwgaW50ICpfX2NjKSB7Ci0gIHJldHVybiAodmVjdG9yIGJvb2wgaW50KQotICAgIF9fYnVpbHRpbl9zMzkwX3ZmYWVmcygodmVjdG9yIHVuc2lnbmVkIGludClfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYiwgNCwgX19jYyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGludAotdmVjX2ZpbmRfYW55X2VxX2NjKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYiwKLSAgICAgICAgICAgICAgICAgICBpbnQgKl9fY2MpIHsKLSAgcmV0dXJuICh2ZWN0b3IgYm9vbCBpbnQpX19idWlsdGluX3MzOTBfdmZhZWZzKF9fYSwgX19iLCA0LCBfX2NjKTsKLX0KLQotLyotLSB2ZWNfZmluZF9hbnlfZXFfaWR4IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGNoYXIKLXZlY19maW5kX2FueV9lcV9pZHgodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gKHZlY3RvciBzaWduZWQgY2hhcikKLSAgICBfX2J1aWx0aW5fczM5MF92ZmFlYigodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IsIDApOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgotdmVjX2ZpbmRfYW55X2VxX2lkeCh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmYWViKCh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iLCAwKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKLXZlY19maW5kX2FueV9lcV9pZHgodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmYWViKF9fYSwgX19iLCAwKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBzaG9ydAotdmVjX2ZpbmRfYW55X2VxX2lkeCh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIHNob3J0KQotICAgIF9fYnVpbHRpbl9zMzkwX3ZmYWVoKCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19iLCAwKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Ci12ZWNfZmluZF9hbnlfZXFfaWR4KHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmFlaCgodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19iLCAwKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Ci12ZWNfZmluZF9hbnlfZXFfaWR4KHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmYWVoKF9fYSwgX19iLCAwKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBpbnQKLXZlY19maW5kX2FueV9lcV9pZHgodmVjdG9yIHNpZ25lZCBpbnQgX19hLCB2ZWN0b3Igc2lnbmVkIGludCBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGludCkKLSAgICBfX2J1aWx0aW5fczM5MF92ZmFlZigodmVjdG9yIHVuc2lnbmVkIGludClfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iLCAwKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAotdmVjX2ZpbmRfYW55X2VxX2lkeCh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmFlZigodmVjdG9yIHVuc2lnbmVkIGludClfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2IsIDApOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Ci12ZWNfZmluZF9hbnlfZXFfaWR4KHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgewotICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZhZWYoX19hLCBfX2IsIDApOwotfQotCi0vKi0tIHZlY19maW5kX2FueV9lcV9pZHhfY2MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgY2hhcgotdmVjX2ZpbmRfYW55X2VxX2lkeF9jYyh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iLAotICAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9fY2MpIHsKLSAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpCi0gICAgX19idWlsdGluX3MzOTBfdmZhZWJzKCh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IsIDAsIF9fY2MpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgotdmVjX2ZpbmRfYW55X2VxX2lkeF9jYyh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIGJvb2wgY2hhciBfX2IsIGludCAqX19jYykgewotICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZhZWJzKCh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYiwgMCwgX19jYyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCi12ZWNfZmluZF9hbnlfZXFfaWR4X2NjKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iLAotICAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9fY2MpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmYWVicyhfX2EsIF9fYiwgMCwgX19jYyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgc2hvcnQKLXZlY19maW5kX2FueV9lcV9pZHhfY2ModmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBzaWduZWQgc2hvcnQgX19iLAotICAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9fY2MpIHsKLSAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIHNob3J0KQotICAgIF9fYnVpbHRpbl9zMzkwX3ZmYWVocygodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2IsIDAsIF9fY2MpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKLXZlY19maW5kX2FueV9lcV9pZHhfY2ModmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgIGludCAqX19jYykgewotICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZhZWhzKCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19iLCAwLCBfX2NjKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Ci12ZWNfZmluZF9hbnlfZXFfaWR4X2NjKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgIGludCAqX19jYykgewotICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZhZWhzKF9fYSwgX19iLCAwLCBfX2NjKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBpbnQKLXZlY19maW5kX2FueV9lcV9pZHhfY2ModmVjdG9yIHNpZ25lZCBpbnQgX19hLCB2ZWN0b3Igc2lnbmVkIGludCBfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgIGludCAqX19jYykgewotICByZXR1cm4gKHZlY3RvciBzaWduZWQgaW50KQotICAgIF9fYnVpbHRpbl9zMzkwX3ZmYWVmcygodmVjdG9yIHVuc2lnbmVkIGludClfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYiwgMCwgX19jYyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKLXZlY19maW5kX2FueV9lcV9pZHhfY2ModmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYiwgaW50ICpfX2NjKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmFlZnMoKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYiwgMCwgX19jYyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKLXZlY19maW5kX2FueV9lcV9pZHhfY2ModmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iLAotICAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9fY2MpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmYWVmcyhfX2EsIF9fYiwgMCwgX19jYyk7Ci19Ci0KLS8qLS0gdmVjX2ZpbmRfYW55X2VxX29yXzBfaWR4IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBjaGFyCi12ZWNfZmluZF9hbnlfZXFfb3JfMF9pZHgodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gKHZlY3RvciBzaWduZWQgY2hhcikKLSAgICBfX2J1aWx0aW5fczM5MF92ZmFlemIoKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYiwgMCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCi12ZWNfZmluZF9hbnlfZXFfb3JfMF9pZHgodmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciBib29sIGNoYXIgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmFlemIoKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iLCAwKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKLXZlY19maW5kX2FueV9lcV9vcl8wX2lkeCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZhZXpiKF9fYSwgX19iLCAwKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBzaG9ydAotdmVjX2ZpbmRfYW55X2VxX29yXzBfaWR4KHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYikgewotICByZXR1cm4gKHZlY3RvciBzaWduZWQgc2hvcnQpCi0gICAgX19idWlsdGluX3MzOTBfdmZhZXpoKCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYiwgMCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAotdmVjX2ZpbmRfYW55X2VxX29yXzBfaWR4KHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmFlemgoKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2IsIDApOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKLXZlY19maW5kX2FueV9lcV9vcl8wX2lkeCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmFlemgoX19hLCBfX2IsIDApOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGludAotdmVjX2ZpbmRfYW55X2VxX29yXzBfaWR4KHZlY3RvciBzaWduZWQgaW50IF9fYSwgdmVjdG9yIHNpZ25lZCBpbnQgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHNpZ25lZCBpbnQpCi0gICAgX19idWlsdGluX3MzOTBfdmZhZXpmKCh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iLCAwKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAotdmVjX2ZpbmRfYW55X2VxX29yXzBfaWR4KHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmYWV6ZigodmVjdG9yIHVuc2lnbmVkIGludClfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iLCAwKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAotdmVjX2ZpbmRfYW55X2VxX29yXzBfaWR4KHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgewotICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZhZXpmKF9fYSwgX19iLCAwKTsKLX0KLQotLyotLSB2ZWNfZmluZF9hbnlfZXFfb3JfMF9pZHhfY2MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGNoYXIKLXZlY19maW5kX2FueV9lcV9vcl8wX2lkeF9jYyh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqX19jYykgewotICByZXR1cm4gKHZlY3RvciBzaWduZWQgY2hhcikKLSAgICBfX2J1aWx0aW5fczM5MF92ZmFlemJzKCh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iLCAwLCBfX2NjKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKLXZlY19maW5kX2FueV9lcV9vcl8wX2lkeF9jYyh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIGJvb2wgY2hhciBfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpfX2NjKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmFlemJzKCh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IsIDAsIF9fY2MpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgotdmVjX2ZpbmRfYW55X2VxX29yXzBfaWR4X2NjKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqX19jYykgewotICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZhZXpicyhfX2EsIF9fYiwgMCwgX19jYyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgc2hvcnQKLXZlY19maW5kX2FueV9lcV9vcl8wX2lkeF9jYyh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpfX2NjKSB7Ci0gIHJldHVybiAodmVjdG9yIHNpZ25lZCBzaG9ydCkKLSAgICBfX2J1aWx0aW5fczM5MF92ZmFlemhzKCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2IsIDAsIF9fY2MpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKLXZlY19maW5kX2FueV9lcV9vcl8wX2lkeF9jYyh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciBib29sIHNob3J0IF9fYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9fY2MpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmYWV6aHMoKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19iLCAwLCBfX2NjKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Ci12ZWNfZmluZF9hbnlfZXFfb3JfMF9pZHhfY2ModmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iLCBpbnQgKl9fY2MpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmYWV6aHMoX19hLCBfX2IsIDAsIF9fY2MpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGludAotdmVjX2ZpbmRfYW55X2VxX29yXzBfaWR4X2NjKHZlY3RvciBzaWduZWQgaW50IF9fYSwgdmVjdG9yIHNpZ25lZCBpbnQgX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqX19jYykgewotICByZXR1cm4gKHZlY3RvciBzaWduZWQgaW50KQotICAgIF9fYnVpbHRpbl9zMzkwX3ZmYWV6ZnMoKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iLCAwLCBfX2NjKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAotdmVjX2ZpbmRfYW55X2VxX29yXzBfaWR4X2NjKHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpfX2NjKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmFlemZzKCh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iLCAwLCBfX2NjKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAotdmVjX2ZpbmRfYW55X2VxX29yXzBfaWR4X2NjKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9fY2MpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmYWV6ZnMoX19hLCBfX2IsIDAsIF9fY2MpOwotfQotCi0vKi0tIHZlY19maW5kX2FueV9uZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGNoYXIKLXZlY19maW5kX2FueV9uZSh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIGJvb2wgY2hhcikKLSAgICBfX2J1aWx0aW5fczM5MF92ZmFlYigodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IsIDEyKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgY2hhcgotdmVjX2ZpbmRfYW55X25lKHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgewotICByZXR1cm4gKHZlY3RvciBib29sIGNoYXIpCi0gICAgX19idWlsdGluX3MzOTBfdmZhZWIoKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iLCAxMik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGNoYXIKLXZlY19maW5kX2FueV9uZSh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gKHZlY3RvciBib29sIGNoYXIpX19idWlsdGluX3MzOTBfdmZhZWIoX19hLCBfX2IsIDEyKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgc2hvcnQKLXZlY19maW5kX2FueV9uZSh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgYm9vbCBzaG9ydCkKLSAgICBfX2J1aWx0aW5fczM5MF92ZmFlaCgodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYiwgMTIpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBzaG9ydAotdmVjX2ZpbmRfYW55X25lKHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIGJvb2wgc2hvcnQpCi0gICAgX19idWlsdGluX3MzOTBfdmZhZWgoKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2IsIDEyKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgc2hvcnQKLXZlY19maW5kX2FueV9uZSh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIGJvb2wgc2hvcnQpX19idWlsdGluX3MzOTBfdmZhZWgoX19hLCBfX2IsIDEyKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgaW50Ci12ZWNfZmluZF9hbnlfbmUodmVjdG9yIHNpZ25lZCBpbnQgX19hLCB2ZWN0b3Igc2lnbmVkIGludCBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3IgYm9vbCBpbnQpCi0gICAgX19idWlsdGluX3MzOTBfdmZhZWYoKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYiwgMTIpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBpbnQKLXZlY19maW5kX2FueV9uZSh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIGJvb2wgaW50KQotICAgIF9fYnVpbHRpbl9zMzkwX3ZmYWVmKCh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2IsIDEyKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgaW50Ci12ZWNfZmluZF9hbnlfbmUodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIGJvb2wgaW50KV9fYnVpbHRpbl9zMzkwX3ZmYWVmKF9fYSwgX19iLCAxMik7Ci19Ci0KLS8qLS0gdmVjX2ZpbmRfYW55X25lX2NjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgY2hhcgotdmVjX2ZpbmRfYW55X25lX2NjKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IsIGludCAqX19jYykgewotICByZXR1cm4gKHZlY3RvciBib29sIGNoYXIpCi0gICAgX19idWlsdGluX3MzOTBfdmZhZWJzKCh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IsIDEyLCBfX2NjKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgY2hhcgotdmVjX2ZpbmRfYW55X25lX2NjKHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYiwgaW50ICpfX2NjKSB7Ci0gIHJldHVybiAodmVjdG9yIGJvb2wgY2hhcikKLSAgICBfX2J1aWx0aW5fczM5MF92ZmFlYnMoKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYiwgMTIsIF9fY2MpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBjaGFyCi12ZWNfZmluZF9hbnlfbmVfY2ModmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IsCi0gICAgICAgICAgICAgICAgICAgaW50ICpfX2NjKSB7Ci0gIHJldHVybiAodmVjdG9yIGJvb2wgY2hhcilfX2J1aWx0aW5fczM5MF92ZmFlYnMoX19hLCBfX2IsIDEyLCBfX2NjKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgc2hvcnQKLXZlY19maW5kX2FueV9uZV9jYyh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2IsCi0gICAgICAgICAgICAgICAgICAgaW50ICpfX2NjKSB7Ci0gIHJldHVybiAodmVjdG9yIGJvb2wgc2hvcnQpCi0gICAgX19idWlsdGluX3MzOTBfdmZhZWhzKCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYiwgMTIsIF9fY2MpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBzaG9ydAotdmVjX2ZpbmRfYW55X25lX2NjKHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iLCBpbnQgKl9fY2MpIHsKLSAgcmV0dXJuICh2ZWN0b3IgYm9vbCBzaG9ydCkKLSAgICBfX2J1aWx0aW5fczM5MF92ZmFlaHMoKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19iLCAxMiwgX19jYyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIHNob3J0Ci12ZWNfZmluZF9hbnlfbmVfY2ModmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYiwKLSAgICAgICAgICAgICAgICAgICBpbnQgKl9fY2MpIHsKLSAgcmV0dXJuICh2ZWN0b3IgYm9vbCBzaG9ydClfX2J1aWx0aW5fczM5MF92ZmFlaHMoX19hLCBfX2IsIDEyLCBfX2NjKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgaW50Ci12ZWNfZmluZF9hbnlfbmVfY2ModmVjdG9yIHNpZ25lZCBpbnQgX19hLCB2ZWN0b3Igc2lnbmVkIGludCBfX2IsIGludCAqX19jYykgewotICByZXR1cm4gKHZlY3RvciBib29sIGludCkKLSAgICBfX2J1aWx0aW5fczM5MF92ZmFlZnMoKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2IsIDEyLCBfX2NjKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgaW50Ci12ZWNfZmluZF9hbnlfbmVfY2ModmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYiwgaW50ICpfX2NjKSB7Ci0gIHJldHVybiAodmVjdG9yIGJvb2wgaW50KQotICAgIF9fYnVpbHRpbl9zMzkwX3ZmYWVmcygodmVjdG9yIHVuc2lnbmVkIGludClfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYiwgMTIsIF9fY2MpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBpbnQKLXZlY19maW5kX2FueV9uZV9jYyh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IsCi0gICAgICAgICAgICAgICAgICAgaW50ICpfX2NjKSB7Ci0gIHJldHVybiAodmVjdG9yIGJvb2wgaW50KV9fYnVpbHRpbl9zMzkwX3ZmYWVmcyhfX2EsIF9fYiwgMTIsIF9fY2MpOwotfQotCi0vKi0tIHZlY19maW5kX2FueV9uZV9pZHggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgY2hhcgotdmVjX2ZpbmRfYW55X25lX2lkeCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHNpZ25lZCBjaGFyKQotICAgIF9fYnVpbHRpbl9zMzkwX3ZmYWViKCh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYiwgOCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCi12ZWNfZmluZF9hbnlfbmVfaWR4KHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgewotICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZhZWIoKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IsIDgpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgotdmVjX2ZpbmRfYW55X25lX2lkeCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgewotICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZhZWIoX19hLCBfX2IsIDgpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIHNob3J0Ci12ZWNfZmluZF9hbnlfbmVfaWR4KHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYikgewotICByZXR1cm4gKHZlY3RvciBzaWduZWQgc2hvcnQpCi0gICAgX19idWlsdGluX3MzOTBfdmZhZWgoKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2IsIDgpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKLXZlY19maW5kX2FueV9uZV9pZHgodmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmYWVoKCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2IsIDgpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKLXZlY19maW5kX2FueV9uZV9pZHgodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgewotICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZhZWgoX19hLCBfX2IsIDgpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGludAotdmVjX2ZpbmRfYW55X25lX2lkeCh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYikgewotICByZXR1cm4gKHZlY3RvciBzaWduZWQgaW50KQotICAgIF9fYnVpbHRpbl9zMzkwX3ZmYWVmKCh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2IsIDgpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Ci12ZWNfZmluZF9hbnlfbmVfaWR4KHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmYWVmKCh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYiwgOCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKLXZlY19maW5kX2FueV9uZV9pZHgodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmFlZihfX2EsIF9fYiwgOCk7Ci19Ci0KLS8qLS0gdmVjX2ZpbmRfYW55X25lX2lkeF9jYyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBjaGFyCi12ZWNfZmluZF9hbnlfbmVfaWR4X2NjKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgIGludCAqX19jYykgewotICByZXR1cm4gKHZlY3RvciBzaWduZWQgY2hhcikKLSAgICBfX2J1aWx0aW5fczM5MF92ZmFlYnMoKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYiwgOCwgX19jYyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCi12ZWNfZmluZF9hbnlfbmVfaWR4X2NjKHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYiwgaW50ICpfX2NjKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmFlYnMoKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iLCA4LCBfX2NjKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKLXZlY19maW5kX2FueV9uZV9pZHhfY2ModmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgIGludCAqX19jYykgewotICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZhZWJzKF9fYSwgX19iLCA4LCBfX2NjKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBzaG9ydAotdmVjX2ZpbmRfYW55X25lX2lkeF9jYyh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgIGludCAqX19jYykgewotICByZXR1cm4gKHZlY3RvciBzaWduZWQgc2hvcnQpCi0gICAgX19idWlsdGluX3MzOTBfdmZhZWhzKCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYiwgOCwgX19jYyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAotdmVjX2ZpbmRfYW55X25lX2lkeF9jYyh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciBib29sIHNob3J0IF9fYiwKLSAgICAgICAgICAgICAgICAgICAgICAgaW50ICpfX2NjKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmFlaHMoKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2IsIDgsIF9fY2MpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKLXZlY19maW5kX2FueV9uZV9pZHhfY2ModmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYiwKLSAgICAgICAgICAgICAgICAgICAgICAgaW50ICpfX2NjKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmFlaHMoX19hLCBfX2IsIDgsIF9fY2MpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGludAotdmVjX2ZpbmRfYW55X25lX2lkeF9jYyh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYiwKLSAgICAgICAgICAgICAgICAgICAgICAgaW50ICpfX2NjKSB7Ci0gIHJldHVybiAodmVjdG9yIHNpZ25lZCBpbnQpCi0gICAgX19idWlsdGluX3MzOTBfdmZhZWZzKCh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iLCA4LCBfX2NjKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAotdmVjX2ZpbmRfYW55X25lX2lkeF9jYyh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgYm9vbCBpbnQgX19iLCBpbnQgKl9fY2MpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmYWVmcygodmVjdG9yIHVuc2lnbmVkIGludClfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iLCA4LCBfX2NjKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAotdmVjX2ZpbmRfYW55X25lX2lkeF9jYyh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgIGludCAqX19jYykgewotICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZhZWZzKF9fYSwgX19iLCA4LCBfX2NjKTsKLX0KLQotLyotLSB2ZWNfZmluZF9hbnlfbmVfb3JfMF9pZHggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGNoYXIKLXZlY19maW5kX2FueV9uZV9vcl8wX2lkeCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHNpZ25lZCBjaGFyKQotICAgIF9fYnVpbHRpbl9zMzkwX3ZmYWV6YigodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iLCA4KTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKLXZlY19maW5kX2FueV9uZV9vcl8wX2lkeCh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmYWV6YigodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IsIDgpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgotdmVjX2ZpbmRfYW55X25lX29yXzBfaWR4KHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmFlemIoX19hLCBfX2IsIDgpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIHNob3J0Ci12ZWNfZmluZF9hbnlfbmVfb3JfMF9pZHgodmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBzaWduZWQgc2hvcnQgX19iKSB7Ci0gIHJldHVybiAodmVjdG9yIHNpZ25lZCBzaG9ydCkKLSAgICBfX2J1aWx0aW5fczM5MF92ZmFlemgoKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19iLCA4KTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Ci12ZWNfZmluZF9hbnlfbmVfb3JfMF9pZHgodmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmYWV6aCgodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYiwgOCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAotdmVjX2ZpbmRfYW55X25lX29yXzBfaWR4KHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmYWV6aChfX2EsIF9fYiwgOCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgaW50Ci12ZWNfZmluZF9hbnlfbmVfb3JfMF9pZHgodmVjdG9yIHNpZ25lZCBpbnQgX19hLCB2ZWN0b3Igc2lnbmVkIGludCBfX2IpIHsKLSAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGludCkKLSAgICBfX2J1aWx0aW5fczM5MF92ZmFlemYoKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2IsIDgpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Ci12ZWNfZmluZF9hbnlfbmVfb3JfMF9pZHgodmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYikgewotICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZhZXpmKCh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2IsIDgpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Ci12ZWNfZmluZF9hbnlfbmVfb3JfMF9pZHgodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmFlemYoX19hLCBfX2IsIDgpOwotfQotCi0vKi0tIHZlY19maW5kX2FueV9uZV9vcl8wX2lkeF9jYyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgY2hhcgotdmVjX2ZpbmRfYW55X25lX29yXzBfaWR4X2NjKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpfX2NjKSB7Ci0gIHJldHVybiAodmVjdG9yIHNpZ25lZCBjaGFyKQotICAgIF9fYnVpbHRpbl9zMzkwX3ZmYWV6YnMoKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IsIDgsIF9fY2MpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgotdmVjX2ZpbmRfYW55X25lX29yXzBfaWR4X2NjKHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9fY2MpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmYWV6YnMoKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYiwgOCwgX19jYyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCi12ZWNfZmluZF9hbnlfbmVfb3JfMF9pZHhfY2ModmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpfX2NjKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmFlemJzKF9fYSwgX19iLCA4LCBfX2NjKTsKLX0KLQotc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBzaG9ydAotdmVjX2ZpbmRfYW55X25lX29yXzBfaWR4X2NjKHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9fY2MpIHsKLSAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIHNob3J0KQotICAgIF9fYnVpbHRpbl9zMzkwX3ZmYWV6aHMoKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYiwgOCwgX19jYyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAotdmVjX2ZpbmRfYW55X25lX29yXzBfaWR4X2NjKHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqX19jYykgewotICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZhZXpocygodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2IsIDgsIF9fY2MpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKLXZlY19maW5kX2FueV9uZV9vcl8wX2lkeF9jYyh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IsIGludCAqX19jYykgewotICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZhZXpocyhfX2EsIF9fYiwgOCwgX19jYyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgaW50Ci12ZWNfZmluZF9hbnlfbmVfb3JfMF9pZHhfY2ModmVjdG9yIHNpZ25lZCBpbnQgX19hLCB2ZWN0b3Igc2lnbmVkIGludCBfX2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpfX2NjKSB7Ci0gIHJldHVybiAodmVjdG9yIHNpZ25lZCBpbnQpCi0gICAgX19idWlsdGluX3MzOTBfdmZhZXpmcygodmVjdG9yIHVuc2lnbmVkIGludClfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2IsIDgsIF9fY2MpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Ci12ZWNfZmluZF9hbnlfbmVfb3JfMF9pZHhfY2ModmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9fY2MpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmYWV6ZnMoKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2IsIDgsIF9fY2MpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Ci12ZWNfZmluZF9hbnlfbmVfb3JfMF9pZHhfY2ModmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqX19jYykgewotICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZhZXpmcyhfX2EsIF9fYiwgOCwgX19jYyk7Ci19Ci0KLSN1bmRlZiBfX2NvbnN0YW50X3BvdzJfcmFuZ2UKLSN1bmRlZiBfX2NvbnN0YW50X3JhbmdlCi0jdW5kZWYgX19jb25zdGFudAotI3VuZGVmIF9fQVRUUlNfbwotI3VuZGVmIF9fQVRUUlNfb19haQotI3VuZGVmIF9fQVRUUlNfYWkKLQotI2Vsc2UKLQotI2Vycm9yICJVc2UgLWZ6dmVjdG9yIHRvIGVuYWJsZSB2ZWN0b3IgZXh0ZW5zaW9ucyIKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9jbGFuZy0yNTc3MTEzL2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL3dtbWludHJpbi5oIGIvY2xhbmctMjU3NzExMy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS93bW1pbnRyaW4uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTJkOTMxMC4uMDAwMDAwMAotLS0gYS9jbGFuZy0yNTc3MTEzL2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL3dtbWludHJpbi5oCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotLyo9PT0tLS0tIHdtbWludHJpbi5oIC0gQUVTIGludHJpbnNpY3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09Ci0gKgotICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQotICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKLSAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKLSAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKLSAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcwotICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKLSAqCi0gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgotICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCi0gKgotICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKLSAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAotICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCi0gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAotICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgotICogVEhFIFNPRlRXQVJFLgotICoKLSAqPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KLSAqLwotCi0jaWZuZGVmIF9XTU1JTlRSSU5fSAotI2RlZmluZSBfV01NSU5UUklOX0gKLQotI2luY2x1ZGUgPGVtbWludHJpbi5oPgotCi0jaW5jbHVkZSA8X193bW1pbnRyaW5fYWVzLmg+Ci0KLSNpbmNsdWRlIDxfX3dtbWludHJpbl9wY2xtdWwuaD4KLQotI2VuZGlmIC8qIF9XTU1JTlRSSU5fSCAqLwpkaWZmIC0tZ2l0IGEvY2xhbmctMjU3NzExMy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS94ODZpbnRyaW4uaCBiL2NsYW5nLTI1NzcxMTMvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUveDg2aW50cmluLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRkODA3N2UuLjAwMDAwMDAKLS0tIGEvY2xhbmctMjU3NzExMy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS94ODZpbnRyaW4uaAorKysgL2Rldi9udWxsCkBAIC0xLDU3ICswLDAgQEAKLS8qPT09LS0tLSB4ODZpbnRyaW4uaCAtIFg4NiBpbnRyaW5zaWNzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KLSAqCi0gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5Ci0gKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAotICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cwotICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAotICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCi0gKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgotICoKLSAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCi0gKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KLSAqCi0gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgotICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCi0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKLSAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCi0gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCi0gKiBUSEUgU09GVFdBUkUuCi0gKgotICo9PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQotICovCi0KLSNpZm5kZWYgX19YODZJTlRSSU5fSAotI2RlZmluZSBfX1g4NklOVFJJTl9ICi0KLSNpbmNsdWRlIDxpYTMyaW50cmluLmg+Ci0KLSNpbmNsdWRlIDxpbW1pbnRyaW4uaD4KLQotI2luY2x1ZGUgPG1tM2Rub3cuaD4KLQotI2luY2x1ZGUgPGJtaWludHJpbi5oPgotCi0jaW5jbHVkZSA8Ym1pMmludHJpbi5oPgotCi0jaW5jbHVkZSA8bHpjbnRpbnRyaW4uaD4KLQotI2luY2x1ZGUgPHBvcGNudGludHJpbi5oPgotCi0jaW5jbHVkZSA8cmRzZWVkaW50cmluLmg+Ci0KLSNpbmNsdWRlIDxwcmZjaHdpbnRyaW4uaD4KLQotI2luY2x1ZGUgPGFtbWludHJpbi5oPgotCi0jaW5jbHVkZSA8Zm1hNGludHJpbi5oPgotCi0jaW5jbHVkZSA8eG9waW50cmluLmg+Ci0KLSNpbmNsdWRlIDx0Ym1pbnRyaW4uaD4KLQotI2luY2x1ZGUgPGYxNmNpbnRyaW4uaD4KLQotLyogRklYTUU6IExXUCAqLwotCi0jZW5kaWYgLyogX19YODZJTlRSSU5fSCAqLwpkaWZmIC0tZ2l0IGEvY2xhbmctMjU3NzExMy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS94bW1pbnRyaW4uaCBiL2NsYW5nLTI1NzcxMTMvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUveG1taW50cmluLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFlMGIyY2QuLjAwMDAwMDAKLS0tIGEvY2xhbmctMjU3NzExMy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS94bW1pbnRyaW4uaAorKysgL2Rldi9udWxsCkBAIC0xLDEwMTAgKzAsMCBAQAotLyo9PT0tLS0tIHhtbWludHJpbi5oIC0gU1NFIGludHJpbnNpY3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQotICoKLSAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKLSAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCi0gKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCi0gKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCi0gKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKLSAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Ci0gKgotICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KLSAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgotICoKLSAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCi0gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKLSAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgotICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKLSAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KLSAqIFRIRSBTT0ZUV0FSRS4KLSAqCi0gKj09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09Ci0gKi8KLQotI2lmbmRlZiBfX1hNTUlOVFJJTl9ICi0jZGVmaW5lIF9fWE1NSU5UUklOX0gKLQotI2luY2x1ZGUgPG1taW50cmluLmg+Ci0KLXR5cGVkZWYgaW50IF9fdjRzaSBfX2F0dHJpYnV0ZV9fKChfX3ZlY3Rvcl9zaXplX18oMTYpKSk7Ci10eXBlZGVmIGZsb2F0IF9fdjRzZiBfX2F0dHJpYnV0ZV9fKChfX3ZlY3Rvcl9zaXplX18oMTYpKSk7Ci10eXBlZGVmIGZsb2F0IF9fbTEyOCBfX2F0dHJpYnV0ZV9fKChfX3ZlY3Rvcl9zaXplX18oMTYpKSk7Ci0KLS8qIFRoaXMgaGVhZGVyIHNob3VsZCBvbmx5IGJlIGluY2x1ZGVkIGluIGEgaG9zdGVkIGVudmlyb25tZW50IGFzIGl0IGRlcGVuZHMgb24KLSAqIGEgc3RhbmRhcmQgbGlicmFyeSB0byBwcm92aWRlIGFsbG9jYXRpb24gcm91dGluZXMuICovCi0jaWYgX19TVERDX0hPU1RFRF9fCi0jaW5jbHVkZSA8bW1fbWFsbG9jLmg+Ci0jZW5kaWYKLQotLyogRGVmaW5lIHRoZSBkZWZhdWx0IGF0dHJpYnV0ZXMgZm9yIHRoZSBmdW5jdGlvbnMgaW4gdGhpcyBmaWxlLiAqLwotI2RlZmluZSBfX0RFRkFVTFRfRk5fQVRUUlMgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fLCBfX3RhcmdldF9fKCJzc2UiKSkpCi0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9hZGRfc3MoX19tMTI4IF9fYSwgX19tMTI4IF9fYikKLXsKLSAgX19hWzBdICs9IF9fYlswXTsKLSAgcmV0dXJuIF9fYTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2FkZF9wcyhfX20xMjggX19hLCBfX20xMjggX19iKQotewotICByZXR1cm4gX19hICsgX19iOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fc3ViX3NzKF9fbTEyOCBfX2EsIF9fbTEyOCBfX2IpCi17Ci0gIF9fYVswXSAtPSBfX2JbMF07Ci0gIHJldHVybiBfX2E7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9zdWJfcHMoX19tMTI4IF9fYSwgX19tMTI4IF9fYikKLXsKLSAgcmV0dXJuIF9fYSAtIF9fYjsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX211bF9zcyhfX20xMjggX19hLCBfX20xMjggX19iKQotewotICBfX2FbMF0gKj0gX19iWzBdOwotICByZXR1cm4gX19hOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbXVsX3BzKF9fbTEyOCBfX2EsIF9fbTEyOCBfX2IpCi17Ci0gIHJldHVybiBfX2EgKiBfX2I7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9kaXZfc3MoX19tMTI4IF9fYSwgX19tMTI4IF9fYikKLXsKLSAgX19hWzBdIC89IF9fYlswXTsKLSAgcmV0dXJuIF9fYTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2Rpdl9wcyhfX20xMjggX19hLCBfX20xMjggX19iKQotewotICByZXR1cm4gX19hIC8gX19iOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fc3FydF9zcyhfX20xMjggX19hKQotewotICBfX20xMjggX19jID0gX19idWlsdGluX2lhMzJfc3FydHNzKF9fYSk7Ci0gIHJldHVybiAoX19tMTI4KSB7IF9fY1swXSwgX19hWzFdLCBfX2FbMl0sIF9fYVszXSB9OwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fc3FydF9wcyhfX20xMjggX19hKQotewotICByZXR1cm4gX19idWlsdGluX2lhMzJfc3FydHBzKF9fYSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9yY3Bfc3MoX19tMTI4IF9fYSkKLXsKLSAgX19tMTI4IF9fYyA9IF9fYnVpbHRpbl9pYTMyX3JjcHNzKF9fYSk7Ci0gIHJldHVybiAoX19tMTI4KSB7IF9fY1swXSwgX19hWzFdLCBfX2FbMl0sIF9fYVszXSB9OwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fcmNwX3BzKF9fbTEyOCBfX2EpCi17Ci0gIHJldHVybiBfX2J1aWx0aW5faWEzMl9yY3BwcyhfX2EpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fcnNxcnRfc3MoX19tMTI4IF9fYSkKLXsKLSAgX19tMTI4IF9fYyA9IF9fYnVpbHRpbl9pYTMyX3JzcXJ0c3MoX19hKTsKLSAgcmV0dXJuIChfX20xMjgpIHsgX19jWzBdLCBfX2FbMV0sIF9fYVsyXSwgX19hWzNdIH07Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9yc3FydF9wcyhfX20xMjggX19hKQotewotICByZXR1cm4gX19idWlsdGluX2lhMzJfcnNxcnRwcyhfX2EpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWluX3NzKF9fbTEyOCBfX2EsIF9fbTEyOCBfX2IpCi17Ci0gIHJldHVybiBfX2J1aWx0aW5faWEzMl9taW5zcyhfX2EsIF9fYik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9taW5fcHMoX19tMTI4IF9fYSwgX19tMTI4IF9fYikKLXsKLSAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX21pbnBzKF9fYSwgX19iKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21heF9zcyhfX20xMjggX19hLCBfX20xMjggX19iKQotewotICByZXR1cm4gX19idWlsdGluX2lhMzJfbWF4c3MoX19hLCBfX2IpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWF4X3BzKF9fbTEyOCBfX2EsIF9fbTEyOCBfX2IpCi17Ci0gIHJldHVybiBfX2J1aWx0aW5faWEzMl9tYXhwcyhfX2EsIF9fYik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9hbmRfcHMoX19tMTI4IF9fYSwgX19tMTI4IF9fYikKLXsKLSAgcmV0dXJuIChfX20xMjgpKChfX3Y0c2kpX19hICYgKF9fdjRzaSlfX2IpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fYW5kbm90X3BzKF9fbTEyOCBfX2EsIF9fbTEyOCBfX2IpCi17Ci0gIHJldHVybiAoX19tMTI4KSh+KF9fdjRzaSlfX2EgJiAoX192NHNpKV9fYik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9vcl9wcyhfX20xMjggX19hLCBfX20xMjggX19iKQotewotICByZXR1cm4gKF9fbTEyOCkoKF9fdjRzaSlfX2EgfCAoX192NHNpKV9fYik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV94b3JfcHMoX19tMTI4IF9fYSwgX19tMTI4IF9fYikKLXsKLSAgcmV0dXJuIChfX20xMjgpKChfX3Y0c2kpX19hIF4gKF9fdjRzaSlfX2IpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fY21wZXFfc3MoX19tMTI4IF9fYSwgX19tMTI4IF9fYikKLXsKLSAgcmV0dXJuIChfX20xMjgpX19idWlsdGluX2lhMzJfY21wZXFzcyhfX2EsIF9fYik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9jbXBlcV9wcyhfX20xMjggX19hLCBfX20xMjggX19iKQotewotICByZXR1cm4gKF9fbTEyOClfX2J1aWx0aW5faWEzMl9jbXBlcXBzKF9fYSwgX19iKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2NtcGx0X3NzKF9fbTEyOCBfX2EsIF9fbTEyOCBfX2IpCi17Ci0gIHJldHVybiAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX2NtcGx0c3MoX19hLCBfX2IpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fY21wbHRfcHMoX19tMTI4IF9fYSwgX19tMTI4IF9fYikKLXsKLSAgcmV0dXJuIChfX20xMjgpX19idWlsdGluX2lhMzJfY21wbHRwcyhfX2EsIF9fYik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9jbXBsZV9zcyhfX20xMjggX19hLCBfX20xMjggX19iKQotewotICByZXR1cm4gKF9fbTEyOClfX2J1aWx0aW5faWEzMl9jbXBsZXNzKF9fYSwgX19iKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2NtcGxlX3BzKF9fbTEyOCBfX2EsIF9fbTEyOCBfX2IpCi17Ci0gIHJldHVybiAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX2NtcGxlcHMoX19hLCBfX2IpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fY21wZ3Rfc3MoX19tMTI4IF9fYSwgX19tMTI4IF9fYikKLXsKLSAgcmV0dXJuIChfX20xMjgpX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2J1aWx0aW5faWEzMl9jbXBsdHNzKF9fYiwgX19hKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNCwgMSwgMiwgMyk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9jbXBndF9wcyhfX20xMjggX19hLCBfX20xMjggX19iKQotewotICByZXR1cm4gKF9fbTEyOClfX2J1aWx0aW5faWEzMl9jbXBsdHBzKF9fYiwgX19hKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2NtcGdlX3NzKF9fbTEyOCBfX2EsIF9fbTEyOCBfX2IpCi17Ci0gIHJldHVybiAoX19tMTI4KV9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19idWlsdGluX2lhMzJfY21wbGVzcyhfX2IsIF9fYSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQsIDEsIDIsIDMpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fY21wZ2VfcHMoX19tMTI4IF9fYSwgX19tMTI4IF9fYikKLXsKLSAgcmV0dXJuIChfX20xMjgpX19idWlsdGluX2lhMzJfY21wbGVwcyhfX2IsIF9fYSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9jbXBuZXFfc3MoX19tMTI4IF9fYSwgX19tMTI4IF9fYikKLXsKLSAgcmV0dXJuIChfX20xMjgpX19idWlsdGluX2lhMzJfY21wbmVxc3MoX19hLCBfX2IpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fY21wbmVxX3BzKF9fbTEyOCBfX2EsIF9fbTEyOCBfX2IpCi17Ci0gIHJldHVybiAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX2NtcG5lcXBzKF9fYSwgX19iKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2NtcG5sdF9zcyhfX20xMjggX19hLCBfX20xMjggX19iKQotewotICByZXR1cm4gKF9fbTEyOClfX2J1aWx0aW5faWEzMl9jbXBubHRzcyhfX2EsIF9fYik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9jbXBubHRfcHMoX19tMTI4IF9fYSwgX19tMTI4IF9fYikKLXsKLSAgcmV0dXJuIChfX20xMjgpX19idWlsdGluX2lhMzJfY21wbmx0cHMoX19hLCBfX2IpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fY21wbmxlX3NzKF9fbTEyOCBfX2EsIF9fbTEyOCBfX2IpCi17Ci0gIHJldHVybiAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX2NtcG5sZXNzKF9fYSwgX19iKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2NtcG5sZV9wcyhfX20xMjggX19hLCBfX20xMjggX19iKQotewotICByZXR1cm4gKF9fbTEyOClfX2J1aWx0aW5faWEzMl9jbXBubGVwcyhfX2EsIF9fYik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9jbXBuZ3Rfc3MoX19tMTI4IF9fYSwgX19tMTI4IF9fYikKLXsKLSAgcmV0dXJuIChfX20xMjgpX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2J1aWx0aW5faWEzMl9jbXBubHRzcyhfX2IsIF9fYSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQsIDEsIDIsIDMpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fY21wbmd0X3BzKF9fbTEyOCBfX2EsIF9fbTEyOCBfX2IpCi17Ci0gIHJldHVybiAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX2NtcG5sdHBzKF9fYiwgX19hKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2NtcG5nZV9zcyhfX20xMjggX19hLCBfX20xMjggX19iKQotewotICByZXR1cm4gKF9fbTEyOClfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYnVpbHRpbl9pYTMyX2NtcG5sZXNzKF9fYiwgX19hKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNCwgMSwgMiwgMyk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9jbXBuZ2VfcHMoX19tMTI4IF9fYSwgX19tMTI4IF9fYikKLXsKLSAgcmV0dXJuIChfX20xMjgpX19idWlsdGluX2lhMzJfY21wbmxlcHMoX19iLCBfX2EpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fY21wb3JkX3NzKF9fbTEyOCBfX2EsIF9fbTEyOCBfX2IpCi17Ci0gIHJldHVybiAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX2NtcG9yZHNzKF9fYSwgX19iKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2NtcG9yZF9wcyhfX20xMjggX19hLCBfX20xMjggX19iKQotewotICByZXR1cm4gKF9fbTEyOClfX2J1aWx0aW5faWEzMl9jbXBvcmRwcyhfX2EsIF9fYik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9jbXB1bm9yZF9zcyhfX20xMjggX19hLCBfX20xMjggX19iKQotewotICByZXR1cm4gKF9fbTEyOClfX2J1aWx0aW5faWEzMl9jbXB1bm9yZHNzKF9fYSwgX19iKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2NtcHVub3JkX3BzKF9fbTEyOCBfX2EsIF9fbTEyOCBfX2IpCi17Ci0gIHJldHVybiAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX2NtcHVub3JkcHMoX19hLCBfX2IpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBpbnQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fY29taWVxX3NzKF9fbTEyOCBfX2EsIF9fbTEyOCBfX2IpCi17Ci0gIHJldHVybiBfX2J1aWx0aW5faWEzMl9jb21pZXEoX19hLCBfX2IpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBpbnQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fY29taWx0X3NzKF9fbTEyOCBfX2EsIF9fbTEyOCBfX2IpCi17Ci0gIHJldHVybiBfX2J1aWx0aW5faWEzMl9jb21pbHQoX19hLCBfX2IpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBpbnQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fY29taWxlX3NzKF9fbTEyOCBfX2EsIF9fbTEyOCBfX2IpCi17Ci0gIHJldHVybiBfX2J1aWx0aW5faWEzMl9jb21pbGUoX19hLCBfX2IpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBpbnQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fY29taWd0X3NzKF9fbTEyOCBfX2EsIF9fbTEyOCBfX2IpCi17Ci0gIHJldHVybiBfX2J1aWx0aW5faWEzMl9jb21pZ3QoX19hLCBfX2IpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBpbnQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fY29taWdlX3NzKF9fbTEyOCBfX2EsIF9fbTEyOCBfX2IpCi17Ci0gIHJldHVybiBfX2J1aWx0aW5faWEzMl9jb21pZ2UoX19hLCBfX2IpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBpbnQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fY29taW5lcV9zcyhfX20xMjggX19hLCBfX20xMjggX19iKQotewotICByZXR1cm4gX19idWlsdGluX2lhMzJfY29taW5lcShfX2EsIF9fYik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIGludCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV91Y29taWVxX3NzKF9fbTEyOCBfX2EsIF9fbTEyOCBfX2IpCi17Ci0gIHJldHVybiBfX2J1aWx0aW5faWEzMl91Y29taWVxKF9fYSwgX19iKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gaW50IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX3Vjb21pbHRfc3MoX19tMTI4IF9fYSwgX19tMTI4IF9fYikKLXsKLSAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3Vjb21pbHQoX19hLCBfX2IpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBpbnQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fdWNvbWlsZV9zcyhfX20xMjggX19hLCBfX20xMjggX19iKQotewotICByZXR1cm4gX19idWlsdGluX2lhMzJfdWNvbWlsZShfX2EsIF9fYik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIGludCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV91Y29taWd0X3NzKF9fbTEyOCBfX2EsIF9fbTEyOCBfX2IpCi17Ci0gIHJldHVybiBfX2J1aWx0aW5faWEzMl91Y29taWd0KF9fYSwgX19iKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gaW50IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX3Vjb21pZ2Vfc3MoX19tMTI4IF9fYSwgX19tMTI4IF9fYikKLXsKLSAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3Vjb21pZ2UoX19hLCBfX2IpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBpbnQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fdWNvbWluZXFfc3MoX19tMTI4IF9fYSwgX19tMTI4IF9fYikKLXsKLSAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3Vjb21pbmVxKF9fYSwgX19iKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gaW50IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2N2dHNzX3NpMzIoX19tMTI4IF9fYSkKLXsKLSAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX2N2dHNzMnNpKF9fYSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIGludCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9jdnRfc3Myc2koX19tMTI4IF9fYSkKLXsKLSAgcmV0dXJuIF9tbV9jdnRzc19zaTMyKF9fYSk7Ci19Ci0KLSNpZmRlZiBfX3g4Nl82NF9fCi0KLXN0YXRpYyBfX2lubGluZV9fIGxvbmcgbG9uZyBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9jdnRzc19zaTY0KF9fbTEyOCBfX2EpCi17Ci0gIHJldHVybiBfX2J1aWx0aW5faWEzMl9jdnRzczJzaTY0KF9fYSk7Ci19Ci0KLSNlbmRpZgotCi1zdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9jdnRwc19waTMyKF9fbTEyOCBfX2EpCi17Ci0gIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfY3Z0cHMycGkoX19hKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fY3Z0X3BzMnBpKF9fbTEyOCBfX2EpCi17Ci0gIHJldHVybiBfbW1fY3Z0cHNfcGkzMihfX2EpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBpbnQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fY3Z0dHNzX3NpMzIoX19tMTI4IF9fYSkKLXsKLSAgcmV0dXJuIF9fYVswXTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gaW50IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2N2dHRfc3Myc2koX19tMTI4IF9fYSkKLXsKLSAgcmV0dXJuIF9tbV9jdnR0c3Nfc2kzMihfX2EpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBsb25nIGxvbmcgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fY3Z0dHNzX3NpNjQoX19tMTI4IF9fYSkKLXsKLSAgcmV0dXJuIF9fYVswXTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fY3Z0dHBzX3BpMzIoX19tMTI4IF9fYSkKLXsKLSAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9jdnR0cHMycGkoX19hKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fY3Z0dF9wczJwaShfX20xMjggX19hKQotewotICByZXR1cm4gX21tX2N2dHRwc19waTMyKF9fYSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9jdnRzaTMyX3NzKF9fbTEyOCBfX2EsIGludCBfX2IpCi17Ci0gIF9fYVswXSA9IF9fYjsKLSAgcmV0dXJuIF9fYTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2N2dF9zaTJzcyhfX20xMjggX19hLCBpbnQgX19iKQotewotICByZXR1cm4gX21tX2N2dHNpMzJfc3MoX19hLCBfX2IpOwotfQotCi0jaWZkZWYgX194ODZfNjRfXwotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fY3Z0c2k2NF9zcyhfX20xMjggX19hLCBsb25nIGxvbmcgX19iKQotewotICBfX2FbMF0gPSBfX2I7Ci0gIHJldHVybiBfX2E7Ci19Ci0KLSNlbmRpZgotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fY3Z0cGkzMl9wcyhfX20xMjggX19hLCBfX202NCBfX2IpCi17Ci0gIHJldHVybiBfX2J1aWx0aW5faWEzMl9jdnRwaTJwcyhfX2EsIChfX3Yyc2kpX19iKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2N2dF9waTJwcyhfX20xMjggX19hLCBfX202NCBfX2IpCi17Ci0gIHJldHVybiBfbW1fY3Z0cGkzMl9wcyhfX2EsIF9fYik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIGZsb2F0IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2N2dHNzX2YzMihfX20xMjggX19hKQotewotICByZXR1cm4gX19hWzBdOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbG9hZGhfcGkoX19tMTI4IF9fYSwgY29uc3QgX19tNjQgKl9fcCkKLXsKLSAgdHlwZWRlZiBmbG9hdCBfX21tX2xvYWRoX3BpX3YyZjMyIF9fYXR0cmlidXRlX18oKF9fdmVjdG9yX3NpemVfXyg4KSkpOwotICBzdHJ1Y3QgX19tbV9sb2FkaF9waV9zdHJ1Y3QgewotICAgIF9fbW1fbG9hZGhfcGlfdjJmMzIgX191OwotICB9IF9fYXR0cmlidXRlX18oKF9fcGFja2VkX18sIF9fbWF5X2FsaWFzX18pKTsKLSAgX19tbV9sb2FkaF9waV92MmYzMiBfX2IgPSAoKHN0cnVjdCBfX21tX2xvYWRoX3BpX3N0cnVjdCopX19wKS0+X191OwotICBfX20xMjggX19iYiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fYiwgX19iLCAwLCAxLCAwLCAxKTsKLSAgcmV0dXJuIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fYSwgX19iYiwgMCwgMSwgNCwgNSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9sb2FkbF9waShfX20xMjggX19hLCBjb25zdCBfX202NCAqX19wKQotewotICB0eXBlZGVmIGZsb2F0IF9fbW1fbG9hZGxfcGlfdjJmMzIgX19hdHRyaWJ1dGVfXygoX192ZWN0b3Jfc2l6ZV9fKDgpKSk7Ci0gIHN0cnVjdCBfX21tX2xvYWRsX3BpX3N0cnVjdCB7Ci0gICAgX19tbV9sb2FkbF9waV92MmYzMiBfX3U7Ci0gIH0gX19hdHRyaWJ1dGVfXygoX19wYWNrZWRfXywgX19tYXlfYWxpYXNfXykpOwotICBfX21tX2xvYWRsX3BpX3YyZjMyIF9fYiA9ICgoc3RydWN0IF9fbW1fbG9hZGxfcGlfc3RydWN0KilfX3ApLT5fX3U7Ci0gIF9fbTEyOCBfX2JiID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19iLCBfX2IsIDAsIDEsIDAsIDEpOwotICByZXR1cm4gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19hLCBfX2JiLCA0LCA1LCAyLCAzKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2xvYWRfc3MoY29uc3QgZmxvYXQgKl9fcCkKLXsKLSAgc3RydWN0IF9fbW1fbG9hZF9zc19zdHJ1Y3QgewotICAgIGZsb2F0IF9fdTsKLSAgfSBfX2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9fLCBfX21heV9hbGlhc19fKSk7Ci0gIGZsb2F0IF9fdSA9ICgoc3RydWN0IF9fbW1fbG9hZF9zc19zdHJ1Y3QqKV9fcCktPl9fdTsKLSAgcmV0dXJuIChfX20xMjgpeyBfX3UsIDAsIDAsIDAgfTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2xvYWQxX3BzKGNvbnN0IGZsb2F0ICpfX3ApCi17Ci0gIHN0cnVjdCBfX21tX2xvYWQxX3BzX3N0cnVjdCB7Ci0gICAgZmxvYXQgX191OwotICB9IF9fYXR0cmlidXRlX18oKF9fcGFja2VkX18sIF9fbWF5X2FsaWFzX18pKTsKLSAgZmxvYXQgX191ID0gKChzdHJ1Y3QgX19tbV9sb2FkMV9wc19zdHJ1Y3QqKV9fcCktPl9fdTsKLSAgcmV0dXJuIChfX20xMjgpeyBfX3UsIF9fdSwgX191LCBfX3UgfTsKLX0KLQotI2RlZmluZSAgICAgICAgX21tX2xvYWRfcHMxKHApIF9tbV9sb2FkMV9wcyhwKQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbG9hZF9wcyhjb25zdCBmbG9hdCAqX19wKQotewotICByZXR1cm4gKihfX20xMjgqKV9fcDsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2xvYWR1X3BzKGNvbnN0IGZsb2F0ICpfX3ApCi17Ci0gIHN0cnVjdCBfX2xvYWR1X3BzIHsKLSAgICBfX20xMjggX192OwotICB9IF9fYXR0cmlidXRlX18oKF9fcGFja2VkX18sIF9fbWF5X2FsaWFzX18pKTsKLSAgcmV0dXJuICgoc3RydWN0IF9fbG9hZHVfcHMqKV9fcCktPl9fdjsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2xvYWRyX3BzKGNvbnN0IGZsb2F0ICpfX3ApCi17Ci0gIF9fbTEyOCBfX2EgPSBfbW1fbG9hZF9wcyhfX3ApOwotICByZXR1cm4gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19hLCBfX2EsIDMsIDIsIDEsIDApOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fdW5kZWZpbmVkX3BzKCkKLXsKLSAgcmV0dXJuIChfX20xMjgpX19idWlsdGluX2lhMzJfdW5kZWYxMjgoKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX3NldF9zcyhmbG9hdCBfX3cpCi17Ci0gIHJldHVybiAoX19tMTI4KXsgX193LCAwLCAwLCAwIH07Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9zZXQxX3BzKGZsb2F0IF9fdykKLXsKLSAgcmV0dXJuIChfX20xMjgpeyBfX3csIF9fdywgX193LCBfX3cgfTsKLX0KLQotLyogTWljcm9zb2Z0IHNwZWNpZmljLiAqLwotc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX3NldF9wczEoZmxvYXQgX193KQotewotICAgIHJldHVybiBfbW1fc2V0MV9wcyhfX3cpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fc2V0X3BzKGZsb2F0IF9feiwgZmxvYXQgX195LCBmbG9hdCBfX3gsIGZsb2F0IF9fdykKLXsKLSAgcmV0dXJuIChfX20xMjgpeyBfX3csIF9feCwgX195LCBfX3ogfTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX3NldHJfcHMoZmxvYXQgX196LCBmbG9hdCBfX3ksIGZsb2F0IF9feCwgZmxvYXQgX193KQotewotICByZXR1cm4gKF9fbTEyOCl7IF9feiwgX195LCBfX3gsIF9fdyB9OwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fc2V0emVyb19wcyh2b2lkKQotewotICByZXR1cm4gKF9fbTEyOCl7IDAsIDAsIDAsIDAgfTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9zdG9yZWhfcGkoX19tNjQgKl9fcCwgX19tMTI4IF9fYSkKLXsKLSAgX19idWlsdGluX2lhMzJfc3RvcmVocHMoKF9fdjJzaSAqKV9fcCwgX19hKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9zdG9yZWxfcGkoX19tNjQgKl9fcCwgX19tMTI4IF9fYSkKLXsKLSAgX19idWlsdGluX2lhMzJfc3RvcmVscHMoKF9fdjJzaSAqKV9fcCwgX19hKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9zdG9yZV9zcyhmbG9hdCAqX19wLCBfX20xMjggX19hKQotewotICBzdHJ1Y3QgX19tbV9zdG9yZV9zc19zdHJ1Y3QgewotICAgIGZsb2F0IF9fdTsKLSAgfSBfX2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9fLCBfX21heV9hbGlhc19fKSk7Ci0gICgoc3RydWN0IF9fbW1fc3RvcmVfc3Nfc3RydWN0KilfX3ApLT5fX3UgPSBfX2FbMF07Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fc3RvcmV1X3BzKGZsb2F0ICpfX3AsIF9fbTEyOCBfX2EpCi17Ci0gIF9fYnVpbHRpbl9pYTMyX3N0b3JldXBzKF9fcCwgX19hKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9zdG9yZTFfcHMoZmxvYXQgKl9fcCwgX19tMTI4IF9fYSkKLXsKLSAgX19hID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19hLCBfX2EsIDAsIDAsIDAsIDApOwotICBfbW1fc3RvcmV1X3BzKF9fcCwgX19hKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9zdG9yZV9wczEoZmxvYXQgKl9fcCwgX19tMTI4IF9fYSkKLXsKLSAgICByZXR1cm4gX21tX3N0b3JlMV9wcyhfX3AsIF9fYSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fc3RvcmVfcHMoZmxvYXQgKl9fcCwgX19tMTI4IF9fYSkKLXsKLSAgKihfX20xMjggKilfX3AgPSBfX2E7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fc3RvcmVyX3BzKGZsb2F0ICpfX3AsIF9fbTEyOCBfX2EpCi17Ci0gIF9fYSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fYSwgX19hLCAzLCAyLCAxLCAwKTsKLSAgX21tX3N0b3JlX3BzKF9fcCwgX19hKTsKLX0KLQotI2RlZmluZSBfTU1fSElOVF9UMCAzCi0jZGVmaW5lIF9NTV9ISU5UX1QxIDIKLSNkZWZpbmUgX01NX0hJTlRfVDIgMQotI2RlZmluZSBfTU1fSElOVF9OVEEgMAotCi0jaWZuZGVmIF9NU0NfVkVSCi0vKiBGSVhNRTogV2UgaGF2ZSB0byAjZGVmaW5lIHRoaXMgYmVjYXVzZSAic2VsIiBtdXN0IGJlIGEgY29uc3RhbnQgaW50ZWdlciwgYW5kCi0gICBTZW1hIGRvZXNuJ3QgZG8gYW55IGZvcm0gb2YgY29uc3RhbnQgcHJvcGFnYXRpb24geWV0LiAqLwotCi0jZGVmaW5lIF9tbV9wcmVmZXRjaChhLCBzZWwpIChfX2J1aWx0aW5fcHJlZmV0Y2goKHZvaWQgKikoYSksIDAsIChzZWwpKSkKLSNlbmRpZgotCi1zdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX3N0cmVhbV9waShfX202NCAqX19wLCBfX202NCBfX2EpCi17Ci0gIF9fYnVpbHRpbl9pYTMyX21vdm50cShfX3AsIF9fYSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fc3RyZWFtX3BzKGZsb2F0ICpfX3AsIF9fbTEyOCBfX2EpCi17Ci0gIF9fYnVpbHRpbl9pYTMyX21vdm50cHMoX19wLCBfX2EpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX3NmZW5jZSh2b2lkKQotewotICBfX2J1aWx0aW5faWEzMl9zZmVuY2UoKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gaW50IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2V4dHJhY3RfcGkxNihfX202NCBfX2EsIGludCBfX24pCi17Ci0gIF9fdjRoaSBfX2IgPSAoX192NGhpKV9fYTsKLSAgcmV0dXJuICh1bnNpZ25lZCBzaG9ydClfX2JbX19uICYgM107Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2luc2VydF9waTE2KF9fbTY0IF9fYSwgaW50IF9fZCwgaW50IF9fbikKLXsKLSAgIF9fdjRoaSBfX2IgPSAoX192NGhpKV9fYTsKLSAgIF9fYltfX24gJiAzXSA9IF9fZDsKLSAgIHJldHVybiAoX19tNjQpX19iOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tYXhfcGkxNihfX202NCBfX2EsIF9fbTY0IF9fYikKLXsKLSAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9wbWF4c3coKF9fdjRoaSlfX2EsIChfX3Y0aGkpX19iKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWF4X3B1OChfX202NCBfX2EsIF9fbTY0IF9fYikKLXsKLSAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9wbWF4dWIoKF9fdjhxaSlfX2EsIChfX3Y4cWkpX19iKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWluX3BpMTYoX19tNjQgX19hLCBfX202NCBfX2IpCi17Ci0gIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfcG1pbnN3KChfX3Y0aGkpX19hLCAoX192NGhpKV9fYik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21pbl9wdTgoX19tNjQgX19hLCBfX202NCBfX2IpCi17Ci0gIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfcG1pbnViKChfX3Y4cWkpX19hLCAoX192OHFpKV9fYik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIGludCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tb3ZlbWFza19waTgoX19tNjQgX19hKQotewotICByZXR1cm4gX19idWlsdGluX2lhMzJfcG1vdm1za2IoKF9fdjhxaSlfX2EpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tdWxoaV9wdTE2KF9fbTY0IF9fYSwgX19tNjQgX19iKQotewotICByZXR1cm4gKF9fbTY0KV9fYnVpbHRpbl9pYTMyX3BtdWxodXcoKF9fdjRoaSlfX2EsIChfX3Y0aGkpX19iKTsKLX0KLQotI2RlZmluZSBfbW1fc2h1ZmZsZV9waTE2KGEsIG4pIF9fZXh0ZW5zaW9uX18gKHsgXAotICAoX19tNjQpX19idWlsdGluX2lhMzJfcHNodWZ3KChfX3Y0aGkpKF9fbTY0KShhKSwgKG4pKTsgfSkKLQotc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tYXNrbW92ZV9zaTY0KF9fbTY0IF9fZCwgX19tNjQgX19uLCBjaGFyICpfX3ApCi17Ci0gIF9fYnVpbHRpbl9pYTMyX21hc2ttb3ZxKChfX3Y4cWkpX19kLCAoX192OHFpKV9fbiwgX19wKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fYXZnX3B1OChfX202NCBfX2EsIF9fbTY0IF9fYikKLXsKLSAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9wYXZnYigoX192OHFpKV9fYSwgKF9fdjhxaSlfX2IpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9hdmdfcHUxNihfX202NCBfX2EsIF9fbTY0IF9fYikKLXsKLSAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9wYXZndygoX192NGhpKV9fYSwgKF9fdjRoaSlfX2IpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9zYWRfcHU4KF9fbTY0IF9fYSwgX19tNjQgX19iKQotewotICByZXR1cm4gKF9fbTY0KV9fYnVpbHRpbl9pYTMyX3BzYWRidygoX192OHFpKV9fYSwgKF9fdjhxaSlfX2IpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBpbnQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fZ2V0Y3NyKHZvaWQpCi17Ci0gIHJldHVybiBfX2J1aWx0aW5faWEzMl9zdG14Y3NyKCk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fc2V0Y3NyKHVuc2lnbmVkIGludCBfX2kpCi17Ci0gIF9fYnVpbHRpbl9pYTMyX2xkbXhjc3IoX19pKTsKLX0KLQotI2RlZmluZSBfbW1fc2h1ZmZsZV9wcyhhLCBiLCBtYXNrKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgKF9fbTEyOClfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192NHNmKShfX20xMjgpKGEpLCAoX192NHNmKShfX20xMjgpKGIpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1hc2spICYgMHgzLCAoKG1hc2spICYgMHhjKSA+PiAyLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgobWFzaykgJiAweDMwKSA+PiA0KSArIDQsIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChtYXNrKSAmIDB4YzApID4+IDYpICsgNCk7IH0pCi0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV91bnBhY2toaV9wcyhfX20xMjggX19hLCBfX20xMjggX19iKQotewotICByZXR1cm4gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19hLCBfX2IsIDIsIDYsIDMsIDcpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fdW5wYWNrbG9fcHMoX19tMTI4IF9fYSwgX19tMTI4IF9fYikKLXsKLSAgcmV0dXJuIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fYSwgX19iLCAwLCA0LCAxLCA1KTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21vdmVfc3MoX19tMTI4IF9fYSwgX19tMTI4IF9fYikKLXsKLSAgcmV0dXJuIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fYSwgX19iLCA0LCAxLCAyLCAzKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21vdmVobF9wcyhfX20xMjggX19hLCBfX20xMjggX19iKQotewotICByZXR1cm4gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19hLCBfX2IsIDYsIDcsIDIsIDMpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbW92ZWxoX3BzKF9fbTEyOCBfX2EsIF9fbTEyOCBfX2IpCi17Ci0gIHJldHVybiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX2EsIF9fYiwgMCwgMSwgNCwgNSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9jdnRwaTE2X3BzKF9fbTY0IF9fYSkKLXsKLSAgX19tNjQgX19iLCBfX2M7Ci0gIF9fbTEyOCBfX3I7Ci0KLSAgX19iID0gX21tX3NldHplcm9fc2k2NCgpOwotICBfX2IgPSBfbW1fY21wZ3RfcGkxNihfX2IsIF9fYSk7Ci0gIF9fYyA9IF9tbV91bnBhY2toaV9waTE2KF9fYSwgX19iKTsKLSAgX19yID0gX21tX3NldHplcm9fcHMoKTsKLSAgX19yID0gX21tX2N2dHBpMzJfcHMoX19yLCBfX2MpOwotICBfX3IgPSBfbW1fbW92ZWxoX3BzKF9fciwgX19yKTsKLSAgX19jID0gX21tX3VucGFja2xvX3BpMTYoX19hLCBfX2IpOwotICBfX3IgPSBfbW1fY3Z0cGkzMl9wcyhfX3IsIF9fYyk7Ci0KLSAgcmV0dXJuIF9fcjsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2N2dHB1MTZfcHMoX19tNjQgX19hKQotewotICBfX202NCBfX2IsIF9fYzsKLSAgX19tMTI4IF9fcjsKLQotICBfX2IgPSBfbW1fc2V0emVyb19zaTY0KCk7Ci0gIF9fYyA9IF9tbV91bnBhY2toaV9waTE2KF9fYSwgX19iKTsKLSAgX19yID0gX21tX3NldHplcm9fcHMoKTsKLSAgX19yID0gX21tX2N2dHBpMzJfcHMoX19yLCBfX2MpOwotICBfX3IgPSBfbW1fbW92ZWxoX3BzKF9fciwgX19yKTsKLSAgX19jID0gX21tX3VucGFja2xvX3BpMTYoX19hLCBfX2IpOwotICBfX3IgPSBfbW1fY3Z0cGkzMl9wcyhfX3IsIF9fYyk7Ci0KLSAgcmV0dXJuIF9fcjsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2N2dHBpOF9wcyhfX202NCBfX2EpCi17Ci0gIF9fbTY0IF9fYjsKLQotICBfX2IgPSBfbW1fc2V0emVyb19zaTY0KCk7Ci0gIF9fYiA9IF9tbV9jbXBndF9waTgoX19iLCBfX2EpOwotICBfX2IgPSBfbW1fdW5wYWNrbG9fcGk4KF9fYSwgX19iKTsKLQotICByZXR1cm4gX21tX2N2dHBpMTZfcHMoX19iKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2N2dHB1OF9wcyhfX202NCBfX2EpCi17Ci0gIF9fbTY0IF9fYjsKLQotICBfX2IgPSBfbW1fc2V0emVyb19zaTY0KCk7Ci0gIF9fYiA9IF9tbV91bnBhY2tsb19waTgoX19hLCBfX2IpOwotCi0gIHJldHVybiBfbW1fY3Z0cGkxNl9wcyhfX2IpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fY3Z0cGkzMngyX3BzKF9fbTY0IF9fYSwgX19tNjQgX19iKQotewotICBfX20xMjggX19jOwotCi0gIF9fYyA9IF9tbV9zZXR6ZXJvX3BzKCk7Ci0gIF9fYyA9IF9tbV9jdnRwaTMyX3BzKF9fYywgX19iKTsKLSAgX19jID0gX21tX21vdmVsaF9wcyhfX2MsIF9fYyk7Ci0KLSAgcmV0dXJuIF9tbV9jdnRwaTMyX3BzKF9fYywgX19hKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fY3Z0cHNfcGkxNihfX20xMjggX19hKQotewotICBfX202NCBfX2IsIF9fYzsKLQotICBfX2IgPSBfbW1fY3Z0cHNfcGkzMihfX2EpOwotICBfX2EgPSBfbW1fbW92ZWhsX3BzKF9fYSwgX19hKTsKLSAgX19jID0gX21tX2N2dHBzX3BpMzIoX19hKTsKLQotICByZXR1cm4gX21tX3BhY2tzX3BpMzIoX19iLCBfX2MpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9jdnRwc19waTgoX19tMTI4IF9fYSkKLXsKLSAgX19tNjQgX19iLCBfX2M7Ci0KLSAgX19iID0gX21tX2N2dHBzX3BpMTYoX19hKTsKLSAgX19jID0gX21tX3NldHplcm9fc2k2NCgpOwotCi0gIHJldHVybiBfbW1fcGFja3NfcGkxNihfX2IsIF9fYyk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIGludCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tb3ZlbWFza19wcyhfX20xMjggX19hKQotewotICByZXR1cm4gX19idWlsdGluX2lhMzJfbW92bXNrcHMoX19hKTsKLX0KLQotCi0jaWZkZWYgX01TQ19WRVIKLSNkZWZpbmUgX01NX0FMSUdOMTYgX19kZWNsc3BlYyhhbGlnbigxNikpCi0jZW5kaWYKLQotI2RlZmluZSBfTU1fU0hVRkZMRSh6LCB5LCB4LCB3KSAoKCh6KSA8PCA2KSB8ICgoeSkgPDwgNCkgfCAoKHgpIDw8IDIpIHwgKHcpKQotCi0jZGVmaW5lIF9NTV9FWENFUFRfSU5WQUxJRCAgICAoMHgwMDAxKQotI2RlZmluZSBfTU1fRVhDRVBUX0RFTk9STSAgICAgKDB4MDAwMikKLSNkZWZpbmUgX01NX0VYQ0VQVF9ESVZfWkVSTyAgICgweDAwMDQpCi0jZGVmaW5lIF9NTV9FWENFUFRfT1ZFUkZMT1cgICAoMHgwMDA4KQotI2RlZmluZSBfTU1fRVhDRVBUX1VOREVSRkxPVyAgKDB4MDAxMCkKLSNkZWZpbmUgX01NX0VYQ0VQVF9JTkVYQUNUICAgICgweDAwMjApCi0jZGVmaW5lIF9NTV9FWENFUFRfTUFTSyAgICAgICAoMHgwMDNmKQotCi0jZGVmaW5lIF9NTV9NQVNLX0lOVkFMSUQgICAgICAoMHgwMDgwKQotI2RlZmluZSBfTU1fTUFTS19ERU5PUk0gICAgICAgKDB4MDEwMCkKLSNkZWZpbmUgX01NX01BU0tfRElWX1pFUk8gICAgICgweDAyMDApCi0jZGVmaW5lIF9NTV9NQVNLX09WRVJGTE9XICAgICAoMHgwNDAwKQotI2RlZmluZSBfTU1fTUFTS19VTkRFUkZMT1cgICAgKDB4MDgwMCkKLSNkZWZpbmUgX01NX01BU0tfSU5FWEFDVCAgICAgICgweDEwMDApCi0jZGVmaW5lIF9NTV9NQVNLX01BU0sgICAgICAgICAoMHgxZjgwKQotCi0jZGVmaW5lIF9NTV9ST1VORF9ORUFSRVNUICAgICAoMHgwMDAwKQotI2RlZmluZSBfTU1fUk9VTkRfRE9XTiAgICAgICAgKDB4MjAwMCkKLSNkZWZpbmUgX01NX1JPVU5EX1VQICAgICAgICAgICgweDQwMDApCi0jZGVmaW5lIF9NTV9ST1VORF9UT1dBUkRfWkVSTyAoMHg2MDAwKQotI2RlZmluZSBfTU1fUk9VTkRfTUFTSyAgICAgICAgKDB4NjAwMCkKLQotI2RlZmluZSBfTU1fRkxVU0hfWkVST19NQVNLICAgKDB4ODAwMCkKLSNkZWZpbmUgX01NX0ZMVVNIX1pFUk9fT04gICAgICgweDgwMDApCi0jZGVmaW5lIF9NTV9GTFVTSF9aRVJPX09GRiAgICAoMHgwMDAwKQotCi0jZGVmaW5lIF9NTV9HRVRfRVhDRVBUSU9OX01BU0soKSAoX21tX2dldGNzcigpICYgX01NX01BU0tfTUFTSykKLSNkZWZpbmUgX01NX0dFVF9FWENFUFRJT05fU1RBVEUoKSAoX21tX2dldGNzcigpICYgX01NX0VYQ0VQVF9NQVNLKQotI2RlZmluZSBfTU1fR0VUX0ZMVVNIX1pFUk9fTU9ERSgpIChfbW1fZ2V0Y3NyKCkgJiBfTU1fRkxVU0hfWkVST19NQVNLKQotI2RlZmluZSBfTU1fR0VUX1JPVU5ESU5HX01PREUoKSAoX21tX2dldGNzcigpICYgX01NX1JPVU5EX01BU0spCi0KLSNkZWZpbmUgX01NX1NFVF9FWENFUFRJT05fTUFTSyh4KSAoX21tX3NldGNzcigoX21tX2dldGNzcigpICYgfl9NTV9NQVNLX01BU0spIHwgKHgpKSkKLSNkZWZpbmUgX01NX1NFVF9FWENFUFRJT05fU1RBVEUoeCkgKF9tbV9zZXRjc3IoKF9tbV9nZXRjc3IoKSAmIH5fTU1fRVhDRVBUX01BU0spIHwgKHgpKSkKLSNkZWZpbmUgX01NX1NFVF9GTFVTSF9aRVJPX01PREUoeCkgKF9tbV9zZXRjc3IoKF9tbV9nZXRjc3IoKSAmIH5fTU1fRkxVU0hfWkVST19NQVNLKSB8ICh4KSkpCi0jZGVmaW5lIF9NTV9TRVRfUk9VTkRJTkdfTU9ERSh4KSAoX21tX3NldGNzcigoX21tX2dldGNzcigpICYgfl9NTV9ST1VORF9NQVNLKSB8ICh4KSkpCi0KLSNkZWZpbmUgX01NX1RSQU5TUE9TRTRfUFMocm93MCwgcm93MSwgcm93Miwgcm93MykgXAotZG8geyBcCi0gIF9fbTEyOCB0bXAzLCB0bXAyLCB0bXAxLCB0bXAwOyBcCi0gIHRtcDAgPSBfbW1fdW5wYWNrbG9fcHMoKHJvdzApLCAocm93MSkpOyBcCi0gIHRtcDIgPSBfbW1fdW5wYWNrbG9fcHMoKHJvdzIpLCAocm93MykpOyBcCi0gIHRtcDEgPSBfbW1fdW5wYWNraGlfcHMoKHJvdzApLCAocm93MSkpOyBcCi0gIHRtcDMgPSBfbW1fdW5wYWNraGlfcHMoKHJvdzIpLCAocm93MykpOyBcCi0gIChyb3cwKSA9IF9tbV9tb3ZlbGhfcHModG1wMCwgdG1wMik7IFwKLSAgKHJvdzEpID0gX21tX21vdmVobF9wcyh0bXAyLCB0bXAwKTsgXAotICAocm93MikgPSBfbW1fbW92ZWxoX3BzKHRtcDEsIHRtcDMpOyBcCi0gIChyb3czKSA9IF9tbV9tb3ZlaGxfcHModG1wMywgdG1wMSk7IFwKLX0gd2hpbGUgKDApCi0KLS8qIEFsaWFzZXMgZm9yIGNvbXBhdGliaWxpdHkuICovCi0jZGVmaW5lIF9tX3BleHRydyBfbW1fZXh0cmFjdF9waTE2Ci0jZGVmaW5lIF9tX3BpbnNydyBfbW1faW5zZXJ0X3BpMTYKLSNkZWZpbmUgX21fcG1heHN3IF9tbV9tYXhfcGkxNgotI2RlZmluZSBfbV9wbWF4dWIgX21tX21heF9wdTgKLSNkZWZpbmUgX21fcG1pbnN3IF9tbV9taW5fcGkxNgotI2RlZmluZSBfbV9wbWludWIgX21tX21pbl9wdTgKLSNkZWZpbmUgX21fcG1vdm1za2IgX21tX21vdmVtYXNrX3BpOAotI2RlZmluZSBfbV9wbXVsaHV3IF9tbV9tdWxoaV9wdTE2Ci0jZGVmaW5lIF9tX3BzaHVmdyBfbW1fc2h1ZmZsZV9waTE2Ci0jZGVmaW5lIF9tX21hc2ttb3ZxIF9tbV9tYXNrbW92ZV9zaTY0Ci0jZGVmaW5lIF9tX3BhdmdiIF9tbV9hdmdfcHU4Ci0jZGVmaW5lIF9tX3Bhdmd3IF9tbV9hdmdfcHUxNgotI2RlZmluZSBfbV9wc2FkYncgX21tX3NhZF9wdTgKLSNkZWZpbmUgX21fIF9tbV8KLSNkZWZpbmUgX21fIF9tbV8KLQotI3VuZGVmIF9fREVGQVVMVF9GTl9BVFRSUwotCi0vKiBVZ2x5IGhhY2sgZm9yIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IChjb21wYXRpYmxlIHdpdGggZ2NjKSAqLwotI2lmIGRlZmluZWQoX19TU0UyX18pICYmICFfX2hhc19mZWF0dXJlKG1vZHVsZXMpCi0jaW5jbHVkZSA8ZW1taW50cmluLmg+Ci0jZW5kaWYKLQotI2VuZGlmIC8qIF9fWE1NSU5UUklOX0ggKi8KZGlmZiAtLWdpdCBhL2NsYW5nLTI1NzcxMTMvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUveG9waW50cmluLmggYi9jbGFuZy0yNTc3MTEzL2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL3hvcGludHJpbi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMDdmNTFjLi4wMDAwMDAwCi0tLSBhL2NsYW5nLTI1NzcxMTMvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUveG9waW50cmluLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3ODIgKzAsMCBAQAotLyo9PT0tLS0tIHhvcGludHJpbi5oIC0gWE9QIGludHJpbnNpY3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQotICoKLSAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKLSAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCi0gKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCi0gKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCi0gKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKLSAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Ci0gKgotICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KLSAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgotICoKLSAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCi0gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKLSAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgotICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKLSAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KLSAqIFRIRSBTT0ZUV0FSRS4KLSAqCi0gKj09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09Ci0gKi8KLQotI2lmbmRlZiBfX1g4NklOVFJJTl9ICi0jZXJyb3IgIk5ldmVyIHVzZSA8eG9waW50cmluLmg+IGRpcmVjdGx5OyBpbmNsdWRlIDx4ODZpbnRyaW4uaD4gaW5zdGVhZC4iCi0jZW5kaWYKLQotI2lmbmRlZiBfX1hPUElOVFJJTl9ICi0jZGVmaW5lIF9fWE9QSU5UUklOX0gKLQotI2luY2x1ZGUgPGZtYTRpbnRyaW4uaD4KLQotLyogRGVmaW5lIHRoZSBkZWZhdWx0IGF0dHJpYnV0ZXMgZm9yIHRoZSBmdW5jdGlvbnMgaW4gdGhpcyBmaWxlLiAqLwotI2RlZmluZSBfX0RFRkFVTFRfRk5fQVRUUlMgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fLCBfX3RhcmdldF9fKCJ4b3AiKSkpCi0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWFjY3NfZXBpMTYoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CLCBfX20xMjhpIF9fQykKLXsKLSAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3ZwbWFjc3N3dygoX192OGhpKV9fQSwgKF9fdjhoaSlfX0IsIChfX3Y4aGkpX19DKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tYWNjX2VwaTE2KF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQiwgX19tMTI4aSBfX0MpCi17Ci0gIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl92cG1hY3N3dygoX192OGhpKV9fQSwgKF9fdjhoaSlfX0IsIChfX3Y4aGkpX19DKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tYWNjc2RfZXBpMTYoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CLCBfX20xMjhpIF9fQykKLXsKLSAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3ZwbWFjc3N3ZCgoX192OGhpKV9fQSwgKF9fdjhoaSlfX0IsIChfX3Y0c2kpX19DKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tYWNjZF9lcGkxNihfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IsIF9fbTEyOGkgX19DKQotewotICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfdnBtYWNzd2QoKF9fdjhoaSlfX0EsIChfX3Y4aGkpX19CLCAoX192NHNpKV9fQyk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWFjY3NfZXBpMzIoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CLCBfX20xMjhpIF9fQykKLXsKLSAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3ZwbWFjc3NkZCgoX192NHNpKV9fQSwgKF9fdjRzaSlfX0IsIChfX3Y0c2kpX19DKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tYWNjX2VwaTMyKF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQiwgX19tMTI4aSBfX0MpCi17Ci0gIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl92cG1hY3NkZCgoX192NHNpKV9fQSwgKF9fdjRzaSlfX0IsIChfX3Y0c2kpX19DKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9tYWNjc2xvX2VwaTMyKF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQiwgX19tMTI4aSBfX0MpCi17Ci0gIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl92cG1hY3NzZHFsKChfX3Y0c2kpX19BLCAoX192NHNpKV9fQiwgKF9fdjJkaSlfX0MpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hY2Nsb19lcGkzMihfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IsIF9fbTEyOGkgX19DKQotewotICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfdnBtYWNzZHFsKChfX3Y0c2kpX19BLCAoX192NHNpKV9fQiwgKF9fdjJkaSlfX0MpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hY2NzaGlfZXBpMzIoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CLCBfX20xMjhpIF9fQykKLXsKLSAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3ZwbWFjc3NkcWgoKF9fdjRzaSlfX0EsIChfX3Y0c2kpX19CLCAoX192MmRpKV9fQyk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWFjY2hpX2VwaTMyKF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQiwgX19tMTI4aSBfX0MpCi17Ci0gIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl92cG1hY3NkcWgoKF9fdjRzaSlfX0EsIChfX3Y0c2kpX19CLCAoX192MmRpKV9fQyk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fbWFkZHNkX2VwaTE2KF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQiwgX19tMTI4aSBfX0MpCi17Ci0gIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl92cG1hZGNzc3dkKChfX3Y4aGkpX19BLCAoX192OGhpKV9fQiwgKF9fdjRzaSlfX0MpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX21hZGRkX2VwaTE2KF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQiwgX19tMTI4aSBfX0MpCi17Ci0gIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl92cG1hZGNzd2QoKF9fdjhoaSlfX0EsIChfX3Y4aGkpX19CLCAoX192NHNpKV9fQyk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1faGFkZHdfZXBpOChfX20xMjhpIF9fQSkKLXsKLSAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3ZwaGFkZGJ3KChfX3YxNnFpKV9fQSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1faGFkZGRfZXBpOChfX20xMjhpIF9fQSkKLXsKLSAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3ZwaGFkZGJkKChfX3YxNnFpKV9fQSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1faGFkZHFfZXBpOChfX20xMjhpIF9fQSkKLXsKLSAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3ZwaGFkZGJxKChfX3YxNnFpKV9fQSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1faGFkZGRfZXBpMTYoX19tMTI4aSBfX0EpCi17Ci0gIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl92cGhhZGR3ZCgoX192OGhpKV9fQSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1faGFkZHFfZXBpMTYoX19tMTI4aSBfX0EpCi17Ci0gIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl92cGhhZGR3cSgoX192OGhpKV9fQSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1faGFkZHFfZXBpMzIoX19tMTI4aSBfX0EpCi17Ci0gIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl92cGhhZGRkcSgoX192NHNpKV9fQSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1faGFkZHdfZXB1OChfX20xMjhpIF9fQSkKLXsKLSAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3ZwaGFkZHVidygoX192MTZxaSlfX0EpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2hhZGRkX2VwdTgoX19tMTI4aSBfX0EpCi17Ci0gIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl92cGhhZGR1YmQoKF9fdjE2cWkpX19BKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9oYWRkcV9lcHU4KF9fbTEyOGkgX19BKQotewotICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfdnBoYWRkdWJxKChfX3YxNnFpKV9fQSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1faGFkZGRfZXB1MTYoX19tMTI4aSBfX0EpCi17Ci0gIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl92cGhhZGR1d2QoKF9fdjhoaSlfX0EpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2hhZGRxX2VwdTE2KF9fbTEyOGkgX19BKQotewotICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfdnBoYWRkdXdxKChfX3Y4aGkpX19BKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9oYWRkcV9lcHUzMihfX20xMjhpIF9fQSkKLXsKLSAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3ZwaGFkZHVkcSgoX192NHNpKV9fQSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1faHN1YndfZXBpOChfX20xMjhpIF9fQSkKLXsKLSAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3ZwaHN1YmJ3KChfX3YxNnFpKV9fQSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1faHN1YmRfZXBpMTYoX19tMTI4aSBfX0EpCi17Ci0gIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl92cGhzdWJ3ZCgoX192OGhpKV9fQSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1faHN1YnFfZXBpMzIoX19tMTI4aSBfX0EpCi17Ci0gIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl92cGhzdWJkcSgoX192NHNpKV9fQSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fY21vdl9zaTEyOChfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IsIF9fbTEyOGkgX19DKQotewotICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfdnBjbW92KF9fQSwgX19CLCBfX0MpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X2Ntb3Zfc2kyNTYoX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CLCBfX20yNTZpIF9fQykKLXsKLSAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3ZwY21vdl8yNTYoX19BLCBfX0IsIF9fQyk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fcGVybV9lcGk4KF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQiwgX19tMTI4aSBfX0MpCi17Ci0gIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl92cHBlcm0oKF9fdjE2cWkpX19BLCAoX192MTZxaSlfX0IsIChfX3YxNnFpKV9fQyk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fcm90X2VwaTgoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQotewotICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfdnByb3RiKChfX3YxNnFpKV9fQSwgKF9fdjE2cWkpX19CKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9yb3RfZXBpMTYoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQotewotICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfdnByb3R3KChfX3Y4aGkpX19BLCAoX192OGhpKV9fQik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fcm90X2VwaTMyKF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKLXsKLSAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3Zwcm90ZCgoX192NHNpKV9fQSwgKF9fdjRzaSlfX0IpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX3JvdF9lcGk2NChfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCi17Ci0gIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl92cHJvdHEoKF9fdjJkaSlfX0EsIChfX3YyZGkpX19CKTsKLX0KLQotI2RlZmluZSBfbW1fcm90aV9lcGk4KEEsIE4pIF9fZXh0ZW5zaW9uX18gKHsgXAotICAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl92cHJvdGJpKChfX3YxNnFpKShfX20xMjhpKShBKSwgKE4pKTsgfSkKLQotI2RlZmluZSBfbW1fcm90aV9lcGkxNihBLCBOKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgKF9fbTEyOGkpX19idWlsdGluX2lhMzJfdnByb3R3aSgoX192OGhpKShfX20xMjhpKShBKSwgKE4pKTsgfSkKLQotI2RlZmluZSBfbW1fcm90aV9lcGkzMihBLCBOKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgKF9fbTEyOGkpX19idWlsdGluX2lhMzJfdnByb3RkaSgoX192NHNpKShfX20xMjhpKShBKSwgKE4pKTsgfSkKLQotI2RlZmluZSBfbW1fcm90aV9lcGk2NChBLCBOKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgKF9fbTEyOGkpX19idWlsdGluX2lhMzJfdnByb3RxaSgoX192MmRpKShfX20xMjhpKShBKSwgKE4pKTsgfSkKLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9zaGxfZXBpOChfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCi17Ci0gIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl92cHNobGIoKF9fdjE2cWkpX19BLCAoX192MTZxaSlfX0IpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX3NobF9lcGkxNihfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCi17Ci0gIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl92cHNobHcoKF9fdjhoaSlfX0EsIChfX3Y4aGkpX19CKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9zaGxfZXBpMzIoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQotewotICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfdnBzaGxkKChfX3Y0c2kpX19BLCAoX192NHNpKV9fQik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fc2hsX2VwaTY0KF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKLXsKLSAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3Zwc2hscSgoX192MmRpKV9fQSwgKF9fdjJkaSlfX0IpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX3NoYV9lcGk4KF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKLXsKLSAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3Zwc2hhYigoX192MTZxaSlfX0EsIChfX3YxNnFpKV9fQik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fc2hhX2VwaTE2KF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKLXsKLSAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3Zwc2hhdygoX192OGhpKV9fQSwgKF9fdjhoaSlfX0IpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX3NoYV9lcGkzMihfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCi17Ci0gIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl92cHNoYWQoKF9fdjRzaSlfX0EsIChfX3Y0c2kpX19CKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9zaGFfZXBpNjQoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQotewotICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfdnBzaGFxKChfX3YyZGkpX19BLCAoX192MmRpKV9fQik7Ci19Ci0KLSNkZWZpbmUgX21tX2NvbV9lcHU4KEEsIEIsIE4pIF9fZXh0ZW5zaW9uX18gKHsgXAotICAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl92cGNvbXViKChfX3YxNnFpKShfX20xMjhpKShBKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnFpKShfX20xMjhpKShCKSwgKE4pKTsgfSkKLQotI2RlZmluZSBfbW1fY29tX2VwdTE2KEEsIEIsIE4pIF9fZXh0ZW5zaW9uX18gKHsgXAotICAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl92cGNvbXV3KChfX3Y4aGkpKF9fbTEyOGkpKEEpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhoaSkoX19tMTI4aSkoQiksIChOKSk7IH0pCi0KLSNkZWZpbmUgX21tX2NvbV9lcHUzMihBLCBCLCBOKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgKF9fbTEyOGkpX19idWlsdGluX2lhMzJfdnBjb211ZCgoX192NHNpKShfX20xMjhpKShBKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2kpKF9fbTEyOGkpKEIpLCAoTikpOyB9KQotCi0jZGVmaW5lIF9tbV9jb21fZXB1NjQoQSwgQiwgTikgX19leHRlbnNpb25fXyAoeyBcCi0gIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3ZwY29tdXEoKF9fdjJkaSkoX19tMTI4aSkoQSksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRpKShfX20xMjhpKShCKSwgKE4pKTsgfSkKLQotI2RlZmluZSBfbW1fY29tX2VwaTgoQSwgQiwgTikgX19leHRlbnNpb25fXyAoeyBcCi0gIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3ZwY29tYigoX192MTZxaSkoX19tMTI4aSkoQSksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnFpKShfX20xMjhpKShCKSwgKE4pKTsgfSkKLQotI2RlZmluZSBfbW1fY29tX2VwaTE2KEEsIEIsIE4pIF9fZXh0ZW5zaW9uX18gKHsgXAotICAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl92cGNvbXcoKF9fdjhoaSkoX19tMTI4aSkoQSksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4aGkpKF9fbTEyOGkpKEIpLCAoTikpOyB9KQotCi0jZGVmaW5lIF9tbV9jb21fZXBpMzIoQSwgQiwgTikgX19leHRlbnNpb25fXyAoeyBcCi0gIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3ZwY29tZCgoX192NHNpKShfX20xMjhpKShBKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzaSkoX19tMTI4aSkoQiksIChOKSk7IH0pCi0KLSNkZWZpbmUgX21tX2NvbV9lcGk2NChBLCBCLCBOKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgKF9fbTEyOGkpX19idWlsdGluX2lhMzJfdnBjb21xKChfX3YyZGkpKF9fbTEyOGkpKEEpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRpKShfX20xMjhpKShCKSwgKE4pKTsgfSkKLQotI2RlZmluZSBfTU1fUENPTUNUUkxfTFQgICAgMAotI2RlZmluZSBfTU1fUENPTUNUUkxfTEUgICAgMQotI2RlZmluZSBfTU1fUENPTUNUUkxfR1QgICAgMgotI2RlZmluZSBfTU1fUENPTUNUUkxfR0UgICAgMwotI2RlZmluZSBfTU1fUENPTUNUUkxfRVEgICAgNAotI2RlZmluZSBfTU1fUENPTUNUUkxfTkVRICAgNQotI2RlZmluZSBfTU1fUENPTUNUUkxfRkFMU0UgNgotI2RlZmluZSBfTU1fUENPTUNUUkxfVFJVRSAgNwotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2NvbWx0X2VwdTgoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQotewotICByZXR1cm4gX21tX2NvbV9lcHU4KF9fQSwgX19CLCBfTU1fUENPTUNUUkxfTFQpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2NvbWxlX2VwdTgoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQotewotICByZXR1cm4gX21tX2NvbV9lcHU4KF9fQSwgX19CLCBfTU1fUENPTUNUUkxfTEUpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2NvbWd0X2VwdTgoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQotewotICByZXR1cm4gX21tX2NvbV9lcHU4KF9fQSwgX19CLCBfTU1fUENPTUNUUkxfR1QpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2NvbWdlX2VwdTgoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQotewotICByZXR1cm4gX21tX2NvbV9lcHU4KF9fQSwgX19CLCBfTU1fUENPTUNUUkxfR0UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2NvbWVxX2VwdTgoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQotewotICByZXR1cm4gX21tX2NvbV9lcHU4KF9fQSwgX19CLCBfTU1fUENPTUNUUkxfRVEpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2NvbW5lcV9lcHU4KF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKLXsKLSAgcmV0dXJuIF9tbV9jb21fZXB1OChfX0EsIF9fQiwgX01NX1BDT01DVFJMX05FUSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fY29tZmFsc2VfZXB1OChfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCi17Ci0gIHJldHVybiBfbW1fY29tX2VwdTgoX19BLCBfX0IsIF9NTV9QQ09NQ1RSTF9GQUxTRSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fY29tdHJ1ZV9lcHU4KF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKLXsKLSAgcmV0dXJuIF9tbV9jb21fZXB1OChfX0EsIF9fQiwgX01NX1BDT01DVFJMX1RSVUUpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2NvbWx0X2VwdTE2KF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKLXsKLSAgcmV0dXJuIF9tbV9jb21fZXB1MTYoX19BLCBfX0IsIF9NTV9QQ09NQ1RSTF9MVCk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fY29tbGVfZXB1MTYoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQotewotICByZXR1cm4gX21tX2NvbV9lcHUxNihfX0EsIF9fQiwgX01NX1BDT01DVFJMX0xFKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9jb21ndF9lcHUxNihfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCi17Ci0gIHJldHVybiBfbW1fY29tX2VwdTE2KF9fQSwgX19CLCBfTU1fUENPTUNUUkxfR1QpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2NvbWdlX2VwdTE2KF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKLXsKLSAgcmV0dXJuIF9tbV9jb21fZXB1MTYoX19BLCBfX0IsIF9NTV9QQ09NQ1RSTF9HRSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fY29tZXFfZXB1MTYoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQotewotICByZXR1cm4gX21tX2NvbV9lcHUxNihfX0EsIF9fQiwgX01NX1BDT01DVFJMX0VRKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9jb21uZXFfZXB1MTYoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQotewotICByZXR1cm4gX21tX2NvbV9lcHUxNihfX0EsIF9fQiwgX01NX1BDT01DVFJMX05FUSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fY29tZmFsc2VfZXB1MTYoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQotewotICByZXR1cm4gX21tX2NvbV9lcHUxNihfX0EsIF9fQiwgX01NX1BDT01DVFJMX0ZBTFNFKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9jb210cnVlX2VwdTE2KF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKLXsKLSAgcmV0dXJuIF9tbV9jb21fZXB1MTYoX19BLCBfX0IsIF9NTV9QQ09NQ1RSTF9UUlVFKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9jb21sdF9lcHUzMihfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCi17Ci0gIHJldHVybiBfbW1fY29tX2VwdTMyKF9fQSwgX19CLCBfTU1fUENPTUNUUkxfTFQpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2NvbWxlX2VwdTMyKF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKLXsKLSAgcmV0dXJuIF9tbV9jb21fZXB1MzIoX19BLCBfX0IsIF9NTV9QQ09NQ1RSTF9MRSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fY29tZ3RfZXB1MzIoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQotewotICByZXR1cm4gX21tX2NvbV9lcHUzMihfX0EsIF9fQiwgX01NX1BDT01DVFJMX0dUKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9jb21nZV9lcHUzMihfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCi17Ci0gIHJldHVybiBfbW1fY29tX2VwdTMyKF9fQSwgX19CLCBfTU1fUENPTUNUUkxfR0UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2NvbWVxX2VwdTMyKF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKLXsKLSAgcmV0dXJuIF9tbV9jb21fZXB1MzIoX19BLCBfX0IsIF9NTV9QQ09NQ1RSTF9FUSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fY29tbmVxX2VwdTMyKF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKLXsKLSAgcmV0dXJuIF9tbV9jb21fZXB1MzIoX19BLCBfX0IsIF9NTV9QQ09NQ1RSTF9ORVEpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2NvbWZhbHNlX2VwdTMyKF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKLXsKLSAgcmV0dXJuIF9tbV9jb21fZXB1MzIoX19BLCBfX0IsIF9NTV9QQ09NQ1RSTF9GQUxTRSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fY29tdHJ1ZV9lcHUzMihfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCi17Ci0gIHJldHVybiBfbW1fY29tX2VwdTMyKF9fQSwgX19CLCBfTU1fUENPTUNUUkxfVFJVRSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fY29tbHRfZXB1NjQoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQotewotICByZXR1cm4gX21tX2NvbV9lcHU2NChfX0EsIF9fQiwgX01NX1BDT01DVFJMX0xUKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9jb21sZV9lcHU2NChfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCi17Ci0gIHJldHVybiBfbW1fY29tX2VwdTY0KF9fQSwgX19CLCBfTU1fUENPTUNUUkxfTEUpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2NvbWd0X2VwdTY0KF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKLXsKLSAgcmV0dXJuIF9tbV9jb21fZXB1NjQoX19BLCBfX0IsIF9NTV9QQ09NQ1RSTF9HVCk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fY29tZ2VfZXB1NjQoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQotewotICByZXR1cm4gX21tX2NvbV9lcHU2NChfX0EsIF9fQiwgX01NX1BDT01DVFJMX0dFKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9jb21lcV9lcHU2NChfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCi17Ci0gIHJldHVybiBfbW1fY29tX2VwdTY0KF9fQSwgX19CLCBfTU1fUENPTUNUUkxfRVEpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2NvbW5lcV9lcHU2NChfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCi17Ci0gIHJldHVybiBfbW1fY29tX2VwdTY0KF9fQSwgX19CLCBfTU1fUENPTUNUUkxfTkVRKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9jb21mYWxzZV9lcHU2NChfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCi17Ci0gIHJldHVybiBfbW1fY29tX2VwdTY0KF9fQSwgX19CLCBfTU1fUENPTUNUUkxfRkFMU0UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2NvbXRydWVfZXB1NjQoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQotewotICByZXR1cm4gX21tX2NvbV9lcHU2NChfX0EsIF9fQiwgX01NX1BDT01DVFJMX1RSVUUpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2NvbWx0X2VwaTgoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQotewotICByZXR1cm4gX21tX2NvbV9lcGk4KF9fQSwgX19CLCBfTU1fUENPTUNUUkxfTFQpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2NvbWxlX2VwaTgoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQotewotICByZXR1cm4gX21tX2NvbV9lcGk4KF9fQSwgX19CLCBfTU1fUENPTUNUUkxfTEUpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2NvbWd0X2VwaTgoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQotewotICByZXR1cm4gX21tX2NvbV9lcGk4KF9fQSwgX19CLCBfTU1fUENPTUNUUkxfR1QpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2NvbWdlX2VwaTgoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQotewotICByZXR1cm4gX21tX2NvbV9lcGk4KF9fQSwgX19CLCBfTU1fUENPTUNUUkxfR0UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2NvbWVxX2VwaTgoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQotewotICByZXR1cm4gX21tX2NvbV9lcGk4KF9fQSwgX19CLCBfTU1fUENPTUNUUkxfRVEpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2NvbW5lcV9lcGk4KF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKLXsKLSAgcmV0dXJuIF9tbV9jb21fZXBpOChfX0EsIF9fQiwgX01NX1BDT01DVFJMX05FUSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fY29tZmFsc2VfZXBpOChfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCi17Ci0gIHJldHVybiBfbW1fY29tX2VwaTgoX19BLCBfX0IsIF9NTV9QQ09NQ1RSTF9GQUxTRSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fY29tdHJ1ZV9lcGk4KF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKLXsKLSAgcmV0dXJuIF9tbV9jb21fZXBpOChfX0EsIF9fQiwgX01NX1BDT01DVFJMX1RSVUUpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2NvbWx0X2VwaTE2KF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKLXsKLSAgcmV0dXJuIF9tbV9jb21fZXBpMTYoX19BLCBfX0IsIF9NTV9QQ09NQ1RSTF9MVCk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fY29tbGVfZXBpMTYoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQotewotICByZXR1cm4gX21tX2NvbV9lcGkxNihfX0EsIF9fQiwgX01NX1BDT01DVFJMX0xFKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9jb21ndF9lcGkxNihfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCi17Ci0gIHJldHVybiBfbW1fY29tX2VwaTE2KF9fQSwgX19CLCBfTU1fUENPTUNUUkxfR1QpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2NvbWdlX2VwaTE2KF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKLXsKLSAgcmV0dXJuIF9tbV9jb21fZXBpMTYoX19BLCBfX0IsIF9NTV9QQ09NQ1RSTF9HRSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fY29tZXFfZXBpMTYoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQotewotICByZXR1cm4gX21tX2NvbV9lcGkxNihfX0EsIF9fQiwgX01NX1BDT01DVFJMX0VRKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9jb21uZXFfZXBpMTYoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQotewotICByZXR1cm4gX21tX2NvbV9lcGkxNihfX0EsIF9fQiwgX01NX1BDT01DVFJMX05FUSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fY29tZmFsc2VfZXBpMTYoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQotewotICByZXR1cm4gX21tX2NvbV9lcGkxNihfX0EsIF9fQiwgX01NX1BDT01DVFJMX0ZBTFNFKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9jb210cnVlX2VwaTE2KF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKLXsKLSAgcmV0dXJuIF9tbV9jb21fZXBpMTYoX19BLCBfX0IsIF9NTV9QQ09NQ1RSTF9UUlVFKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9jb21sdF9lcGkzMihfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCi17Ci0gIHJldHVybiBfbW1fY29tX2VwaTMyKF9fQSwgX19CLCBfTU1fUENPTUNUUkxfTFQpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2NvbWxlX2VwaTMyKF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKLXsKLSAgcmV0dXJuIF9tbV9jb21fZXBpMzIoX19BLCBfX0IsIF9NTV9QQ09NQ1RSTF9MRSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fY29tZ3RfZXBpMzIoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQotewotICByZXR1cm4gX21tX2NvbV9lcGkzMihfX0EsIF9fQiwgX01NX1BDT01DVFJMX0dUKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9jb21nZV9lcGkzMihfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCi17Ci0gIHJldHVybiBfbW1fY29tX2VwaTMyKF9fQSwgX19CLCBfTU1fUENPTUNUUkxfR0UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2NvbWVxX2VwaTMyKF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKLXsKLSAgcmV0dXJuIF9tbV9jb21fZXBpMzIoX19BLCBfX0IsIF9NTV9QQ09NQ1RSTF9FUSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fY29tbmVxX2VwaTMyKF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKLXsKLSAgcmV0dXJuIF9tbV9jb21fZXBpMzIoX19BLCBfX0IsIF9NTV9QQ09NQ1RSTF9ORVEpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2NvbWZhbHNlX2VwaTMyKF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKLXsKLSAgcmV0dXJuIF9tbV9jb21fZXBpMzIoX19BLCBfX0IsIF9NTV9QQ09NQ1RSTF9GQUxTRSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fY29tdHJ1ZV9lcGkzMihfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCi17Ci0gIHJldHVybiBfbW1fY29tX2VwaTMyKF9fQSwgX19CLCBfTU1fUENPTUNUUkxfVFJVRSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fY29tbHRfZXBpNjQoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQotewotICByZXR1cm4gX21tX2NvbV9lcGk2NChfX0EsIF9fQiwgX01NX1BDT01DVFJMX0xUKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9jb21sZV9lcGk2NChfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCi17Ci0gIHJldHVybiBfbW1fY29tX2VwaTY0KF9fQSwgX19CLCBfTU1fUENPTUNUUkxfTEUpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2NvbWd0X2VwaTY0KF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKLXsKLSAgcmV0dXJuIF9tbV9jb21fZXBpNjQoX19BLCBfX0IsIF9NTV9QQ09NQ1RSTF9HVCk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fY29tZ2VfZXBpNjQoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQotewotICByZXR1cm4gX21tX2NvbV9lcGk2NChfX0EsIF9fQiwgX01NX1BDT01DVFJMX0dFKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9jb21lcV9lcGk2NChfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCi17Ci0gIHJldHVybiBfbW1fY29tX2VwaTY0KF9fQSwgX19CLCBfTU1fUENPTUNUUkxfRVEpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2NvbW5lcV9lcGk2NChfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCi17Ci0gIHJldHVybiBfbW1fY29tX2VwaTY0KF9fQSwgX19CLCBfTU1fUENPTUNUUkxfTkVRKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9jb21mYWxzZV9lcGk2NChfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCi17Ci0gIHJldHVybiBfbW1fY29tX2VwaTY0KF9fQSwgX19CLCBfTU1fUENPTUNUUkxfRkFMU0UpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2NvbXRydWVfZXBpNjQoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQotewotICByZXR1cm4gX21tX2NvbV9lcGk2NChfX0EsIF9fQiwgX01NX1BDT01DVFJMX1RSVUUpOwotfQotCi0jZGVmaW5lIF9tbV9wZXJtdXRlMl9wZChYLCBZLCBDLCBJKSBfX2V4dGVuc2lvbl9fICh7IFwKLSAgKF9fbTEyOGQpX19idWlsdGluX2lhMzJfdnBlcm1pbDJwZCgoX192MmRmKShfX20xMjhkKShYKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpKF9fbTEyOGQpKFkpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkaSkoX19tMTI4aSkoQyksIChJKSk7IH0pCi0KLSNkZWZpbmUgX21tMjU2X3Blcm11dGUyX3BkKFgsIFksIEMsIEkpIF9fZXh0ZW5zaW9uX18gKHsgXAotICAoX19tMjU2ZClfX2J1aWx0aW5faWEzMl92cGVybWlsMnBkMjU2KChfX3Y0ZGYpKF9fbTI1NmQpKFgpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkZikoX19tMjU2ZCkoWSksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRpKShfX20yNTZpKShDKSwgKEkpKTsgfSkKLQotI2RlZmluZSBfbW1fcGVybXV0ZTJfcHMoWCwgWSwgQywgSSkgX19leHRlbnNpb25fXyAoeyBcCi0gIChfX20xMjgpX19idWlsdGluX2lhMzJfdnBlcm1pbDJwcygoX192NHNmKShfX20xMjgpKFgpLCAoX192NHNmKShfX20xMjgpKFkpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNpKShfX20xMjhpKShDKSwgKEkpKTsgfSkKLQotI2RlZmluZSBfbW0yNTZfcGVybXV0ZTJfcHMoWCwgWSwgQywgSSkgX19leHRlbnNpb25fXyAoeyBcCi0gIChfX20yNTYpX19idWlsdGluX2lhMzJfdnBlcm1pbDJwczI1NigoX192OHNmKShfX20yNTYpKFgpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNmKShfX20yNTYpKFkpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNpKShfX20yNTZpKShDKSwgKEkpKTsgfSkKLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUwotX21tX2ZyY3pfc3MoX19tMTI4IF9fQSkKLXsKLSAgcmV0dXJuIChfX20xMjgpX19idWlsdGluX2lhMzJfdmZyY3pzcygoX192NHNmKV9fQSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fZnJjel9zZChfX20xMjhkIF9fQSkKLXsKLSAgcmV0dXJuIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX3ZmcmN6c2QoKF9fdjJkZilfX0EpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCi1fbW1fZnJjel9wcyhfX20xMjggX19BKQotewotICByZXR1cm4gKF9fbTEyOClfX2J1aWx0aW5faWEzMl92ZnJjenBzKChfX3Y0c2YpX19BKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbV9mcmN6X3BkKF9fbTEyOGQgX19BKQotewotICByZXR1cm4gKF9fbTEyOGQpX19idWlsdGluX2lhMzJfdmZyY3pwZCgoX192MmRmKV9fQSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKLV9tbTI1Nl9mcmN6X3BzKF9fbTI1NiBfX0EpCi17Ci0gIHJldHVybiAoX19tMjU2KV9fYnVpbHRpbl9pYTMyX3ZmcmN6cHMyNTYoKF9fdjhzZilfX0EpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUwotX21tMjU2X2ZyY3pfcGQoX19tMjU2ZCBfX0EpCi17Ci0gIHJldHVybiAoX19tMjU2ZClfX2J1aWx0aW5faWEzMl92ZnJjenBkMjU2KChfX3Y0ZGYpX19BKTsKLX0KLQotI3VuZGVmIF9fREVGQVVMVF9GTl9BVFRSUwotCi0jZW5kaWYgLyogX19YT1BJTlRSSU5fSCAqLwpkaWZmIC0tZ2l0IGEvY2xhbmctMjU3NzExMy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS94c2F2ZWNpbnRyaW4uaCBiL2NsYW5nLTI1NzcxMTMvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUveHNhdmVjaW50cmluLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU5ODQ3MGEuLjAwMDAwMDAKLS0tIGEvY2xhbmctMjU3NzExMy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS94c2F2ZWNpbnRyaW4uaAorKysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAKLS8qPT09LS0tLSB4c2F2ZWNpbnRyaW4uaCAtIFhTQVZFQyBpbnRyaW5zaWMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09Ci0gKgotICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQotICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKLSAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKLSAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKLSAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcwotICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKLSAqCi0gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgotICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCi0gKgotICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKLSAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAotICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCi0gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAotICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgotICogVEhFIFNPRlRXQVJFLgotICoKLSAqPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KLSAqLwotCi0jaWZuZGVmIF9fSU1NSU5UUklOX0gKLSNlcnJvciAiTmV2ZXIgdXNlIDx4c2F2ZWNpbnRyaW4uaD4gZGlyZWN0bHk7IGluY2x1ZGUgPGltbWludHJpbi5oPiBpbnN0ZWFkLiIKLSNlbmRpZgotCi0jaWZuZGVmIF9fWFNBVkVDSU5UUklOX0gKLSNkZWZpbmUgX19YU0FWRUNJTlRSSU5fSAotCi0vKiBEZWZpbmUgdGhlIGRlZmF1bHQgYXR0cmlidXRlcyBmb3IgdGhlIGZ1bmN0aW9ucyBpbiB0aGlzIGZpbGUuICovCi0jZGVmaW5lIF9fREVGQVVMVF9GTl9BVFRSUyBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18sICBfX3RhcmdldF9fKCJ4c2F2ZWMiKSkpCi0KLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCi1feHNhdmVjKHZvaWQgKl9fcCwgdW5zaWduZWQgbG9uZyBsb25nIF9fbSkgewotICBfX2J1aWx0aW5faWEzMl94c2F2ZWMoX19wLCBfX20pOwotfQotCi0jaWZkZWYgX194ODZfNjRfXwotc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV94c2F2ZWM2NCh2b2lkICpfX3AsIHVuc2lnbmVkIGxvbmcgbG9uZyBfX20pIHsKLSAgX19idWlsdGluX2lhMzJfeHNhdmVjNjQoX19wLCBfX20pOwotfQotI2VuZGlmCi0KLSN1bmRlZiBfX0RFRkFVTFRfRk5fQVRUUlMKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9jbGFuZy0yNTc3MTEzL2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL3hzYXZlaW50cmluLmggYi9jbGFuZy0yNTc3MTEzL2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL3hzYXZlaW50cmluLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEyZTZiMmUuLjAwMDAwMDAKLS0tIGEvY2xhbmctMjU3NzExMy9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS94c2F2ZWludHJpbi5oCisrKyAvZGV2L251bGwKQEAgLTEsNTggKzAsMCBAQAotLyo9PT0tLS0tIHhzYXZlaW50cmluLmggLSBYU0FWRSBpbnRyaW5zaWMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09Ci0gKgotICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQotICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKLSAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKLSAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKLSAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcwotICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKLSAqCi0gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgotICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCi0gKgotICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKLSAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAotICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCi0gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAotICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgotICogVEhFIFNPRlRXQVJFLgotICoKLSAqPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KLSAqLwotCi0jaWZuZGVmIF9fSU1NSU5UUklOX0gKLSNlcnJvciAiTmV2ZXIgdXNlIDx4c2F2ZWludHJpbi5oPiBkaXJlY3RseTsgaW5jbHVkZSA8aW1taW50cmluLmg+IGluc3RlYWQuIgotI2VuZGlmCi0KLSNpZm5kZWYgX19YU0FWRUlOVFJJTl9ICi0jZGVmaW5lIF9fWFNBVkVJTlRSSU5fSAotCi0vKiBEZWZpbmUgdGhlIGRlZmF1bHQgYXR0cmlidXRlcyBmb3IgdGhlIGZ1bmN0aW9ucyBpbiB0aGlzIGZpbGUuICovCi0jZGVmaW5lIF9fREVGQVVMVF9GTl9BVFRSUyBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18sICBfX3RhcmdldF9fKCJ4c2F2ZSIpKSkKLQotc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV94c2F2ZSh2b2lkICpfX3AsIHVuc2lnbmVkIGxvbmcgbG9uZyBfX20pIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3hzYXZlKF9fcCwgX19tKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV94cnN0b3Iodm9pZCAqX19wLCB1bnNpZ25lZCBsb25nIGxvbmcgX19tKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5faWEzMl94cnN0b3IoX19wLCBfX20pOwotfQotCi0jaWZkZWYgX194ODZfNjRfXwotc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV94c2F2ZTY0KHZvaWQgKl9fcCwgdW5zaWduZWQgbG9uZyBsb25nIF9fbSkgewotICByZXR1cm4gX19idWlsdGluX2lhMzJfeHNhdmU2NChfX3AsIF9fbSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCi1feHJzdG9yNjQodm9pZCAqX19wLCB1bnNpZ25lZCBsb25nIGxvbmcgX19tKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5faWEzMl94cnN0b3I2NChfX3AsIF9fbSk7Ci19Ci0jZW5kaWYKLQotI3VuZGVmIF9fREVGQVVMVF9GTl9BVFRSUwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2NsYW5nLTI1NzcxMTMvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUveHNhdmVvcHRpbnRyaW4uaCBiL2NsYW5nLTI1NzcxMTMvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUveHNhdmVvcHRpbnRyaW4uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDNmYWFlNy4uMDAwMDAwMAotLS0gYS9jbGFuZy0yNTc3MTEzL2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL3hzYXZlb3B0aW50cmluLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0OCArMCwwIEBACi0vKj09PS0tLS0geHNhdmVvcHRpbnRyaW4uaCAtIFhTQVZFT1BUIGludHJpbnNpYyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KLSAqCi0gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5Ci0gKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAotICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cwotICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAotICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCi0gKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgotICoKLSAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCi0gKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KLSAqCi0gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgotICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCi0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKLSAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCi0gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCi0gKiBUSEUgU09GVFdBUkUuCi0gKgotICo9PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQotICovCi0KLSNpZm5kZWYgX19JTU1JTlRSSU5fSAotI2Vycm9yICJOZXZlciB1c2UgPHhzYXZlb3B0aW50cmluLmg+IGRpcmVjdGx5OyBpbmNsdWRlIDxpbW1pbnRyaW4uaD4gaW5zdGVhZC4iCi0jZW5kaWYKLQotI2lmbmRlZiBfX1hTQVZFT1BUSU5UUklOX0gKLSNkZWZpbmUgX19YU0FWRU9QVElOVFJJTl9ICi0KLS8qIERlZmluZSB0aGUgZGVmYXVsdCBhdHRyaWJ1dGVzIGZvciB0aGUgZnVuY3Rpb25zIGluIHRoaXMgZmlsZS4gKi8KLSNkZWZpbmUgX19ERUZBVUxUX0ZOX0FUVFJTIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXywgIF9fdGFyZ2V0X18oInhzYXZlb3B0IikpKQotCi1zdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUwotX3hzYXZlb3B0KHZvaWQgKl9fcCwgdW5zaWduZWQgbG9uZyBsb25nIF9fbSkgewotICByZXR1cm4gX19idWlsdGluX2lhMzJfeHNhdmVvcHQoX19wLCBfX20pOwotfQotCi0jaWZkZWYgX194ODZfNjRfXwotc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV94c2F2ZW9wdDY0KHZvaWQgKl9fcCwgdW5zaWduZWQgbG9uZyBsb25nIF9fbSkgewotICByZXR1cm4gX19idWlsdGluX2lhMzJfeHNhdmVvcHQ2NChfX3AsIF9fbSk7Ci19Ci0jZW5kaWYKLQotI3VuZGVmIF9fREVGQVVMVF9GTl9BVFRSUwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2NsYW5nLTI1NzcxMTMvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUveHNhdmVzaW50cmluLmggYi9jbGFuZy0yNTc3MTEzL2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL3hzYXZlc2ludHJpbi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNWU1NDBhLi4wMDAwMDAwCi0tLSBhL2NsYW5nLTI1NzcxMTMvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUveHNhdmVzaW50cmluLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1OCArMCwwIEBACi0vKj09PS0tLS0geHNhdmVzaW50cmluLmggLSBYU0FWRVMgaW50cmluc2ljIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQotICoKLSAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKLSAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCi0gKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCi0gKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCi0gKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKLSAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Ci0gKgotICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KLSAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgotICoKLSAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCi0gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKLSAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgotICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKLSAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KLSAqIFRIRSBTT0ZUV0FSRS4KLSAqCi0gKj09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09Ci0gKi8KLQotI2lmbmRlZiBfX0lNTUlOVFJJTl9ICi0jZXJyb3IgIk5ldmVyIHVzZSA8eHNhdmVzaW50cmluLmg+IGRpcmVjdGx5OyBpbmNsdWRlIDxpbW1pbnRyaW4uaD4gaW5zdGVhZC4iCi0jZW5kaWYKLQotI2lmbmRlZiBfX1hTQVZFU0lOVFJJTl9ICi0jZGVmaW5lIF9fWFNBVkVTSU5UUklOX0gKLQotLyogRGVmaW5lIHRoZSBkZWZhdWx0IGF0dHJpYnV0ZXMgZm9yIHRoZSBmdW5jdGlvbnMgaW4gdGhpcyBmaWxlLiAqLwotI2RlZmluZSBfX0RFRkFVTFRfRk5fQVRUUlMgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fLCAgX190YXJnZXRfXygieHNhdmVzIikpKQotCi1zdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUwotX3hzYXZlcyh2b2lkICpfX3AsIHVuc2lnbmVkIGxvbmcgbG9uZyBfX20pIHsKLSAgX19idWlsdGluX2lhMzJfeHNhdmVzKF9fcCwgX19tKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKLV94cnN0b3JzKHZvaWQgKl9fcCwgdW5zaWduZWQgbG9uZyBsb25nIF9fbSkgewotICBfX2J1aWx0aW5faWEzMl94cnN0b3JzKF9fcCwgX19tKTsKLX0KLQotI2lmZGVmIF9feDg2XzY0X18KLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCi1feHJzdG9yczY0KHZvaWQgKl9fcCwgdW5zaWduZWQgbG9uZyBsb25nIF9fbSkgewotICBfX2J1aWx0aW5faWEzMl94cnN0b3JzNjQoX19wLCBfX20pOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUwotX3hzYXZlczY0KHZvaWQgKl9fcCwgdW5zaWduZWQgbG9uZyBsb25nIF9fbSkgewotICBfX2J1aWx0aW5faWEzMl94c2F2ZXM2NChfX3AsIF9fbSk7Ci19Ci0jZW5kaWYKLQotI3VuZGVmIF9fREVGQVVMVF9GTl9BVFRSUwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2NsYW5nLTI1NzcxMTMvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUveHRlc3RpbnRyaW4uaCBiL2NsYW5nLTI1NzcxMTMvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUveHRlc3RpbnRyaW4uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWQzMzc4Zi4uMDAwMDAwMAotLS0gYS9jbGFuZy0yNTc3MTEzL2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL3h0ZXN0aW50cmluLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi0vKj09PS0tLS0geHRlc3RpbnRyaW4uaCAtIFhURVNUIGludHJpbnNpYyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KLSAqCi0gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5Ci0gKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAotICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cwotICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAotICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCi0gKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgotICoKLSAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCi0gKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KLSAqCi0gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgotICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCi0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKLSAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCi0gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCi0gKiBUSEUgU09GVFdBUkUuCi0gKgotICo9PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQotICovCi0KLSNpZm5kZWYgX19JTU1JTlRSSU5fSAotI2Vycm9yICJOZXZlciB1c2UgPHh0ZXN0aW50cmluLmg+IGRpcmVjdGx5OyBpbmNsdWRlIDxpbW1pbnRyaW4uaD4gaW5zdGVhZC4iCi0jZW5kaWYKLQotI2lmbmRlZiBfX1hURVNUSU5UUklOX0gKLSNkZWZpbmUgX19YVEVTVElOVFJJTl9ICi0KLS8qIHh0ZXN0IHJldHVybnMgbm9uLXplcm8gaWYgdGhlIGluc3RydWN0aW9uIGlzIGV4ZWN1dGVkIHdpdGhpbiBhbiBSVE0gb3IgYWN0aXZlCi0gKiBITEUgcmVnaW9uLiAqLwotLyogRklYTUU6IFRoaXMgY2FuIGJlIGFuIGVpdGhlciBvciBmb3IgUlRNL0hMRS4gRGVhbCB3aXRoIHRoaXMgd2hlbiBITEUgaXMKLSAqIHN1cHBvcnRlZC4gKi8KLXN0YXRpYyBfX2lubGluZV9fIGludAotICAgIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXywgX190YXJnZXRfXygicnRtIikpKQotICAgIF94dGVzdCh2b2lkKSB7Ci0gIHJldHVybiBfX2J1aWx0aW5faWEzMl94dGVzdCgpOwotfQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2NsYW5nLTI1NzcxMTMvbGliNjQvY2xhbmcvMy44L2xpYi9saW51eC9saWJjbGFuZ19ydC5hc2FuLWFhcmNoNjQtYW5kcm9pZC5zbyBiL2NsYW5nLTI1NzcxMTMvbGliNjQvY2xhbmcvMy44L2xpYi9saW51eC9saWJjbGFuZ19ydC5hc2FuLWFhcmNoNjQtYW5kcm9pZC5zbwpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMTcwMzdjYy4uMDAwMDAwMAotLS0gYS9jbGFuZy0yNTc3MTEzL2xpYjY0L2NsYW5nLzMuOC9saWIvbGludXgvbGliY2xhbmdfcnQuYXNhbi1hYXJjaDY0LWFuZHJvaWQuc28KKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jbGFuZy0yNTc3MTEzL2xpYjY0L2NsYW5nLzMuOC9saWIvbGludXgvbGliY2xhbmdfcnQuYXNhbi1hcm0tYW5kcm9pZC5zbyBiL2NsYW5nLTI1NzcxMTMvbGliNjQvY2xhbmcvMy44L2xpYi9saW51eC9saWJjbGFuZ19ydC5hc2FuLWFybS1hbmRyb2lkLnNvCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCA2ZTVmNjEzLi4wMDAwMDAwCi0tLSBhL2NsYW5nLTI1NzcxMTMvbGliNjQvY2xhbmcvMy44L2xpYi9saW51eC9saWJjbGFuZ19ydC5hc2FuLWFybS1hbmRyb2lkLnNvCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY2xhbmctMjU3NzExMy9saWI2NC9jbGFuZy8zLjgvbGliL2xpbnV4L2xpYmNsYW5nX3J0LmFzYW4taTY4Ni1hbmRyb2lkLnNvIGIvY2xhbmctMjU3NzExMy9saWI2NC9jbGFuZy8zLjgvbGliL2xpbnV4L2xpYmNsYW5nX3J0LmFzYW4taTY4Ni1hbmRyb2lkLnNvCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCBlN2IyNzVmLi4wMDAwMDAwCi0tLSBhL2NsYW5nLTI1NzcxMTMvbGliNjQvY2xhbmcvMy44L2xpYi9saW51eC9saWJjbGFuZ19ydC5hc2FuLWk2ODYtYW5kcm9pZC5zbworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NsYW5nLTI1NzcxMTMvbGliNjQvY2xhbmcvMy44L2xpYi9saW51eC9saWJjbGFuZ19ydC5wcm9maWxlLWFhcmNoNjQtYW5kcm9pZC5hIGIvY2xhbmctMjU3NzExMy9saWI2NC9jbGFuZy8zLjgvbGliL2xpbnV4L2xpYmNsYW5nX3J0LnByb2ZpbGUtYWFyY2g2NC1hbmRyb2lkLmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU2MDNkMGQuLjAwMDAwMDAKLS0tIGEvY2xhbmctMjU3NzExMy9saWI2NC9jbGFuZy8zLjgvbGliL2xpbnV4L2xpYmNsYW5nX3J0LnByb2ZpbGUtYWFyY2g2NC1hbmRyb2lkLmEKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jbGFuZy0yNTc3MTEzL2xpYjY0L2NsYW5nLzMuOC9saWIvbGludXgvbGliY2xhbmdfcnQucHJvZmlsZS1hcm0tYW5kcm9pZC5hIGIvY2xhbmctMjU3NzExMy9saWI2NC9jbGFuZy8zLjgvbGliL2xpbnV4L2xpYmNsYW5nX3J0LnByb2ZpbGUtYXJtLWFuZHJvaWQuYQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjE1OGE1Ni4uMDAwMDAwMAotLS0gYS9jbGFuZy0yNTc3MTEzL2xpYjY0L2NsYW5nLzMuOC9saWIvbGludXgvbGliY2xhbmdfcnQucHJvZmlsZS1hcm0tYW5kcm9pZC5hCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY2xhbmctMjU3NzExMy9saWI2NC9jbGFuZy8zLjgvbGliL2xpbnV4L2xpYmNsYW5nX3J0LnByb2ZpbGUtaTY4Ni1hbmRyb2lkLmEgYi9jbGFuZy0yNTc3MTEzL2xpYjY0L2NsYW5nLzMuOC9saWIvbGludXgvbGliY2xhbmdfcnQucHJvZmlsZS1pNjg2LWFuZHJvaWQuYQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGVmMjRiNS4uMDAwMDAwMAotLS0gYS9jbGFuZy0yNTc3MTEzL2xpYjY0L2NsYW5nLzMuOC9saWIvbGludXgvbGliY2xhbmdfcnQucHJvZmlsZS1pNjg2LWFuZHJvaWQuYQorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NsYW5nLTI1NzcxMTMvbGliNjQvY2xhbmcvMy44L2xpYi9saW51eC9saWJjbGFuZ19ydC5wcm9maWxlLW1pcHM2NGVsLWFuZHJvaWQuYSBiL2NsYW5nLTI1NzcxMTMvbGliNjQvY2xhbmcvMy44L2xpYi9saW51eC9saWJjbGFuZ19ydC5wcm9maWxlLW1pcHM2NGVsLWFuZHJvaWQuYQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWJhNmI4Mi4uMDAwMDAwMAotLS0gYS9jbGFuZy0yNTc3MTEzL2xpYjY0L2NsYW5nLzMuOC9saWIvbGludXgvbGliY2xhbmdfcnQucHJvZmlsZS1taXBzNjRlbC1hbmRyb2lkLmEKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jbGFuZy0yNTc3MTEzL2xpYjY0L2NsYW5nLzMuOC9saWIvbGludXgvbGliY2xhbmdfcnQucHJvZmlsZS1taXBzZWwtYW5kcm9pZC5hIGIvY2xhbmctMjU3NzExMy9saWI2NC9jbGFuZy8zLjgvbGliL2xpbnV4L2xpYmNsYW5nX3J0LnByb2ZpbGUtbWlwc2VsLWFuZHJvaWQuYQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzRlZDRhOC4uMDAwMDAwMAotLS0gYS9jbGFuZy0yNTc3MTEzL2xpYjY0L2NsYW5nLzMuOC9saWIvbGludXgvbGliY2xhbmdfcnQucHJvZmlsZS1taXBzZWwtYW5kcm9pZC5hCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY2xhbmctMjU3NzExMy9saWI2NC9jbGFuZy8zLjgvbGliL2xpbnV4L2xpYmNsYW5nX3J0LnByb2ZpbGUteDg2XzY0LWFuZHJvaWQuYSBiL2NsYW5nLTI1NzcxMTMvbGliNjQvY2xhbmcvMy44L2xpYi9saW51eC9saWJjbGFuZ19ydC5wcm9maWxlLXg4Nl82NC1hbmRyb2lkLmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZlN2FmYmUuLjAwMDAwMDAKLS0tIGEvY2xhbmctMjU3NzExMy9saWI2NC9jbGFuZy8zLjgvbGliL2xpbnV4L2xpYmNsYW5nX3J0LnByb2ZpbGUteDg2XzY0LWFuZHJvaWQuYQorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NsYW5nLTI1NzcxMTMvcmVwby5wcm9wIGIvY2xhbmctMjU3NzExMy9yZXBvLnByb3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZiYWQ3ODUuLjAwMDAwMDAKLS0tIGEvY2xhbmctMjU3NzExMy9yZXBvLnByb3AKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi1wbGF0Zm9ybS9iaW9uaWMgMzc1OTE0NjJmYTc2NzkxYzIzNzJkNzg5YzM1MzJjN2NkMGNhN2E4NAotcGxhdGZvcm0vYnVpbGQgZTc4NmQyMTg1NGI5NmU2YmMwNGVjNGU2ZDNjNDc4YzM3MjMwYjIxYQotcGxhdGZvcm0vYnVpbGQva2F0aSAzZmQ5ZDg1NWRiYTlmMGY2NjBjOWY4YTlkYmI2MWYzN2RhZThkY2I3Ci1wbGF0Zm9ybS9leHRlcm5hbC9jbGFuZyBiNDc4YTAyNWRkMDk0MTI5MWMxNDgyOGU4M2FmOTAxOGFkZTE1NTg4Ci1wbGF0Zm9ybS9leHRlcm5hbC9jb21waWxlci1ydCBjNjY5NzM4MDIxMjFjZmZlM2IyMmUxNGNkNTk3Mjk3ZjA2YzY5YmFlCi1wbGF0Zm9ybS9leHRlcm5hbC9qZW1hbGxvYyBjNDNiNzBmMjJkMDY1MzMwNTUxM2UyNmY1NjE2MzgyYTg2YTQzMzY2Ci1wbGF0Zm9ybS9leHRlcm5hbC9saWJjeHggZmYxNjJmMDc5ZWFkMjk5NTk1NmY2Yzk1OTRmZTI0ZmM3NzJkZjhhOQotcGxhdGZvcm0vZXh0ZXJuYWwvbGliY3h4YWJpIGZiMTFjYjMxZWEyMTQzODZhNjgxZDJmMjhiMTI2YjMxMGFjNTM2NTcKLXBsYXRmb3JtL2V4dGVybmFsL2xpYnVud2luZCBlZDcyMWY1NzU4YzlhM2U5ZGI5MDQ3ZmViNzkwYjNhNTE0OTg5YzZjCi1wbGF0Zm9ybS9leHRlcm5hbC9saWJ1bndpbmRfbGx2bSBmMTcxZTcyNzlkN2ZhODk3N2JiZTI1ZTE5MDE5MzgwZWU0OTNlODg1Ci1wbGF0Zm9ybS9leHRlcm5hbC9sbHZtIDM4NDI2OTNjYWFjMmRmMWMwYjJmNmQyN2Y1ZmNhMjExYTMyMjhmZWUKLXBsYXRmb3JtL21hbmlmZXN0IDAzZjdiZWZmZmE2ZDllMzVhYWQ1MTgyYjBhM2VhNmI5Nzc2ZTQwMTkKLXBsYXRmb3JtL3ByZWJ1aWx0cy9jbGFuZy9ob3N0L2Rhcndpbi14ODYgZjU0ZTNkZDgxMmUxMTJkZmRiZTYxMTdkMDlkMzliZDQyOTA4M2E4OQotcGxhdGZvcm0vcHJlYnVpbHRzL2NsYW5nL2hvc3QvbGludXgteDg2IDQ2MTI4NDhmNmZlNDY0ZTk0ZjUzNDNiNTNhYjFkZjMwYmE2MTkyODgKLXBsYXRmb3JtL3ByZWJ1aWx0cy9jbGFuZy9ob3N0L3dpbmRvd3MteDg2IDQ4MzUzNzM2MjllOWNjYzFmY2I0ZGI4ZTIxYmRlNTJiYWVhOTY5NjYKLXBsYXRmb3JtL3ByZWJ1aWx0cy9nY2MvZGFyd2luLXg4Ni9hYXJjaDY0L2FhcmNoNjQtbGludXgtYW5kcm9pZC00LjkgOGU5NWQwZTFiYjVmYzg2MmY5YTcxZDA0ZWFjNTcwZTkxNTkwNzRlZAotcGxhdGZvcm0vcHJlYnVpbHRzL2djYy9kYXJ3aW4teDg2L2FybS9hcm0tZWFiaS00LjggNmQwOGNhOWY0NWZmNjg1NjQ4ZmQxM2M3NWJmNWNhYzRiMTFjMTliYgotcGxhdGZvcm0vcHJlYnVpbHRzL2djYy9kYXJ3aW4teDg2L2FybS9hcm0tbGludXgtYW5kcm9pZGVhYmktNC45IDM2Yjg1MWY4MzJkYzA0MDIxZGMzZTQ1YTE5ZGQ4MDA5MDcwMzBlYTAKLXBsYXRmb3JtL3ByZWJ1aWx0cy9nY2MvZGFyd2luLXg4Ni9ob3N0L2hlYWRlcnMgNGFjNGY3Y2M0MWNmM2M5ZTM2ZmMzZDZjZjM3ZmQxY2ZhOTU4N2E2OAotcGxhdGZvcm0vcHJlYnVpbHRzL2djYy9kYXJ3aW4teDg2L2hvc3QvaTY4Ni1hcHBsZS1kYXJ3aW4tNC4yLjEgZWM1YWE2NmFhYTQ5NjRjMjc1NjRkMGVjODRkYzFmMThhMmQ3MmI3ZQotcGxhdGZvcm0vcHJlYnVpbHRzL2djYy9kYXJ3aW4teDg2L21pcHMvbWlwczY0ZWwtbGludXgtYW5kcm9pZC00LjkgYjI2ZjMxNjEzMmNkZDg1NTM4YmJkMjMyODkwNDQzMzhlZDFkOGNlYwotcGxhdGZvcm0vcHJlYnVpbHRzL2djYy9kYXJ3aW4teDg2L3g4Ni94ODZfNjQtbGludXgtYW5kcm9pZC00LjkgNGM3ZTQyYmI5Yjk4OTMwMWVlNDcwZDJkNWI4YjQxMWZjZmJlZDJiNwotcGxhdGZvcm0vcHJlYnVpbHRzL2djYy9saW51eC14ODYvYWFyY2g2NC9hYXJjaDY0LWxpbnV4LWFuZHJvaWQtNC45IDIzNmE4NTM5YjQzZGVmN2FhZmFkMmZhNmUxMTg2OWE3MGE2ZDRhOWEKLXBsYXRmb3JtL3ByZWJ1aWx0cy9nY2MvbGludXgteDg2L2FybS9hcm0tZWFiaS00LjggMjZlOTNmNmFmNDdmN2JkM2E5YmViNWMxMDJhNWY0NWUxOWJmYTM4YQotcGxhdGZvcm0vcHJlYnVpbHRzL2djYy9saW51eC14ODYvYXJtL2FybS1saW51eC1hbmRyb2lkZWFiaS00LjkgMDM5MDI1MmI2YmNjNjIxNzk2NmFkZTMxZDA3ZjhiMTJmNmY3OGY4OQotcGxhdGZvcm0vcHJlYnVpbHRzL2djYy9saW51eC14ODYvaG9zdC94ODZfNjQtbGludXgtZ2xpYmMyLjExLTQuOCAxMjczNDMxYTE4OTcxNzg0MmYwMzM1NzNlYjhjNzc3ZTEzZGQ4OGI3Ci1wbGF0Zm9ybS9wcmVidWlsdHMvZ2NjL2xpbnV4LXg4Ni9ob3N0L3g4Nl82NC1saW51eC1nbGliYzIuMTUtNC44IDczY2E5OTE5NjcyM2Y4MTBkYWQ0MjM5MGQxNTQ2NTQzNTRmNTdjMTYKLXBsYXRmb3JtL3ByZWJ1aWx0cy9nY2MvbGludXgteDg2L2hvc3QveDg2XzY0LXc2NC1taW5ndzMyLTQuOCBjNzk1ZWVkNzQzYmM2Y2VlNGVhZDU0MDdjYzIzN2M0M2FiZjZmYTI2Ci1wbGF0Zm9ybS9wcmVidWlsdHMvZ2NjL2xpbnV4LXg4Ni9taXBzL21pcHM2NGVsLWxpbnV4LWFuZHJvaWQtNC45IDcyNjA4ZDllMDFmZWQ1ZTQwNDNjYzc2ZTIzZjA1MDRhODUzNzVlYzIKLXBsYXRmb3JtL3ByZWJ1aWx0cy9nY2MvbGludXgteDg2L3g4Ni94ODZfNjQtbGludXgtYW5kcm9pZC00LjkgNTRjNGVkNGIxYTkxMGJjYzhlMzcxOTZhY2I3ZmE4NWU4NzJkZTllNAotcGxhdGZvcm0vcHJlYnVpbHRzL25kayBlOTlhYzQ4YmE0ZWQ1ZmZiYzhjZDIwYzdhMzIwYzJiYWEwMmYxY2Q3Ci1wbGF0Zm9ybS9wcmVidWlsdHMvbmluamEvZGFyd2luLXg4NiAxMWMzYTU0NDFlODIzNTM5MTliOTgzODI0ZDJkNjQwMjU1MWRjOTJjCi1wbGF0Zm9ybS9wcmVidWlsdHMvbmluamEvbGludXgteDg2IGIxNDdkNmYzMjM2Y2E4YzRiMGQzNzcxNTE5NWUzOGYwMTliNmEzN2MKLXBsYXRmb3JtL3N5c3RlbS9jb3JlIDY1MGY2ODA5YTM5ZDgxMTZmOGYxM2Y1MjdjNjUzNzJiODAwNzBmNWUKLXRvb2xjaGFpbi9iaW51dGlscyA2NTc5ZTMxYTg3NTdhMWRmNTBjYTQwOGRkMWIzY2QzZmU1OWJiNGI2CmRpZmYgLS1naXQgYS9jbGFuZy0yNTc3MTEzL3Rvb2xzL3NjYW4tYnVpbGQvQ01ha2VMaXN0cy50eHQgYi9jbGFuZy0yNTc3MTEzL3Rvb2xzL3NjYW4tYnVpbGQvQ01ha2VMaXN0cy50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc4YzI0M2QuLjAwMDAwMDAKLS0tIGEvY2xhbmctMjU3NzExMy90b29scy9zY2FuLWJ1aWxkL0NNYWtlTGlzdHMudHh0CisrKyAvZGV2L251bGwKQEAgLTEsODIgKzAsMCBAQAotb3B0aW9uKENMQU5HX0lOU1RBTExfU0NBTkJVSUxEICJJbnN0YWxsIHRoZSBzY2FuLWJ1aWxkIHRvb2wiIE9OKQotCi1pbmNsdWRlKEdOVUluc3RhbGxEaXJzKQotCi1pZiAoV0lOMzIgQU5EIE5PVCBDWUdXSU4pCi0gIHNldChCaW5GaWxlcwotICAgICAgICBzY2FuLWJ1aWxkLmJhdCkKLSAgc2V0KExpYmV4ZWNGaWxlcwotICAgICAgICBjY2MtYW5hbHl6ZXIuYmF0Ci0gICAgICAgIGMrKy1hbmFseXplci5iYXQpCi1lbHNlKCkKLSAgc2V0KEJpbkZpbGVzCi0gICAgICAgIHNjYW4tYnVpbGQpCi0gIHNldChMaWJleGVjRmlsZXMKLSAgICAgICAgY2NjLWFuYWx5emVyCi0gICAgICAgIGMrKy1hbmFseXplcikKLSAgaWYgKEFQUExFKQotICAgIGxpc3QoQVBQRU5EIEJpbkZpbGVzCi0gICAgICAgICAgIHNldC14Y29kZS1hbmFseXplcikKLSAgZW5kaWYoKQotZW5kaWYoKQotCi1zZXQoTWFuUGFnZXMKLSAgICAgIHNjYW4tYnVpbGQuMSkKLQotc2V0KFNoYXJlRmlsZXMKLSAgICAgIHNjYW52aWV3LmNzcwotICAgICAgc29ydHRhYmxlLmpzKQotCi0KLWlmKENMQU5HX0lOU1RBTExfU0NBTkJVSUxEKQotICBmb3JlYWNoKEJpbkZpbGUgJHtCaW5GaWxlc30pCi0gICAgYWRkX2N1c3RvbV9jb21tYW5kKE9VVFBVVCAke0NNQUtFX0JJTkFSWV9ESVJ9L2Jpbi8ke0JpbkZpbGV9Ci0gICAgICAgICAgICAgICAgICAgICAgIENPTU1BTkQgJHtDTUFLRV9DT01NQU5EfSAtRSBtYWtlX2RpcmVjdG9yeQotICAgICAgICAgICAgICAgICAgICAgICAgICR7Q01BS0VfQklOQVJZX0RJUn0vYmluCi0gICAgICAgICAgICAgICAgICAgICAgIENPTU1BTkQgJHtDTUFLRV9DT01NQU5EfSAtRSBjb3B5Ci0gICAgICAgICAgICAgICAgICAgICAgICAgJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L2Jpbi8ke0JpbkZpbGV9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgJHtDTUFLRV9CSU5BUllfRElSfS9iaW4vCi0gICAgICAgICAgICAgICAgICAgICAgIERFUEVORFMgJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L2Jpbi8ke0JpbkZpbGV9KQotICAgIGxpc3QoQVBQRU5EIERlcGVuZHMgJHtDTUFLRV9CSU5BUllfRElSfS9iaW4vJHtCaW5GaWxlfSkKLSAgICBpbnN0YWxsKFBST0dSQU1TIGJpbi8ke0JpbkZpbGV9IERFU1RJTkFUSU9OIGJpbikKLSAgZW5kZm9yZWFjaCgpCi0KLSAgZm9yZWFjaChMaWJleGVjRmlsZSAke0xpYmV4ZWNGaWxlc30pCi0gICAgYWRkX2N1c3RvbV9jb21tYW5kKE9VVFBVVCAke0NNQUtFX0JJTkFSWV9ESVJ9L2xpYmV4ZWMvJHtMaWJleGVjRmlsZX0KLSAgICAgICAgICAgICAgICAgICAgICAgQ09NTUFORCAke0NNQUtFX0NPTU1BTkR9IC1FIG1ha2VfZGlyZWN0b3J5Ci0gICAgICAgICAgICAgICAgICAgICAgICAgJHtDTUFLRV9CSU5BUllfRElSfS9saWJleGVjCi0gICAgICAgICAgICAgICAgICAgICAgIENPTU1BTkQgJHtDTUFLRV9DT01NQU5EfSAtRSBjb3B5Ci0gICAgICAgICAgICAgICAgICAgICAgICAgJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L2xpYmV4ZWMvJHtMaWJleGVjRmlsZX0KLSAgICAgICAgICAgICAgICAgICAgICAgICAke0NNQUtFX0JJTkFSWV9ESVJ9L2xpYmV4ZWMvCi0gICAgICAgICAgICAgICAgICAgICAgIERFUEVORFMgJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L2xpYmV4ZWMvJHtMaWJleGVjRmlsZX0pCi0gICAgbGlzdChBUFBFTkQgRGVwZW5kcyAke0NNQUtFX0JJTkFSWV9ESVJ9L2xpYmV4ZWMvJHtMaWJleGVjRmlsZX0pCi0gICAgaW5zdGFsbChQUk9HUkFNUyBsaWJleGVjLyR7TGliZXhlY0ZpbGV9IERFU1RJTkFUSU9OIGxpYmV4ZWMpCi0gIGVuZGZvcmVhY2goKQotCi0gIGZvcmVhY2goTWFuUGFnZSAke01hblBhZ2VzfSkKLSAgICBhZGRfY3VzdG9tX2NvbW1hbmQoT1VUUFVUICR7Q01BS0VfQklOQVJZX0RJUn0vJHtDTUFLRV9JTlNUQUxMX01BTkRJUn0vbWFuMS8ke01hblBhZ2V9Ci0gICAgICAgICAgICAgICAgICAgICAgIENPTU1BTkQgJHtDTUFLRV9DT01NQU5EfSAtRSBtYWtlX2RpcmVjdG9yeQotICAgICAgICAgICAgICAgICAgICAgICAgICR7Q01BS0VfQklOQVJZX0RJUn0vJHtDTUFLRV9JTlNUQUxMX01BTkRJUn0vbWFuMQotICAgICAgICAgICAgICAgICAgICAgICBDT01NQU5EICR7Q01BS0VfQ09NTUFORH0gLUUgY29weQotICAgICAgICAgICAgICAgICAgICAgICAgICR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9tYW4vJHtNYW5QYWdlfQotICAgICAgICAgICAgICAgICAgICAgICAgICR7Q01BS0VfQklOQVJZX0RJUn0vJHtDTUFLRV9JTlNUQUxMX01BTkRJUn0vbWFuMS8KLSAgICAgICAgICAgICAgICAgICAgICAgREVQRU5EUyAke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vbWFuLyR7TWFuUGFnZX0pCi0gICAgbGlzdChBUFBFTkQgRGVwZW5kcyAke0NNQUtFX0JJTkFSWV9ESVJ9LyR7Q01BS0VfSU5TVEFMTF9NQU5ESVJ9L21hbjEvJHtNYW5QYWdlfSkKLSAgICBpbnN0YWxsKFBST0dSQU1TIG1hbi8ke01hblBhZ2V9IERFU1RJTkFUSU9OICR7Q01BS0VfSU5TVEFMTF9NQU5ESVJ9L21hbjEpCi0gIGVuZGZvcmVhY2goKQotCi0gIGZvcmVhY2goU2hhcmVGaWxlICR7U2hhcmVGaWxlc30pCi0gICAgYWRkX2N1c3RvbV9jb21tYW5kKE9VVFBVVCAke0NNQUtFX0JJTkFSWV9ESVJ9L3NoYXJlL3NjYW4tYnVpbGQvJHtTaGFyZUZpbGV9Ci0gICAgICAgICAgICAgICAgICAgICAgIENPTU1BTkQgJHtDTUFLRV9DT01NQU5EfSAtRSBtYWtlX2RpcmVjdG9yeQotICAgICAgICAgICAgICAgICAgICAgICAgICR7Q01BS0VfQklOQVJZX0RJUn0vc2hhcmUvc2Nhbi1idWlsZAotICAgICAgICAgICAgICAgICAgICAgICBDT01NQU5EICR7Q01BS0VfQ09NTUFORH0gLUUgY29weQotICAgICAgICAgICAgICAgICAgICAgICAgICR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9zaGFyZS9zY2FuLWJ1aWxkLyR7U2hhcmVGaWxlfQotICAgICAgICAgICAgICAgICAgICAgICAgICR7Q01BS0VfQklOQVJZX0RJUn0vc2hhcmUvc2Nhbi1idWlsZC8KLSAgICAgICAgICAgICAgICAgICAgICAgREVQRU5EUyAke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vc2hhcmUvc2Nhbi1idWlsZC8ke1NoYXJlRmlsZX0pCi0gICAgbGlzdChBUFBFTkQgRGVwZW5kcyAke0NNQUtFX0JJTkFSWV9ESVJ9L3NoYXJlL3NjYW4tYnVpbGQvJHtTaGFyZUZpbGV9KQotICAgIGluc3RhbGwoRklMRVMgc2hhcmUvc2Nhbi1idWlsZC8ke1NoYXJlRmlsZX0gREVTVElOQVRJT04gc2hhcmUvc2Nhbi1idWlsZCkKLSAgZW5kZm9yZWFjaCgpCi0KLSAgYWRkX2N1c3RvbV90YXJnZXQoc2Nhbi1idWlsZCBBTEwgREVQRU5EUyAke0RlcGVuZHN9KQotICBzZXRfdGFyZ2V0X3Byb3BlcnRpZXMoc2Nhbi1idWlsZCBQUk9QRVJUSUVTIEZPTERFUiAiTWlzYyIpCi1lbmRpZigpCmRpZmYgLS1naXQgYS9jbGFuZy0yNTc3MTEzL3Rvb2xzL3NjYW4tYnVpbGQvTWFrZWZpbGUgYi9jbGFuZy0yNTc3MTEzL3Rvb2xzL3NjYW4tYnVpbGQvTWFrZWZpbGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzYWExOTguLjAwMDAwMDAKLS0tIGEvY2xhbmctMjU3NzExMy90b29scy9zY2FuLWJ1aWxkL01ha2VmaWxlCisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBAQAotIyM9PT0tIHRvb2xzL3NjYW4tYnVpbGQvTWFrZWZpbGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi0gTWFrZWZpbGUgLSotPT09IyMKLSMgCi0jICAgICAgICAgICAgICAgICAgICAgVGhlIExMVk0gQ29tcGlsZXIgSW5mcmFzdHJ1Y3R1cmUKLSMKLSMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBVbml2ZXJzaXR5IG9mIElsbGlub2lzIE9wZW4gU291cmNlCi0jIExpY2Vuc2UuIFNlZSBMSUNFTlNFLlRYVCBmb3IgZGV0YWlscy4KLSMgCi0jIz09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0jIwotCi1DTEFOR19MRVZFTCA6PSAuLi8uLgotCi1pbmNsdWRlICQoQ0xBTkdfTEVWRUwpLy4uLy4uL01ha2VmaWxlLmNvbmZpZwotaW5jbHVkZSAkKENMQU5HX0xFVkVMKS9NYWtlZmlsZQotCi1pZmVxICgkKEhPU1RfT1MpLE1pbmdXKQotICBTdWZmaXggOj0gLmJhdAotZW5kaWYKLQotQ0xBTkdfSU5TVEFMTF9TQ0FOQlVJTEQgPz0gMQotCi1pZmVxICgkKENMQU5HX0lOU1RBTExfU0NBTkJVSUxEKSwgMSkKLSAgSW5zdGFsbFRhcmdldHMgOj0gJChUb29sRGlyKS9zY2FuLWJ1aWxkJChTdWZmaXgpIFwKLSAgICAgICAgICAgICAgICAgICAgJChMaWJleGVjRGlyKS9jKystYW5hbHl6ZXIkKFN1ZmZpeCkgXAotICAgICAgICAgICAgICAgICAgICAkKExpYmV4ZWNEaXIpL2NjYy1hbmFseXplciQoU3VmZml4KSBcCi0gICAgICAgICAgICAgICAgICAgICQoU2hhcmVEaXIpL3NjYW4tYnVpbGQvc2NhbnZpZXcuY3NzIFwKLSAgICAgICAgICAgICAgICAgICAgJChTaGFyZURpcikvc2Nhbi1idWlsZC9zb3J0dGFibGUuanMgXAotICAgICAgICAgICAgICAgICAgICAkKFNoYXJlRGlyKS9tYW4vbWFuMS9zY2FuLWJ1aWxkLjEKLQotICBpZmVxICgkKEhPU1RfT1MpLERhcndpbikKLSAgICBJbnN0YWxsVGFyZ2V0cyA6PSAkKEluc3RhbGxUYXJnZXRzKSAkKFRvb2xEaXIpL3NldC14Y29kZS1hbmFseXplcgotICBlbmRpZgotZW5kaWYKLQotYWxsOjogJChJbnN0YWxsVGFyZ2V0cykKLQotJChUb29sRGlyKS8lOiBiaW4vJSBNYWtlZmlsZSAkKFRvb2xEaXIpLy5kaXIKLQkkKEVjaG8pICJDb3B5aW5nICQobm90ZGlyICQ8KSB0byB0aGUgJ2JpbicgZGlyZWN0b3J5Li4uIgotCSQoVmVyYiljcCAkPCAkQAotCSQoVmVyYiljaG1vZCAreCAkQAotCi0kKExpYmV4ZWNEaXIpLyU6IGxpYmV4ZWMvJSBNYWtlZmlsZSAkKExpYmV4ZWNEaXIpLy5kaXIKLQkkKEVjaG8pICJDb3B5aW5nICQobm90ZGlyICQ8KSB0byB0aGUgJ2xpYmV4ZWMnIGRpcmVjdG9yeS4uLiIKLQkkKFZlcmIpY3AgJDwgJEAKLQkkKFZlcmIpY2htb2QgK3ggJEAKLQotJChTaGFyZURpcikvbWFuL21hbjEvJTogbWFuLyUgTWFrZWZpbGUgJChTaGFyZURpcikvbWFuL21hbjEvLmRpcgotCSQoRWNobykgIkNvcHlpbmcgJChub3RkaXIgJDwpIHRvIHRoZSAnbWFuJyBkaXJlY3RvcnkuLi4iCi0JJChWZXJiKWNwICQ8ICRACi0KLSQoU2hhcmVEaXIpL3NjYW4tYnVpbGQvJTogc2hhcmUvc2Nhbi1idWlsZC8lIE1ha2VmaWxlICQoU2hhcmVEaXIpL3NjYW4tYnVpbGQvLmRpcgotCSQoRWNobykgIkNvcHlpbmcgJChub3RkaXIgJDwpIHRvIHRoZSAnc2hhcmUnIGRpcmVjdG9yeS4uLiIKLQkkKFZlcmIpY3AgJDwgJEAKLQpkaWZmIC0tZ2l0IGEvY2xhbmctMjU3NzExMy90b29scy9zY2FuLWJ1aWxkL2Jpbi9zY2FuLWJ1aWxkIGIvY2xhbmctMjU3NzExMy90b29scy9zY2FuLWJ1aWxkL2Jpbi9zY2FuLWJ1aWxkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCA2YTE0NDg0Li4wMDAwMDAwCi0tLSBhL2NsYW5nLTI1NzcxMTMvdG9vbHMvc2Nhbi1idWlsZC9iaW4vc2Nhbi1idWlsZAorKysgL2Rldi9udWxsCkBAIC0xLDE4MzIgKzAsMCBAQAotIyEvdXNyL2Jpbi9lbnYgcGVybAotIwotIyAgICAgICAgICAgICAgICAgICAgIFRoZSBMTFZNIENvbXBpbGVyIEluZnJhc3RydWN0dXJlCi0jCi0jIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgVW5pdmVyc2l0eSBvZiBJbGxpbm9pcyBPcGVuIFNvdXJjZQotIyBMaWNlbnNlLiBTZWUgTElDRU5TRS5UWFQgZm9yIGRldGFpbHMuCi0jCi0jIz09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0jIwotIwotIyBBIHNjcmlwdCBkZXNpZ25lZCB0byB3cmFwIGEgYnVpbGQgc28gdGhhdCBhbGwgY2FsbHMgdG8gZ2NjIGFyZSBpbnRlcmNlcHRlZAotIyBhbmQgcGlwZWQgdG8gdGhlIHN0YXRpYyBhbmFseXplci4KLSMKLSMjPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PSMjCi0KLXVzZSBzdHJpY3Q7Ci11c2Ugd2FybmluZ3M7Ci11c2UgRmluZEJpbiBxdygkUmVhbEJpbik7Ci11c2UgRGlnZXN0OjpNRDU7Ci11c2UgRmlsZTo6QmFzZW5hbWU7Ci11c2UgRmlsZTo6RmluZDsKLXVzZSBGaWxlOjpDb3B5IHF3KGNvcHkpOwotdXNlIEZpbGU6OlBhdGggcXcoIHJtdHJlZSBta3BhdGggKTsKLXVzZSBUZXJtOjpBTlNJQ29sb3I7Ci11c2UgVGVybTo6QU5TSUNvbG9yIHF3KDpjb25zdGFudHMpOwotdXNlIEN3ZCBxdy8gZ2V0Y3dkIGFic19wYXRoIC87Ci11c2UgU3lzOjpIb3N0bmFtZTsKLXVzZSBIYXNoOjpVdGlsIHF3KGxvY2tfa2V5cyk7Ci0KLW15ICRQcm9nID0gInNjYW4tYnVpbGQiOwotbXkgJEJ1aWxkTmFtZTsKLW15ICRCdWlsZERhdGU7Ci0KLW15ICRURVJNID0gJEVOVnsnVEVSTSd9OwotbXkgJFVzZUNvbG9yID0gKGRlZmluZWQgJFRFUk0gYW5kICRURVJNID1+ICd4dGVybS0uKmNvbG9yJyBhbmQgLXQgU1RET1VUCi0gICAgICAgICAgICAgICAgYW5kIGRlZmluZWQgJEVOVnsnU0NBTl9CVUlMRF9DT0xPUid9KTsKLQotIyBQb3J0YWJpbGl0eTogZ2V0cHd1aWQgaXMgbm90IGltcGxlbWVudGVkIGZvciBXaW4zMiAoc2VlIFBlcmwgbGFuZ3VhZ2UKLSMgcmVmZXJlbmNlLCBwZXJscG9ydCksIHVzZSBnZXRsb2dpbiBpbnN0ZWFkLgotbXkgJFVzZXJOYW1lID0gSHRtbEVzY2FwZShnZXRsb2dpbigpIHx8IGdldHB3dWlkKCQ8KSB8fCAndW5rbm93bicpOwotbXkgJEhvc3ROYW1lID0gSHRtbEVzY2FwZShob3N0bmFtZSgpIHx8ICd1bmtub3duJyk7Ci1teSAkQ3VycmVudERpciA9IEh0bWxFc2NhcGUoZ2V0Y3dkKCkpOwotCi1teSAkQ21kQXJnczsKLQotbXkgJERhdGUgPSBsb2NhbHRpbWUoKTsKLQotIyBDb21tYW5kLWxpbmUvY29uZmlnIGFyZ3VtZW50cy4KLW15ICVPcHRpb25zID0gKAotICBWZXJib3NlID0+IDAsICAgICAgICAgICAgICAjIFZlcmJvc2Ugb3V0cHV0IGZyb20gdGhpcyBzY3JpcHQuCi0gIEFuYWx5emVIZWFkZXJzID0+IDAsCi0gIE91dHB1dERpciA9PiB1bmRlZiwgICAgICAgICMgUGFyZW50IGRpcmVjdG9yeSB0byBzdG9yZSBIVE1MIGZpbGVzLgotICBIdG1sVGl0bGUgPT4gYmFzZW5hbWUoJEN1cnJlbnREaXIpLiIgLSBzY2FuLWJ1aWxkIHJlc3VsdHMiLAotICBJZ25vcmVFcnJvcnMgPT4gMCwgICAgICAgICAjIElnbm9yZSBidWlsZCBlcnJvcnMuCi0gIFZpZXdSZXN1bHRzID0+IDAsICAgICAgICAgICMgVmlldyByZXN1bHRzIHdoZW4gdGhlIGJ1aWxkIHRlcm1pbmF0ZXMuCi0gIEV4aXRTdGF0dXNGb3VuZEJ1Z3MgPT4gMCwgICMgRXhpdCBzdGF0dXMgcmVmbGVjdHMgd2hldGhlciBidWdzIHdlcmUgZm91bmQKLSAgS2VlcEVtcHR5ID0+IDAsICAgICAgICAgICAgIyBEb24ndCByZW1vdmUgb3V0cHV0IGRpcmVjdG9yeSBldmVuIHdpdGggMCByZXN1bHRzLgotICBFbmFibGVDaGVja2VycyA9PiB7fSwKLSAgRGlzYWJsZUNoZWNrZXJzID0+IHt9LAotICBVc2VDQyA9PiB1bmRlZiwgICAgICAgICAgICAjIEMgY29tcGlsZXIgdG8gdXNlIGZvciBjb21waWxhdGlvbi4KLSAgVXNlQ1hYID0+IHVuZGVmLCAgICAgICAgICAgIyBDKysgY29tcGlsZXIgdG8gdXNlIGZvciBjb21waWxhdGlvbi4KLSAgQW5hbHl6ZXJUYXJnZXQgPT4gdW5kZWYsCi0gIFN0b3JlTW9kZWwgPT4gdW5kZWYsCi0gIENvbnN0cmFpbnRzTW9kZWwgPT4gdW5kZWYsCi0gIEludGVybmFsU3RhdHMgPT4gdW5kZWYsCi0gIE91dHB1dEZvcm1hdCA9PiAiaHRtbCIsCi0gIENvbmZpZ09wdGlvbnMgPT4gW10sICAgICAgICMgT3B0aW9ucyB0byBwYXNzIHRocm91Z2ggdG8gdGhlIGFuYWx5emVyJ3MgLWFuYWx5emVyLWNvbmZpZyBmbGFnLgotICBSZXBvcnRGYWlsdXJlcyA9PiB1bmRlZiwKLSAgQW5hbHl6ZXJTdGF0cyA9PiAwLAotICBNYXhMb29wID0+IDAsCi0gIFBsdWdpbnNUb0xvYWQgPT4gW10sCi0gIEFuYWx5emVyRGlzY292ZXJ5TWV0aG9kID0+IHVuZGVmLAotICBPdmVycmlkZUNvbXBpbGVyID0+IDAgICAgICAjIFRoZSBmbGFnIGNvcnJlc3BvbmRpbmcgdG8gdGhlIC0tb3ZlcnJpZGUtY29tcGlsZXIgY29tbWFuZCBsaW5lIG9wdGlvbi4KLSk7Ci1sb2NrX2tleXMoJU9wdGlvbnMpOwotCi0jIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jIwotIyBEaWFnbm9zdGljcwotIyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIyMKLQotc3ViIERpYWcgewotICBpZiAoJFVzZUNvbG9yKSB7Ci0gICAgcHJpbnQgQk9MRCwgTUFHRU5UQSAiJFByb2c6IEBfIjsKLSAgICBwcmludCBSRVNFVDsKLSAgfQotICBlbHNlIHsKLSAgICBwcmludCAiJFByb2c6IEBfIjsKLSAgfQotfQotCi1zdWIgRXJyb3JEaWFnIHsKLSAgaWYgKCRVc2VDb2xvcikgewotICAgIHByaW50IFNUREVSUiBCT0xELCBSRUQgIiRQcm9nOiAiOwotICAgIHByaW50IFNUREVSUiBSRVNFVCwgUkVEIEBfOwotICAgIHByaW50IFNUREVSUiBSRVNFVDsKLSAgfSBlbHNlIHsKLSAgICBwcmludCBTVERFUlIgIiRQcm9nOiBAXyI7Ci0gIH0KLX0KLQotc3ViIERpYWdDcmFzaGVzIHsKLSAgbXkgJERpciA9IHNoaWZ0OwotICBEaWFnICgiVGhlIGFuYWx5emVyIGVuY291bnRlcmVkIHByb2JsZW1zIG9uIHNvbWUgc291cmNlIGZpbGVzLlxuIik7Ci0gIERpYWcgKCJQcmVwcm9jZXNzZWQgdmVyc2lvbnMgb2YgdGhlc2Ugc291cmNlcyB3ZXJlIGRlcG9zaXRlZCBpbiAnJERpci9mYWlsdXJlcycuXG4iKTsKLSAgRGlhZyAoIlBsZWFzZSBjb25zaWRlciBzdWJtaXR0aW5nIGEgYnVnIHJlcG9ydCB1c2luZyB0aGVzZSBmaWxlczpcbiIpOwotICBEaWFnICgiICBodHRwOi8vY2xhbmctYW5hbHl6ZXIubGx2bS5vcmcvZmlsaW5nX2J1Z3MuaHRtbFxuIikKLX0KLQotc3ViIERpZURpYWcgewotICBpZiAoJFVzZUNvbG9yKSB7Ci0gICAgcHJpbnQgU1RERVJSIEJPTEQsIFJFRCAiJFByb2c6ICI7Ci0gICAgcHJpbnQgU1RERVJSIFJFU0VULCBSRUQgQF87Ci0gICAgcHJpbnQgU1RERVJSIFJFU0VUOwotICB9Ci0gIGVsc2UgewotICAgIHByaW50IFNUREVSUiAiJFByb2c6ICIsIEBfOwotICB9Ci0gIGV4aXQgMTsKLX0KLQotIyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIyMKLSMgUHJpbnQgZGVmYXVsdCBjaGVja2VyIG5hbWVzCi0jIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jIwotCi1pZiAoZ3JlcCAvXi0taGVscC1jaGVja2VycyQvLCBAQVJHVikgewotICAgIG15IEBvcHRpb25zID0gcXgoJDAgLWgpOwotICAgIGZvcmVhY2ggKEBvcHRpb25zKSB7Ci0gICAgbmV4dCB1bmxlc3MgL14gXCsvOwotICAgIHMvXlxzKi8vOwotICAgIG15ICgkc2lnbiwgJG5hbWUsIEB0ZXh0KSA9IHNwbGl0ICcgJywgJF87Ci0gICAgcHJpbnQgJG5hbWUsICQvIGlmICRzaWduIGVxICcrJzsKLSAgICB9Ci0gICAgZXhpdCAwOwotfQotCi0jIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jIwotIyBEZWNsYXJhdGlvbiBvZiBDbGFuZyBvcHRpb25zLiAgUG9wdWxhdGVkIGxhdGVyLgotIyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIyMKLQotbXkgJENsYW5nOwotbXkgJENsYW5nU0I7Ci1teSAkQ2xhbmdDWFg7Ci1teSAkQ2xhbmdWZXJzaW9uOwotCi0jIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jIwotIyBHZXRIVE1MUnVuRGlyIC0gQ29uc3RydWN0IGFuIEhUTUwgZGlyZWN0b3J5IG5hbWUgZm9yIHRoZSBjdXJyZW50IHN1Yi1ydW4uCi0jIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jIwotCi1zdWIgR2V0SFRNTFJ1bkRpciB7Ci0gIGRpZSAiTm90IGVub3VnaCBhcmd1bWVudHMuIiBpZiAoQF8gPT0gMCk7Ci0gIG15ICREaXIgPSBzaGlmdCBAXzsKLSAgbXkgJFRtcE1vZGUgPSAwOwotICBpZiAoIWRlZmluZWQgJERpcikgewotICAgICREaXIgPSAkRU5WeydUTVBESVInfSB8fCAkRU5WeydURU1QJ30gfHwgJEVOVnsnVE1QJ30gfHwgIi90bXAiOwotICAgICRUbXBNb2RlID0gMTsKLSAgfQotCi0gICMgQ2hvcCBvZmYgYW55IHRyYWlsaW5nICcvJyBjaGFyYWN0ZXJzLgotICB3aGlsZSAoJERpciA9fiAvXC8kLykgeyBjaG9wICREaXI7IH0KLQotICAjIEdldCBjdXJyZW50IGRhdGUgYW5kIHRpbWUuCi0gIG15IEBDdXJyZW50VGltZSA9IGxvY2FsdGltZSgpOwotICBteSAkeWVhciAgPSAkQ3VycmVudFRpbWVbNV0gKyAxOTAwOwotICBteSAkZGF5ICAgPSAkQ3VycmVudFRpbWVbM107Ci0gIG15ICRtb250aCA9ICRDdXJyZW50VGltZVs0XSArIDE7Ci0gIG15ICRob3VyID0gICRDdXJyZW50VGltZVsyXTsKLSAgbXkgJG1pbiA9ICAgJEN1cnJlbnRUaW1lWzFdOwotICBteSAkc2VjID0gICAkQ3VycmVudFRpbWVbMF07Ci0KLSAgbXkgJFRpbWVTdHJpbmcgPSBzcHJpbnRmKCIlMDJkJTAyZCUwMmQiLCAkaG91ciwgJG1pbiwgJHNlYyk7Ci0gIG15ICREYXRlU3RyaW5nID0gc3ByaW50ZigiJWQtJTAyZC0lMDJkLSVzLSQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICR5ZWFyLCAkbW9udGgsICRkYXksICRUaW1lU3RyaW5nKTsKLQotICAjIERldGVybWluZSB0aGUgcnVuIG51bWJlci4KLSAgbXkgJFJ1bk51bWJlcjsKLQotICBpZiAoLWQgJERpcikgewotICAgIGlmICghIC1yICREaXIpIHsKLSAgICAgIERpZURpYWcoImRpcmVjdG9yeSAnJERpcicgZXhpc3RzIGJ1dCBpcyBub3QgcmVhZGFibGUuXG4iKTsKLSAgICB9Ci0gICAgIyBJdGVyYXRlIG92ZXIgYWxsIGZpbGVzIGluIHRoZSBzcGVjaWZpZWQgZGlyZWN0b3J5LgotICAgIG15ICRtYXggPSAwOwotICAgIG9wZW5kaXIoRElSLCAkRGlyKTsKLSAgICBteSBARklMRVMgPSBncmVwIHsgLWQgIiREaXIvJF8iIH0gcmVhZGRpcihESVIpOwotICAgIGNsb3NlZGlyKERJUik7Ci0KLSAgICBmb3JlYWNoIG15ICRmIChARklMRVMpIHsKLSAgICAgICMgU3RyaXAgdGhlIHByZWZpeCAnJFByb2ctJyBpZiB3ZSBhcmUgZHVtcGluZyBmaWxlcyB0byAvdG1wLgotICAgICAgaWYgKCRUbXBNb2RlKSB7Ci0gICAgICAgIG5leHQgaWYgKCEoJGYgPX4gL14kUHJvZy0oLispLykpOwotICAgICAgICAkZiA9ICQxOwotICAgICAgfQotCi0gICAgICBteSBAeCA9IHNwbGl0Ly0vLCAkZjsKLSAgICAgIG5leHQgaWYgKHNjYWxhcihAeCkgIT0gNCk7Ci0gICAgICBuZXh0IGlmICgkeFswXSAhPSAkeWVhcik7Ci0gICAgICBuZXh0IGlmICgkeFsxXSAhPSAkbW9udGgpOwotICAgICAgbmV4dCBpZiAoJHhbMl0gIT0gJGRheSk7Ci0gICAgICBuZXh0IGlmICgkeFszXSAhPSAkVGltZVN0cmluZyk7Ci0gICAgICBuZXh0IGlmICgkeFs0XSAhPSAkJCk7Ci0KLSAgICAgIGlmICgkeFs1XSA+ICRtYXgpIHsKLSAgICAgICAgJG1heCA9ICR4WzVdOwotICAgICAgfQotICAgIH0KLQotICAgICRSdW5OdW1iZXIgPSAkbWF4ICsgMTsKLSAgfQotICBlbHNlIHsKLQotICAgIGlmICgteCAkRGlyKSB7Ci0gICAgICBEaWVEaWFnKCInJERpcicgZXhpc3RzIGJ1dCBpcyBub3QgYSBkaXJlY3RvcnkuXG4iKTsKLSAgICB9Ci0KLSAgICBpZiAoJFRtcE1vZGUpIHsKLSAgICAgIERpZURpYWcoIlRoZSBkaXJlY3RvcnkgJy90bXAnIGRvZXMgbm90IGV4aXN0IG9yIGNhbm5vdCBiZSBhY2Nlc3NlZC5cbiIpOwotICAgIH0KLQotICAgICMgJERpciBkb2VzIG5vdCBleGlzdC4gIEl0IHdpbGwgYmUgYXV0b21hdGljYWxseSBjcmVhdGVkIGJ5IHRoZQotICAgICMgY2xhbmcgZHJpdmVyLiAgU2V0IHRoZSBydW4gbnVtYmVyIHRvIDEuCi0KLSAgICAkUnVuTnVtYmVyID0gMTsKLSAgfQotCi0gIGRpZSAiUnVuTnVtYmVyIG11c3QgYmUgZGVmaW5lZCEiIGlmICghZGVmaW5lZCAkUnVuTnVtYmVyKTsKLQotICAjIEFwcGVuZCB0aGUgcnVuIG51bWJlci4KLSAgbXkgJE5ld0RpcjsKLSAgaWYgKCRUbXBNb2RlKSB7Ci0gICAgJE5ld0RpciA9ICIkRGlyLyRQcm9nLSREYXRlU3RyaW5nLSRSdW5OdW1iZXIiOwotICB9Ci0gIGVsc2UgewotICAgICROZXdEaXIgPSAiJERpci8kRGF0ZVN0cmluZy0kUnVuTnVtYmVyIjsKLSAgfQotCi0gICMgTWFrZSBzdXJlIHRoYXQgdGhlIGRpcmVjdG9yeSBkb2VzIG5vdCBleGlzdCBpbiBvcmRlciB0byBhdm9pZCBoaWphY2suCi0gIGlmICgtZSAkTmV3RGlyKSB7Ci0gICAgICBEaWVEaWFnKCJUaGUgZGlyZWN0b3J5ICckTmV3RGlyJyBhbHJlYWR5IGV4aXN0cy5cbiIpOwotICB9Ci0KLSAgbWtwYXRoKCROZXdEaXIpOwotICByZXR1cm4gJE5ld0RpcjsKLX0KLQotc3ViIFNldEh0bWxFbnYgewotCi0gIGRpZSAiV3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cy4iIGlmIChzY2FsYXIoQF8pICE9IDIpOwotCi0gIG15ICRBcmdzID0gc2hpZnQ7Ci0gIG15ICREaXIgPSBzaGlmdDsKLQotICBkaWUgIk5vIGJ1aWxkIGNvbW1hbmQuIiBpZiAoc2NhbGFyKEAkQXJncykgPT0gMCk7Ci0KLSAgbXkgJENtZCA9ICQkQXJnc1swXTsKLQotICBpZiAoJENtZCA9fiAvY29uZmlndXJlLyB8fCAkQ21kID1+IC9hdXRvZ2VuLykgewotICAgIHJldHVybjsKLSAgfQotCi0gIGlmICgkT3B0aW9uc3tWZXJib3NlfSkgewotICAgIERpYWcoIkVtaXR0aW5nIHJlcG9ydHMgZm9yIHRoaXMgcnVuIHRvICckRGlyJy5cbiIpOwotICB9Ci0KLSAgJEVOVnsnQ0NDX0FOQUxZWkVSX0hUTUwnfSA9ICREaXI7Ci19Ci0KLSMjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMjCi0jIENvbXB1dGVEaWdlc3QgLSBDb21wdXRlIGEgZGlnZXN0IG9mIHRoZSBzcGVjaWZpZWQgZmlsZS4KLSMjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMjCi0KLXN1YiBDb21wdXRlRGlnZXN0IHsKLSAgbXkgJEZOYW1lID0gc2hpZnQ7Ci0gIERpZURpYWcoIkNhbm5vdCByZWFkICRGTmFtZSB0byBjb21wdXRlIERpZ2VzdC5cbiIpIGlmICghIC1yICRGTmFtZSk7Ci0KLSAgIyBVc2UgRGlnZXN0OjpNRDUuICBXZSBkb24ndCBoYXZlIHRvIGJlIGNyeXB0b2dyYXBoaWNhbGx5IHNlY3VyZS4gIFdlJ3JlCi0gICMganVzdCBsb29raW5nIGZvciBkdXBsaWNhdGUgZmlsZXMgdGhhdCBjb21lIGZyb20gYSBub24tbWFsaWNpb3VzIHNvdXJjZS4KLSAgIyBXZSB1c2UgRGlnZXN0OjpNRDUgYmVjYXVzZSBpdCBpcyBhIHN0YW5kYXJkIFBlcmwgbW9kdWxlIHRoYXQgc2hvdWxkCi0gICMgY29tZSBidW5kbGVkIG9uIG1vc3Qgc3lzdGVtcy4KLSAgb3BlbihGSUxFLCAkRk5hbWUpIG9yIERpZURpYWcoIkNhbm5vdCBvcGVuICRGTmFtZSB3aGVuIGNvbXB1dGluZyBEaWdlc3QuXG4iKTsKLSAgYmlubW9kZSBGSUxFOwotICBteSAkUmVzdWx0ID0gRGlnZXN0OjpNRDUtPm5ldy0+YWRkZmlsZSgqRklMRSktPmhleGRpZ2VzdDsKLSAgY2xvc2UoRklMRSk7Ci0KLSAgIyBSZXR1cm4gdGhlIGRpZ2VzdC4KLSAgcmV0dXJuICRSZXN1bHQ7Ci19Ci0KLSMjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMjCi0jICBVcGRhdGVQcmVmaXggLSBDb21wdXRlIHRoZSBjb21tb24gcHJlZml4IG9mIGZpbGVzLgotIyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIyMKLQotbXkgJFByZWZpeDsKLQotc3ViIFVwZGF0ZVByZWZpeCB7Ci0gIG15ICR4ID0gc2hpZnQ7Ci0gIG15ICR5ID0gYmFzZW5hbWUoJHgpOwotICAkeCA9fiBzL1xRJHlcRSQvLzsKLQotICBpZiAoIWRlZmluZWQgJFByZWZpeCkgewotICAgICRQcmVmaXggPSAkeDsKLSAgICByZXR1cm47Ci0gIH0KLQotICBjaG9wICRQcmVmaXggd2hpbGUgKCEoJHggPX4gL15cUSRQcmVmaXgvKSk7Ci19Ci0KLXN1YiBHZXRQcmVmaXggewotICByZXR1cm4gJFByZWZpeDsKLX0KLQotIyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIyMKLSMgIFVwZGF0ZUluRmlsZVBhdGggLSBVcGRhdGUgdGhlIHBhdGggaW4gdGhlIHJlcG9ydCBmaWxlLgotIyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIyMKLQotc3ViIFVwZGF0ZUluRmlsZVBhdGggewotICBteSAkZm5hbWUgPSBzaGlmdDsKLSAgbXkgJHJlZ2V4ID0gc2hpZnQ7Ci0gIG15ICRuZXd0ZXh0ID0gc2hpZnQ7Ci0KLSAgb3BlbiAoUklOLCAkZm5hbWUpIG9yIGRpZSAiY2Fubm90IG9wZW4gJGZuYW1lIjsKLSAgb3BlbiAoUk9VVCwgIj4iLCAiJGZuYW1lLnRtcCIpIG9yIGRpZSAiY2Fubm90IG9wZW4gJGZuYW1lLnRtcCI7Ci0KLSAgd2hpbGUgKDxSSU4+KSB7Ci0gICAgcy8kcmVnZXgvJG5ld3RleHQvOwotICAgIHByaW50IFJPVVQgJF87Ci0gIH0KLQotICBjbG9zZSAoUk9VVCk7Ci0gIGNsb3NlIChSSU4pOwotICByZW5hbWUoIiRmbmFtZS50bXAiLCAkZm5hbWUpCi19Ci0KLSMjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMjCi0jIEFkZFN0YXRMaW5lIC0gRGVjb2RlIGFuZCBpbnNlcnQgYSBzdGF0aXN0aWNzIGxpbmUgaW50byB0aGUgZGF0YWJhc2UuCi0jIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jIwotCi1zdWIgQWRkU3RhdExpbmUgewotICBteSAkTGluZSAgPSBzaGlmdDsKLSAgbXkgJFN0YXRzID0gc2hpZnQ7Ci0gIG15ICRGaWxlICA9IHNoaWZ0OwotCi0gIHByaW50ICRMaW5lIC4gIlxuIjsKLQotICBteSAkUmVnZXggPSBxci8oLio/KVwgLT5cIFRvdGFsXCBDRkdCbG9ja3M6XCAoXGQrKVwgXHxcIFVucmVhY2hhYmxlCi0gICAgICBcIENGR0Jsb2NrczpcIChcZCspXCBcfFwgRXhoYXVzdGVkXCBCbG9jazpcICh5ZXN8bm8pXCBcfFwgRW1wdHlcIFdvcmtMaXN0OgotICAgICAgXCAoeWVzfG5vKS94OwotCi0gIGlmICgkTGluZSAhfiAkUmVnZXgpIHsKLSAgICByZXR1cm47Ci0gIH0KLQotICAjIENyZWF0ZSBhIGhhc2ggb2YgdGhlIGludGVyZXN0aW5nIGZpZWxkcwotICBteSAkUm93ID0gewotICAgIEZpbGVuYW1lICAgID0+ICRGaWxlLAotICAgIEZ1bmN0aW9uICAgID0+ICQxLAotICAgIFRvdGFsICAgICAgID0+ICQyLAotICAgIFVucmVhY2hhYmxlID0+ICQzLAotICAgIEFib3J0ZWQgICAgID0+ICQ0LAotICAgIEVtcHR5ICAgICAgID0+ICQ1Ci0gIH07Ci0KLSAgIyBBZGQgdGhlbSB0byB0aGUgc3RhdHMgYXJyYXkKLSAgcHVzaCBAJFN0YXRzLCAkUm93OwotfQotCi0jIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jIwotIyBTY2FuRmlsZSAtIFNjYW4gYSByZXBvcnQgZmlsZSBmb3IgdmFyaW91cyBpZGVudGlmeWluZyBhdHRyaWJ1dGVzLgotIyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIyMKLQotIyBTb21ldGltZXMgYSBzb3VyY2UgZmlsZSBpcyBzY2FubmVkIG1vcmUgdGhhbiBvbmNlLCBhbmQgdGh1cyBwcm9kdWNlcwotIyBtdWx0aXBsZSBlcnJvciByZXBvcnRzLiAgV2UgdXNlIGEgY2FjaGUgdG8gc29sdmUgdGhpcyBwcm9ibGVtLgotCi1teSAlQWxyZWFkeVNjYW5uZWQ7Ci0KLXN1YiBTY2FuRmlsZSB7Ci0KLSAgbXkgJEluZGV4ID0gc2hpZnQ7Ci0gIG15ICREaXIgPSBzaGlmdDsKLSAgbXkgJEZOYW1lID0gc2hpZnQ7Ci0gIG15ICRTdGF0cyA9IHNoaWZ0OwotCi0gICMgQ29tcHV0ZSBhIGRpZ2VzdCBmb3IgdGhlIHJlcG9ydCBmaWxlLiAgRGV0ZXJtaW5lIGlmIHdlIGhhdmUgYWxyZWFkeQotICAjIHNjYW5uZWQgYSBmaWxlIHRoYXQgbG9va3MganVzdCBsaWtlIGl0LgotCi0gIG15ICRkaWdlc3QgPSBDb21wdXRlRGlnZXN0KCIkRGlyLyRGTmFtZSIpOwotCi0gIGlmIChkZWZpbmVkICRBbHJlYWR5U2Nhbm5lZHskZGlnZXN0fSkgewotICAgICMgUmVkdW5kYW50IGZpbGUuICBSZW1vdmUgaXQuCi0gICAgdW5saW5rKCIkRGlyLyRGTmFtZSIpOwotICAgIHJldHVybjsKLSAgfQotCi0gICRBbHJlYWR5U2Nhbm5lZHskZGlnZXN0fSA9IDE7Ci0KLSAgIyBBdCB0aGlzIHBvaW50IHRoZSByZXBvcnQgZmlsZSBpcyBub3Qgd29ybGQgcmVhZGFibGUuICBNYWtlIGl0IGhhcHBlbi4KLSAgY2htb2QoMDY0NCwgIiREaXIvJEZOYW1lIik7Ci0KLSAgIyBTY2FuIHRoZSByZXBvcnQgZmlsZSBmb3IgdGFncy4KLSAgb3BlbihJTiwgIiREaXIvJEZOYW1lIikgb3IgRGllRGlhZygiQ2Fubm90IG9wZW4gJyREaXIvJEZOYW1lJ1xuIik7Ci0KLSAgbXkgJEJ1Z1R5cGUgICAgICAgID0gIiI7Ci0gIG15ICRCdWdGaWxlICAgICAgICA9ICIiOwotICBteSAkQnVnRnVuY3Rpb24gICAgPSAiIjsKLSAgbXkgJEJ1Z0NhdGVnb3J5ICAgID0gIiI7Ci0gIG15ICRCdWdEZXNjcmlwdGlvbiA9ICIiOwotICBteSAkQnVnUGF0aExlbmd0aCAgPSAxOwotICBteSAkQnVnTGluZSAgICAgICAgPSAwOwotCi0gIHdoaWxlICg8SU4+KSB7Ci0gICAgbGFzdCBpZiAoLzwhLS0gQlVHTUVUQUVORCAtLT4vKTsKLQotICAgIGlmICgvPCEtLSBCVUdUWVBFICguKikgLS0+JC8pIHsKLSAgICAgICRCdWdUeXBlID0gJDE7Ci0gICAgfQotICAgIGVsc2lmICgvPCEtLSBCVUdGSUxFICguKikgLS0+JC8pIHsKLSAgICAgICRCdWdGaWxlID0gYWJzX3BhdGgoJDEpOwotICAgICAgaWYgKCFkZWZpbmVkICRCdWdGaWxlKSB7Ci0gICAgICAgICAjIFRoZSBmaWxlIG5vIGxvbmdlciBleGlzdHM6IHVzZSB0aGUgb3JpZ2luYWwgcGF0aC4KLSAgICAgICAgICRCdWdGaWxlID0gJDE7Ci0gICAgICB9Ci0gICAgICBVcGRhdGVQcmVmaXgoJEJ1Z0ZpbGUpOwotICAgIH0KLSAgICBlbHNpZiAoLzwhLS0gQlVHUEFUSExFTkdUSCAoLiopIC0tPiQvKSB7Ci0gICAgICAkQnVnUGF0aExlbmd0aCA9ICQxOwotICAgIH0KLSAgICBlbHNpZiAoLzwhLS0gQlVHTElORSAoLiopIC0tPiQvKSB7Ci0gICAgICAkQnVnTGluZSA9ICQxOwotICAgIH0KLSAgICBlbHNpZiAoLzwhLS0gQlVHQ0FURUdPUlkgKC4qKSAtLT4kLykgewotICAgICAgJEJ1Z0NhdGVnb3J5ID0gJDE7Ci0gICAgfQotICAgIGVsc2lmICgvPCEtLSBCVUdERVNDICguKikgLS0+JC8pIHsKLSAgICAgICRCdWdEZXNjcmlwdGlvbiA9ICQxOwotICAgIH0KLSAgICBlbHNpZiAoLzwhLS0gRlVOQ1RJT05OQU1FICguKikgLS0+JC8pIHsKLSAgICAgICRCdWdGdW5jdGlvbiA9ICQxOwotICAgIH0KLQotICB9Ci0KLQotICBjbG9zZShJTik7Ci0KLSAgaWYgKCFkZWZpbmVkICRCdWdDYXRlZ29yeSkgewotICAgICRCdWdDYXRlZ29yeSA9ICJPdGhlciI7Ci0gIH0KLQotICAjIERvbid0IGFkZCBpbnRlcm5hbCBzdGF0aXN0aWNzIHRvIHRoZSBidWcgcmVwb3J0cwotICBpZiAoJEJ1Z0NhdGVnb3J5ID1+IC9zdGF0aXN0aWNzL2kpIHsKLSAgICBBZGRTdGF0TGluZSgkQnVnRGVzY3JpcHRpb24sICRTdGF0cywgJEJ1Z0ZpbGUpOwotICAgIHJldHVybjsKLSAgfQotCi0gIHB1c2ggQCRJbmRleCxbICRGTmFtZSwgJEJ1Z0NhdGVnb3J5LCAkQnVnVHlwZSwgJEJ1Z0ZpbGUsICRCdWdGdW5jdGlvbiwgJEJ1Z0xpbmUsCi0gICAgICAgICAgICAgICAgICRCdWdQYXRoTGVuZ3RoIF07Ci19Ci0KLSMjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMjCi0jIENvcHlGaWxlcyAtIENvcHkgcmVzb3VyY2UgZmlsZXMgdG8gdGFyZ2V0IGRpcmVjdG9yeS4KLSMjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMjCi0KLXN1YiBDb3B5RmlsZXMgewotCi0gIG15ICREaXIgPSBzaGlmdDsKLQotICBteSAkSlMgPSBDd2Q6OnJlYWxwYXRoKCIkUmVhbEJpbi8uLi9zaGFyZS9zY2FuLWJ1aWxkL3NvcnR0YWJsZS5qcyIpOwotCi0gIERpZURpYWcoIkNhbm5vdCBmaW5kICdzb3J0dGFibGUuanMnLlxuIikKLSAgICBpZiAoISAtciAkSlMpOwotCi0gIGNvcHkoJEpTLCAiJERpciIpOwotCi0gIERpZURpYWcoIkNvdWxkIG5vdCBjb3B5ICdzb3J0dGFibGUuanMnIHRvICckRGlyJy5cbiIpCi0gICAgaWYgKCEgLXIgIiREaXIvc29ydHRhYmxlLmpzIik7Ci0KLSAgbXkgJENTUyA9IEN3ZDo6cmVhbHBhdGgoIiRSZWFsQmluLy4uL3NoYXJlL3NjYW4tYnVpbGQvc2NhbnZpZXcuY3NzIik7Ci0KLSAgRGllRGlhZygiQ2Fubm90IGZpbmQgJ3NjYW52aWV3LmNzcycuXG4iKQotICAgIGlmICghIC1yICRDU1MpOwotCi0gIGNvcHkoJENTUywgIiREaXIiKTsKLQotICBEaWVEaWFnKCJDb3VsZCBub3QgY29weSAnc2NhbnZpZXcuY3NzJyB0byAnJERpcicuXG4iKQotICAgIGlmICghIC1yICRDU1MpOwotfQotCi0jIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jIwotIyBDYWxjU3RhdHMgLSBDYWxjdWxhdGVzIHZpc2l0YXRpb24gc3RhdGlzdGljcyBhbmQgcmV0dXJucyB0aGUgc3RyaW5nLgotIyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIyMKLQotc3ViIENhbGNTdGF0cyB7Ci0gIG15ICRTdGF0cyA9IHNoaWZ0OwotCi0gIG15ICRUb3RhbEJsb2NrcyA9IDA7Ci0gIG15ICRVbnJlYWNoZWRCbG9ja3MgPSAwOwotICBteSAkVG90YWxGdW5jdGlvbnMgPSBzY2FsYXIoQCRTdGF0cyk7Ci0gIG15ICRCbG9ja0Fib3J0ZWQgPSAwOwotICBteSAkV29ya0xpc3RBYm9ydGVkID0gMDsKLSAgbXkgJEFib3J0ZWQgPSAwOwotCi0gICMgQ2FsY3VsYXRlIHRoZSB1bmlxdWUgZmlsZXMKLSAgbXkgJEZpbGVzSGFzaCA9IHt9OwotCi0gIGZvcmVhY2ggbXkgJFJvdyAoQCRTdGF0cykgewotICAgICRGaWxlc0hhc2gtPnskUm93LT57RmlsZW5hbWV9fSA9IDE7Ci0gICAgJFRvdGFsQmxvY2tzICs9ICRSb3ctPntUb3RhbH07Ci0gICAgJFVucmVhY2hlZEJsb2NrcyArPSAkUm93LT57VW5yZWFjaGFibGV9OwotICAgICRCbG9ja0Fib3J0ZWQrKyBpZiAkUm93LT57QWJvcnRlZH0gZXEgJ3llcyc7Ci0gICAgJFdvcmtMaXN0QWJvcnRlZCsrIGlmICRSb3ctPntFbXB0eX0gZXEgJ25vJzsKLSAgICAkQWJvcnRlZCsrIGlmICRSb3ctPntBYm9ydGVkfSBlcSAneWVzJyB8fCAkUm93LT57RW1wdHl9IGVxICdubyc7Ci0gIH0KLQotICBteSAkVG90YWxGaWxlcyA9IHNjYWxhcihrZXlzKCUkRmlsZXNIYXNoKSk7Ci0KLSAgIyBDYWxjdWxhdGlvbnMKLSAgbXkgJFBlcmNlbnRBYm9ydGVkID0gc3ByaW50ZigiJS4yZiIsICRBYm9ydGVkIC8gJFRvdGFsRnVuY3Rpb25zICogMTAwKTsKLSAgbXkgJFBlcmNlbnRCbG9ja0Fib3J0ZWQgPSBzcHJpbnRmKCIlLjJmIiwgJEJsb2NrQWJvcnRlZCAvICRUb3RhbEZ1bmN0aW9ucwotICAgICAgKiAxMDApOwotICBteSAkUGVyY2VudFdvcmtMaXN0QWJvcnRlZCA9IHNwcmludGYoIiUuMmYiLCAkV29ya0xpc3RBYm9ydGVkIC8KLSAgICAgICRUb3RhbEZ1bmN0aW9ucyAqIDEwMCk7Ci0gIG15ICRQZXJjZW50QmxvY2tzVW5yZWFjaGVkID0gc3ByaW50ZigiJS4yZiIsICRVbnJlYWNoZWRCbG9ja3MgLyAkVG90YWxCbG9ja3MKLSAgICAgICogMTAwKTsKLQotICBteSAkU3RhdHNTdHJpbmcgPSAiQW5hbHl6ZWQgJFRvdGFsQmxvY2tzIGJsb2NrcyBpbiAkVG90YWxGdW5jdGlvbnMgZnVuY3Rpb25zIgotICAgIC4gIiBpbiAkVG90YWxGaWxlcyBmaWxlc1xuIgotICAgIC4gIiRBYm9ydGVkIGZ1bmN0aW9ucyBhYm9ydGVkIGVhcmx5ICgkUGVyY2VudEFib3J0ZWQlKVxuIgotICAgIC4gIiRCbG9ja0Fib3J0ZWQgaGFkIGFib3J0ZWQgYmxvY2tzICgkUGVyY2VudEJsb2NrQWJvcnRlZCUpXG4iCi0gICAgLiAiJFdvcmtMaXN0QWJvcnRlZCBoYWQgdW5maW5pc2hlZCB3b3JrbGlzdHMgKCRQZXJjZW50V29ya0xpc3RBYm9ydGVkJSlcbiIKLSAgICAuICIkVW5yZWFjaGVkQmxvY2tzIGJsb2NrcyB3ZXJlIG5ldmVyIHJlYWNoZWQgKCRQZXJjZW50QmxvY2tzVW5yZWFjaGVkJSlcbiI7Ci0KLSAgcmV0dXJuICRTdGF0c1N0cmluZzsKLX0KLQotIyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIyMKLSMgUG9zdHByb2Nlc3MgLSBQb3N0cHJvY2VzcyB0aGUgcmVzdWx0cyBvZiBhbiBhbmFseXNpcyBzY2FuLgotIyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIyMKLQotbXkgQGZpbGVzRm91bmQ7Ci1teSAkYmFzZURpcjsKLXN1YiBGaWxlV2FudGVkIHsKLSAgICBteSAkYmFzZURpclJlZ0V4ID0gcXVvdGVtZXRhICRiYXNlRGlyOwotICAgIG15ICRmaWxlID0gJEZpbGU6OkZpbmQ6Om5hbWU7Ci0KLSAgICAjIFRoZSBuYW1lIG9mIHRoZSBmaWxlIGlzIGdlbmVyYXRlZCBieSBjbGFuZyBiaW5hcnkgKEhUTUxEaWFnbm9zdGljcy5jcHApCi0gICAgaWYgKCRmaWxlID1+IC9yZXBvcnQtLipcLmh0bWwkLykgewotICAgICAgIG15ICRyZWxhdGl2ZV9maWxlID0gJGZpbGU7Ci0gICAgICAgJHJlbGF0aXZlX2ZpbGUgPX4gcy8kYmFzZURpclJlZ0V4Ly9nOwotICAgICAgIHB1c2ggQGZpbGVzRm91bmQsICRyZWxhdGl2ZV9maWxlOwotICAgIH0KLX0KLQotc3ViIFBvc3Rwcm9jZXNzIHsKLQotICBteSAkRGlyICAgICAgICAgICA9IHNoaWZ0OwotICBteSAkQmFzZURpciAgICAgICA9IHNoaWZ0OwotICBteSAkQW5hbHl6ZXJTdGF0cyA9IHNoaWZ0OwotICBteSAkS2VlcEVtcHR5ICAgICA9IHNoaWZ0OwotCi0gIGRpZSAiTm8gZGlyZWN0b3J5IHNwZWNpZmllZC4iIGlmICghZGVmaW5lZCAkRGlyKTsKLQotICBpZiAoISAtZCAkRGlyKSB7Ci0gICAgRGlhZygiTm8gYnVncyBmb3VuZC5cbiIpOwotICAgIHJldHVybiAwOwotICB9Ci0KLSAgJGJhc2VEaXIgPSAkRGlyIC4gIi8iOwotICBmaW5kKHsgd2FudGVkID0+IFwmRmlsZVdhbnRlZCwgZm9sbG93ID0+IDB9LCAkRGlyKTsKLQotICBpZiAoc2NhbGFyKEBmaWxlc0ZvdW5kKSA9PSAwIGFuZCAhIC1lICIkRGlyL2ZhaWx1cmVzIikgewotICAgIGlmICghICRLZWVwRW1wdHkpIHsKLSAgICAgIERpYWcoIlJlbW92aW5nIGRpcmVjdG9yeSAnJERpcicgYmVjYXVzZSBpdCBjb250YWlucyBubyByZXBvcnRzLlxuIik7Ci0gICAgICBybXRyZWUoJERpcikgb3IgZGllICJDYW5ub3Qgcm10cmVlICckRGlyJyA6ICQhIjsKLSAgICB9Ci0gICAgRGlhZygiTm8gYnVncyBmb3VuZC5cbiIpOwotICAgIHJldHVybiAwOwotICB9Ci0KLSAgIyBTY2FuIGVhY2ggcmVwb3J0IGZpbGUgYW5kIGJ1aWxkIGFuIGluZGV4LgotICBteSBASW5kZXg7Ci0gIG15IEBTdGF0czsKLSAgZm9yZWFjaCBteSAkZmlsZSAoQGZpbGVzRm91bmQpIHsgU2NhbkZpbGUoXEBJbmRleCwgJERpciwgJGZpbGUsIFxAU3RhdHMpOyB9Ci0KLSAgIyBTY2FuIHRoZSBmYWlsdXJlcyBkaXJlY3RvcnkgYW5kIHVzZSB0aGUgaW5mb3JtYXRpb24gaW4gdGhlIC5pbmZvIGZpbGVzCi0gICMgdG8gdXBkYXRlIHRoZSBjb21tb24gcHJlZml4IGRpcmVjdG9yeS4KLSAgbXkgQGZhaWx1cmVzOwotICBteSBAYXR0cmlidXRlc19pZ25vcmVkOwotICBpZiAoLWQgIiREaXIvZmFpbHVyZXMiKSB7Ci0gICAgb3BlbmRpcihESVIsICIkRGlyL2ZhaWx1cmVzIik7Ci0gICAgQGZhaWx1cmVzID0gZ3JlcCB7IC9bLl1pbmZvLnR4dCQvICYmICEvYXR0cmlidXRlX2lnbm9yZWQvOyB9IHJlYWRkaXIoRElSKTsKLSAgICBjbG9zZWRpcihESVIpOwotICAgIG9wZW5kaXIoRElSLCAiJERpci9mYWlsdXJlcyIpOwotICAgIEBhdHRyaWJ1dGVzX2lnbm9yZWQgPSBncmVwIHsgL15hdHRyaWJ1dGVfaWdub3JlZC87IH0gcmVhZGRpcihESVIpOwotICAgIGNsb3NlZGlyKERJUik7Ci0gICAgZm9yZWFjaCBteSAkZmlsZSAoQGZhaWx1cmVzKSB7Ci0gICAgICBvcGVuIElOLCAiJERpci9mYWlsdXJlcy8kZmlsZSIgb3IgRGllRGlhZygiY2Fubm90IG9wZW4gJGZpbGVcbiIpOwotICAgICAgbXkgJFBhdGggPSA8SU4+OwotICAgICAgaWYgKGRlZmluZWQgJFBhdGgpIHsgVXBkYXRlUHJlZml4KCRQYXRoKTsgfQotICAgICAgY2xvc2UgSU47Ci0gICAgfQotICB9Ci0KLSAgIyBHZW5lcmF0ZSBhbiBpbmRleC5odG1sIGZpbGUuCi0gIG15ICRGTmFtZSA9ICIkRGlyL2luZGV4Lmh0bWwiOwotICBvcGVuKE9VVCwgIj4iLCAkRk5hbWUpIG9yIERpZURpYWcoIkNhbm5vdCBjcmVhdGUgZmlsZSAnJEZOYW1lJ1xuIik7Ci0KLSAgIyBQcmludCBvdXQgdGhlIGhlYWRlci4KLQotcHJpbnQgT1VUIDw8RU5EVEVYVDsKLTxodG1sPgotPGhlYWQ+Ci08dGl0bGU+JHtPcHRpb25ze0h0bWxUaXRsZX19PC90aXRsZT4KLTxsaW5rIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIGhyZWY9InNjYW52aWV3LmNzcyIvPgotPHNjcmlwdCBzcmM9InNvcnR0YWJsZS5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IGxhbmd1YWdlPSdqYXZhc2NyaXB0JyB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotZnVuY3Rpb24gU2V0RGlzcGxheShSb3dDbGFzcywgRGlzcGxheVZhbCkKLXsKLSAgdmFyIFJvd3MgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgidHIiKTsKLSAgZm9yICggdmFyIGkgPSAwIDsgaSA8IFJvd3MubGVuZ3RoOyArK2kgKSB7Ci0gICAgaWYgKFJvd3NbaV0uY2xhc3NOYW1lID09IFJvd0NsYXNzKSB7Ci0gICAgICBSb3dzW2ldLnN0eWxlLmRpc3BsYXkgPSBEaXNwbGF5VmFsOwotICAgIH0KLSAgfQotfQotCi1mdW5jdGlvbiBDb3B5Q2hlY2tlZFN0YXRlVG9DaGVja0J1dHRvbnMoU3VtbWFyeUNoZWNrQnV0dG9uKSB7Ci0gIHZhciBJbnB1dHMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW5wdXQiKTsKLSAgZm9yICggdmFyIGkgPSAwIDsgaSA8IElucHV0cy5sZW5ndGg7ICsraSApIHsKLSAgICBpZiAoSW5wdXRzW2ldLnR5cGUgPT0gImNoZWNrYm94IikgewotICAgICAgaWYoSW5wdXRzW2ldICE9IFN1bW1hcnlDaGVja0J1dHRvbikgewotICAgICAgICBJbnB1dHNbaV0uY2hlY2tlZCA9IFN1bW1hcnlDaGVja0J1dHRvbi5jaGVja2VkOwotICAgICAgICBJbnB1dHNbaV0ub25jbGljaygpOwotICAgICAgfQotICAgIH0KLSAgfQotfQotCi1mdW5jdGlvbiByZXR1cm5PYmpCeUlkKCBpZCApIHsKLSAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQpCi0gICAgICAgIHZhciByZXR1cm5WYXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7Ci0gICAgZWxzZSBpZiAoZG9jdW1lbnQuYWxsKQotICAgICAgICB2YXIgcmV0dXJuVmFyID0gZG9jdW1lbnQuYWxsW2lkXTsKLSAgICBlbHNlIGlmIChkb2N1bWVudC5sYXllcnMpCi0gICAgICAgIHZhciByZXR1cm5WYXIgPSBkb2N1bWVudC5sYXllcnNbaWRdOwotICAgIHJldHVybiByZXR1cm5WYXI7Ci19Ci0KLXZhciBOdW1VbmNoZWNrZWQgPSAwOwotCi1mdW5jdGlvbiBUb2dnbGVEaXNwbGF5KENoZWNrQnV0dG9uLCBDbGFzc05hbWUpIHsKLSAgaWYgKENoZWNrQnV0dG9uLmNoZWNrZWQpIHsKLSAgICBTZXREaXNwbGF5KENsYXNzTmFtZSwgIiIpOwotICAgIGlmICgtLU51bVVuY2hlY2tlZCA9PSAwKSB7Ci0gICAgICByZXR1cm5PYmpCeUlkKCJBbGxCdWdzQ2hlY2siKS5jaGVja2VkID0gdHJ1ZTsKLSAgICB9Ci0gIH0KLSAgZWxzZSB7Ci0gICAgU2V0RGlzcGxheShDbGFzc05hbWUsICJub25lIik7Ci0gICAgTnVtVW5jaGVja2VkKys7Ci0gICAgcmV0dXJuT2JqQnlJZCgiQWxsQnVnc0NoZWNrIikuY2hlY2tlZCA9IGZhbHNlOwotICB9Ci19Ci08L3NjcmlwdD4KLTwhLS0gU1VNTUFSWUVOREhFQUQgLS0+Ci08L2hlYWQ+Ci08Ym9keT4KLTxoMT4ke09wdGlvbnN7SHRtbFRpdGxlfX08L2gxPgotCi08dGFibGU+Ci08dHI+PHRoPlVzZXI6PC90aD48dGQ+JHtVc2VyTmFtZX1cQCR7SG9zdE5hbWV9PC90ZD48L3RyPgotPHRyPjx0aD5Xb3JraW5nIERpcmVjdG9yeTo8L3RoPjx0ZD4ke0N1cnJlbnREaXJ9PC90ZD48L3RyPgotPHRyPjx0aD5Db21tYW5kIExpbmU6PC90aD48dGQ+JHtDbWRBcmdzfTwvdGQ+PC90cj4KLTx0cj48dGg+Q2xhbmcgVmVyc2lvbjo8L3RoPjx0ZD4ke0NsYW5nVmVyc2lvbn08L3RkPjwvdHI+Ci08dHI+PHRoPkRhdGU6PC90aD48dGQ+JHtEYXRlfTwvdGQ+PC90cj4KLUVORFRFWFQKLQotcHJpbnQgT1VUICI8dHI+PHRoPlZlcnNpb246PC90aD48dGQ+JHtCdWlsZE5hbWV9ICgke0J1aWxkRGF0ZX0pPC90ZD48L3RyPlxuIgotICBpZiAoZGVmaW5lZCgkQnVpbGROYW1lKSAmJiBkZWZpbmVkKCRCdWlsZERhdGUpKTsKLQotcHJpbnQgT1VUIDw8RU5EVEVYVDsKLTwvdGFibGU+Ci1FTkRURVhUCi0KLSAgaWYgKHNjYWxhcihAZmlsZXNGb3VuZCkpIHsKLSAgICAjIFByaW50IG91dCB0aGUgc3VtbWFyeSB0YWJsZS4KLSAgICBteSAlVG90YWxzOwotCi0gICAgZm9yIG15ICRyb3cgKCBASW5kZXggKSB7Ci0gICAgICBteSAkYnVnX3R5cGUgPSAoJHJvdy0+WzJdKTsKLSAgICAgIG15ICRidWdfY2F0ZWdvcnkgPSAoJHJvdy0+WzFdKTsKLSAgICAgIG15ICRrZXkgPSAiJGJ1Z19jYXRlZ29yeTokYnVnX3R5cGUiOwotCi0gICAgICBpZiAoIWRlZmluZWQgJFRvdGFsc3ska2V5fSkgeyAkVG90YWxzeyRrZXl9ID0gWzEsJGJ1Z19jYXRlZ29yeSwkYnVnX3R5cGVdOyB9Ci0gICAgICBlbHNlIHsgJFRvdGFsc3ska2V5fS0+WzBdKys7IH0KLSAgICB9Ci0KLSAgICBwcmludCBPVVQgIjxoMj5CdWcgU3VtbWFyeTwvaDI+IjsKLQotICAgIGlmIChkZWZpbmVkICRCdWlsZE5hbWUpIHsKLSAgICAgIHByaW50IE9VVCAiXG48cD5SZXN1bHRzIGluIHRoaXMgYW5hbHlzaXMgcnVuIGFyZSBiYXNlZCBvbiBhbmFseXplciBidWlsZCA8Yj4kQnVpbGROYW1lPC9iPi48L3A+XG4iCi0gICAgfQotCi0gIG15ICRUb3RhbEJ1Z3MgPSBzY2FsYXIoQEluZGV4KTsKLXByaW50IE9VVCA8PEVORFRFWFQ7Ci08dGFibGU+Ci08dGhlYWQ+PHRyPjx0ZD5CdWcgVHlwZTwvdGQ+PHRkPlF1YW50aXR5PC90ZD48dGQgY2xhc3M9InNvcnR0YWJsZV9ub3NvcnQiPkRpc3BsYXk/PC90ZD48L3RyPjwvdGhlYWQ+Ci08dHIgc3R5bGU9ImZvbnQtd2VpZ2h0OmJvbGQiPjx0ZCBjbGFzcz0iU1VNTV9ERVNDIj5BbGwgQnVnczwvdGQ+PHRkIGNsYXNzPSJRIj4kVG90YWxCdWdzPC90ZD48dGQ+PGNlbnRlcj48aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJBbGxCdWdzQ2hlY2siIG9uQ2xpY2s9IkNvcHlDaGVja2VkU3RhdGVUb0NoZWNrQnV0dG9ucyh0aGlzKTsiIGNoZWNrZWQvPjwvY2VudGVyPjwvdGQ+PC90cj4KLUVORFRFWFQKLQotICAgIG15ICRsYXN0X2NhdGVnb3J5OwotCi0gICAgZm9yIG15ICRrZXkgKAotICAgICAgc29ydCB7Ci0gICAgICAgIG15ICR4ID0gJFRvdGFsc3skYX07Ci0gICAgICAgIG15ICR5ID0gJFRvdGFsc3skYn07Ci0gICAgICAgIG15ICRyZXMgPSAkeC0+WzFdIGNtcCAkeS0+WzFdOwotICAgICAgICAkcmVzID0gJHgtPlsyXSBjbXAgJHktPlsyXSBpZiAoJHJlcyA9PSAwKTsKLSAgICAgICAgJHJlcwotICAgICAgfSBrZXlzICVUb3RhbHMgKQotICAgIHsKLSAgICAgIG15ICR2YWwgPSAkVG90YWxzeyRrZXl9OwotICAgICAgbXkgJGNhdGVnb3J5ID0gJHZhbC0+WzFdOwotICAgICAgaWYgKCFkZWZpbmVkICRsYXN0X2NhdGVnb3J5IG9yICRsYXN0X2NhdGVnb3J5IG5lICRjYXRlZ29yeSkgewotICAgICAgICAkbGFzdF9jYXRlZ29yeSA9ICRjYXRlZ29yeTsKLSAgICAgICAgcHJpbnQgT1VUICI8dHI+PHRoPiRjYXRlZ29yeTwvdGg+PHRoIGNvbHNwYW49Mj48L3RoPjwvdHI+XG4iOwotICAgICAgfQotICAgICAgbXkgJHggPSBsYyAka2V5OwotICAgICAgJHggPX4gcy9bICwnIjpcLygpXSsvXy9nOwotICAgICAgcHJpbnQgT1VUICI8dHI+PHRkIGNsYXNzPVwiU1VNTV9ERVNDXCI+IjsKLSAgICAgIHByaW50IE9VVCAkdmFsLT5bMl07Ci0gICAgICBwcmludCBPVVQgIjwvdGQ+PHRkIGNsYXNzPVwiUVwiPiI7Ci0gICAgICBwcmludCBPVVQgJHZhbC0+WzBdOwotICAgICAgcHJpbnQgT1VUICI8L3RkPjx0ZD48Y2VudGVyPjxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBvbkNsaWNrPVwiVG9nZ2xlRGlzcGxheSh0aGlzLCdidF8keCcpO1wiIGNoZWNrZWQvPjwvY2VudGVyPjwvdGQ+PC90cj5cbiI7Ci0gICAgfQotCi0gICMgUHJpbnQgb3V0IHRoZSB0YWJsZSBvZiBlcnJvcnMuCi0KLXByaW50IE9VVCA8PEVORFRFWFQ7Ci08L3RhYmxlPgotPGgyPlJlcG9ydHM8L2gyPgotCi08dGFibGUgY2xhc3M9InNvcnRhYmxlIiBzdHlsZT0idGFibGUtbGF5b3V0OmF1dG9tYXRpYyI+Ci08dGhlYWQ+PHRyPgotICA8dGQ+QnVnIEdyb3VwPC90ZD4KLSAgPHRkIGNsYXNzPSJzb3J0dGFibGVfc29ydGVkIj5CdWcgVHlwZTxzcGFuIGlkPSJzb3J0dGFibGVfc29ydGZ3ZGluZCI+Jm5ic3A7JiN4MjVCRTs8L3NwYW4+PC90ZD4KLSAgPHRkPkZpbGU8L3RkPgotICA8dGQ+RnVuY3Rpb24vTWV0aG9kPC90ZD4KLSAgPHRkIGNsYXNzPSJRIj5MaW5lPC90ZD4KLSAgPHRkIGNsYXNzPSJRIj5QYXRoIExlbmd0aDwvdGQ+Ci0gIDx0ZCBjbGFzcz0ic29ydHRhYmxlX25vc29ydCI+PC90ZD4KLSAgPCEtLSBSRVBPUlRCVUdDT0wgLS0+Ci08L3RyPjwvdGhlYWQ+Ci08dGJvZHk+Ci1FTkRURVhUCi0KLSAgICBteSAkcHJlZml4ID0gR2V0UHJlZml4KCk7Ci0gICAgbXkgJHJlZ2V4OwotICAgIG15ICRJbkZpbGVSZWdleDsKLSAgICBteSAkSW5GaWxlUHJlZml4ID0gIkZpbGU6PC90ZD48dGQ+IjsKLQotICAgIGlmIChkZWZpbmVkICRwcmVmaXgpIHsKLSAgICAgICRyZWdleCA9IHFyL15cUSRwcmVmaXhcRS9pczsKLSAgICAgICRJbkZpbGVSZWdleCA9IHFyL1xRJEluRmlsZVByZWZpeCRwcmVmaXhcRS9pczsKLSAgICB9Ci0KLSAgICBmb3IgbXkgJHJvdyAoIHNvcnQgeyAkYS0+WzJdIGNtcCAkYi0+WzJdIH0gQEluZGV4ICkgewotICAgICAgbXkgJHggPSAiJHJvdy0+WzFdOiRyb3ctPlsyXSI7Ci0gICAgICAkeCA9IGxjICR4OwotICAgICAgJHggPX4gcy9bICwnIjpcLygpXSsvXy9nOwotCi0gICAgICBteSAkUmVwb3J0RmlsZSA9ICRyb3ctPlswXTsKLQotICAgICAgcHJpbnQgT1VUICI8dHIgY2xhc3M9XCJidF8keFwiPiI7Ci0gICAgICBwcmludCBPVVQgIjx0ZCBjbGFzcz1cIkRFU0NcIj4iOwotICAgICAgcHJpbnQgT1VUICRyb3ctPlsxXTsKLSAgICAgIHByaW50IE9VVCAiPC90ZD4iOwotICAgICAgcHJpbnQgT1VUICI8dGQgY2xhc3M9XCJERVNDXCI+IjsKLSAgICAgIHByaW50IE9VVCAkcm93LT5bMl07Ci0gICAgICBwcmludCBPVVQgIjwvdGQ+IjsKLQotICAgICAgIyBVcGRhdGUgdGhlIGZpbGUgcHJlZml4LgotICAgICAgbXkgJGZuYW1lID0gJHJvdy0+WzNdOwotCi0gICAgICBpZiAoZGVmaW5lZCAkcmVnZXgpIHsKLSAgICAgICAgJGZuYW1lID1+IHMvJHJlZ2V4Ly87Ci0gICAgICAgIFVwZGF0ZUluRmlsZVBhdGgoIiREaXIvJFJlcG9ydEZpbGUiLCAkSW5GaWxlUmVnZXgsICRJbkZpbGVQcmVmaXgpCi0gICAgICB9Ci0KLSAgICAgIHByaW50IE9VVCAiPHRkPiI7Ci0gICAgICBteSBAZm5hbWUgPSBzcGxpdCAvXC8vLCRmbmFtZTsKLSAgICAgIGlmICgkI2ZuYW1lID4gMCkgewotICAgICAgICB3aGlsZSAoJCNmbmFtZSA+PSAwKSB7Ci0gICAgICAgICAgbXkgJHggPSBzaGlmdCBAZm5hbWU7Ci0gICAgICAgICAgcHJpbnQgT1VUICR4OwotICAgICAgICAgIGlmICgkI2ZuYW1lID49IDApIHsKLSAgICAgICAgICAgIHByaW50IE9VVCAiLyI7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBlbHNlIHsKLSAgICAgICAgcHJpbnQgT1VUICRmbmFtZTsKLSAgICAgIH0KLSAgICAgIHByaW50IE9VVCAiPC90ZD4iOwotCi0gICAgICBwcmludCBPVVQgIjx0ZCBjbGFzcz1cIkRFU0NcIj4iOwotICAgICAgcHJpbnQgT1VUICRyb3ctPls0XTsKLSAgICAgIHByaW50IE9VVCAiPC90ZD4iOwotCi0gICAgICAjIFByaW50IG91dCB0aGUgcXVhbnRpdGllcy4KLSAgICAgIGZvciBteSAkaiAoIDUgLi4gNiApIHsKLSAgICAgICAgcHJpbnQgT1VUICI8dGQgY2xhc3M9XCJRXCI+JHJvdy0+WyRqXTwvdGQ+IjsKLSAgICAgIH0KLQotICAgICAgIyBQcmludCB0aGUgcmVzdCBvZiB0aGUgY29sdW1ucy4KLSAgICAgIGZvciAobXkgJGogPSA3OyAkaiA8PSAkI3skcm93fTsgKyskaikgewotICAgICAgICBwcmludCBPVVQgIjx0ZD4kcm93LT5bJGpdPC90ZD4iCi0gICAgICB9Ci0KLSAgICAgICMgRW1pdCB0aGUgIlZpZXciIGxpbmsuCi0gICAgICBwcmludCBPVVQgIjx0ZD48YSBocmVmPVwiJFJlcG9ydEZpbGUjRW5kUGF0aFwiPlZpZXcgUmVwb3J0PC9hPjwvdGQ+IjsKLQotICAgICAgIyBFbWl0IFJFUE9SVEJVRyBtYXJrZXJzLgotICAgICAgcHJpbnQgT1VUICJcbjwhLS0gUkVQT1JUQlVHIGlkPVwiJFJlcG9ydEZpbGVcIiAtLT5cbiI7Ci0KLSAgICAgICMgRW5kIHRoZSByb3cuCi0gICAgICBwcmludCBPVVQgIjwvdHI+XG4iOwotICAgIH0KLQotICAgIHByaW50IE9VVCAiPC90Ym9keT5cbjwvdGFibGU+XG5cbiI7Ci0gIH0KLQotICBpZiAoc2NhbGFyIChAZmFpbHVyZXMpIHx8IHNjYWxhcihAYXR0cmlidXRlc19pZ25vcmVkKSkgewotICAgIHByaW50IE9VVCAiPGgyPkFuYWx5emVyIEZhaWx1cmVzPC9oMj5cbiI7Ci0KLSAgICBpZiAoc2NhbGFyIEBhdHRyaWJ1dGVzX2lnbm9yZWQpIHsKLSAgICAgIHByaW50IE9VVCAiVGhlIGFuYWx5emVyJ3MgcGFyc2VyIGlnbm9yZWQgdGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzOjxwPlxuIjsKLSAgICAgIHByaW50IE9VVCAiPHRhYmxlPlxuIjsKLSAgICAgIHByaW50IE9VVCAiPHRoZWFkPjx0cj48dGQ+QXR0cmlidXRlPC90ZD48dGQ+U291cmNlIEZpbGU8L3RkPjx0ZD5QcmVwcm9jZXNzZWQgRmlsZTwvdGQ+PHRkPlNUREVSUiBPdXRwdXQ8L3RkPjwvdHI+PC90aGVhZD5cbiI7Ci0gICAgICBmb3JlYWNoIG15ICRmaWxlIChzb3J0IEBhdHRyaWJ1dGVzX2lnbm9yZWQpIHsKLSAgICAgICAgZGllICJjYW5ub3QgZGVtYW5nbGUgYXR0cmlidXRlIG5hbWVcbiIgaWYgKCEgKCRmaWxlID1+IC9eYXR0cmlidXRlX2lnbm9yZWRfKC4rKS50eHQvKSk7Ci0gICAgICAgIG15ICRhdHRyaWJ1dGUgPSAkMTsKLSAgICAgICAgIyBPcGVuIHRoZSBhdHRyaWJ1dGUgZmlsZSB0byBnZXQgdGhlIGZpcnN0IGZpbGUgdGhhdCBmYWlsZWQuCi0gICAgICAgIG5leHQgaWYgKCFvcGVuIChBVFRSLCAiJERpci9mYWlsdXJlcy8kZmlsZSIpKTsKLSAgICAgICAgbXkgJHBwZmlsZSA9IDxBVFRSPjsKLSAgICAgICAgY2hvbXAgJHBwZmlsZTsKLSAgICAgICAgY2xvc2UgQVRUUjsKLSAgICAgICAgbmV4dCBpZiAoISAtZSAiJERpci9mYWlsdXJlcy8kcHBmaWxlIik7Ci0gICAgICAgICMgT3BlbiB0aGUgaW5mbyBmaWxlIGFuZCBnZXQgdGhlIG5hbWUgb2YgdGhlIHNvdXJjZSBmaWxlLgotICAgICAgICBvcGVuIChJTkZPLCAiJERpci9mYWlsdXJlcy8kcHBmaWxlLmluZm8udHh0Iikgb3IKLSAgICAgICAgICBkaWUgIkNhbm5vdCBvcGVuICREaXIvZmFpbHVyZXMvJHBwZmlsZS5pbmZvLnR4dFxuIjsKLSAgICAgICAgbXkgJHNyY2ZpbGUgPSA8SU5GTz47Ci0gICAgICAgIGNob21wICRzcmNmaWxlOwotICAgICAgICBjbG9zZSAoSU5GTyk7Ci0gICAgICAgICMgUHJpbnQgdGhlIGluZm9ybWF0aW9uIGluIHRoZSB0YWJsZS4KLSAgICAgICAgbXkgJHByZWZpeCA9IEdldFByZWZpeCgpOwotICAgICAgICBpZiAoZGVmaW5lZCAkcHJlZml4KSB7ICRzcmNmaWxlID1+IHMvXlxRJHByZWZpeC8vOyB9Ci0gICAgICAgIHByaW50IE9VVCAiPHRyPjx0ZD4kYXR0cmlidXRlPC90ZD48dGQ+JHNyY2ZpbGU8L3RkPjx0ZD48YSBocmVmPVwiZmFpbHVyZXMvJHBwZmlsZVwiPiRwcGZpbGU8L2E+PC90ZD48dGQ+PGEgaHJlZj1cImZhaWx1cmVzLyRwcGZpbGUuc3RkZXJyLnR4dFwiPiRwcGZpbGUuc3RkZXJyLnR4dDwvYT48L3RkPjwvdHI+XG4iOwotICAgICAgICBteSAkcHBmaWxlX2NsYW5nID0gJHBwZmlsZTsKLSAgICAgICAgJHBwZmlsZV9jbGFuZyA9fiBzL1suXSguKykkLy5jbGFuZy4kMS87Ci0gICAgICAgIHByaW50IE9VVCAiICA8IS0tIFJFUE9SVFBST0JMRU0gc3JjPVwiJHNyY2ZpbGVcIiBmaWxlPVwiZmFpbHVyZXMvJHBwZmlsZVwiIGNsYW5nZmlsZT1cImZhaWx1cmVzLyRwcGZpbGVfY2xhbmdcIiBzdGRlcnI9XCJmYWlsdXJlcy8kcHBmaWxlLnN0ZGVyci50eHRcIiBpbmZvPVwiZmFpbHVyZXMvJHBwZmlsZS5pbmZvLnR4dFwiIC0tPlxuIjsKLSAgICAgIH0KLSAgICAgIHByaW50IE9VVCAiPC90YWJsZT5cbiI7Ci0gICAgfQotCi0gICAgaWYgKHNjYWxhciBAZmFpbHVyZXMpIHsKLSAgICAgIHByaW50IE9VVCAiPHA+VGhlIGFuYWx5emVyIGhhZCBwcm9ibGVtcyBwcm9jZXNzaW5nIHRoZSBmb2xsb3dpbmcgZmlsZXM6PC9wPlxuIjsKLSAgICAgIHByaW50IE9VVCAiPHRhYmxlPlxuIjsKLSAgICAgIHByaW50IE9VVCAiPHRoZWFkPjx0cj48dGQ+UHJvYmxlbTwvdGQ+PHRkPlNvdXJjZSBGaWxlPC90ZD48dGQ+UHJlcHJvY2Vzc2VkIEZpbGU8L3RkPjx0ZD5TVERFUlIgT3V0cHV0PC90ZD48L3RyPjwvdGhlYWQ+XG4iOwotICAgICAgZm9yZWFjaCBteSAkZmlsZSAoc29ydCBAZmFpbHVyZXMpIHsKLSAgICAgICAgJGZpbGUgPX4gLyguKykuaW5mby50eHQkLzsKLSAgICAgICAgIyBHZXQgdGhlIHByZXByb2Nlc3NlZCBmaWxlLgotICAgICAgICBteSAkcHBmaWxlID0gJDE7Ci0gICAgICAgICMgT3BlbiB0aGUgaW5mbyBmaWxlIGFuZCBnZXQgdGhlIG5hbWUgb2YgdGhlIHNvdXJjZSBmaWxlLgotICAgICAgICBvcGVuIChJTkZPLCAiJERpci9mYWlsdXJlcy8kZmlsZSIpIG9yCi0gICAgICAgICAgZGllICJDYW5ub3Qgb3BlbiAkRGlyL2ZhaWx1cmVzLyRmaWxlXG4iOwotICAgICAgICBteSAkc3JjZmlsZSA9IDxJTkZPPjsKLSAgICAgICAgY2hvbXAgJHNyY2ZpbGU7Ci0gICAgICAgIG15ICRwcm9ibGVtID0gPElORk8+OwotICAgICAgICBjaG9tcCAkcHJvYmxlbTsKLSAgICAgICAgY2xvc2UgKElORk8pOwotICAgICAgICAjIFByaW50IHRoZSBpbmZvcm1hdGlvbiBpbiB0aGUgdGFibGUuCi0gICAgICAgIG15ICRwcmVmaXggPSBHZXRQcmVmaXgoKTsKLSAgICAgICAgaWYgKGRlZmluZWQgJHByZWZpeCkgeyAkc3JjZmlsZSA9fiBzL15cUSRwcmVmaXgvLzsgfQotICAgICAgICBwcmludCBPVVQgIjx0cj48dGQ+JHByb2JsZW08L3RkPjx0ZD4kc3JjZmlsZTwvdGQ+PHRkPjxhIGhyZWY9XCJmYWlsdXJlcy8kcHBmaWxlXCI+JHBwZmlsZTwvYT48L3RkPjx0ZD48YSBocmVmPVwiZmFpbHVyZXMvJHBwZmlsZS5zdGRlcnIudHh0XCI+JHBwZmlsZS5zdGRlcnIudHh0PC9hPjwvdGQ+PC90cj5cbiI7Ci0gICAgICAgIG15ICRwcGZpbGVfY2xhbmcgPSAkcHBmaWxlOwotICAgICAgICAkcHBmaWxlX2NsYW5nID1+IHMvWy5dKC4rKSQvLmNsYW5nLiQxLzsKLSAgICAgICAgcHJpbnQgT1VUICIgIDwhLS0gUkVQT1JUUFJPQkxFTSBzcmM9XCIkc3JjZmlsZVwiIGZpbGU9XCJmYWlsdXJlcy8kcHBmaWxlXCIgY2xhbmdmaWxlPVwiZmFpbHVyZXMvJHBwZmlsZV9jbGFuZ1wiIHN0ZGVycj1cImZhaWx1cmVzLyRwcGZpbGUuc3RkZXJyLnR4dFwiIGluZm89XCJmYWlsdXJlcy8kcHBmaWxlLmluZm8udHh0XCIgLS0+XG4iOwotICAgICAgfQotICAgICAgcHJpbnQgT1VUICI8L3RhYmxlPlxuIjsKLSAgICB9Ci0gICAgcHJpbnQgT1VUICI8cD5QbGVhc2UgY29uc2lkZXIgc3VibWl0dGluZyBwcmVwcm9jZXNzZWQgZmlsZXMgYXMgPGEgaHJlZj1cImh0dHA6Ly9jbGFuZy1hbmFseXplci5sbHZtLm9yZy9maWxpbmdfYnVncy5odG1sXCI+YnVnIHJlcG9ydHM8L2E+LiA8IS0tIFJFUE9SVENSQVNIRVMgLS0+IDwvcD5cbiI7Ci0gIH0KLQotICBwcmludCBPVVQgIjwvYm9keT48L2h0bWw+XG4iOwotICBjbG9zZShPVVQpOwotICBDb3B5RmlsZXMoJERpcik7Ci0KLSAgIyBNYWtlIHN1cmUgJERpciBhbmQgJEJhc2VEaXIgYXJlIHdvcmxkIHJlYWRhYmxlL2V4ZWN1dGFibGUuCi0gIGNobW9kKDA3NTUsICREaXIpOwotICBpZiAoZGVmaW5lZCAkQmFzZURpcikgeyBjaG1vZCgwNzU1LCAkQmFzZURpcik7IH0KLQotICAjIFByaW50IHN0YXRpc3RpY3MKLSAgcHJpbnQgQ2FsY1N0YXRzKFxAU3RhdHMpIGlmICRBbmFseXplclN0YXRzOwotCi0gIG15ICROdW0gPSBzY2FsYXIoQEluZGV4KTsKLSAgaWYgKCROdW0gPT0gMSkgewotICAgIERpYWcoIiROdW0gYnVnIGZvdW5kLlxuIik7Ci0gIH0gZWxzZSB7Ci0gICAgRGlhZygiJE51bSBidWdzIGZvdW5kLlxuIik7Ci0gIH0KLSAgaWYgKCROdW0gPiAwICYmIC1yICIkRGlyL2luZGV4Lmh0bWwiKSB7Ci0gICAgRGlhZygiUnVuICdzY2FuLXZpZXcgJERpcicgdG8gZXhhbWluZSBidWcgcmVwb3J0cy5cbiIpOwotICB9Ci0KLSAgRGlhZ0NyYXNoZXMoJERpcikgaWYgKHNjYWxhciBAZmFpbHVyZXMgfHwgc2NhbGFyIEBhdHRyaWJ1dGVzX2lnbm9yZWQpOwotCi0gIHJldHVybiAkTnVtOwotfQotCi0jIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jIwotIyBSdW5CdWlsZENvbW1hbmQgLSBSdW4gdGhlIGJ1aWxkIGNvbW1hbmQuCi0jIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jIwotCi1zdWIgQWRkSWZOb3RQcmVzZW50IHsKLSAgbXkgJEFyZ3MgPSBzaGlmdDsKLSAgbXkgJEFyZyA9IHNoaWZ0OwotICBteSAkZm91bmQgPSAwOwotCi0gIGZvcmVhY2ggbXkgJGsgKEAkQXJncykgewotICAgIGlmICgkayBlcSAkQXJnKSB7Ci0gICAgICAkZm91bmQgPSAxOwotICAgICAgbGFzdDsKLSAgICB9Ci0gIH0KLQotICBpZiAoJGZvdW5kID09IDApIHsKLSAgICBwdXNoIEAkQXJncywgJEFyZzsKLSAgfQotfQotCi1zdWIgU2V0RW52IHsKLSAgbXkgJEVudlZhcnMgPSBzaGlmdCBAXzsKLSAgZm9yZWFjaCBteSAkdmFyICgnQ0MnLCAnQ1hYJywgJ0NMQU5HJywgJ0NMQU5HX0NYWCcsCi0gICAgICAgICAgICAgICAgICAgJ0NDQ19BTkFMWVpFUl9BTkFMWVNJUycsICdDQ0NfQU5BTFlaRVJfUExVR0lOUycsCi0gICAgICAgICAgICAgICAgICAgJ0NDQ19BTkFMWVpFUl9DT05GSUcnKSB7Ci0gICAgZGllICIkdmFyIGlzIHVuZGVmaW5lZFxuIiBpZiAoIWRlZmluZWQgJHZhcik7Ci0gICAgJEVOVnskdmFyfSA9ICRFbnZWYXJzLT57JHZhcn07Ci0gIH0KLSAgZm9yZWFjaCBteSAkdmFyICgnQ0NDX0FOQUxZWkVSX1NUT1JFX01PREVMJywKLSAgICAgICAgICAgICAgICAgICAnQ0NDX0FOQUxZWkVSX0NPTlNUUkFJTlRTX01PREVMJywKLSAgICAgICAgICAgICAgICAgICAnQ0NDX0FOQUxZWkVSX0lOVEVSTkFMX1NUQVRTJywKLSAgICAgICAgICAgICAgICAgICAnQ0NDX0FOQUxZWkVSX09VVFBVVF9GT1JNQVQnLAotICAgICAgICAgICAgICAgICAgICdDQ0NfQ0MnLAotICAgICAgICAgICAgICAgICAgICdDQ0NfQ1hYJywKLSAgICAgICAgICAgICAgICAgICAnQ0NDX1JFUE9SVF9GQUlMVVJFUycsCi0gICAgICAgICAgICAgICAgICAgJ0NMQU5HX0FOQUxZWkVSX1RBUkdFVCcpIHsKLSAgICBteSAkeCA9ICRFbnZWYXJzLT57JHZhcn07Ci0gICAgaWYgKGRlZmluZWQgJHgpIHsgJEVOVnskdmFyfSA9ICR4IH0KLSAgfQotICBteSAkVmVyYm9zZSA9ICRFbnZWYXJzLT57J1ZFUkJPU0UnfTsKLSAgaWYgKCRWZXJib3NlID49IDIpIHsKLSAgICAkRU5WeydDQ0NfQU5BTFlaRVJfVkVSQk9TRSd9ID0gMTsKLSAgfQotICBpZiAoJFZlcmJvc2UgPj0gMykgewotICAgICRFTlZ7J0NDQ19BTkFMWVpFUl9MT0cnfSA9IDE7Ci0gIH0KLX0KLQotc3ViIFJ1blhjb2RlYnVpbGQgewotICBteSAkQXJncyA9IHNoaWZ0OwotICBteSAkSWdub3JlRXJyb3JzID0gc2hpZnQ7Ci0gIG15ICRDQ0FuYWx5emVyID0gc2hpZnQ7Ci0gIG15ICRDWFhBbmFseXplciA9IHNoaWZ0OwotICBteSAkRW52VmFycyA9IHNoaWZ0OwotCi0gIGlmICgkSWdub3JlRXJyb3JzKSB7Ci0gICAgQWRkSWZOb3RQcmVzZW50KCRBcmdzLCItUEJYQnVpbGRzQ29udGludWVBZnRlckVycm9ycz1ZRVMiKTsKLSAgfQotCi0gICMgRGV0ZWN0IHRoZSB2ZXJzaW9uIG9mIFhjb2RlLiAgSWYgWGNvZGUgNC42IG9yIGhpZ2hlciwgdXNlIG5ldwotICAjIGluIHNpdHUgc3VwcG9ydCBmb3IgYW5hbHl6ZXIgaW50ZXJwb3NpdGlvbiB3aXRob3V0IG5lZWRlZCB0byBvdmVycmlkZQotICAjIHRoZSBjb21waWxlci4KLSAgb3BlbihERVRFQ1RfWENPREUsICItfCIsICRBcmdzLT5bMF0sICItdmVyc2lvbiIpIG9yCi0gICAgZGllICJlcnJvcjogY2Fubm90IGRldGVjdCB2ZXJzaW9uIG9mIHhjb2RlYnVpbGRcbiI7Ci0KLSAgbXkgJG9sZEJlaGF2aW9yID0gMTsKLQotICB3aGlsZSg8REVURUNUX1hDT0RFPikgewotICAgIGlmICgvXlhjb2RlICguKykkLykgewotICAgICAgbXkgJHZlciA9ICQxOwotICAgICAgaWYgKCR2ZXIgPX4gL14oWzAtOV0rWy5dWzAtOV0rKVteMC05XT8vKSB7Ci0gICAgICAgIGlmICgkMSA+PSA0LjYpIHsKLSAgICAgICAgICAkb2xkQmVoYXZpb3IgPSAwOwotICAgICAgICAgIGxhc3Q7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLSAgY2xvc2UoREVURUNUX1hDT0RFKTsKLQotICAjIElmIC0tb3ZlcnJpZGUtY29tcGlsZXIgaXMgZXhwbGljaXRlbHkgcmVxdWVzdGVkLCByZXNvcnQgdG8gdGhlIG9sZAotICAjIGJlaGF2aW9yIHJlZ2FyZGxlc3Mgb2YgWGNvZGUgdmVyc2lvbi4KLSAgaWYgKCRPcHRpb25ze092ZXJyaWRlQ29tcGlsZXJ9KSB7Ci0gICAgJG9sZEJlaGF2aW9yID0gMTsKLSAgfQotCi0gIGlmICgkb2xkQmVoYXZpb3IgPT0gMCkgewotICAgIG15ICRPdXRwdXREaXIgPSAkRW52VmFycy0+eyJPVVRQVVRfRElSIn07Ci0gICAgbXkgJENMQU5HID0gJEVudlZhcnMtPnsiQ0xBTkcifTsKLSAgICBteSAkT3RoZXJGbGFncyA9ICRFbnZWYXJzLT57IkNDQ19BTkFMWVpFUl9BTkFMWVNJUyJ9OwotICAgIHB1c2ggQCRBcmdzLAotICAgICAgICAiUlVOX0NMQU5HX1NUQVRJQ19BTkFMWVpFUj1ZRVMiLAotICAgICAgICAiQ0xBTkdfQU5BTFlaRVJfT1VUUFVUPXBsaXN0LWh0bWwiLAotICAgICAgICAiQ0xBTkdfQU5BTFlaRVJfRVhFQz0kQ0xBTkciLAotICAgICAgICAiQ0xBTkdfQU5BTFlaRVJfT1VUUFVUX0RJUj0kT3V0cHV0RGlyIiwKLSAgICAgICAgIkNMQU5HX0FOQUxZWkVSX09USEVSX0ZMQUdTPSRPdGhlckZsYWdzIjsKLQotICAgIHJldHVybiAoc3lzdGVtKEAkQXJncykgPj4gOCk7Ci0gIH0KLQotICAjIERlZmF1bHQgdG8gb2xkIGJlaGF2aW9yIHdoZXJlIHdlIGluc2VydCBhIGJvZ3VzIGNvbXBpbGVyLgotICBTZXRFbnYoJEVudlZhcnMpOwotCi0gICMgQ2hlY2sgaWYgdXNpbmcgaVBob25lIFNESyAzLjAgKHNpbXVsYXRvcikuICBJZiBzbyB0aGUgY29tcGlsZXIgYmVpbmcKLSAgIyB1c2VkIHNob3VsZCBiZSBnY2MtNC4yLgotICBpZiAoIWRlZmluZWQgJEVOVnsiQ0NDX0NDIn0pIHsKLSAgICBmb3IgKG15ICRpID0gMCA7ICRpIDwgc2NhbGFyKEAkQXJncyk7ICsrJGkpIHsKLSAgICAgIGlmICgkQXJncy0+WyRpXSBlcSAiLXNkayIgJiYgJGkgKyAxIDwgc2NhbGFyKEAkQXJncykpIHsKLSAgICAgICAgaWYgKEAkQXJnc1skaSsxXSA9fiAvXmlwaG9uZXNpbXVsYXRvcjMvKSB7Ci0gICAgICAgICAgJEVOVnsiQ0NDX0NDIn0gPSAiZ2NjLTQuMiI7Ci0gICAgICAgICAgJEVOVnsiQ0NDX0NYWCJ9ID0gImcrKy00LjIiOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgIyBEaXNhYmxlIFBDSCBmaWxlcyB1bnRpbCBjbGFuZyBzdXBwb3J0cyB0aGVtLgotICBBZGRJZk5vdFByZXNlbnQoJEFyZ3MsIkdDQ19QUkVDT01QSUxFX1BSRUZJWF9IRUFERVI9Tk8iKTsKLQotICAjIFdoZW4gJ0NDJyBpcyBzZXQsIHhjb2RlYnVpbGQgdXNlcyBpdCB0byBkbyBhbGwgbGlua2luZywgZXZlbiBpZiB3ZSBhcmUKLSAgIyBsaW5raW5nIEMrKyBvYmplY3QgZmlsZXMuICBTZXQgJ0xEUExVU1BMVVMnIHNvIHRoYXQgeGNvZGVidWlsZCB1c2VzICdnKysnCi0gICMgKHZpYSBjKystYW5hbHl6ZXIpIHdoZW4gbGlua2luZyBzdWNoIGZpbGVzLgotICAkRU5WeyJMRFBMVVNQTFVTIn0gPSAkQ1hYQW5hbHl6ZXI7Ci0KLSAgcmV0dXJuIChzeXN0ZW0oQCRBcmdzKSA+PiA4KTsKLX0KLQotc3ViIFJ1bkJ1aWxkQ29tbWFuZCB7Ci0gIG15ICRBcmdzID0gc2hpZnQ7Ci0gIG15ICRJZ25vcmVFcnJvcnMgPSBzaGlmdDsKLSAgbXkgJENtZCA9ICRBcmdzLT5bMF07Ci0gIG15ICRDQ0FuYWx5emVyID0gc2hpZnQ7Ci0gIG15ICRDWFhBbmFseXplciA9IHNoaWZ0OwotICBteSAkRW52VmFycyA9IHNoaWZ0OwotCi0gIGlmICgkQ21kID1+IC9cYnhjb2RlYnVpbGQkLykgewotICAgIHJldHVybiBSdW5YY29kZWJ1aWxkKCRBcmdzLCAkSWdub3JlRXJyb3JzLCAkQ0NBbmFseXplciwgJENYWEFuYWx5emVyLCAkRW52VmFycyk7Ci0gIH0KLQotICAjIFNldHVwIHRoZSBlbnZpcm9ubWVudC4KLSAgU2V0RW52KCRFbnZWYXJzKTsKLQotICBpZiAoJENtZCA9fiAvKC4qXC8/Z2NjW15cL10qJCkvIG9yCi0gICAgICAkQ21kID1+IC8oLipcLz9jY1teXC9dKiQpLyBvcgotICAgICAgJENtZCA9fiAvKC4qXC8/bGx2bS1nY2NbXlwvXSokKS8gb3IKLSAgICAgICRDbWQgPX4gLyguKlwvP2NsYW5nJCkvIG9yCi0gICAgICAkQ21kID1+IC8oLipcLz9jY2MtYW5hbHl6ZXJbXlwvXSokKS8pIHsKLQotICAgIGlmICghKCRDbWQgPX4gL2NjYy1hbmFseXplci8pIGFuZCAhZGVmaW5lZCAkRU5WeyJDQ0NfQ0MifSkgewotICAgICAgJEVOVnsiQ0NDX0NDIn0gPSAkMTsKLSAgICB9Ci0KLSAgICBzaGlmdCBAJEFyZ3M7Ci0gICAgdW5zaGlmdCBAJEFyZ3MsICRDQ0FuYWx5emVyOwotICB9Ci0gIGVsc2lmICgkQ21kID1+IC8oLipcLz9nXCtcK1teXC9dKiQpLyBvcgotICAgICAgICAkQ21kID1+IC8oLipcLz9jXCtcK1teXC9dKiQpLyBvcgotICAgICAgICAkQ21kID1+IC8oLipcLz9sbHZtLWdcK1wrW15cL10qJCkvIG9yCi0gICAgICAgICRDbWQgPX4gLyguKlwvP2NsYW5nXCtcKyQpLyBvcgotICAgICAgICAkQ21kID1+IC8oLipcLz9jXCtcKy1hbmFseXplclteXC9dKiQpLykgewotICAgIGlmICghKCRDbWQgPX4gL2NcK1wrLWFuYWx5emVyLykgYW5kICFkZWZpbmVkICRFTlZ7IkNDQ19DWFgifSkgewotICAgICAgJEVOVnsiQ0NDX0NYWCJ9ID0gJDE7Ci0gICAgfQotICAgIHNoaWZ0IEAkQXJnczsKLSAgICB1bnNoaWZ0IEAkQXJncywgJENYWEFuYWx5emVyOwotICB9Ci0gIGVsc2lmICgkQ21kIGVxICJtYWtlIiBvciAkQ21kIGVxICJnbWFrZSIgb3IgJENtZCBlcSAibWluZ3czMi1tYWtlIikgewotICAgIEFkZElmTm90UHJlc2VudCgkQXJncywgIkNDPSRDQ0FuYWx5emVyIik7Ci0gICAgQWRkSWZOb3RQcmVzZW50KCRBcmdzLCAiQ1hYPSRDWFhBbmFseXplciIpOwotICAgIGlmICgkSWdub3JlRXJyb3JzKSB7Ci0gICAgICBBZGRJZk5vdFByZXNlbnQoJEFyZ3MsIi1rIik7Ci0gICAgICBBZGRJZk5vdFByZXNlbnQoJEFyZ3MsIi1pIik7Ci0gICAgfQotICB9Ci0KLSAgcmV0dXJuIChzeXN0ZW0oQCRBcmdzKSA+PiA4KTsKLX0KLQotIyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIyMKLSMgRGlzcGxheUhlbHAgLSBVdGlsaXR5IGZ1bmN0aW9uIHRvIGRpc3BsYXkgYWxsIGhlbHAgb3B0aW9ucy4KLSMjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMjCi0KLXN1YiBEaXNwbGF5SGVscCB7Ci0KLSAgbXkgJEFyZ0NsYW5nTm90Rm91bmRFcnJNc2cgPSBzaGlmdDsKLXByaW50IDw8RU5EVEVYVDsKLVVTQUdFOiAkUHJvZyBbb3B0aW9uc10gPGJ1aWxkIGNvbW1hbmQ+IFtidWlsZCBvcHRpb25zXQotCi1FTkRURVhUCi0KLSAgaWYgKGRlZmluZWQgJEJ1aWxkTmFtZSkgewotICAgIHByaW50ICJBTkFMWVpFUiBCVUlMRDogJEJ1aWxkTmFtZSAoJEJ1aWxkRGF0ZSlcblxuIjsKLSAgfQotCi1wcmludCA8PEVORFRFWFQ7Ci1PUFRJT05TOgotCi0gLWFuYWx5emUtaGVhZGVycwotCi0gICBBbHNvIGFuYWx5emUgZnVuY3Rpb25zIGluICNpbmNsdWRlZCBmaWxlcy4gIEJ5IGRlZmF1bHQsIHN1Y2ggZnVuY3Rpb25zCi0gICBhcmUgc2tpcHBlZCB1bmxlc3MgdGhleSBhcmUgY2FsbGVkIGJ5IGZ1bmN0aW9ucyB3aXRoaW4gdGhlIG1haW4gc291cmNlIGZpbGUuCi0KLSAtbyA8b3V0cHV0IGxvY2F0aW9uPgotCi0gICBTcGVjaWZpZXMgdGhlIG91dHB1dCBkaXJlY3RvcnkgZm9yIGFuYWx5emVyIHJlcG9ydHMuIFN1YmRpcmVjdG9yaWVzIHdpbGwgYmUKLSAgIGNyZWF0ZWQgYXMgbmVlZGVkIHRvIHJlcHJlc2VudCBzZXBhcmF0ZSAicnVucyIgb2YgdGhlIGFuYWx5emVyLiBJZiB0aGlzCi0gICBvcHRpb24gaXMgbm90IHNwZWNpZmllZCwgYSBkaXJlY3RvcnkgaXMgY3JlYXRlZCBpbiAvdG1wIChUTVBESVIgb24gTWFjIE9TIFgpCi0gICB0byBzdG9yZSB0aGUgcmVwb3J0cy4KLQotIC1oCi0gLS1oZWxwCi0KLSAgIERpc3BsYXkgdGhpcyBtZXNzYWdlLgotCi0gLWsKLSAtLWtlZXAtZ29pbmcKLQotICAgQWRkIGEgImtlZXAgb24gZ29pbmciIG9wdGlvbiB0byB0aGUgc3BlY2lmaWVkIGJ1aWxkIGNvbW1hbmQuIFRoaXMgb3B0aW9uCi0gICBjdXJyZW50bHkgc3VwcG9ydHMgbWFrZSBhbmQgeGNvZGVidWlsZC4gVGhpcyBpcyBhIGNvbnZlbmllbmNlIG9wdGlvbjsgb25lCi0gICBjYW4gc3BlY2lmeSB0aGlzIGJlaGF2aW9yIGRpcmVjdGx5IHVzaW5nIGJ1aWxkIG9wdGlvbnMuCi0KLSAtLWh0bWwtdGl0bGUgW3RpdGxlXQotIC0taHRtbC10aXRsZT1bdGl0bGVdCi0KLSAgIFNwZWNpZnkgdGhlIHRpdGxlIHVzZWQgb24gZ2VuZXJhdGVkIEhUTUwgcGFnZXMuIElmIG5vdCBzcGVjaWZpZWQsIGEgZGVmYXVsdAotICAgdGl0bGUgd2lsbCBiZSB1c2VkLgotCi0gLXBsaXN0Ci0KLSAgIEJ5IGRlZmF1bHQgdGhlIG91dHB1dCBvZiBzY2FuLWJ1aWxkIGlzIGEgc2V0IG9mIEhUTUwgZmlsZXMuIFRoaXMgb3B0aW9uCi0gICBvdXRwdXRzIHRoZSByZXN1bHRzIGFzIGEgc2V0IG9mIC5wbGlzdCBmaWxlcy4KLQotIC1wbGlzdC1odG1sCi0KLSAgIEJ5IGRlZmF1bHQgdGhlIG91dHB1dCBvZiBzY2FuLWJ1aWxkIGlzIGEgc2V0IG9mIEhUTUwgZmlsZXMuIFRoaXMgb3B0aW9uCi0gICBvdXRwdXRzIHRoZSByZXN1bHRzIGFzIGEgc2V0IG9mIEhUTUwgYW5kIC5wbGlzdCBmaWxlcy4KLQotIC0tc3RhdHVzLWJ1Z3MKLQotICAgQnkgZGVmYXVsdCwgdGhlIGV4aXQgc3RhdHVzIG9mIHNjYW4tYnVpbGQgaXMgdGhlIHNhbWUgYXMgdGhlIGV4ZWN1dGVkIGJ1aWxkCi0gICBjb21tYW5kLiBTcGVjaWZ5aW5nIHRoaXMgb3B0aW9uIGNhdXNlcyB0aGUgZXhpdCBzdGF0dXMgb2Ygc2Nhbi1idWlsZCB0byBiZSAxCi0gICBpZiBpdCBmb3VuZCBwb3RlbnRpYWwgYnVncyBhbmQgMCBvdGhlcndpc2UuCi0KLSAtLXVzZS1jYyBbY29tcGlsZXIgcGF0aF0KLSAtLXVzZS1jYz1bY29tcGlsZXIgcGF0aF0KLQotICAgc2Nhbi1idWlsZCBhbmFseXplcyBhIHByb2plY3QgYnkgaW50ZXJwb3NpbmcgYSAiZmFrZSBjb21waWxlciIsIHdoaWNoCi0gICBleGVjdXRlcyBhIHJlYWwgY29tcGlsZXIgZm9yIGNvbXBpbGF0aW9uIGFuZCB0aGUgc3RhdGljIGFuYWx5emVyIGZvciBhbmFseXNpcy4KLSAgIEJlY2F1c2Ugb2YgdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gb2YgaW50ZXJwb3NpdGlvbiwgc2Nhbi1idWlsZCBkb2VzIG5vdAotICAga25vdyB3aGF0IGNvbXBpbGVyIHlvdXIgcHJvamVjdCBub3JtYWxseSB1c2VzLiAgSW5zdGVhZCwgaXQgc2ltcGx5IG92ZXJyaWRlcwotICAgdGhlIENDIGVudmlyb25tZW50IHZhcmlhYmxlLCBhbmQgZ3Vlc3NlcyB5b3VyIGRlZmF1bHQgY29tcGlsZXIuCi0KLSAgIEluIHRoZSBmdXR1cmUsIHRoaXMgaW50ZXJwb3NpdGlvbiBtZWNoYW5pc20gdG8gYmUgaW1wcm92ZWQsIGJ1dCBpZiB5b3UgbmVlZAotICAgc2Nhbi1idWlsZCB0byB1c2UgYSBzcGVjaWZpYyBjb21waWxlciBmb3IgKmNvbXBpbGF0aW9uKiB0aGVuIHlvdSBjYW4gdXNlCi0gICB0aGlzIG9wdGlvbiB0byBzcGVjaWZ5IGEgcGF0aCB0byB0aGF0IGNvbXBpbGVyLgotCi0gICBJZiB0aGUgZ2l2ZW4gY29tcGlsZXIgaXMgYSBjcm9zcyBjb21waWxlciwgeW91IG1heSBhbHNvIG5lZWQgdG8gcHJvdmlkZQotICAgLS1hbmFseXplci10YXJnZXQgb3B0aW9uIHRvIHByb3Blcmx5IGFuYWx5emUgdGhlIHNvdXJjZSBjb2RlIGJlY2F1c2Ugc3RhdGljCi0gICBhbmFseXplciBydW5zIGFzIGlmIHRoZSBjb2RlIGlzIGNvbXBpbGVkIGZvciB0aGUgaG9zdCBtYWNoaW5lIGJ5IGRlZmF1bHQuCi0KLSAtLXVzZS1jKysgW2NvbXBpbGVyIHBhdGhdCi0gLS11c2UtYysrPVtjb21waWxlciBwYXRoXQotCi0gICBUaGlzIGlzIHRoZSBzYW1lIGFzICItLXVzZS1jYyIgYnV0IGZvciBDKysgY29kZS4KLQotIC0tYW5hbHl6ZXItdGFyZ2V0IFt0YXJnZXQgdHJpcGxlIG5hbWUgZm9yIGFuYWx5c2lzXQotIC0tYW5hbHl6ZXItdGFyZ2V0PVt0YXJnZXQgdHJpcGxlIG5hbWUgZm9yIGFuYWx5c2lzXQotCi0gICBUaGlzIHByb3ZpZGVzIHRhcmdldCB0cmlwbGUgaW5mb3JtYXRpb24gdG8gY2xhbmcgc3RhdGljIGFuYWx5emVyLgotICAgSXQgb25seSBjaGFuZ2VzIHRoZSB0YXJnZXQgZm9yIGFuYWx5c2lzIGJ1dCBkb2Vzbid0IGNoYW5nZSB0aGUgdGFyZ2V0IG9mIGEKLSAgIHJlYWwgY29tcGlsZXIgZ2l2ZW4gYnkgLS11c2UtY2MgYW5kIC0tdXNlLWMrKyBvcHRpb25zLgotCi0gLXYKLQotICAgRW5hYmxlIHZlcmJvc2Ugb3V0cHV0IGZyb20gc2Nhbi1idWlsZC4gQSBzZWNvbmQgYW5kIHRoaXJkICctdicgaW5jcmVhc2VzCi0gICB2ZXJib3NpdHkuCi0KLSAtVgotIC0tdmlldwotCi0gICBWaWV3IGFuYWx5c2lzIHJlc3VsdHMgaW4gYSB3ZWIgYnJvd3NlciB3aGVuIHRoZSBidWlsZCBjb21wbGV0ZXMuCi0KLUFEVkFOQ0VEIE9QVElPTlM6Ci0KLSAtbm8tZmFpbHVyZS1yZXBvcnRzCi0KLSAgIERvIG5vdCBjcmVhdGUgYSAnZmFpbHVyZXMnIHN1YmRpcmVjdG9yeSB0aGF0IGluY2x1ZGVzIGFuYWx5emVyIGNyYXNoIHJlcG9ydHMKLSAgIGFuZCBwcmVwcm9jZXNzZWQgc291cmNlIGZpbGVzLgotCi0gLXN0YXRzCi0KLSAgIEdlbmVyYXRlcyB2aXNpdGF0aW9uIHN0YXRpc3RpY3MgZm9yIHRoZSBwcm9qZWN0IGJlaW5nIGFuYWx5emVkLgotCi0gLW1heGxvb3AgPGxvb3AgY291bnQ+Ci0KLSAgIFNwZWNpZml5IHRoZSBudW1iZXIgb2YgdGltZXMgYSBibG9jayBjYW4gYmUgdmlzaXRlZCBiZWZvcmUgZ2l2aW5nIHVwLgotICAgRGVmYXVsdCBpcyA0LiBJbmNyZWFzZSBmb3IgbW9yZSBjb21wcmVoZW5zaXZlIGNvdmVyYWdlIGF0IGEgY29zdCBvZiBzcGVlZC4KLQotIC1pbnRlcm5hbC1zdGF0cwotCi0gICBHZW5lcmF0ZSBpbnRlcm5hbCBhbmFseXplciBzdGF0aXN0aWNzLgotCi0gLS11c2UtYW5hbHl6ZXIgW1hjb2RlfHBhdGggdG8gY2xhbmddCi0gLS11c2UtYW5hbHl6ZXI9W1hjb2RlfHBhdGggdG8gY2xhbmddCi0KLSAgIHNjYW4tYnVpbGQgdXNlcyB0aGUgJ2NsYW5nJyBleGVjdXRhYmxlIHJlbGF0aXZlIHRvIGl0c2VsZiBmb3Igc3RhdGljCi0gICBhbmFseXNpcy4gT25lIGNhbiBvdmVycmlkZSB0aGlzIGJlaGF2aW9yIHdpdGggdGhpcyBvcHRpb24gYnkgdXNpbmcgdGhlCi0gICAnY2xhbmcnIHBhY2thZ2VkIHdpdGggWGNvZGUgKG9uIE9TIFgpIG9yIGZyb20gdGhlIFBBVEguCi0KLSAtLWtlZXAtZW1wdHkKLQotICAgRG9uJ3QgcmVtb3ZlIHRoZSBidWlsZCByZXN1bHRzIGRpcmVjdG9yeSBldmVuIGlmIG5vIGlzc3VlcyB3ZXJlIHJlcG9ydGVkLgotCi0gLS1vdmVycmlkZS1jb21waWxlcgotICAgQWx3YXlzIHJlc29ydCB0byB0aGUgY2NjLWFuYWx5emVyIGV2ZW4gd2hlbiBiZXR0ZXIgaW50ZXJwb3NpdGlvbiBtZXRob2RzCi0gICBhcmUgYXZhaWxhYmxlLgotCi0gLWFuYWx5emVyLWNvbmZpZyA8b3B0aW9ucz4KLQotICAgUHJvdmlkZSBvcHRpb25zIHRvIHBhc3MgdGhyb3VnaCB0byB0aGUgYW5hbHl6ZXIncyAtYW5hbHl6ZXItY29uZmlnIGZsYWcuCi0gICBTZXZlcmFsIG9wdGlvbnMgYXJlIHNlcGFyYXRlZCB3aXRoIGNvbW1hOiAna2V5MT12YWwxLGtleTI9dmFsMicKLQotICAgQXZhaWxhYmxlIG9wdGlvbnM6Ci0gICAgICogc3RhYmxlLXJlcG9ydC1maWxlbmFtZT10cnVlIG9yIGZhbHNlIChkZWZhdWx0KQotICAgICAgIFN3aXRjaCB0aGUgcGFnZSBuYW1pbmcgdG86Ci0gICAgICAgcmVwb3J0LTxmaWxlbmFtZT4tPGZ1bmN0aW9uL21ldGhvZCBuYW1lPi08aWQ+Lmh0bWwKLSAgICAgICBpbnN0ZWFkIG9mIHJlcG9ydC1YWFhYWFguaHRtbAotCi1DT05UUk9MTElORyBDSEVDS0VSUzoKLQotIEEgZGVmYXVsdCBncm91cCBvZiBjaGVja2VycyBhcmUgYWx3YXlzIHJ1biB1bmxlc3MgZXhwbGljaXRseSBkaXNhYmxlZC4KLSBDaGVja2VycyBtYXkgYmUgZW5hYmxlZC9kaXNhYmxlZCB1c2luZyB0aGUgZm9sbG93aW5nIG9wdGlvbnM6Ci0KLSAtZW5hYmxlLWNoZWNrZXIgW2NoZWNrZXIgbmFtZV0KLSAtZGlzYWJsZS1jaGVja2VyIFtjaGVja2VyIG5hbWVdCi0KLUxPQURJTkcgQ0hFQ0tFUlM6Ci0KLSBMb2FkaW5nIGV4dGVybmFsIGNoZWNrZXJzIHVzaW5nIHRoZSBjbGFuZyBwbHVnaW4gaW50ZXJmYWNlOgotCi0gLWxvYWQtcGx1Z2luIFtwbHVnaW4gbGlicmFyeV0KLUVORFRFWFQKLQotICBpZiAoZGVmaW5lZCAkQ2xhbmcgJiYgLXggJENsYW5nKSB7Ci0gICAgIyBRdWVyeSBjbGFuZyBmb3IgbGlzdCBvZiBjaGVja2VycyB0aGF0IGFyZSBlbmFibGVkLgotCi0gICAgIyBjcmVhdGUgYSBsaXN0IHRvIGxvYWQgdGhlIHBsdWdpbnMgdmlhIHRoZSAnWGNsYW5nJyBjb21tYW5kIGxpbmUKLSAgICAjIGFyZ3VtZW50Ci0gICAgbXkgQFBsdWdpbkxvYWRDb21tYW5kbGluZV94Y2xhbmc7Ci0gICAgZm9yZWFjaCBteSAkcGFyYW0gKCBAeyRPcHRpb25ze1BsdWdpbnNUb0xvYWR9fSApIHsKLSAgICAgIHB1c2ggKCBAUGx1Z2luTG9hZENvbW1hbmRsaW5lX3hjbGFuZywgIi1YY2xhbmciICk7Ci0gICAgICBwdXNoICggQFBsdWdpbkxvYWRDb21tYW5kbGluZV94Y2xhbmcsICItbG9hZCIgKTsKLSAgICAgIHB1c2ggKCBAUGx1Z2luTG9hZENvbW1hbmRsaW5lX3hjbGFuZywgIi1YY2xhbmciICk7Ci0gICAgICBwdXNoICggQFBsdWdpbkxvYWRDb21tYW5kbGluZV94Y2xhbmcsICRwYXJhbSApOwotICAgIH0KLQotICAgIG15ICVFbmFibGVkQ2hlY2tlcnM7Ci0gICAgZm9yZWFjaCBteSAkbGFuZyAoImMiLCAib2JqZWN0aXZlLWMiLCAib2JqZWN0aXZlLWMrKyIsICJjKysiKSB7Ci0gICAgICBteSAkRXhlY0xpbmUgPSBqb2luKCcgJywgcXEvIiRDbGFuZyIvLCBAUGx1Z2luTG9hZENvbW1hbmRsaW5lX3hjbGFuZywgIi0tYW5hbHl6ZSIsICIteCIsICRsYW5nLCAiLSIsICItIyMjIiwgIjI+JjEiLCAifCIpOwotICAgICAgb3BlbihQUywgJEV4ZWNMaW5lKTsKLSAgICAgIHdoaWxlICg8UFM+KSB7Ci0gICAgICAgIGZvcmVhY2ggbXkgJHZhbCAoc3BsaXQgL1xzKy8pIHsKLSAgICAgICAgICAkdmFsID1+IHMvXCIvL2c7Ci0gICAgICAgICAgaWYgKCR2YWwgPX4gLy1hbmFseXplci1jaGVja2VyXD0oW15cc10rKS8pIHsKLSAgICAgICAgICAgICRFbmFibGVkQ2hlY2tlcnN7JDF9ID0gMTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICAjIFF1ZXJ5IGNsYW5nIGZvciBjb21wbGV0ZSBsaXN0IG9mIGNoZWNrZXJzLgotICAgIG15IEBQbHVnaW5Mb2FkQ29tbWFuZGxpbmU7Ci0gICAgZm9yZWFjaCBteSAkcGFyYW0gKCBAeyRPcHRpb25ze1BsdWdpbnNUb0xvYWR9fSApIHsKLSAgICAgIHB1c2ggKCBAUGx1Z2luTG9hZENvbW1hbmRsaW5lLCAiLWxvYWQiICk7Ci0gICAgICBwdXNoICggQFBsdWdpbkxvYWRDb21tYW5kbGluZSwgJHBhcmFtICk7Ci0gICAgfQotCi0gICAgbXkgJEV4ZWNMaW5lID0gam9pbignICcsIHFxLyIkQ2xhbmciLywgIi1jYzEiLCBAUGx1Z2luTG9hZENvbW1hbmRsaW5lLCAiLWFuYWx5emVyLWNoZWNrZXItaGVscCIsICIyPiYxIiwgInwiKTsKLSAgICBvcGVuKFBTLCAkRXhlY0xpbmUpOwotICAgIG15ICRmb3VuZENoZWNrZXJzID0gMDsKLSAgICB3aGlsZSAoPFBTPikgewotICAgICAgaWYgKC9DSEVDS0VSUzovKSB7Ci0gICAgICAgICRmb3VuZENoZWNrZXJzID0gMTsKLSAgICAgICAgbGFzdDsKLSAgICAgIH0KLSAgICB9Ci0gICAgaWYgKCEkZm91bmRDaGVja2VycykgewotICAgICAgcHJpbnQgIiAgKioqIENvdWxkIG5vdCBxdWVyeSBDbGFuZyBmb3IgdGhlIGxpc3Qgb2YgYXZhaWxhYmxlIGNoZWNrZXJzLiI7Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgcHJpbnQoIlxuQVZBSUxBQkxFIENIRUNLRVJTOlxuXG4iKTsKLSAgICAgIG15ICRza2lwID0gMDsKLSAgICAgICB3aGlsZSg8UFM+KSB7Ci0gICAgICAgIGlmICgvZXhwZXJpbWVudGFsLykgewotICAgICAgICAgICRza2lwID0gMTsKLSAgICAgICAgICBuZXh0OwotICAgICAgICB9Ci0gICAgICAgIGlmICgkc2tpcCkgewotICAgICAgICAgIG5leHQgaWYgKCEvXlxzXHNbXlxzXS8pOwotICAgICAgICAgICRza2lwID0gMDsKLSAgICAgICAgfQotICAgICAgICBzL15cc1xzLy87Ci0gICAgICAgIGlmICgvXihbXlxzXSspLykgewotICAgICAgICAgICMgSXMgdGhlIGNoZWNrZXIgZW5hYmxlZD8KLSAgICAgICAgICBteSAkY2hlY2tlciA9ICQxOwotICAgICAgICAgIG15ICRlbmFibGVkID0gMDsKLSAgICAgICAgICBteSAkYWdncmVnYXRlID0gIiI7Ci0gICAgICAgICAgZm9yZWFjaCBteSAkZG9tYWluIChzcGxpdCAvXC4vLCAkY2hlY2tlcikgewotICAgICAgICAgICAgJGFnZ3JlZ2F0ZSAuPSAkZG9tYWluOwotICAgICAgICAgICAgaWYgKCRFbmFibGVkQ2hlY2tlcnN7JGFnZ3JlZ2F0ZX0pIHsKLSAgICAgICAgICAgICAgJGVuYWJsZWQgPTE7Ci0gICAgICAgICAgICAgIGxhc3Q7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAjIGFwcGVuZCBhIGRvdCwgaWYgYW4gYWRkaXRpb25hbCBkb21haW4gaXMgYWRkZWQgaW4gdGhlIG5leHQgaXRlcmF0aW9uCi0gICAgICAgICAgICAkYWdncmVnYXRlIC49ICIuIjsKLSAgICAgICAgICB9Ci0KLSAgICAgICAgICBpZiAoJGVuYWJsZWQpIHsKLSAgICAgICAgICAgIHByaW50ICIgKyAiOwotICAgICAgICAgIH0KLSAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIHByaW50ICIgICAiOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICBwcmludCAiICAgIjsKLSAgICAgICAgfQotICAgICAgICBwcmludCAkXzsKLSAgICAgIH0KLSAgICAgIHByaW50ICJcbk5PVEU6IFwiK1wiIGluZGljYXRlcyB0aGF0IGFuIGFuYWx5c2lzIGlzIGVuYWJsZWQgYnkgZGVmYXVsdC5cbiI7Ci0gICAgfQotICAgIGNsb3NlIFBTOwotICB9Ci0gIGVsc2UgewotICAgIHByaW50ICIgICoqKiBDb3VsZCBub3QgcXVlcnkgQ2xhbmcgZm9yIHRoZSBsaXN0IG9mIGF2YWlsYWJsZSBjaGVja2Vycy5cbiI7Ci0gICAgaWYgKGRlZmluZWQgICRBcmdDbGFuZ05vdEZvdW5kRXJyTXNnKSB7Ci0gICAgICBwcmludCAiICAqKiogUmVhc29uOiAkQXJnQ2xhbmdOb3RGb3VuZEVyck1zZ1xuIjsKLSAgICB9Ci0gIH0KLQotcHJpbnQgPDxFTkRURVhUCi0KLUJVSUxEIE9QVElPTlMKLQotIFlvdSBjYW4gc3BlY2lmeSBhbnkgYnVpbGQgb3B0aW9uIGFjY2VwdGFibGUgdG8gdGhlIGJ1aWxkIGNvbW1hbmQuCi0KLUVYQU1QTEUKLQotIHNjYW4tYnVpbGQgLW8gL3RtcC9teWh0bWxkaXIgbWFrZSAtajQKLQotVGhlIGFib3ZlIGV4YW1wbGUgY2F1c2VzIGFuYWx5c2lzIHJlcG9ydHMgdG8gYmUgZGVwb3NpdGVkIGludG8gYSBzdWJkaXJlY3RvcnkKLW9mICIvdG1wL215aHRtbGRpciIgYW5kIHRvIHJ1biAibWFrZSIgd2l0aCB0aGUgIi1qNCIgb3B0aW9uLiBBIGRpZmZlcmVudAotc3ViZGlyZWN0b3J5IGlzIGNyZWF0ZWQgZWFjaCB0aW1lIHNjYW4tYnVpbGQgYW5hbHl6ZXMgYSBwcm9qZWN0LiBUaGUgYW5hbHl6ZXIKLXNob3VsZCBzdXBwb3J0IG1vc3QgcGFyYWxsZWwgYnVpbGRzLCBidXQgbm90IGRpc3RyaWJ1dGVkIGJ1aWxkcy4KLQotRU5EVEVYVAotfQotCi0jIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jIwotIyBIdG1sRXNjYXBlIC0gSFRNTCBlbnRpdHkgZW5jb2RlIGNoYXJhY3RlcnMgdGhhdCBhcmUgc3BlY2lhbCBpbiBIVE1MCi0jIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jIwotCi1zdWIgSHRtbEVzY2FwZSB7Ci0gICMgY29weSBhcmd1bWVudCB0byBuZXcgdmFyaWFibGUgc28gd2UgZG9uJ3QgY2xvYmJlciB0aGUgb3JpZ2luYWwKLSAgbXkgJGFyZyA9IHNoaWZ0IHx8ICcnOwotICBteSAkdG1wID0gJGFyZzsKLSAgJHRtcCA9fiBzLyYvJmFtcDsvZzsKLSAgJHRtcCA9fiBzLzwvJmx0Oy9nOwotICAkdG1wID1+IHMvPi8mZ3Q7L2c7Ci0gIHJldHVybiAkdG1wOwotfQotCi0jIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jIwotIyBTaGVsbEVzY2FwZSAtIGJhY2tzbGFzaCBlc2NhcGUgY2hhcmFjdGVycyB0aGF0IGFyZSBzcGVjaWFsIHRvIHRoZSBzaGVsbAotIyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIyMKLQotc3ViIFNoZWxsRXNjYXBlIHsKLSAgIyBjb3B5IGFyZ3VtZW50IHRvIG5ldyB2YXJpYWJsZSBzbyB3ZSBkb24ndCBjbG9iYmVyIHRoZSBvcmlnaW5hbAotICBteSAkYXJnID0gc2hpZnQgfHwgJyc7Ci0gIGlmICgkYXJnID1+IC9bIlxzXS8pIHsgcmV0dXJuICInIiAuICRhcmcgLiAiJyI7IH0KLSAgcmV0dXJuICRhcmc7Ci19Ci0KLSMjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMjCi0jIEZpbmRDbGFuZyAtIHNlYXJjaGVzIGZvciAnY2xhbmcnIGV4ZWN1dGFibGUuCi0jIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jIwotCi1zdWIgRmluZENsYW5nIHsKLSAgaWYgKCFkZWZpbmVkICRPcHRpb25ze0FuYWx5emVyRGlzY292ZXJ5TWV0aG9kfSkgewotICAgICRDbGFuZyA9IEN3ZDo6cmVhbHBhdGgoIiRSZWFsQmluL2Jpbi9jbGFuZyIpIGlmICgtZiAiJFJlYWxCaW4vYmluL2NsYW5nIik7Ci0gICAgaWYgKCFkZWZpbmVkICRDbGFuZyB8fCAhIC14ICRDbGFuZykgewotICAgICAgJENsYW5nID0gQ3dkOjpyZWFscGF0aCgiJFJlYWxCaW4vY2xhbmciKSBpZiAoLWYgIiRSZWFsQmluL2NsYW5nIik7Ci0gICAgfQotICAgIGlmICghZGVmaW5lZCAkQ2xhbmcgfHwgISAteCAkQ2xhbmcpIHsKLSAgICAgIHJldHVybiAiZXJyb3I6IENhbm5vdCBmaW5kIGFuIGV4ZWN1dGFibGUgJ2NsYW5nJyByZWxhdGl2ZSB0byIgLgotICAgICAgICAgICAgICIgc2Nhbi1idWlsZC4gQ29uc2lkZXIgdXNpbmcgLS11c2UtYW5hbHl6ZXIgdG8gcGljayBhIHZlcnNpb24gb2YiIC4KLSAgICAgICAgICAgICAiICdjbGFuZycgdG8gdXNlIGZvciBzdGF0aWMgYW5hbHlzaXMuXG4iOwotICAgIH0KLSAgfQotICBlbHNlIHsKLSAgICBpZiAoJE9wdGlvbnN7QW5hbHl6ZXJEaXNjb3ZlcnlNZXRob2R9ID1+IC9eW1h4XWNvZGUkLykgewotICAgICAgbXkgJHhjcnVuID0gYHdoaWNoIHhjcnVuYDsKLSAgICAgIGNob21wICR4Y3J1bjsKLSAgICAgIGlmICgkeGNydW4gZXEgIiIpIHsKLSAgICAgICAgcmV0dXJuICJDYW5ub3QgZmluZCAneGNydW4nIHRvIGZpbmQgJ2NsYW5nJyBmb3IgYW5hbHlzaXMuXG4iOwotICAgICAgfQotICAgICAgJENsYW5nID0gYCR4Y3J1biAtdG9vbGNoYWluIFhjb2RlRGVmYXVsdCAtZmluZCBjbGFuZ2A7Ci0gICAgICBjaG9tcCAkQ2xhbmc7Ci0gICAgICBpZiAoJENsYW5nIGVxICIiKSB7Ci0gICAgICAgIHJldHVybiAiTm8gJ2NsYW5nJyBleGVjdXRhYmxlIGZvdW5kIGJ5ICd4Y3J1bidcbiI7Ci0gICAgICB9Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgJENsYW5nID0gJE9wdGlvbnN7QW5hbHl6ZXJEaXNjb3ZlcnlNZXRob2R9OwotICAgICAgaWYgKCFkZWZpbmVkICRDbGFuZyBvciBub3QgLXggJENsYW5nKSB7Ci0gICAgICAgIHJldHVybiAiQ2Fubm90IGZpbmQgYW4gZXhlY3V0YWJsZSBjbGFuZyBhdCAnJE9wdGlvbnN7QW5hbHl6ZXJEaXNjb3ZlcnlNZXRob2R9J1xuIjsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLSAgcmV0dXJuIHVuZGVmOwotfQotCi0jIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jIwotIyBQcm9jZXNzIGNvbW1hbmQtbGluZSBhcmd1bWVudHMuCi0jIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jIwotCi1teSAkUmVxdWVzdERpc3BsYXlIZWxwID0gMDsKLW15ICRGb3JjZURpc3BsYXlIZWxwID0gMDsKLQotc3ViIFByb2Nlc3NBcmdzIHsKLSAgbXkgJEFyZ3MgPSBzaGlmdDsKLSAgbXkgJE51bUFyZ3MgPSAwOwotCi0gIHdoaWxlIChAJEFyZ3MpIHsKLQotICAgICROdW1BcmdzKys7Ci0KLSAgICAjIFNjYW4gZm9yIG9wdGlvbnMgd2UgcmVjb2duaXplLgotCi0gICAgbXkgJGFyZyA9ICRBcmdzLT5bMF07Ci0KLSAgICBpZiAoJGFyZyBlcSAiLWgiIG9yICRhcmcgZXEgIi0taGVscCIpIHsKLSAgICAgICRSZXF1ZXN0RGlzcGxheUhlbHAgPSAxOwotICAgICAgc2hpZnQgQCRBcmdzOwotICAgICAgbmV4dDsKLSAgICB9Ci0KLSAgICBpZiAoJGFyZyBlcSAnLWFuYWx5emUtaGVhZGVycycpIHsKLSAgICAgIHNoaWZ0IEAkQXJnczsKLSAgICAgICRPcHRpb25ze0FuYWx5emVIZWFkZXJzfSA9IDE7Ci0gICAgICBuZXh0OwotICAgIH0KLQotICAgIGlmICgkYXJnIGVxICItbyIpIHsKLSAgICAgIHNoaWZ0IEAkQXJnczsKLQotICAgICAgaWYgKCFAJEFyZ3MpIHsKLSAgICAgICAgRGllRGlhZygiJy1vJyBvcHRpb24gcmVxdWlyZXMgYSB0YXJnZXQgZGlyZWN0b3J5IG5hbWUuXG4iKTsKLSAgICAgIH0KLQotICAgICAgIyBDb25zdHJ1Y3QgYW4gYWJzb2x1dGUgcGF0aC4gIFVzZXMgdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkKLSAgICAgICMgYXMgYSBiYXNlIGlmIHRoZSBvcmlnaW5hbCBwYXRoIHdhcyBub3QgYWJzb2x1dGUuCi0gICAgICBteSAkT3V0RGlyID0gc2hpZnQgQCRBcmdzOwotICAgICAgbWtwYXRoKCRPdXREaXIpIHVubGVzcyAoLWUgJE91dERpcik7ICAjIGFic19wYXRoIHdhbnRzIGV4aXN0aW5nIGRpcgotICAgICAgJE9wdGlvbnN7T3V0cHV0RGlyfSA9IGFic19wYXRoKCRPdXREaXIpOwotCi0gICAgICBuZXh0OwotICAgIH0KLQotICAgIGlmICgkYXJnID1+IC9eLS1odG1sLXRpdGxlKD0oLispKT8kLykgewotICAgICAgc2hpZnQgQCRBcmdzOwotCi0gICAgICBpZiAoIWRlZmluZWQgJDIgfHwgJDIgZXEgJycpIHsKLSAgICAgICAgaWYgKCFAJEFyZ3MpIHsKLSAgICAgICAgICBEaWVEaWFnKCInLS1odG1sLXRpdGxlJyBvcHRpb24gcmVxdWlyZXMgYSBzdHJpbmcuXG4iKTsKLSAgICAgICAgfQotCi0gICAgICAgICRPcHRpb25ze0h0bWxUaXRsZX0gPSBzaGlmdCBAJEFyZ3M7Ci0gICAgICB9IGVsc2UgewotICAgICAgICAkT3B0aW9uc3tIdG1sVGl0bGV9ID0gJDI7Ci0gICAgICB9Ci0KLSAgICAgIG5leHQ7Ci0gICAgfQotCi0gICAgaWYgKCRhcmcgZXEgIi1rIiBvciAkYXJnIGVxICItLWtlZXAtZ29pbmciKSB7Ci0gICAgICBzaGlmdCBAJEFyZ3M7Ci0gICAgICAkT3B0aW9uc3tJZ25vcmVFcnJvcnN9ID0gMTsKLSAgICAgIG5leHQ7Ci0gICAgfQotCi0gICAgaWYgKCRhcmcgPX4gL14tLXVzZS1jYyg9KC4rKSk/JC8pIHsKLSAgICAgIHNoaWZ0IEAkQXJnczsKLSAgICAgIG15ICRjYzsKLQotICAgICAgaWYgKCFkZWZpbmVkICQyIHx8ICQyIGVxICIiKSB7Ci0gICAgICAgIGlmICghQCRBcmdzKSB7Ci0gICAgICAgICAgRGllRGlhZygiJy0tdXNlLWNjJyBvcHRpb24gcmVxdWlyZXMgYSBjb21waWxlciBleGVjdXRhYmxlIG5hbWUuXG4iKTsKLSAgICAgICAgfQotICAgICAgICAkY2MgPSBzaGlmdCBAJEFyZ3M7Ci0gICAgICB9Ci0gICAgICBlbHNlIHsKLSAgICAgICAgJGNjID0gJDI7Ci0gICAgICB9Ci0KLSAgICAgICRPcHRpb25ze1VzZUNDfSA9ICRjYzsKLSAgICAgIG5leHQ7Ci0gICAgfQotCi0gICAgaWYgKCRhcmcgPX4gL14tLXVzZS1jXCtcKyg9KC4rKSk/JC8pIHsKLSAgICAgIHNoaWZ0IEAkQXJnczsKLSAgICAgIG15ICRjeHg7Ci0KLSAgICAgIGlmICghZGVmaW5lZCAkMiB8fCAkMiBlcSAiIikgewotICAgICAgICBpZiAoIUAkQXJncykgewotICAgICAgICAgIERpZURpYWcoIictLXVzZS1jKysnIG9wdGlvbiByZXF1aXJlcyBhIGNvbXBpbGVyIGV4ZWN1dGFibGUgbmFtZS5cbiIpOwotICAgICAgICB9Ci0gICAgICAgICRjeHggPSBzaGlmdCBAJEFyZ3M7Ci0gICAgICB9Ci0gICAgICBlbHNlIHsKLSAgICAgICAgJGN4eCA9ICQyOwotICAgICAgfQotCi0gICAgICAkT3B0aW9uc3tVc2VDWFh9ID0gJGN4eDsKLSAgICAgIG5leHQ7Ci0gICAgfQotCi0gICAgaWYgKCRhcmcgPX4gL14tLWFuYWx5emVyLXRhcmdldCg9KC4rKSk/JC8pIHsKLSAgICAgIHNoaWZ0IEBBUkdWOwotICAgICAgbXkgJEFuYWx5emVyVGFyZ2V0OwotCi0gICAgICBpZiAoIWRlZmluZWQgJDIgfHwgJDIgZXEgIiIpIHsKLSAgICAgICAgaWYgKCFAQVJHVikgewotICAgICAgICAgIERpZURpYWcoIictLWFuYWx5emVyLXRhcmdldCcgb3B0aW9uIHJlcXVpcmVzIGEgdGFyZ2V0IHRyaXBsZSBuYW1lLlxuIik7Ci0gICAgICAgIH0KLSAgICAgICAgJEFuYWx5emVyVGFyZ2V0ID0gc2hpZnQgQEFSR1Y7Ci0gICAgICB9Ci0gICAgICBlbHNlIHsKLSAgICAgICAgJEFuYWx5emVyVGFyZ2V0ID0gJDI7Ci0gICAgICB9Ci0KLSAgICAgICRPcHRpb25ze0FuYWx5emVyVGFyZ2V0fSA9ICRBbmFseXplclRhcmdldDsKLSAgICAgIG5leHQ7Ci0gICAgfQotCi0gICAgaWYgKCRhcmcgZXEgIi12IikgewotICAgICAgc2hpZnQgQCRBcmdzOwotICAgICAgJE9wdGlvbnN7VmVyYm9zZX0rKzsKLSAgICAgIG5leHQ7Ci0gICAgfQotCi0gICAgaWYgKCRhcmcgZXEgIi1WIiBvciAkYXJnIGVxICItLXZpZXciKSB7Ci0gICAgICBzaGlmdCBAJEFyZ3M7Ci0gICAgICAkT3B0aW9uc3tWaWV3UmVzdWx0c30gPSAxOwotICAgICAgbmV4dDsKLSAgICB9Ci0KLSAgICBpZiAoJGFyZyBlcSAiLS1zdGF0dXMtYnVncyIpIHsKLSAgICAgIHNoaWZ0IEAkQXJnczsKLSAgICAgICRPcHRpb25ze0V4aXRTdGF0dXNGb3VuZEJ1Z3N9ID0gMTsKLSAgICAgIG5leHQ7Ci0gICAgfQotCi0gICAgaWYgKCRhcmcgZXEgIi1zdG9yZSIpIHsKLSAgICAgIHNoaWZ0IEAkQXJnczsKLSAgICAgICRPcHRpb25ze1N0b3JlTW9kZWx9ID0gc2hpZnQgQCRBcmdzOwotICAgICAgbmV4dDsKLSAgICB9Ci0KLSAgICBpZiAoJGFyZyBlcSAiLWNvbnN0cmFpbnRzIikgewotICAgICAgc2hpZnQgQCRBcmdzOwotICAgICAgJE9wdGlvbnN7Q29uc3RyYWludHNNb2RlbH0gPSBzaGlmdCBAJEFyZ3M7Ci0gICAgICBuZXh0OwotICAgIH0KLQotICAgIGlmICgkYXJnIGVxICItaW50ZXJuYWwtc3RhdHMiKSB7Ci0gICAgICBzaGlmdCBAJEFyZ3M7Ci0gICAgICAkT3B0aW9uc3tJbnRlcm5hbFN0YXRzfSA9IDE7Ci0gICAgICBuZXh0OwotICAgIH0KLQotICAgIGlmICgkYXJnIGVxICItcGxpc3QiKSB7Ci0gICAgICBzaGlmdCBAJEFyZ3M7Ci0gICAgICAkT3B0aW9uc3tPdXRwdXRGb3JtYXR9ID0gInBsaXN0IjsKLSAgICAgIG5leHQ7Ci0gICAgfQotCi0gICAgaWYgKCRhcmcgZXEgIi1wbGlzdC1odG1sIikgewotICAgICAgc2hpZnQgQCRBcmdzOwotICAgICAgJE9wdGlvbnN7T3V0cHV0Rm9ybWF0fSA9ICJwbGlzdC1odG1sIjsKLSAgICAgIG5leHQ7Ci0gICAgfQotCi0gICAgaWYgKCRhcmcgZXEgIi1hbmFseXplci1jb25maWciKSB7Ci0gICAgICBzaGlmdCBAJEFyZ3M7Ci0gICAgICBwdXNoIEB7JE9wdGlvbnN7Q29uZmlnT3B0aW9uc319LCBzaGlmdCBAJEFyZ3M7Ci0gICAgICBuZXh0OwotICAgIH0KLQotICAgIGlmICgkYXJnIGVxICItbm8tZmFpbHVyZS1yZXBvcnRzIikgewotICAgICAgc2hpZnQgQCRBcmdzOwotICAgICAgJE9wdGlvbnN7UmVwb3J0RmFpbHVyZXN9ID0gMDsKLSAgICAgIG5leHQ7Ci0gICAgfQotCi0gICAgaWYgKCRhcmcgZXEgIi1zdGF0cyIpIHsKLSAgICAgIHNoaWZ0IEAkQXJnczsKLSAgICAgICRPcHRpb25ze0FuYWx5emVyU3RhdHN9ID0gMTsKLSAgICAgIG5leHQ7Ci0gICAgfQotCi0gICAgaWYgKCRhcmcgZXEgIi1tYXhsb29wIikgewotICAgICAgc2hpZnQgQCRBcmdzOwotICAgICAgJE9wdGlvbnN7TWF4TG9vcH0gPSBzaGlmdCBAJEFyZ3M7Ci0gICAgICBuZXh0OwotICAgIH0KLQotICAgIGlmICgkYXJnIGVxICItZW5hYmxlLWNoZWNrZXIiKSB7Ci0gICAgICBzaGlmdCBAJEFyZ3M7Ci0gICAgICBteSAkQ2hlY2tlciA9IHNoaWZ0IEAkQXJnczsKLSAgICAgICMgU3RvcmUgJE51bUFyZ3MgdG8gcHJlc2VydmUgdGhlIG9yZGVyIHRoZSBjaGVja2VycyB3ZXJlIGVuYWJsZWQuCi0gICAgICAkT3B0aW9uc3tFbmFibGVDaGVja2Vyc317JENoZWNrZXJ9ID0gJE51bUFyZ3M7Ci0gICAgICBkZWxldGUgJE9wdGlvbnN7RGlzYWJsZUNoZWNrZXJzfXskQ2hlY2tlcn07Ci0gICAgICBuZXh0OwotICAgIH0KLQotICAgIGlmICgkYXJnIGVxICItZGlzYWJsZS1jaGVja2VyIikgewotICAgICAgc2hpZnQgQCRBcmdzOwotICAgICAgbXkgJENoZWNrZXIgPSBzaGlmdCBAJEFyZ3M7Ci0gICAgICAjIFN0b3JlICROdW1BcmdzIHRvIHByZXNlcnZlIHRoZSBvcmRlciB0aGUgY2hlY2tlcnMgd2VyZSBkaXNhYmxlZC4KLSAgICAgICRPcHRpb25ze0Rpc2FibGVDaGVja2Vyc317JENoZWNrZXJ9ID0gJE51bUFyZ3M7Ci0gICAgICBkZWxldGUgJE9wdGlvbnN7RW5hYmxlQ2hlY2tlcnN9eyRDaGVja2VyfTsKLSAgICAgIG5leHQ7Ci0gICAgfQotCi0gICAgaWYgKCRhcmcgZXEgIi1sb2FkLXBsdWdpbiIpIHsKLSAgICAgIHNoaWZ0IEAkQXJnczsKLSAgICAgIHB1c2ggQHskT3B0aW9uc3tQbHVnaW5zVG9Mb2FkfX0sIHNoaWZ0IEAkQXJnczsKLSAgICAgIG5leHQ7Ci0gICAgfQotCi0gICAgaWYgKCRhcmcgZXEgIi0tdXNlLWFuYWx5emVyIikgewotICAgICAgc2hpZnQgQCRBcmdzOwotICAgICAgJE9wdGlvbnN7QW5hbHl6ZXJEaXNjb3ZlcnlNZXRob2R9ID0gc2hpZnQgQCRBcmdzOwotICAgICAgbmV4dDsKLSAgICB9Ci0KLSAgICBpZiAoJGFyZyA9fiAvXi0tdXNlLWFuYWx5emVyPSguKykkLykgewotICAgICAgc2hpZnQgQCRBcmdzOwotICAgICAgJE9wdGlvbnN7QW5hbHl6ZXJEaXNjb3ZlcnlNZXRob2R9ID0gJDE7Ci0gICAgICBuZXh0OwotICAgIH0KLQotICAgIGlmICgkYXJnIGVxICItLWtlZXAtZW1wdHkiKSB7Ci0gICAgICBzaGlmdCBAJEFyZ3M7Ci0gICAgICAkT3B0aW9uc3tLZWVwRW1wdHl9ID0gMTsKLSAgICAgIG5leHQ7Ci0gICAgfQotCi0gICAgaWYgKCRhcmcgZXEgIi0tb3ZlcnJpZGUtY29tcGlsZXIiKSB7Ci0gICAgICBzaGlmdCBAJEFyZ3M7Ci0gICAgICAkT3B0aW9uc3tPdmVycmlkZUNvbXBpbGVyfSA9IDE7Ci0gICAgICBuZXh0OwotICAgIH0KLQotICAgIERpZURpYWcoInVucmVjb2duaXplZCBvcHRpb24gJyRhcmcnXG4iKSBpZiAoJGFyZyA9fiAvXi0vKTsKLQotICAgICROdW1BcmdzLS07Ci0gICAgbGFzdDsKLSAgfQotICByZXR1cm4gJE51bUFyZ3M7Ci19Ci0KLWlmICghQEFSR1YpIHsKLSAgJEZvcmNlRGlzcGxheUhlbHAgPSAxCi19Ci0KLVByb2Nlc3NBcmdzKFxAQVJHVik7Ci0jIEFsbCBhcmd1bWVudHMgYXJlIG5vdyBzaGlmdGVkIGZyb20gQEFSR1YuIFRoZSByZXN0IGlzIGEgYnVpbGQgY29tbWFuZCwgaWYgYW55LgotCi1pZiAoIUBBUkdWIGFuZCAhJFJlcXVlc3REaXNwbGF5SGVscCkgewotICBFcnJvckRpYWcoIk5vIGJ1aWxkIGNvbW1hbmQgc3BlY2lmaWVkLlxuXG4iKTsKLSAgJEZvcmNlRGlzcGxheUhlbHAgPSAxOwotfQotCi1teSAkQ2xhbmdOb3RGb3VuZEVyck1zZyA9IEZpbmRDbGFuZygpOwotCi1pZiAoJEZvcmNlRGlzcGxheUhlbHAgfHwgJFJlcXVlc3REaXNwbGF5SGVscCkgewotICBEaXNwbGF5SGVscCgkQ2xhbmdOb3RGb3VuZEVyck1zZyk7Ci0gIGV4aXQgJEZvcmNlRGlzcGxheUhlbHA7Ci19Ci0KLURpZURpYWcoJENsYW5nTm90Rm91bmRFcnJNc2cpIGlmIChkZWZpbmVkICRDbGFuZ05vdEZvdW5kRXJyTXNnKTsKLQotJENsYW5nQ1hYID0gJENsYW5nOwotaWYgKCRDbGFuZyAhfiAvXCtcKyhcLmV4ZSk/JC8pIHsKLSAgIyBJZiAkQ2xhbmcgaG9sZHMgdGhlIG5hbWUgb2YgdGhlIGNsYW5nKysgZXhlY3V0YWJsZSB0aGVuIHdlIGxlYXZlCi0gICMgJENsYW5nQ1hYIGFuZCAkQ2xhbmcgZXF1YWwsIG90aGVyd2lzZSBjb25zdHJ1Y3QgdGhlIG5hbWUgb2YgdGhlIGNsYW5nKysKLSAgIyBleGVjdXRhYmxlIGZyb20gdGhlIGNsYW5nIGV4ZWN1dGFibGUgbmFtZS4KLQotICAjIERldGVybWluZSBvcGVyYXRpbmcgc3lzdGVtIHVuZGVyIHdoaWNoIHRoaXMgY29weSBvZiBQZXJsIHdhcyBidWlsdC4KLSAgbXkgJElzV2luQnVpbGQgPSAoJF5PID1+L21zeXN8Y3lnd2lufE1TV2luMzIvKTsKLSAgaWYoJElzV2luQnVpbGQpIHsKLSAgICAkQ2xhbmdDWFggPX4gcy8uZXhlJC8rKy5leGUvOwotICB9Ci0gIGVsc2UgewotICAgICRDbGFuZ0NYWCA9fiBzL1wtXGQrXC5cZCskLy87Ci0gICAgJENsYW5nQ1hYIC49ICIrKyI7Ci0gIH0KLX0KLQotIyBNYWtlIHN1cmUgdG8gdXNlICIiIHRvIGhhbmRsZSBwYXRocyB3aXRoIHNwYWNlcy4KLSRDbGFuZ1ZlcnNpb24gPSBIdG1sRXNjYXBlKGAiJENsYW5nIiAtLXZlcnNpb25gKTsKLQotIyBEZXRlcm1pbmUgd2hlcmUgcmVzdWx0cyBnby4KLSRDbWRBcmdzID0gSHRtbEVzY2FwZShqb2luKCcgJywgbWFwKFNoZWxsRXNjYXBlKCRfKSwgQEFSR1YpKSk7Ci0KLSMgRGV0ZXJtaW5lIHRoZSBvdXRwdXQgZGlyZWN0b3J5IGZvciB0aGUgSFRNTCByZXBvcnRzLgotbXkgJEJhc2VEaXIgPSAkT3B0aW9uc3tPdXRwdXREaXJ9OwotJE9wdGlvbnN7T3V0cHV0RGlyfSA9IEdldEhUTUxSdW5EaXIoJE9wdGlvbnN7T3V0cHV0RGlyfSk7Ci0KLSMgRGV0ZXJtaW5lIHRoZSBsb2NhdGlvbiBvZiBjY2MtYW5hbHl6ZXIuCi1teSAkQWJzUmVhbEJpbiA9IEN3ZDo6cmVhbHBhdGgoJFJlYWxCaW4pOwotbXkgJENtZCA9ICIkQWJzUmVhbEJpbi8uLi9saWJleGVjL2NjYy1hbmFseXplciI7Ci1teSAkQ21kQ1hYID0gIiRBYnNSZWFsQmluLy4uL2xpYmV4ZWMvYysrLWFuYWx5emVyIjsKLQotIyBQb3J0YWJpbGl0eTogdXNlIGxlc3Mgc3RyaWN0IGJ1dCBwb3J0YWJsZSBjaGVjayAtZSAoZmlsZSBleGlzdHMpIGluc3RlYWQgb2YKLSMgbm9uLXBvcnRhYmxlIC14IChmaWxlIGlzIGV4ZWN1dGFibGUpLiBPbiBzb21lIHdpbmRvd3MgcG9ydHMgLXgganVzdCBjaGVja3MKLSMgZmlsZSBleHRlbnNpb24gdG8gZGV0ZXJtaW5lIGlmIGEgZmlsZSBpcyBleGVjdXRhYmxlIChzZWUgUGVybCBsYW5ndWFnZQotIyByZWZlcmVuY2UsIHBlcmxwb3J0KQotaWYgKCFkZWZpbmVkICRDbWQgfHwgISAtZSAkQ21kKSB7Ci0gICRDbWQgPSAiJEFic1JlYWxCaW4vY2NjLWFuYWx5emVyIjsKLSAgRGllRGlhZygiJ2NjYy1hbmFseXplcicgZG9lcyBub3QgZXhpc3QgYXQgJyRDbWQnXG4iKSBpZighIC1lICRDbWQpOwotfQotaWYgKCFkZWZpbmVkICRDbWRDWFggfHwgISAtZSAkQ21kQ1hYKSB7Ci0gICRDbWRDWFggPSAiJEFic1JlYWxCaW4vYysrLWFuYWx5emVyIjsKLSAgRGllRGlhZygiJ2MrKy1hbmFseXplcicgZG9lcyBub3QgZXhpc3QgYXQgJyRDbWRDWFgnXG4iKSBpZighIC1lICRDbWRDWFgpOwotfQotCi1EaWFnKCJVc2luZyAnJENsYW5nJyBmb3Igc3RhdGljIGFuYWx5c2lzXG4iKTsKLQotU2V0SHRtbEVudihcQEFSR1YsICRPcHRpb25ze091dHB1dERpcn0pOwotCi1teSBAQW5hbHlzZXNUb1J1bjsKLWZvcmVhY2ggKHNvcnQgeyAkT3B0aW9uc3tFbmFibGVDaGVja2Vyc317JGF9IDw9PiAkT3B0aW9uc3tFbmFibGVDaGVja2Vyc317JGJ9IH0gCi0gICAgICAgICBrZXlzICV7JE9wdGlvbnN7RW5hYmxlQ2hlY2tlcnN9fSkgeyAKLSAgIyBQdXNoIGNoZWNrZXJzIGluIG9yZGVyIHRoZXkgd2VyZSBlbmFibGVkLgotICBwdXNoIEBBbmFseXNlc1RvUnVuLCAiLWFuYWx5emVyLWNoZWNrZXIiLCAkXzsKLX0KLWZvcmVhY2ggKHNvcnQgeyAkT3B0aW9uc3tEaXNhYmxlQ2hlY2tlcnN9eyRhfSA8PT4gJE9wdGlvbnN7RGlzYWJsZUNoZWNrZXJzfXskYn0gfSAKLSAgICAgICAgIGtleXMgJXskT3B0aW9uc3tEaXNhYmxlQ2hlY2tlcnN9fSkgeyAKLSAgIyBQdXNoIGNoZWNrZXJzIGluIG9yZGVyIHRoZXkgd2VyZSBkaXNhYmxlZC4KLSAgcHVzaCBAQW5hbHlzZXNUb1J1biwgIi1hbmFseXplci1kaXNhYmxlLWNoZWNrZXIiLCAkXzsKLX0KLWlmICgkT3B0aW9uc3tBbmFseXplSGVhZGVyc30pIHsgcHVzaCBAQW5hbHlzZXNUb1J1biwgIi1hbmFseXplci1vcHQtYW5hbHl6ZS1oZWFkZXJzIjsgfQotaWYgKCRPcHRpb25ze0FuYWx5emVyU3RhdHN9KSB7IHB1c2ggQEFuYWx5c2VzVG9SdW4sICctYW5hbHl6ZXItY2hlY2tlcj1kZWJ1Zy5TdGF0cyc7IH0KLWlmICgkT3B0aW9uc3tNYXhMb29wfSA+IDApIHsgcHVzaCBAQW5hbHlzZXNUb1J1biwgIi1hbmFseXplci1tYXgtbG9vcCAkT3B0aW9uc3tNYXhMb29wfSI7IH0KLQotIyBEZWxheSBzZXR0aW5nIHVwIG90aGVyIGVudmlyb25tZW50IHZhcmlhYmxlcyBpbiBjYXNlIHdlIGNhbiBkbyB0cnVlCi0jIGludGVycG9zaXRpb24uCi1teSAkQ0NDX0FOQUxZWkVSX0FOQUxZU0lTID0gam9pbiAnICcsIEBBbmFseXNlc1RvUnVuOwotbXkgJENDQ19BTkFMWVpFUl9QTFVHSU5TID0gam9pbiAnICcsIG1hcCB7ICItbG9hZCAiLiRfIH0gQHskT3B0aW9uc3tQbHVnaW5zVG9Mb2FkfX07Ci1teSAkQ0NDX0FOQUxZWkVSX0NPTkZJRyA9IGpvaW4gJyAnLCBtYXAgeyAiLWFuYWx5emVyLWNvbmZpZyAiLiRfIH0gQHskT3B0aW9uc3tDb25maWdPcHRpb25zfX07Ci1teSAlRW52VmFycyA9ICgKLSAgJ0NDJyA9PiAkQ21kLAotICAnQ1hYJyA9PiAkQ21kQ1hYLAotICAnQ0xBTkcnID0+ICRDbGFuZywKLSAgJ0NMQU5HX0NYWCcgPT4gJENsYW5nQ1hYLAotICAnVkVSQk9TRScgPT4gJE9wdGlvbnN7VmVyYm9zZX0sCi0gICdDQ0NfQU5BTFlaRVJfQU5BTFlTSVMnID0+ICRDQ0NfQU5BTFlaRVJfQU5BTFlTSVMsCi0gICdDQ0NfQU5BTFlaRVJfUExVR0lOUycgPT4gJENDQ19BTkFMWVpFUl9QTFVHSU5TLAotICAnQ0NDX0FOQUxZWkVSX0NPTkZJRycgPT4gJENDQ19BTkFMWVpFUl9DT05GSUcsCi0gICdPVVRQVVRfRElSJyA9PiAkT3B0aW9uc3tPdXRwdXREaXJ9LAotICAnQ0NDX0NDJyA9PiAkT3B0aW9uc3tVc2VDQ30sCi0gICdDQ0NfQ1hYJyA9PiAkT3B0aW9uc3tVc2VDWFh9LAotICAnQ0NDX1JFUE9SVF9GQUlMVVJFUycgPT4gJE9wdGlvbnN7UmVwb3J0RmFpbHVyZXN9LAotICAnQ0NDX0FOQUxZWkVSX1NUT1JFX01PREVMJyA9PiAkT3B0aW9uc3tTdG9yZU1vZGVsfSwKLSAgJ0NDQ19BTkFMWVpFUl9DT05TVFJBSU5UU19NT0RFTCcgPT4gJE9wdGlvbnN7Q29uc3RyYWludHNNb2RlbH0sCi0gICdDQ0NfQU5BTFlaRVJfSU5URVJOQUxfU1RBVFMnID0+ICRPcHRpb25ze0ludGVybmFsU3RhdHN9LAotICAnQ0NDX0FOQUxZWkVSX09VVFBVVF9GT1JNQVQnID0+ICRPcHRpb25ze091dHB1dEZvcm1hdH0sCi0gICdDTEFOR19BTkFMWVpFUl9UQVJHRVQnID0+ICRPcHRpb25ze0FuYWx5emVyVGFyZ2V0fQotKTsKLQotIyBSdW4gdGhlIGJ1aWxkLgotbXkgJEV4aXRTdGF0dXMgPSBSdW5CdWlsZENvbW1hbmQoXEBBUkdWLCAkT3B0aW9uc3tJZ25vcmVFcnJvcnN9LCAkQ21kLCAkQ21kQ1hYLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcJUVudlZhcnMpOwotCi1pZiAoZGVmaW5lZCAkT3B0aW9uc3tPdXRwdXRGb3JtYXR9KSB7Ci0gIGlmICgkT3B0aW9uc3tPdXRwdXRGb3JtYXR9ID1+IC9wbGlzdC8pIHsKLSAgICBEaWFnICJBbmFseXNpcyBydW4gY29tcGxldGUuXG4iOwotICAgIERpYWcgIkFuYWx5c2lzIHJlc3VsdHMgKHBsaXN0IGZpbGVzKSBkZXBvc2l0ZWQgaW4gJyRPcHRpb25ze091dHB1dERpcn0nXG4iOwotICB9Ci0gIGlmICgkT3B0aW9uc3tPdXRwdXRGb3JtYXR9ID1+IC9odG1sLykgewotICAgICMgUG9zdHByb2Nlc3MgdGhlIEhUTUwgZGlyZWN0b3J5LgotICAgIG15ICROdW1CdWdzID0gUG9zdHByb2Nlc3MoJE9wdGlvbnN7T3V0cHV0RGlyfSwgJEJhc2VEaXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkT3B0aW9uc3tBbmFseXplclN0YXRzfSwgJE9wdGlvbnN7S2VlcEVtcHR5fSk7Ci0KLSAgICBpZiAoJE9wdGlvbnN7Vmlld1Jlc3VsdHN9IGFuZCAtciAiJE9wdGlvbnN7T3V0cHV0RGlyfS9pbmRleC5odG1sIikgewotICAgICAgRGlhZyAiQW5hbHlzaXMgcnVuIGNvbXBsZXRlLlxuIjsKLSAgICAgIERpYWcgIlZpZXdpbmcgYW5hbHlzaXMgcmVzdWx0cyBpbiAnJE9wdGlvbnN7T3V0cHV0RGlyfScgdXNpbmcgc2Nhbi12aWV3LlxuIjsKLSAgICAgIG15ICRTY2FuVmlldyA9IEN3ZDo6cmVhbHBhdGgoIiRSZWFsQmluL3NjYW4tdmlldyIpOwotICAgICAgaWYgKCEgLXggJFNjYW5WaWV3KSB7ICRTY2FuVmlldyA9ICJzY2FuLXZpZXciOyB9Ci0gICAgICBpZiAoISAteCAkU2NhblZpZXcpIHsgJFNjYW5WaWV3ID0gQ3dkOjpyZWFscGF0aCgiJFJlYWxCaW4vLi4vLi4vc2Nhbi12aWV3L2Jpbi9zY2FuLXZpZXciKTsgfQotICAgICAgZXhlYyAkU2NhblZpZXcsICIkT3B0aW9uc3tPdXRwdXREaXJ9IjsKLSAgICB9Ci0KLSAgICBpZiAoJE9wdGlvbnN7RXhpdFN0YXR1c0ZvdW5kQnVnc30pIHsKLSAgICAgIGV4aXQgMSBpZiAoJE51bUJ1Z3MgPiAwKTsKLSAgICAgIGV4aXQgMDsKLSAgICB9Ci0gIH0KLX0KLQotZXhpdCAkRXhpdFN0YXR1czsKZGlmZiAtLWdpdCBhL2NsYW5nLTI1NzcxMTMvdG9vbHMvc2Nhbi1idWlsZC9iaW4vc2Nhbi1idWlsZC5iYXQgYi9jbGFuZy0yNTc3MTEzL3Rvb2xzL3NjYW4tYnVpbGQvYmluL3NjYW4tYnVpbGQuYmF0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3N2JlNjc0Li4wMDAwMDAwCi0tLSBhL2NsYW5nLTI1NzcxMTMvdG9vbHMvc2Nhbi1idWlsZC9iaW4vc2Nhbi1idWlsZC5iYXQKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1wZXJsIC1TIHNjYW4tYnVpbGQgJSoNCmRpZmYgLS1naXQgYS9jbGFuZy0yNTc3MTEzL3Rvb2xzL3NjYW4tYnVpbGQvYmluL3NldC14Y29kZS1hbmFseXplciBiL2NsYW5nLTI1NzcxMTMvdG9vbHMvc2Nhbi1idWlsZC9iaW4vc2V0LXhjb2RlLWFuYWx5emVyCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCA4ZTY3NDgyLi4wMDAwMDAwCi0tLSBhL2NsYW5nLTI1NzcxMTMvdG9vbHMvc2Nhbi1idWlsZC9iaW4vc2V0LXhjb2RlLWFuYWx5emVyCisrKyAvZGV2L251bGwKQEAgLTEsMTE0ICswLDAgQEAKLSMhL3Vzci9iaW4vcHl0aG9uCi0KLSMgW1BSIDExNjYxXSBOb3RlIHRoYXQgd2UgaGFyZHdpcmUgdG8gL3Vzci9iaW4vcHl0aG9uIGJlY2F1c2Ugd2UKLSMgd2FudCB0byB0aGUgdXNlIHRoZSBzeXN0ZW0gdmVyc2lvbiBvZiBQeXRob24gb24gTWFjIE9TIFguCi0jIFRoaXMgb25lIGhhcyB0aGUgc2NyaXB0aW5nIGJyaWRnZSBlbmFibGVkLgotCi1pbXBvcnQgc3lzCi1pZiBzeXMudmVyc2lvbl9pbmZvIDwgKDIsIDcpOgotICAgIHByaW50ICJzZXQteGNvZGUtYW5hbHl6ZXIgcmVxdWlyZXMgUHl0aG9uIDIuNyBvciBsYXRlciIKLSAgICBzeXMuZXhpdCgxKQotCi1pbXBvcnQgb3MKLWltcG9ydCBzdWJwcm9jZXNzCi1pbXBvcnQgcmUKLWltcG9ydCB0ZW1wZmlsZQotaW1wb3J0IHNodXRpbAotaW1wb3J0IHN0YXQKLWZyb20gQXBwS2l0IGltcG9ydCAqCi0KLWRlZiBGaW5kQ2xhbmdTcGVjcyhwYXRoKToKLSAgcHJpbnQgIigrKSBTZWFyY2hpbmcgZm9yIHhjc3BlYyBmaWxlIGluOiAiLCBwYXRoCi0gIGZvciByb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKHBhdGgpOgotICAgIGZvciBmIGluIGZpbGVzOgotICAgICAgaWYgZi5lbmRzd2l0aCgiLnhjc3BlYyIpIGFuZCBmLnN0YXJ0c3dpdGgoIkNsYW5nIExMVk0iKToKLSAgICAgICAgeWllbGQgb3MucGF0aC5qb2luKHJvb3QsIGYpCi0KLWRlZiBNb2RpZnlTcGVjKHBhdGgsIGlzQnVpbHRpbkFuYWx5emVyLCBwYXRoVG9DaGVja2VyKToKLSAgdCA9IHRlbXBmaWxlLk5hbWVkVGVtcG9yYXJ5RmlsZShkZWxldGU9RmFsc2UpCi0gIGZvdW5kQW5hbHl6ZXIgPSBGYWxzZQotICB3aXRoIG9wZW4ocGF0aCkgYXMgZjoKLSAgICBpZiBpc0J1aWx0aW5BbmFseXplcjoKLSAgICAgICMgRmlyc3Qgc2VhcmNoIGZvciBDTEFOR19BTkFMWVpFUl9FWEVDLiAgTmV3ZXIKLSAgICAgICMgdmVyc2lvbnMgb2YgWGNvZGUgc2V0IEVYRUNfUEFUSCB0byBiZSBDTEFOR19BTkFMWVpFUl9FWEVDLgotICAgICAgd2l0aCBvcGVuKHBhdGgpIGFzIGYyOgotICAgICAgICBmb3IgbGluZSBpbiBmMjoKLSAgICAgICAgICBpZiBsaW5lLmZpbmQoIkNMQU5HX0FOQUxZWkVSX0VYRUMiKSA+PSAwOgotICAgICAgICAgICAgcGF0aFRvQ2hlY2tlciA9ICIkKENMQU5HX0FOQUxZWkVSX0VYRUMpIgotICAgICAgICAgICAgYnJlYWsKLSAgICAjIE5vdyBjcmVhdGUgYSBuZXcgZmlsZS4KLSAgICBmb3IgbGluZSBpbiBmOgotICAgICAgaWYgbm90IGZvdW5kQW5hbHl6ZXI6Ci0gICAgICAgIGlmIGxpbmUuZmluZCgiU3RhdGljIEFuYWx5emVyIikgPj0gMDoKLSAgICAgICAgICBmb3VuZEFuYWx5emVyID0gVHJ1ZQotICAgICAgZWxzZToKLSAgICAgICAgbSA9IHJlLnNlYXJjaCgnXihccypFeGVjUGF0aFxzKj1ccyoiKScsIGxpbmUpCi0gICAgICAgIGlmIG06Ci0gICAgICAgICAgbGluZSA9ICIiLmpvaW4oW20uZ3JvdXAoMCksIHBhdGhUb0NoZWNrZXIsICciO1xuJ10pCi0gICAgICAgICAgIyBEbyBub3QgbW9kaWZ5IGZ1cnRoZXIgRXhlY1BhdGgncyBsYXRlciBpbiB0aGUgeGNzcGVjLgotICAgICAgICAgIGZvdW5kQW5hbHl6ZXIgPSBGYWxzZQotICAgICAgdC53cml0ZShsaW5lKQotICB0LmNsb3NlKCkKLSAgcHJpbnQgIigrKSBwcm9jZXNzaW5nOiIsIHBhdGgKLSAgdHJ5OgotICAgIHNodXRpbC5jb3B5KHQubmFtZSwgcGF0aCkKLSAgICBvcy5jaG1vZChwYXRoLCBzdGF0LlNfSVJVU1IgfCBzdGF0LlNfSVdVU1IgfCBzdGF0LlNfSVJHUlAgfCBzdGF0LlNfSVJPVEgpCi0gIGV4Y2VwdCBJT0Vycm9yLCB3aHk6Ci0gICAgcHJpbnQgIiAgICAoLSkgQ2Fubm90IHVwZGF0ZSBmaWxlOiIsIHdoeSwgIlxuIgotICBleGNlcHQgT1NFcnJvciwgd2h5OgotICAgIHByaW50ICIgICAgKC0pIENhbm5vdCB1cGRhdGUgZmlsZToiLCB3aHksICJcbiIKLSAgb3MudW5saW5rKHQubmFtZSkKLQotZGVmIG1haW4oKToKLSAgZnJvbSBvcHRwYXJzZSBpbXBvcnQgT3B0aW9uUGFyc2VyCi0gIHBhcnNlciA9IE9wdGlvblBhcnNlcigndXNhZ2U6ICVwcm9nIFtvcHRpb25zXScpCi0gIHBhcnNlci5zZXRfZGVzY3JpcHRpb24oX19kb2NfXykKLSAgcGFyc2VyLmFkZF9vcHRpb24oIi0tdXNlLWNoZWNrZXItYnVpbGQiLCBkZXN0PSJwYXRoIiwKLSAgICAgICAgICAgICAgICAgICAgaGVscD0iVXNlIHRoZSBDbGFuZyBsb2NhdGVkIGF0IHRoZSBwcm92aWRlZCBhYnNvbHV0ZSBwYXRoLCBlLmcuIC9Vc2Vycy9mb28vY2hlY2tlci0xIikKLSAgcGFyc2VyLmFkZF9vcHRpb24oIi0tdXNlLXhjb2RlLWNsYW5nIiwgYWN0aW9uPSJzdG9yZV9jb25zdCIsCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0PSIkKENMQU5HKSIsIGRlc3Q9ImRlZmF1bHQiLAotICAgICAgICAgICAgICAgICAgICBoZWxwPSJVc2UgdGhlIENsYW5nIGJ1bmRsZWQgd2l0aCBYY29kZSIpCi0gIChvcHRpb25zLCBhcmdzKSA9IHBhcnNlci5wYXJzZV9hcmdzKCkKLSAgaWYgb3B0aW9ucy5wYXRoIGlzIE5vbmUgYW5kIG9wdGlvbnMuZGVmYXVsdCBpcyBOb25lOgotICAgIHBhcnNlci5lcnJvcigiWW91IG11c3Qgc3BlY2lmeSBhIHZlcnNpb24gb2YgQ2xhbmcgdG8gdXNlIGZvciBzdGF0aWMgYW5hbHlzaXMuICBTcGVjaWZ5ICctaCcgZm9yIGRldGFpbHMiKQotCi0gICMgZGV0ZXJtaW5lIGlmIFhjb2RlIGlzIHJ1bm5pbmcKLSAgZm9yIHggaW4gTlNXb3Jrc3BhY2Uuc2hhcmVkV29ya3NwYWNlKCkucnVubmluZ0FwcGxpY2F0aW9ucygpOgotICAgIGlmIHgubG9jYWxpemVkTmFtZSgpLmZpbmQoIlhjb2RlIikgPj0gMDoKLSAgICAgIHByaW50ICIoLSkgWW91IG11c3QgcXVpdCBYY29kZSBmaXJzdCBiZWZvcmUgbW9kaWZ5aW5nIGl0cyBjb25maWd1cmF0aW9uIGZpbGVzLiIKLSAgICAgIHN5cy5leGl0KDEpCi0KLSAgaXNCdWlsdGluQW5hbHl6ZXIgPSBGYWxzZQotICBpZiBvcHRpb25zLnBhdGg6Ci0gICAgIyBFeHBhbmQgdGlsZGVzLgotICAgIHBhdGggPSBvcy5wYXRoLmV4cGFuZHVzZXIob3B0aW9ucy5wYXRoKQotICAgIGlmIG5vdCBwYXRoLmVuZHN3aXRoKCJjbGFuZyIpOgotICAgICAgcHJpbnQgIigrKSBVc2luZyBDbGFuZyBidW5kbGVkIHdpdGggY2hlY2tlciBidWlsZDoiLCBwYXRoCi0gICAgICBwYXRoID0gb3MucGF0aC5qb2luKHBhdGgsICJiaW4iLCAiY2xhbmciKTsKLSAgICBlbHNlOgotICAgICAgcHJpbnQgIigrKSBVc2luZyBDbGFuZyBsb2NhdGVkIGF0OiIsIHBhdGgKLSAgZWxzZToKLSAgICBwcmludCAiKCspIFVzaW5nIHRoZSBDbGFuZyBidW5kbGVkIHdpdGggWGNvZGUiCi0gICAgcGF0aCA9IG9wdGlvbnMuZGVmYXVsdAotICAgIGlzQnVpbHRpbkFuYWx5emVyID0gVHJ1ZQotCi0gIHRyeToKLSAgICB4Y29kZV9wYXRoID0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoWyJ4Y29kZS1zZWxlY3QiLCAiLXByaW50LXBhdGgiXSkKLSAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgotICAgICMgRmFsbCBiYWNrIHRvIHRoZSBkZWZhdWx0IGluc3RhbGwgbG9jYXRpb24gd2hlbiB1c2luZyBQeXRob24gPCAyLjcuMAotICAgIHhjb2RlX3BhdGggPSAiL0RldmVsb3BlciIKLSAgaWYgKHhjb2RlX3BhdGguZmluZCgiLmFwcC8iKSAhPSAtMSk6Ci0gICAgIyBDdXQgb2ZmIHRoZSAnRGV2ZWxvcGVyJyBkaXIsIGFzIHRoZSB4Y3NwZWMgbGllcyBpbiBhbm90aGVyIHBhcnQKLSAgICAjIG9mIHRoZSBYY29kZS5hcHAgc3VidHJlZS4KLSAgICB4Y29kZV9wYXRoID0geGNvZGVfcGF0aC5yc3BsaXQoJy9EZXZlbG9wZXInLCAxKVswXQotCi0gIGZvdW5kU3BlYyA9IEZhbHNlCi0gIGZvciB4IGluIEZpbmRDbGFuZ1NwZWNzKHhjb2RlX3BhdGgpOgotICAgIGZvdW5kU3BlYyA9IFRydWUKLSAgICBNb2RpZnlTcGVjKHgsIGlzQnVpbHRpbkFuYWx5emVyLCBwYXRoKQotCi0gIGlmIGZvdW5kU3BlYyA9PSBGYWxzZToKLSAgICAgIHByaW50ICIoLSkgTm8gY29tcGlsZXIgY29uZmlndXJhdGlvbiBmaWxlIHdhcyBmb3VuZC4gIFhjb2RlJ3MgYW5hbHl6ZXIgaGFzIG5vdCBiZWVuIHVwZGF0ZWQuIgotCi1pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICBtYWluKCkKZGlmZiAtLWdpdCBhL2NsYW5nLTI1NzcxMTMvdG9vbHMvc2Nhbi1idWlsZC9saWJleGVjL2MrKy1hbmFseXplciBiL2NsYW5nLTI1NzcxMTMvdG9vbHMvc2Nhbi1idWlsZC9saWJleGVjL2MrKy1hbmFseXplcgpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggZGRhNWRiOS4uMDAwMDAwMAotLS0gYS9jbGFuZy0yNTc3MTEzL3Rvb2xzL3NjYW4tYnVpbGQvbGliZXhlYy9jKystYW5hbHl6ZXIKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLSMhL3Vzci9iaW4vZW52IHBlcmwKLQotdXNlIEN3ZCBxdy8gYWJzX3BhdGggLzsKLXVzZSBGaWxlOjpCYXNlbmFtZSBxdy8gZGlybmFtZSAvOwotIyBBZGQgc2Nhbi1idWlsZCBkaXIgdG8gdGhlIGxpc3Qgb2YgcGxhY2VzIHdoZXJlIHBlcmwgbG9va3MgZm9yIG1vZHVsZXMuCi11c2UgbGliIGRpcm5hbWUoYWJzX3BhdGgoJDApKTsKLQotZG8gJ2NjYy1hbmFseXplcic7CmRpZmYgLS1naXQgYS9jbGFuZy0yNTc3MTEzL3Rvb2xzL3NjYW4tYnVpbGQvbGliZXhlYy9jKystYW5hbHl6ZXIuYmF0IGIvY2xhbmctMjU3NzExMy90b29scy9zY2FuLWJ1aWxkL2xpYmV4ZWMvYysrLWFuYWx5emVyLmJhdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjlmMDQ4YS4uMDAwMDAwMAotLS0gYS9jbGFuZy0yNTc3MTEzL3Rvb2xzL3NjYW4tYnVpbGQvbGliZXhlYy9jKystYW5hbHl6ZXIuYmF0CisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotcGVybCAtUyBjKystYW5hbHl6ZXIgJSoNCmRpZmYgLS1naXQgYS9jbGFuZy0yNTc3MTEzL3Rvb2xzL3NjYW4tYnVpbGQvbGliZXhlYy9jY2MtYW5hbHl6ZXIgYi9jbGFuZy0yNTc3MTEzL3Rvb2xzL3NjYW4tYnVpbGQvbGliZXhlYy9jY2MtYW5hbHl6ZXIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDgzMWRkNDIuLjAwMDAwMDAKLS0tIGEvY2xhbmctMjU3NzExMy90b29scy9zY2FuLWJ1aWxkL2xpYmV4ZWMvY2NjLWFuYWx5emVyCisrKyAvZGV2L251bGwKQEAgLTEsNzc3ICswLDAgQEAKLSMhL3Vzci9iaW4vZW52IHBlcmwKLSMKLSMgICAgICAgICAgICAgICAgICAgICBUaGUgTExWTSBDb21waWxlciBJbmZyYXN0cnVjdHVyZQotIwotIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIFVuaXZlcnNpdHkgb2YgSWxsaW5vaXMgT3BlbiBTb3VyY2UKLSMgTGljZW5zZS4gU2VlIExJQ0VOU0UuVFhUIGZvciBkZXRhaWxzLgotIwotIyM9PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09IyMKLSMKLSMgIEEgc2NyaXB0IGRlc2lnbmVkIHRvIGludGVycG9zZSBiZXR3ZWVuIHRoZSBidWlsZCBzeXN0ZW0gYW5kIGdjYy4gIEl0IGludm9rZXMKLSMgIGJvdGggZ2NjIGFuZCB0aGUgc3RhdGljIGFuYWx5emVyLgotIwotIyM9PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09IyMKLQotdXNlIHN0cmljdDsKLXVzZSB3YXJuaW5nczsKLXVzZSBGaW5kQmluOwotdXNlIEN3ZCBxdy8gZ2V0Y3dkIGFic19wYXRoIC87Ci11c2UgRmlsZTo6VGVtcCBxdy8gdGVtcGZpbGUgLzsKLXVzZSBGaWxlOjpQYXRoIHF3IC8gbWtwYXRoIC87Ci11c2UgRmlsZTo6QmFzZW5hbWU7Ci11c2UgVGV4dDo6UGFyc2VXb3JkczsKLQotIyM9PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09IyMKLSMgTGlzdCBmb3JtICdzeXN0ZW0nIHdpdGggU1RET1VUIGFuZCBTVERFUlIgY2FwdHVyZWQuCi0jIz09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0jIwotCi1zdWIgc2lsZW50X3N5c3RlbSB7Ci0gIG15ICRIdG1sRGlyID0gc2hpZnQ7Ci0gIG15ICRDb21tYW5kID0gc2hpZnQ7Ci0KLSAgIyBTYXZlIFNURE9VVCBhbmQgU1RERVJSIGFuZCByZWRpcmVjdCB0byBhIHRlbXBvcmFyeSBmaWxlLgotICBvcGVuIE9MRE9VVCwgIj4mIiwgXCpTVERPVVQ7Ci0gIG9wZW4gT0xERVJSLCAiPiYiLCBcKlNUREVSUjsKLSAgbXkgKCRUbXBGSCwgJFRtcEZpbGUpID0gdGVtcGZpbGUoInRlbXBfYnVmX1hYWFhYWCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERJUiA9PiAkSHRtbERpciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVU5MSU5LID0+IDEpOwotICBvcGVuKFNURE9VVCwgIj4kVG1wRmlsZSIpOwotICBvcGVuKFNUREVSUiwgIj4mIiwgXCpTVERPVVQpOwotCi0gICMgSW52b2tlICdzeXN0ZW0nLCBTVERPVVQgYW5kIFNUREVSUiBhcmUgb3V0cHV0IHRvIGEgdGVtcG9yYXJ5IGZpbGUuCi0gIHN5c3RlbSAkQ29tbWFuZCwgQF87Ci0KLSAgIyBSZXN0b3JlIFNURE9VVCBhbmQgU1RERVJSLgotICBvcGVuIFNURE9VVCwgIj4mIiwgXCpPTERPVVQ7Ci0gIG9wZW4gU1RERVJSLCAiPiYiLCBcKk9MREVSUjsKLQotICByZXR1cm4gJFRtcEZIOwotfQotCi0jIz09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0jIwotIyBDb21waWxlciBjb21tYW5kIHNldHVwLgotIyM9PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09IyMKLQotIyBTZWFyY2ggaW4gdGhlIFBBVEggaWYgdGhlIGNvbXBpbGVyIGV4aXN0cwotc3ViIFNlYXJjaEluUGF0aCB7Ci0gICAgbXkgJGZpbGUgPSBzaGlmdDsKLSAgICBmb3JlYWNoIG15ICRkaXIgKHNwbGl0ICgnOicsICRFTlZ7UEFUSH0pKSB7Ci0gICAgICAgIGlmICgteCAiJGRpci8kZmlsZSIpIHsKLSAgICAgICAgICAgIHJldHVybiAxOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiAwOwotfQotCi1teSAkQ29tcGlsZXI7Ci1teSAkQ2xhbmc7Ci1teSAkRGVmYXVsdENDb21waWxlcjsKLW15ICREZWZhdWx0Q1hYQ29tcGlsZXI7Ci1teSAkSXNDWFg7Ci1teSAkQW5hbHl6ZXJUYXJnZXQ7Ci0KLSMgSWYgb24gT1NYLCB1c2UgeGNydW4gdG8gZGV0ZXJtaW5lIHRoZSBTREsgcm9vdC4KLW15ICRVc2VYQ1JVTiA9IDA7Ci0KLWlmIChgdW5hbWUgLWFgID1+IG0vRGFyd2luLykgewotICAkRGVmYXVsdENDb21waWxlciA9ICdjbGFuZyc7Ci0gICREZWZhdWx0Q1hYQ29tcGlsZXIgPSAnY2xhbmcrKyc7Ci0gICMgT2xkZXIgdmVyc2lvbnMgb2YgT1NYIGRvIG5vdCBoYXZlIHhjcnVuIHRvCi0gICMgcXVlcnkgdGhlIFNESyBsb2NhdGlvbi4KLSAgaWYgKC14ICIvdXNyL2Jpbi94Y3J1biIpIHsKLSAgICAkVXNlWENSVU4gPSAxOwotICB9Ci19IGVsc2UgewotICAkRGVmYXVsdENDb21waWxlciA9ICdnY2MnOwotICAkRGVmYXVsdENYWENvbXBpbGVyID0gJ2crKyc7Ci19Ci0KLWlmICgkRmluZEJpbjo6U2NyaXB0ID1+IC9jXCtcKy1hbmFseXplci8pIHsKLSAgJENvbXBpbGVyID0gJEVOVnsnQ0NDX0NYWCd9OwotICBpZiAoIWRlZmluZWQgJENvbXBpbGVyIHx8ICghIC14ICRDb21waWxlciAmJiAhIFNlYXJjaEluUGF0aCgkQ29tcGlsZXIpKSkgeyAkQ29tcGlsZXIgPSAkRGVmYXVsdENYWENvbXBpbGVyOyB9Ci0KLSAgJENsYW5nID0gJEVOVnsnQ0xBTkdfQ1hYJ307Ci0gIGlmICghZGVmaW5lZCAkQ2xhbmcgfHwgISAteCAkQ2xhbmcpIHsgJENsYW5nID0gJ2NsYW5nKysnOyB9Ci0KLSAgJElzQ1hYID0gMQotfQotZWxzZSB7Ci0gICRDb21waWxlciA9ICRFTlZ7J0NDQ19DQyd9OwotICBpZiAoIWRlZmluZWQgJENvbXBpbGVyIHx8ICghIC14ICRDb21waWxlciAmJiAhIFNlYXJjaEluUGF0aCgkQ29tcGlsZXIpKSkgeyAkQ29tcGlsZXIgPSAkRGVmYXVsdENDb21waWxlcjsgfQotCi0gICRDbGFuZyA9ICRFTlZ7J0NMQU5HJ307Ci0gIGlmICghZGVmaW5lZCAkQ2xhbmcgfHwgISAteCAkQ2xhbmcpIHsgJENsYW5nID0gJ2NsYW5nJzsgfQotCi0gICRJc0NYWCA9IDAKLX0KLQotJEFuYWx5emVyVGFyZ2V0ID0gJEVOVnsnQ0xBTkdfQU5BTFlaRVJfVEFSR0VUJ307Ci0KLSMjPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PSMjCi0jIENsZWFudXAuCi0jIz09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0jIwotCi1teSAkUmVwb3J0RmFpbHVyZXMgPSAkRU5WeydDQ0NfUkVQT1JUX0ZBSUxVUkVTJ307Ci1pZiAoIWRlZmluZWQgJFJlcG9ydEZhaWx1cmVzKSB7ICRSZXBvcnRGYWlsdXJlcyA9IDE7IH0KLQotbXkgJENsZWFudXBGaWxlOwotbXkgJFJlc3VsdEZpbGU7Ci0KLSMgUmVtb3ZlIGFueSBzdGFsZSBmaWxlcyBhdCBleGl0LgotRU5EIHsKLSAgaWYgKGRlZmluZWQgJFJlc3VsdEZpbGUgJiYgLXogJFJlc3VsdEZpbGUpIHsKLSAgICB1bmxpbmsoJFJlc3VsdEZpbGUpOwotICB9Ci0gIGlmIChkZWZpbmVkICRDbGVhbnVwRmlsZSkgewotICAgIHVubGluaygkQ2xlYW51cEZpbGUpOwotICB9Ci19Ci0KLSMjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMjCi0jICBQcm9jZXNzIENsYW5nIENyYXNoZXMuCi0jIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jIwotCi1zdWIgR2V0UFBFeHQgewotICBteSAkTGFuZyA9IHNoaWZ0OwotICBpZiAoJExhbmcgPX4gL29iamVjdGl2ZS1jXCtcKy8pIHsgcmV0dXJuICIubWlpIiB9OwotICBpZiAoJExhbmcgPX4gL29iamVjdGl2ZS1jLykgeyByZXR1cm4gIi5taSI7IH0KLSAgaWYgKCRMYW5nID1+IC9jXCtcKy8pIHsgcmV0dXJuICIuaWkiOyB9Ci0gIHJldHVybiAiLmkiOwotfQotCi0jIFNldCB0aGlzIHRvIDEgaWYgd2Ugd2FudCB0byBpbmNsdWRlICdwYXJzZXIgcmVqZWN0cycgZmlsZXMuCi1teSAkSW5jbHVkZVBhcnNlclJlamVjdHMgPSAwOwotbXkgJFBhcnNlclJlamVjdHMgPSAiUGFyc2VyIFJlamVjdHMiOwotbXkgJEF0dHJpYnV0ZUlnbm9yZWQgPSAiQXR0cmlidXRlIElnbm9yZWQiOwotbXkgJE90aGVyRXJyb3IgPSAiT3RoZXIgRXJyb3IiOwotCi1zdWIgUHJvY2Vzc0NsYW5nRmFpbHVyZSB7Ci0gIG15ICgkQ2xhbmcsICRMYW5nLCAkZmlsZSwgJEFyZ3MsICRIdG1sRGlyLCAkRXJyb3JUeXBlLCAkb2ZpbGUpID0gQF87Ci0gIG15ICREaXIgPSAiJEh0bWxEaXIvZmFpbHVyZXMiOwotICBta3BhdGggJERpcjsKLQotICBteSAkcHJlZml4ID0gImNsYW5nX2NyYXNoIjsKLSAgaWYgKCRFcnJvclR5cGUgZXEgJFBhcnNlclJlamVjdHMpIHsKLSAgICAkcHJlZml4ID0gImNsYW5nX3BhcnNlcl9yZWplY3RzIjsKLSAgfQotICBlbHNpZiAoJEVycm9yVHlwZSBlcSAkQXR0cmlidXRlSWdub3JlZCkgewotICAgICRwcmVmaXggPSAiY2xhbmdfYXR0cmlidXRlX2lnbm9yZWQiOwotICB9Ci0gIGVsc2lmICgkRXJyb3JUeXBlIGVxICRPdGhlckVycm9yKSB7Ci0gICAgJHByZWZpeCA9ICJjbGFuZ19vdGhlcl9lcnJvciI7Ci0gIH0KLQotICAjIEdlbmVyYXRlIHRoZSBwcmVwcm9jZXNzZWQgZmlsZSB3aXRoIENsYW5nLgotICBteSAoJFBQSCwgJFBQRmlsZSkgPSB0ZW1wZmlsZSggJHByZWZpeCAuICJfWFhYWFhYIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNVRkZJWCA9PiBHZXRQUEV4dCgkTGFuZyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBESVIgPT4gJERpcik7Ci0gIGNsb3NlICgkUFBIKTsKLSAgc3lzdGVtICRDbGFuZywgQCRBcmdzLCAiLUUiLCAiLW8iLCAkUFBGaWxlOwotCi0gICMgQ3JlYXRlIHRoZSBpbmZvIGZpbGUuCi0gIG9wZW4gKE9VVCwgIj4iLCAiJFBQRmlsZS5pbmZvLnR4dCIpIG9yIGRpZSAiQ2Fubm90IG9wZW4gJFBQRmlsZS5pbmZvLnR4dFxuIjsKLSAgcHJpbnQgT1VUIGFic19wYXRoKCRmaWxlKSwgIlxuIjsKLSAgcHJpbnQgT1VUICIkRXJyb3JUeXBlXG4iOwotICBwcmludCBPVVQgIkAkQXJnc1xuIjsKLSAgY2xvc2UgT1VUOwotICBgdW5hbWUgLWEgPj4gJFBQRmlsZS5pbmZvLnR4dCAyPiYxYDsKLSAgYCIkQ29tcGlsZXIiIC12ID4+ICRQUEZpbGUuaW5mby50eHQgMj4mMWA7Ci0gIHJlbmFtZSgkb2ZpbGUsICIkUFBGaWxlLnN0ZGVyci50eHQiKTsKLSAgcmV0dXJuIChiYXNlbmFtZSAkUFBGaWxlKTsKLX0KLQotIyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIyMKLSMgIFJ1bm5pbmcgdGhlIGFuYWx5emVyLgotIyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIyMKLQotc3ViIEdldENDQXJncyB7Ci0gIG15ICRIdG1sRGlyID0gc2hpZnQ7Ci0gIG15ICRtb2RlID0gc2hpZnQ7Ci0gIG15ICRBcmdzID0gc2hpZnQ7Ci0gIG15ICRsaW5lOwotICBteSAkT3V0cHV0U3RyZWFtID0gc2lsZW50X3N5c3RlbSgkSHRtbERpciwgJENsYW5nLCAiLSMjIyIsICRtb2RlLCBAJEFyZ3MpOwotICB3aGlsZSAoPCRPdXRwdXRTdHJlYW0+KSB7Ci0gICAgbmV4dCBpZiAoIS9ccyI/LWNjMSI/XHMvKTsKLSAgICAkbGluZSA9ICRfOwotICB9Ci0gIGRpZSAiY291bGQgbm90IGZpbmQgY2xhbmcgbGluZVxuIiBpZiAoIWRlZmluZWQgJGxpbmUpOwotICAjIFN0cmlwIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHdoaXRlc3BhY2UgY2hhcmFjdGVycy4KLSAgJGxpbmUgPX4gcy9eXHMrfFxzKyQvL2c7Ci0gIG15IEBpdGVtcyA9IHF1b3Rld29yZHMoJ1xzKycsIDAsICRsaW5lKTsKLSAgbXkgJGNtZCA9IHNoaWZ0IEBpdGVtczsKLSAgZGllICJjYW5ub3QgZmluZCAnY2xhbmcnIGluICdjbGFuZycgY29tbWFuZFxuIiBpZiAoISgkY21kID1+IC9jbGFuZy8pKTsKLSAgcmV0dXJuIFxAaXRlbXM7Ci19Ci0KLXN1YiBBbmFseXplIHsKLSAgbXkgKCRDbGFuZywgJE9yaWdpbmFsQXJncywgJEFuYWx5emVBcmdzLCAkTGFuZywgJE91dHB1dCwgJFZlcmJvc2UsICRIdG1sRGlyLAotICAgICAgJGZpbGUpID0gQF87Ci0KLSAgbXkgQEFyZ3MgPSBAJE9yaWdpbmFsQXJnczsKLSAgbXkgJENtZDsKLSAgbXkgQENtZEFyZ3M7Ci0gIG15IEBDbWRBcmdzU2Fuc0FuYWx5c2VzOwotCi0gIGlmICgkTGFuZyA9fiAvaGVhZGVyLykgewotICAgIGV4aXQgMCBpZiAoIWRlZmluZWQgKCRPdXRwdXQpKTsKLSAgICAkQ21kID0gJ2NwJzsKLSAgICBwdXNoIEBDbWRBcmdzLCAkZmlsZTsKLSAgICAjIFJlbW92ZSB0aGUgUENIIGV4dGVuc2lvbi4KLSAgICAkT3V0cHV0ID1+IHMvWy5dZ2NoJC8vOwotICAgIHB1c2ggQENtZEFyZ3MsICRPdXRwdXQ7Ci0gICAgQENtZEFyZ3NTYW5zQW5hbHlzZXMgPSBAQ21kQXJnczsKLSAgfQotICBlbHNlIHsKLSAgICAkQ21kID0gJENsYW5nOwotCi0gICAgIyBDcmVhdGUgYXJndW1lbnRzIGZvciBkb2luZyByZWd1bGFyIHBhcnNpbmcuCi0gICAgbXkgJFN5bnRheEFyZ3MgPSBHZXRDQ0FyZ3MoJEh0bWxEaXIsICItZnN5bnRheC1vbmx5IiwgXEBBcmdzKTsKLSAgICBAQ21kQXJnc1NhbnNBbmFseXNlcyA9IEAkU3ludGF4QXJnczsKLQotICAgICMgQ3JlYXRlIGFyZ3VtZW50cyBmb3IgZG9pbmcgc3RhdGljIGFuYWx5c2lzLgotICAgIGlmIChkZWZpbmVkICRSZXN1bHRGaWxlKSB7Ci0gICAgICBwdXNoIEBBcmdzLCAnLW8nLCAkUmVzdWx0RmlsZTsKLSAgICB9Ci0gICAgZWxzaWYgKGRlZmluZWQgJEh0bWxEaXIpIHsKLSAgICAgIHB1c2ggQEFyZ3MsICctbycsICRIdG1sRGlyOwotICAgIH0KLSAgICBpZiAoJFZlcmJvc2UpIHsKLSAgICAgIHB1c2ggQEFyZ3MsICItWGNsYW5nIiwgIi1hbmFseXplci1kaXNwbGF5LXByb2dyZXNzIjsKLSAgICB9Ci0KLSAgICBmb3JlYWNoIG15ICRhcmcgKEAkQW5hbHl6ZUFyZ3MpIHsKLSAgICAgIHB1c2ggQEFyZ3MsICItWGNsYW5nIiwgJGFyZzsKLSAgICB9Ci0KLSAgICAjIERpc3BsYXkgVWJpdml6IGdyYXBoPwotICAgIGlmIChkZWZpbmVkICRFTlZ7J0NDQ19VQkknfSkgewotICAgICAgcHVzaCBAQXJncywgIi1YY2xhbmciLCAiLWFuYWx5emVyLXZpei1lZ3JhcGgtdWJpZ3JhcGgiOwotICAgIH0KLQotICAgIGlmIChkZWZpbmVkICRBbmFseXplclRhcmdldCkgewotICAgICAgcHVzaCBAQXJncywgIi10YXJnZXQiLCAkQW5hbHl6ZXJUYXJnZXQ7Ci0gICAgfQotCi0gICAgbXkgJEFuYWx5c2lzQXJncyA9IEdldENDQXJncygkSHRtbERpciwgIi0tYW5hbHl6ZSIsIFxAQXJncyk7Ci0gICAgQENtZEFyZ3MgPSBAJEFuYWx5c2lzQXJnczsKLSAgfQotCi0gIG15IEBQcmludEFyZ3M7Ci0gIG15ICRkaXI7Ci0KLSAgaWYgKCRWZXJib3NlKSB7Ci0gICAgJGRpciA9IGdldGN3ZCgpOwotICAgIHByaW50IFNUREVSUiAiXG5bTE9DQVRJT05dOiAkZGlyXG4iOwotICAgIHB1c2ggQFByaW50QXJncywiJyRDbWQnIjsKLSAgICBmb3JlYWNoIG15ICRhcmcgKEBDbWRBcmdzKSB7Ci0gICAgICAgIHB1c2ggQFByaW50QXJncywiXCckYXJnXCciOwotICAgIH0KLSAgfQotICBpZiAoJFZlcmJvc2UgPT0gMSkgewotICAgICMgV2UgTVVTVCBwcmludCB0byBzdGRlcnIuICBTb21lIGNsaWVudHMgdXNlIHRoZSBzdGRvdXQgb3V0cHV0IG9mCi0gICAgIyBnY2MgZm9yIHZhcmlvdXMgcHVycG9zZXMuCi0gICAgcHJpbnQgU1RERVJSIGpvaW4oJyAnLCBAUHJpbnRBcmdzKTsKLSAgICBwcmludCBTVERFUlIgIlxuIjsKLSAgfQotICBlbHNpZiAoJFZlcmJvc2UgPT0gMikgewotICAgIHByaW50IFNUREVSUiAiI1NIRUxMIChjZCAnJGRpcicgJiYgQFByaW50QXJncylcbiI7Ci0gIH0KLQotICAjIFNhdmUgU1RET1VUIGFuZCBTVERFUlIgb2YgY2xhbmcgdG8gYSB0ZW1wb3JhcnkgZmlsZSBhbmQgcmVyb3V0ZQotICAjIGFsbCBjbGFuZyBvdXRwdXQgdG8gY2NjLWFuYWx5emVyJ3MgU1RERVJSLgotICAjIFdlIHNhdmUgdGhlIG91dHB1dCBmaWxlIGluIHRoZSAnY3Jhc2hlcycgZGlyZWN0b3J5IGlmIGNsYW5nIGVuY291bnRlcnMKLSAgIyBhbnkgcHJvYmxlbXMgd2l0aCB0aGUgZmlsZS4KLSAgbXkgKCRvZmgsICRvZmlsZSkgPSB0ZW1wZmlsZSgiY2xhbmdfb3V0cHV0X1hYWFhYWCIsIERJUiA9PiAkSHRtbERpcik7Ci0KLSAgbXkgJE91dHB1dFN0cmVhbSA9IHNpbGVudF9zeXN0ZW0oJEh0bWxEaXIsICRDbWQsIEBDbWRBcmdzKTsKLSAgd2hpbGUgKCA8JE91dHB1dFN0cmVhbT4gKSB7Ci0gICAgcHJpbnQgJG9maCAkXzsKLSAgICBwcmludCBTVERFUlIgJF87Ci0gIH0KLSAgbXkgJFJlc3VsdCA9ICQ/OwotICBjbG9zZSAkb2ZoOwotCi0gICMgRGlkIHRoZSBjb21tYW5kIGRpZSBiZWNhdXNlIG9mIGEgc2lnbmFsPwotICBpZiAoJFJlcG9ydEZhaWx1cmVzKSB7Ci0gICAgaWYgKCRSZXN1bHQgJiAxMjcgYW5kICRDbWQgZXEgJENsYW5nIGFuZCBkZWZpbmVkICRIdG1sRGlyKSB7Ci0gICAgICBQcm9jZXNzQ2xhbmdGYWlsdXJlKCRDbGFuZywgJExhbmcsICRmaWxlLCBcQENtZEFyZ3NTYW5zQW5hbHlzZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICRIdG1sRGlyLCAiQ3Jhc2giLCAkb2ZpbGUpOwotICAgIH0KLSAgICBlbHNpZiAoJFJlc3VsdCkgewotICAgICAgaWYgKCRJbmNsdWRlUGFyc2VyUmVqZWN0cyAmJiAhKCRmaWxlID1+L2NvbmZ0ZXN0LykpIHsKLSAgICAgICAgUHJvY2Vzc0NsYW5nRmFpbHVyZSgkQ2xhbmcsICRMYW5nLCAkZmlsZSwgXEBDbWRBcmdzU2Fuc0FuYWx5c2VzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICRIdG1sRGlyLCAkUGFyc2VyUmVqZWN0cywgJG9maWxlKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIFByb2Nlc3NDbGFuZ0ZhaWx1cmUoJENsYW5nLCAkTGFuZywgJGZpbGUsIFxAQ21kQXJnc1NhbnNBbmFseXNlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAkSHRtbERpciwgJE90aGVyRXJyb3IsICRvZmlsZSk7Ci0gICAgICB9Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgIyBDaGVjayBpZiB0aGVyZSB3ZXJlIGFueSB1bmhhbmRsZWQgYXR0cmlidXRlcy4KLSAgICAgIGlmIChvcGVuKENISUxELCAkb2ZpbGUpKSB7Ci0gICAgICAgIG15ICVhdHRyaWJ1dGVzX25vdF9oYW5kbGVkOwotCi0gICAgICAgICMgRG9uJ3QgZmxhZyB3YXJuaW5ncyBhYm91dCB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXMgdGhhdCB3ZQotICAgICAgICAjIGtub3cgYXJlIGN1cnJlbnRseSBub3Qgc3VwcG9ydGVkIGJ5IENsYW5nLgotICAgICAgICAkYXR0cmlidXRlc19ub3RfaGFuZGxlZHsiY2RlY2wifSA9IDE7Ci0KLSAgICAgICAgbXkgJHBwZmlsZTsKLSAgICAgICAgd2hpbGUgKDxDSElMRD4pIHsKLSAgICAgICAgICBuZXh0IGlmICghIC93YXJuaW5nOiAnKFteXCddKyknIGF0dHJpYnV0ZSBpZ25vcmVkLyk7Ci0KLSAgICAgICAgICAjIEhhdmUgd2UgYWxyZWFkeSBzcG90dGVkIHRoaXMgdW5oYW5kbGVkIGF0dHJpYnV0ZT8KLSAgICAgICAgICBuZXh0IGlmIChkZWZpbmVkICRhdHRyaWJ1dGVzX25vdF9oYW5kbGVkeyQxfSk7Ci0gICAgICAgICAgJGF0dHJpYnV0ZXNfbm90X2hhbmRsZWR7JDF9ID0gMTsKLQotICAgICAgICAgICMgR2V0IHRoZSBuYW1lIG9mIHRoZSBhdHRyaWJ1dGUgZmlsZS4KLSAgICAgICAgICBteSAkZGlyID0gIiRIdG1sRGlyL2ZhaWx1cmVzIjsKLSAgICAgICAgICBteSAkYWZpbGUgPSAiJGRpci9hdHRyaWJ1dGVfaWdub3JlZF8kMS50eHQiOwotCi0gICAgICAgICAgIyBPbmx5IGNyZWF0ZSBhbm90aGVyIHByZXByb2Nlc3NlZCBmaWxlIGlmIHRoZSBhdHRyaWJ1dGUgZmlsZQotICAgICAgICAgICMgZG9lc24ndCBleGlzdCB5ZXQuCi0gICAgICAgICAgbmV4dCBpZiAoLWUgJGFmaWxlKTsKLQotICAgICAgICAgICMgQWRkIHRoaXMgZmlsZSB0byB0aGUgbGlzdCBvZiBmaWxlcyB0aGF0IGNvbnRhaW5lZCB0aGlzIGF0dHJpYnV0ZS4KLSAgICAgICAgICAjIEdlbmVyYXRlIGEgcHJlcHJvY2Vzc2VkIGZpbGUgaWYgd2UgaGF2ZW4ndCBhbHJlYWR5LgotICAgICAgICAgIGlmICghKGRlZmluZWQgJHBwZmlsZSkpIHsKLSAgICAgICAgICAgICRwcGZpbGUgPSBQcm9jZXNzQ2xhbmdGYWlsdXJlKCRDbGFuZywgJExhbmcsICRmaWxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXEBDbWRBcmdzU2Fuc0FuYWx5c2VzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJEh0bWxEaXIsICRBdHRyaWJ1dGVJZ25vcmVkLCAkb2ZpbGUpOwotICAgICAgICAgIH0KLQotICAgICAgICAgIG1rcGF0aCAkZGlyOwotICAgICAgICAgIG9wZW4oQUZJTEUsICI+JGFmaWxlIik7Ci0gICAgICAgICAgcHJpbnQgQUZJTEUgIiRwcGZpbGVcbiI7Ci0gICAgICAgICAgY2xvc2UoQUZJTEUpOwotICAgICAgICB9Ci0gICAgICAgIGNsb3NlIENISUxEOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIHVubGluaygkb2ZpbGUpOwotfQotCi0jIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jIwotIyAgTG9va3VwIHRhYmxlcy4KLSMjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMjCi0KLW15ICVDb21waWxlT3B0aW9uTWFwID0gKAotICAnLW5vc3RkaW5jJyA9PiAwLAotICAnLWluY2x1ZGUnID0+IDEsCi0gICctaWRpcmFmdGVyJyA9PiAxLAotICAnLWltYWNyb3MnID0+IDEsCi0gICctaXByZWZpeCcgPT4gMSwKLSAgJy1pcXVvdGUnID0+IDEsCi0gICctaXdpdGhwcmVmaXgnID0+IDEsCi0gICctaXdpdGhwcmVmaXhiZWZvcmUnID0+IDEKLSk7Ci0KLW15ICVMaW5rZXJPcHRpb25NYXAgPSAoCi0gICctZnJhbWV3b3JrJyA9PiAxLAotICAnLWZvYmpjLWxpbmstcnVudGltZScgPT4gMAotKTsKLQotbXkgJUNvbXBpbGVyTGlua2VyT3B0aW9uTWFwID0gKAotICAnLVd3cml0ZS1zdHJpbmdzJyA9PiAwLAotICAnLWZ0cmFwdi1oYW5kbGVyJyA9PiAxLCAjIHNwZWNpZmljYWxseSBjYWxsIG91dCBzZXBhcmF0ZWQgLWYgZmxhZwotICAnLW1pb3Mtc2ltdWxhdG9yLXZlcnNpb24tbWluJyA9PiAwLCAjIFRoaXMgcmVhbGx5IGhhcyAxIGFyZ3VtZW50LCBidXQgYWx3YXlzIGhhcyAnPScKLSAgJy1pc3lzcm9vdCcgPT4gMSwKLSAgJy1hcmNoJyA9PiAxLAotICAnLW0zMicgPT4gMCwKLSAgJy1tNjQnID0+IDAsCi0gICctc3RkbGliJyA9PiAwLCAjIFRoaXMgaXMgcmVhbGx5IGEgMSBhcmd1bWVudCwgYnV0IGFsd2F5cyBoYXMgJz0nCi0gICctLXN5c3Jvb3QnID0+IDEsCi0gICctdGFyZ2V0JyA9PiAxLAotICAnLXYnID0+IDAsCi0gICctbW1hY29zeC12ZXJzaW9uLW1pbicgPT4gMCwgIyBUaGlzIGlzIHJlYWxseSBhIDEgYXJndW1lbnQsIGJ1dCBhbHdheXMgaGFzICc9JwotICAnLW1pcGhvbmVvcy12ZXJzaW9uLW1pbicgPT4gMCAjIFRoaXMgaXMgcmVhbGx5IGEgMSBhcmd1bWVudCwgYnV0IGFsd2F5cyBoYXMgJz0nCi0pOwotCi1teSAlSWdub3JlZE9wdGlvbk1hcCA9ICgKLSAgJy1NVCcgPT4gMSwgICMgSWdub3JlIHRoZXNlIHByZXByb2Nlc3NvciBvcHRpb25zLgotICAnLU1GJyA9PiAxLAotCi0gICctZnN5bnRheC1vbmx5JyA9PiAwLAotICAnLXNhdmUtdGVtcHMnID0+IDAsCi0gICctaW5zdGFsbF9uYW1lJyA9PiAxLAotICAnLWV4cG9ydGVkX3N5bWJvbHNfbGlzdCcgPT4gMSwKLSAgJy1jdXJyZW50X3ZlcnNpb24nID0+IDEsCi0gICctY29tcGF0aWJpbGl0eV92ZXJzaW9uJyA9PiAxLAotICAnLWluaXQnID0+IDEsCi0gICctZScgPT4gMSwKLSAgJy1zZWcxYWRkcicgPT4gMSwKLSAgJy1idW5kbGVfbG9hZGVyJyA9PiAxLAotICAnLW11bHRpcGx5X2RlZmluZWQnID0+IDEsCi0gICctc2VjdG9yZGVyJyA9PiAzLAotICAnLS1wYXJhbScgPT4gMSwKLSAgJy11JyA9PiAxLAotICAnLS1zZXJpYWxpemUtZGlhZ25vc3RpY3MnID0+IDEKLSk7Ci0KLW15ICVMYW5nTWFwID0gKAotICAnYycgICA9PiAkSXNDWFggPyAnYysrJyA6ICdjJywKLSAgJ2NwJyAgPT4gJ2MrKycsCi0gICdjcHAnID0+ICdjKysnLAotICAnY3h4JyA9PiAnYysrJywKLSAgJ3R4eCcgPT4gJ2MrKycsCi0gICdjYycgID0+ICdjKysnLAotICAnQycgICA9PiAnYysrJywKLSAgJ2lpJyAgPT4gJ2MrKy1jcHAtb3V0cHV0JywKLSAgJ2knICAgPT4gJElzQ1hYID8gJ2MrKy1jcHAtb3V0cHV0JyA6ICdjLWNwcC1vdXRwdXQnLAotICAnbScgICA9PiAnb2JqZWN0aXZlLWMnLAotICAnbWknICA9PiAnb2JqZWN0aXZlLWMtY3BwLW91dHB1dCcsCi0gICdtbScgID0+ICdvYmplY3RpdmUtYysrJywKLSAgJ21paScgPT4gJ29iamVjdGl2ZS1jKystY3BwLW91dHB1dCcsCi0pOwotCi1teSAlVW5pcXVlT3B0aW9ucyA9ICgKLSAgJy1pc3lzcm9vdCcgPT4gMAotKTsKLQotIyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIyMKLSMgTGFuZ3VhZ2VzIGFjY2VwdGVkLgotIyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIyMKLQotbXkgJUxhbmdzQWNjZXB0ZWQgPSAoCi0gICJvYmplY3RpdmUtYyIgPT4gMSwKLSAgImMiID0+IDEsCi0gICJjKysiID0+IDEsCi0gICJvYmplY3RpdmUtYysrIiA9PiAxLAotICAiYy1jcHAtb3V0cHV0IiA9PiAxLAotICAib2JqZWN0aXZlLWMtY3BwLW91dHB1dCIgPT4gMSwKLSAgImMrKy1jcHAtb3V0cHV0IiA9PiAxCi0pOwotCi0jIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jIwotIyAgTWFpbiBMb2dpYy4KLSMjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMjCi0KLW15ICRBY3Rpb24gPSAnbGluayc7Ci1teSBAQ29tcGlsZU9wdHM7Ci1teSBATGlua09wdHM7Ci1teSBARmlsZXM7Ci1teSAkTGFuZzsKLW15ICRPdXRwdXQ7Ci1teSAlVW5pcXVlZDsKLQotIyBGb3J3YXJkIGFyZ3VtZW50cyB0byBnY2MuCi1teSAkU3RhdHVzID0gc3lzdGVtKCRDb21waWxlcixAQVJHVik7Ci1pZiAoZGVmaW5lZCAkRU5WeydDQ0NfQU5BTFlaRVJfTE9HJ30pIHsKLSAgcHJpbnQgU1RERVJSICIkQ29tcGlsZXIgQEFSR1ZcbiI7Ci19Ci1pZiAoJFN0YXR1cykgeyBleGl0KCRTdGF0dXMgPj4gOCk7IH0KLQotIyBHZXQgdGhlIGFuYWx5c2lzIG9wdGlvbnMuCi1teSAkQW5hbHlzZXMgPSAkRU5WeydDQ0NfQU5BTFlaRVJfQU5BTFlTSVMnfTsKLQotIyBHZXQgdGhlIHBsdWdpbnMgdG8gbG9hZC4KLW15ICRQbHVnaW5zID0gJEVOVnsnQ0NDX0FOQUxZWkVSX1BMVUdJTlMnfTsKLQotIyBHZXQgdGhlIHN0b3JlIG1vZGVsLgotbXkgJFN0b3JlTW9kZWwgPSAkRU5WeydDQ0NfQU5BTFlaRVJfU1RPUkVfTU9ERUwnfTsKLQotIyBHZXQgdGhlIGNvbnN0cmFpbnRzIGVuZ2luZS4KLW15ICRDb25zdHJhaW50c01vZGVsID0gJEVOVnsnQ0NDX0FOQUxZWkVSX0NPTlNUUkFJTlRTX01PREVMJ307Ci0KLSNHZXQgdGhlIGludGVybmFsIHN0YXRzIHNldHRpbmcuCi1teSAkSW50ZXJuYWxTdGF0cyA9ICRFTlZ7J0NDQ19BTkFMWVpFUl9JTlRFUk5BTF9TVEFUUyd9OwotCi0jIEdldCB0aGUgb3V0cHV0IGZvcm1hdC4KLW15ICRPdXRwdXRGb3JtYXQgPSAkRU5WeydDQ0NfQU5BTFlaRVJfT1VUUFVUX0ZPUk1BVCd9OwotaWYgKCFkZWZpbmVkICRPdXRwdXRGb3JtYXQpIHsgJE91dHB1dEZvcm1hdCA9ICJodG1sIjsgfQotCi0jIEdldCB0aGUgY29uZmlnIG9wdGlvbnMuCi1teSAkQ29uZmlnT3B0aW9ucyA9ICRFTlZ7J0NDQ19BTkFMWVpFUl9DT05GSUcnfTsKLQotIyBEZXRlcm1pbmUgdGhlIGxldmVsIG9mIHZlcmJvc2l0eS4KLW15ICRWZXJib3NlID0gMDsKLWlmIChkZWZpbmVkICRFTlZ7J0NDQ19BTkFMWVpFUl9WRVJCT1NFJ30pIHsgJFZlcmJvc2UgPSAxOyB9Ci1pZiAoZGVmaW5lZCAkRU5WeydDQ0NfQU5BTFlaRVJfTE9HJ30pIHsgJFZlcmJvc2UgPSAyOyB9Ci0KLSMgR2V0IHRoZSBIVE1MIG91dHB1dCBkaXJlY3RvcnkuCi1teSAkSHRtbERpciA9ICRFTlZ7J0NDQ19BTkFMWVpFUl9IVE1MJ307Ci0KLW15ICVEaXNhYmxlZEFyY2hzID0gKCdwcGMnID0+IDEsICdwcGM2NCcgPT4gMSk7Ci1teSAlQXJjaHNTZWVuOwotbXkgJEhhZEFyY2ggPSAwOwotbXkgJEhhc1NESyA9IDA7Ci0KLSMgUHJvY2VzcyB0aGUgYXJndW1lbnRzLgotZm9yZWFjaCAobXkgJGkgPSAwOyAkaSA8IHNjYWxhcihAQVJHVik7ICsrJGkpIHsKLSAgbXkgJEFyZyA9ICRBUkdWWyRpXTsKLSAgbXkgKCRBcmdLZXkpID0gc3BsaXQgLz0vLCRBcmcsMjsKLQotICAjIEJlIGZyaWVuZGx5IHRvICIiIGluIHRoZSBhcmd1bWVudCBsaXN0LgotICBpZiAoIWRlZmluZWQoJEFyZ0tleSkpIHsKLSAgICBuZXh0OwotICB9Ci0KLSAgIyBNb2RlcyBjY2MtYW5hbHl6ZXIgc3VwcG9ydHMKLSAgaWYgKCRBcmcgPX4gL14tKEV8TU0/KSQvKSB7ICRBY3Rpb24gPSAncHJlcHJvY2Vzcyc7IH0KLSAgZWxzaWYgKCRBcmcgZXEgJy1jJykgeyAkQWN0aW9uID0gJ2NvbXBpbGUnOyB9Ci0gIGVsc2lmICgkQXJnID1+IC9eLXByaW50LXByb2ctbmFtZS8pIHsgZXhpdCAwOyB9Ci0KLSAgIyBTcGVjaWFsbHkgaGFuZGxlIGR1cGxpY2F0ZSBjYXNlcyBvZiAtYXJjaAotICBpZiAoJEFyZyBlcSAiLWFyY2giKSB7Ci0gICAgbXkgJGFyY2ggPSAkQVJHVlskaSsxXTsKLSAgICAjIFdlIGRvbid0IHdhbnQgdG8gcHJvY2VzcyAncHBjJyBiZWNhdXNlIG9mIENsYW5nJ3MgbGFjayBvZiBzdXBwb3J0Ci0gICAgIyBmb3IgQWx0aXZlYyAoYWxzbyBzb21lICNkZWZpbmVzIHdvbid0IGxpa2VseSBiZSBkZWZpbmVkIGNvcnJlY3RseSwgZXRjLikKLSAgICBpZiAoIShkZWZpbmVkICREaXNhYmxlZEFyY2hzeyRhcmNofSkpIHsgJEFyY2hzU2VlbnskYXJjaH0gPSAxOyB9Ci0gICAgJEhhZEFyY2ggPSAxOwotICAgICsrJGk7Ci0gICAgbmV4dDsKLSAgfQotCi0gICMgT24gT1NYL2lPUywgcmVjb3JkIGlmIGFuIFNESyBwYXRoIHdhcyBzcGVjaWZpZWQuICBUaGlzCi0gICMgaXMgaW5ub2N1b3VzIGZvciBvdGhlciBwbGF0Zm9ybXMsIHNvIHRoZSBjaGVjayBqdXN0IGhhcHBlbnMuCi0gIGlmICgkQXJnID1+IC9eLWlzeXNyb290LykgewotICAgICRIYXNTREsgPSAxOwotICB9Ci0KLSAgIyBPcHRpb25zIHdpdGggcG9zc2libGUgYXJndW1lbnRzIHRoYXQgc2hvdWxkIHBhc3MgdGhyb3VnaCB0byBjb21waWxlci4KLSAgaWYgKGRlZmluZWQgJENvbXBpbGVPcHRpb25NYXB7JEFyZ0tleX0pIHsKLSAgICBteSAkQ250ID0gJENvbXBpbGVPcHRpb25NYXB7JEFyZ0tleX07Ci0gICAgcHVzaCBAQ29tcGlsZU9wdHMsJEFyZzsKLSAgICB3aGlsZSAoJENudCA+IDApIHsgKyskaTsgLS0kQ250OyBwdXNoIEBDb21waWxlT3B0cywgJEFSR1ZbJGldOyB9Ci0gICAgbmV4dDsKLSAgfQotICAjIEhhbmRsZSB0aGUgY2FzZSB3aGVyZSB0aGVyZSBpc24ndCBhIHNwYWNlIGFmdGVyIC1pcXVvdGUKLSAgaWYgKCRBcmcgPX4gL14taXF1b3RlLiovKSB7Ci0gICAgcHVzaCBAQ29tcGlsZU9wdHMsJEFyZzsKLSAgICBuZXh0OwotICB9Ci0KLSAgIyBPcHRpb25zIHdpdGggcG9zc2libGUgYXJndW1lbnRzIHRoYXQgc2hvdWxkIHBhc3MgdGhyb3VnaCB0byBsaW5rZXIuCi0gIGlmIChkZWZpbmVkICRMaW5rZXJPcHRpb25NYXB7JEFyZ0tleX0pIHsKLSAgICBteSAkQ250ID0gJExpbmtlck9wdGlvbk1hcHskQXJnS2V5fTsKLSAgICBwdXNoIEBMaW5rT3B0cywkQXJnOwotICAgIHdoaWxlICgkQ250ID4gMCkgeyArKyRpOyAtLSRDbnQ7IHB1c2ggQExpbmtPcHRzLCAkQVJHVlskaV07IH0KLSAgICBuZXh0OwotICB9Ci0KLSAgIyBPcHRpb25zIHdpdGggcG9zc2libGUgYXJndW1lbnRzIHRoYXQgc2hvdWxkIHBhc3MgdGhyb3VnaCB0byBib3RoIGNvbXBpbGVyCi0gICMgYW5kIHRoZSBsaW5rZXIuCi0gIGlmIChkZWZpbmVkICRDb21waWxlckxpbmtlck9wdGlvbk1hcHskQXJnS2V5fSkgewotICAgIG15ICRDbnQgPSAkQ29tcGlsZXJMaW5rZXJPcHRpb25NYXB7JEFyZ0tleX07Ci0KLSAgICAjIENoZWNrIGlmIHRoaXMgaXMgYW4gb3B0aW9uIHRoYXQgc2hvdWxkIGhhdmUgYSB1bmlxdWUgdmFsdWUsIGFuZCBpZiBzbwotICAgICMgZGV0ZXJtaW5lIGlmIHRoZSB2YWx1ZSB3YXMgY2hlY2tlZCBiZWZvcmUuCi0gICAgaWYgKCRVbmlxdWVPcHRpb25zeyRBcmd9KSB7Ci0gICAgICBpZiAoZGVmaW5lZCAkVW5pcXVlZHskQXJnfSkgewotICAgICAgICAkaSArPSAkQ250OwotICAgICAgICBuZXh0OwotICAgICAgfQotICAgICAgJFVuaXF1ZWR7JEFyZ30gPSAxOwotICAgIH0KLQotICAgIHB1c2ggQENvbXBpbGVPcHRzLCRBcmc7Ci0gICAgcHVzaCBATGlua09wdHMsJEFyZzsKLQotICAgIHdoaWxlICgkQ250ID4gMCkgewotICAgICAgKyskaTsgLS0kQ250OwotICAgICAgcHVzaCBAQ29tcGlsZU9wdHMsICRBUkdWWyRpXTsKLSAgICAgIHB1c2ggQExpbmtPcHRzLCAkQVJHVlskaV07Ci0gICAgfQotICAgIG5leHQ7Ci0gIH0KLQotICAjIElnbm9yZWQgb3B0aW9ucy4KLSAgaWYgKGRlZmluZWQgJElnbm9yZWRPcHRpb25NYXB7JEFyZ0tleX0pIHsKLSAgICBteSAkQ250ID0gJElnbm9yZWRPcHRpb25NYXB7JEFyZ0tleX07Ci0gICAgd2hpbGUgKCRDbnQgPiAwKSB7Ci0gICAgICArKyRpOyAtLSRDbnQ7Ci0gICAgfQotICAgIG5leHQ7Ci0gIH0KLQotICAjIENvbXBpbGUgbW9kZSBmbGFncy4KLSAgaWYgKCRBcmcgPX4gL14tKD86W0RJVV18aXN5c3RlbSkoLiopJC8pIHsKLSAgICBteSAkVG1wID0gJEFyZzsKLSAgICBpZiAoJDEgZXEgJycpIHsKLSAgICAgICMgRklYTUU6IENoZWNrIGlmIHdlIGFyZSBnb2luZyBvZmYgdGhlIGVuZC4KLSAgICAgICsrJGk7Ci0gICAgICAkVG1wID0gJEFyZyAuICRBUkdWWyRpXTsKLSAgICB9Ci0gICAgcHVzaCBAQ29tcGlsZU9wdHMsJFRtcDsKLSAgICBuZXh0OwotICB9Ci0KLSAgaWYgKCRBcmcgPX4gL14tbS4qLykgewotICAgIHB1c2ggQENvbXBpbGVPcHRzLCRBcmc7Ci0gICAgbmV4dDsKLSAgfQotCi0gICMgTGFuZ3VhZ2UuCi0gIGlmICgkQXJnIGVxICcteCcpIHsKLSAgICAkTGFuZyA9ICRBUkdWWyRpKzFdOwotICAgICsrJGk7IG5leHQ7Ci0gIH0KLQotICAjIE91dHB1dCBmaWxlLgotICBpZiAoJEFyZyBlcSAnLW8nKSB7Ci0gICAgKyskaTsKLSAgICAkT3V0cHV0ID0gJEFSR1ZbJGldOwotICAgIG5leHQ7Ci0gIH0KLQotICAjIEdldCB0aGUgbGluayBtb2RlLgotICBpZiAoJEFyZyA9fiAvXi1bbCxMLE9dLykgewotICAgIGlmICgkQXJnIGVxICctTycpIHsgcHVzaCBATGlua09wdHMsJy1PMSc7IH0KLSAgICBlbHNpZiAoJEFyZyBlcSAnLU9zJykgeyBwdXNoIEBMaW5rT3B0cywnLU8yJzsgfQotICAgIGVsc2UgeyBwdXNoIEBMaW5rT3B0cywkQXJnOyB9Ci0KLSAgICAjIE11c3QgcGFzcyB0aGlzIGFsb25nIGZvciB0aGUgX19PUFRJTUlaRV9fIG1hY3JvCi0gICAgaWYgKCRBcmcgPX4gL14tTy8pIHsgcHVzaCBAQ29tcGlsZU9wdHMsJEFyZzsgfQotICAgIG5leHQ7Ci0gIH0KLQotICBpZiAoJEFyZyA9fiAvXi1zdGQ9LykgewotICAgIHB1c2ggQENvbXBpbGVPcHRzLCRBcmc7Ci0gICAgbmV4dDsKLSAgfQotCi0gICMgR2V0IHRoZSBjb21waWxlci9saW5rIG1vZGUuCi0gIGlmICgkQXJnID1+IC9eLUYoLispJC8pIHsKLSAgICBteSAkVG1wID0gJEFyZzsKLSAgICBpZiAoJDEgZXEgJycpIHsKLSAgICAgICMgRklYTUU6IENoZWNrIGlmIHdlIGFyZSBnb2luZyBvZmYgdGhlIGVuZC4KLSAgICAgICsrJGk7Ci0gICAgICAkVG1wID0gJEFyZyAuICRBUkdWWyRpXTsKLSAgICB9Ci0gICAgcHVzaCBAQ29tcGlsZU9wdHMsJFRtcDsKLSAgICBwdXNoIEBMaW5rT3B0cywkVG1wOwotICAgIG5leHQ7Ci0gIH0KLQotICAjIElucHV0IGZpbGVzLgotICBpZiAoJEFyZyBlcSAnLWZpbGVsaXN0JykgewotICAgICMgRklYTUU6IE1ha2Ugc3VyZSB3ZSBhcmVuJ3Qgd2Fsa2luZyBvZmYgdGhlIGVuZC4KLSAgICBvcGVuKElOLCAkQVJHVlskaSsxXSk7Ci0gICAgd2hpbGUgKDxJTj4pIHsgcy9cMDE1P1wwMTIvLzsgcHVzaCBARmlsZXMsJF87IH0KLSAgICBjbG9zZShJTik7Ci0gICAgKyskaTsKLSAgICBuZXh0OwotICB9Ci0KLSAgaWYgKCRBcmcgPX4gL14tZi8pIHsKLSAgICBwdXNoIEBDb21waWxlT3B0cywkQXJnOwotICAgIHB1c2ggQExpbmtPcHRzLCRBcmc7Ci0gICAgbmV4dDsKLSAgfQotCi0gICMgSGFuZGxlIC1Xbm8tLiAgV2UgZG9uJ3QgY2FyZSBhYm91dCBleHRyYSB3YXJuaW5ncywgYnV0Ci0gICMgd2Ugc2hvdWxkIHN1cHByZXNzIG9uZXMgdGhhdCB3ZSBkb24ndCB3YW50IHRvIHNlZS4KLSAgaWYgKCRBcmcgPX4gL14tV25vLS8pIHsKLSAgICBwdXNoIEBDb21waWxlT3B0cywgJEFyZzsKLSAgICBuZXh0OwotICB9Ci0KLSAgIyBIYW5kbGUgLVhjbGFuZyBzb21lLWFyZy4gQWRkIGJvdGggYXJndW1lbnRzIHRvIHRoZSBjb21waWxlciBvcHRpb25zLgotICBpZiAoJEFyZyA9fiAvXi1YY2xhbmckLykgewotICAgICMgRklYTUU6IENoZWNrIGlmIHdlIGFyZSBnb2luZyBvZmYgdGhlIGVuZC4KLSAgICArKyRpOwotICAgIHB1c2ggQENvbXBpbGVPcHRzLCAkQXJnOwotICAgIHB1c2ggQENvbXBpbGVPcHRzLCAkQVJHVlskaV07Ci0gICAgbmV4dDsKLSAgfQotCi0gIGlmICghKCRBcmcgPX4gL14tLykpIHsKLSAgICBwdXNoIEBGaWxlcywgJEFyZzsKLSAgICBuZXh0OwotICB9Ci19Ci0KLSMgSWYgd2UgYXJlIG9uIE9TWCBhbmQgaGF2ZSBhbiBpbnN0YWxsYXRpb24gd2hlcmUgdGhlCi0jIGRlZmF1bHQgU0RLIGlzIGluZmVycmVkIGJ5IHhjcnVuIHVzZSB4Y3J1biB0byBpbmZlcgotIyB0aGUgU0RLLgotaWYgKG5vdCAkSGFzU0RLIGFuZCAkVXNlWENSVU4pIHsKLSAgbXkgJHNkayA9IGAvdXNyL2Jpbi94Y3J1biAtLXNob3ctc2RrLXBhdGggLXNkayBtYWNvc3hgOwotICBjaG9tcCAkc2RrOwotICBwdXNoIEBDb21waWxlT3B0cywgIi1pc3lzcm9vdCIsICRzZGs7Ci19Ci0KLWlmICgkQWN0aW9uIGVxICdjb21waWxlJyBvciAkQWN0aW9uIGVxICdsaW5rJykgewotICBteSBAQXJjaHMgPSBrZXlzICVBcmNoc1NlZW47Ci0gICMgU2tpcCB0aGUgZmlsZSBpZiB3ZSBkb24ndCBzdXBwb3J0IHRoZSBhcmNoaXRlY3R1cmVzIHNwZWNpZmllZC4KLSAgZXhpdCAwIGlmICgkSGFkQXJjaCAmJiBzY2FsYXIoQEFyY2hzKSA9PSAwKTsKLQotICBmb3JlYWNoIG15ICRmaWxlIChARmlsZXMpIHsKLSAgICAjIERldGVybWluZSB0aGUgbGFuZ3VhZ2UgZm9yIHRoZSBmaWxlLgotICAgIG15ICRGaWxlTGFuZyA9ICRMYW5nOwotCi0gICAgaWYgKCFkZWZpbmVkKCRGaWxlTGFuZykpIHsKLSAgICAgICMgSW5mZXIgdGhlIGxhbmd1YWdlIGZyb20gdGhlIGV4dGVuc2lvbi4KLSAgICAgIGlmICgkZmlsZSA9fiAvWy5dKFteLl0rKSQvKSB7Ci0gICAgICAgICRGaWxlTGFuZyA9ICRMYW5nTWFweyQxfTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAjIEZpbGVMYW5nIHN0aWxsIG5vdCBkZWZpbmVkPyAgU2tpcCB0aGUgZmlsZS4KLSAgICBuZXh0IGlmICghZGVmaW5lZCAkRmlsZUxhbmcpOwotCi0gICAgIyBMYW5ndWFnZSBub3QgYWNjZXB0ZWQ/Ci0gICAgbmV4dCBpZiAoIWRlZmluZWQgJExhbmdzQWNjZXB0ZWR7JEZpbGVMYW5nfSk7Ci0KLSAgICBteSBAQ21kQXJnczsKLSAgICBteSBAQW5hbHl6ZUFyZ3M7Ci0KLSAgICBpZiAoJEZpbGVMYW5nIG5lICd1bmtub3duJykgewotICAgICAgcHVzaCBAQ21kQXJncywgJy14JywgJEZpbGVMYW5nOwotICAgIH0KLQotICAgIGlmIChkZWZpbmVkICRTdG9yZU1vZGVsKSB7Ci0gICAgICBwdXNoIEBBbmFseXplQXJncywgIi1hbmFseXplci1zdG9yZT0kU3RvcmVNb2RlbCI7Ci0gICAgfQotCi0gICAgaWYgKGRlZmluZWQgJENvbnN0cmFpbnRzTW9kZWwpIHsKLSAgICAgIHB1c2ggQEFuYWx5emVBcmdzLCAiLWFuYWx5emVyLWNvbnN0cmFpbnRzPSRDb25zdHJhaW50c01vZGVsIjsKLSAgICB9Ci0KLSAgICBpZiAoZGVmaW5lZCAkSW50ZXJuYWxTdGF0cykgewotICAgICAgcHVzaCBAQW5hbHl6ZUFyZ3MsICItYW5hbHl6ZXItc3RhdHMiOwotICAgIH0KLQotICAgIGlmIChkZWZpbmVkICRBbmFseXNlcykgewotICAgICAgcHVzaCBAQW5hbHl6ZUFyZ3MsIHNwbGl0ICdccysnLCAkQW5hbHlzZXM7Ci0gICAgfQotCi0gICAgaWYgKGRlZmluZWQgJFBsdWdpbnMpIHsKLSAgICAgIHB1c2ggQEFuYWx5emVBcmdzLCBzcGxpdCAnXHMrJywgJFBsdWdpbnM7Ci0gICAgfQotCi0gICAgaWYgKGRlZmluZWQgJE91dHB1dEZvcm1hdCkgewotICAgICAgcHVzaCBAQW5hbHl6ZUFyZ3MsICItYW5hbHl6ZXItb3V0cHV0PSIgLiAkT3V0cHV0Rm9ybWF0OwotICAgICAgaWYgKCRPdXRwdXRGb3JtYXQgPX4gL3BsaXN0LykgewotICAgICAgICAjIENoYW5nZSAiT3V0cHV0IiB0byBiZSBhIGZpbGUuCi0gICAgICAgIG15ICgkaCwgJGYpID0gdGVtcGZpbGUoInJlcG9ydC1YWFhYWFgiLCBTVUZGSVggPT4gIi5wbGlzdCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRElSID0+ICRIdG1sRGlyKTsKLSAgICAgICAgJFJlc3VsdEZpbGUgPSAkZjsKLSAgICAgICAgIyBJZiB0aGUgSHRtbERpciBpcyBub3Qgc2V0LCB3ZSBzaG91bGQgY2xlYW4gdXAgdGhlIHBsaXN0IGZpbGVzLgotICAgICAgICBpZiAoIWRlZmluZWQgJEh0bWxEaXIgfHwgLXogJEh0bWxEaXIpIHsKLSAgICAgICAgICAkQ2xlYW51cEZpbGUgPSAkZjsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICBpZiAoZGVmaW5lZCAkQ29uZmlnT3B0aW9ucykgewotICAgICAgcHVzaCBAQW5hbHl6ZUFyZ3MsIHNwbGl0ICdccysnLCAkQ29uZmlnT3B0aW9uczsKLSAgICB9Ci0KLSAgICBwdXNoIEBDbWRBcmdzLCBAQ29tcGlsZU9wdHM7Ci0gICAgcHVzaCBAQ21kQXJncywgJGZpbGU7Ci0KLSAgICBpZiAoc2NhbGFyIEBBcmNocykgewotICAgICAgZm9yZWFjaCBteSAkYXJjaCAoQEFyY2hzKSB7Ci0gICAgICAgIG15IEBOZXdBcmdzOwotICAgICAgICBwdXNoIEBOZXdBcmdzLCAnLWFyY2gnLCAkYXJjaDsKLSAgICAgICAgcHVzaCBATmV3QXJncywgQENtZEFyZ3M7Ci0gICAgICAgIEFuYWx5emUoJENsYW5nLCBcQE5ld0FyZ3MsIFxAQW5hbHl6ZUFyZ3MsICRGaWxlTGFuZywgJE91dHB1dCwKLSAgICAgICAgICAgICAgICAkVmVyYm9zZSwgJEh0bWxEaXIsICRmaWxlKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICBBbmFseXplKCRDbGFuZywgXEBDbWRBcmdzLCBcQEFuYWx5emVBcmdzLCAkRmlsZUxhbmcsICRPdXRwdXQsCi0gICAgICAgICAgICAgICRWZXJib3NlLCAkSHRtbERpciwgJGZpbGUpOwotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvY2xhbmctMjU3NzExMy90b29scy9zY2FuLWJ1aWxkL2xpYmV4ZWMvY2NjLWFuYWx5emVyLmJhdCBiL2NsYW5nLTI1NzcxMTMvdG9vbHMvc2Nhbi1idWlsZC9saWJleGVjL2NjYy1hbmFseXplci5iYXQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJhODUzNzYuLjAwMDAwMDAKLS0tIGEvY2xhbmctMjU3NzExMy90b29scy9zY2FuLWJ1aWxkL2xpYmV4ZWMvY2NjLWFuYWx5emVyLmJhdAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLXBlcmwgLVMgY2NjLWFuYWx5emVyICUqDQpkaWZmIC0tZ2l0IGEvY2xhbmctMjU3NzExMy90b29scy9zY2FuLWJ1aWxkL21hbi9zY2FuLWJ1aWxkLjEgYi9jbGFuZy0yNTc3MTEzL3Rvb2xzL3NjYW4tYnVpbGQvbWFuL3NjYW4tYnVpbGQuMQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2QzYTlmOC4uMDAwMDAwMAotLS0gYS9jbGFuZy0yNTc3MTEzL3Rvb2xzL3NjYW4tYnVpbGQvbWFuL3NjYW4tYnVpbGQuMQorKysgL2Rldi9udWxsCkBAIC0xLDM0OSArMCwwIEBACi0uXCIgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBVbml2ZXJzaXR5IG9mIElsbGlub2lzIE9wZW4gU291cmNlCi0uXCIgTGljZW5zZS4gU2VlIExJQ0VOU0UuVFhUIGZvciBkZXRhaWxzLgotLlwiICRJZCQKLS5EZCBNYXkgMjUsIDIwMTIKLS5EdCBTQ0FOLUJVSUxEIDEKLS5PcyAiY2xhbmciICIzLjUiCi0uU2ggTkFNRQotLk5tIHNjYW4tYnVpbGQKLS5OZCBDbGFuZyBzdGF0aWMgYW5hbHl6ZXIKLS5TaCBTWU5PUFNJUwotLk5tCi0uT3AgRmwgb2hrdlYKLS5PcCBGbCBhbmFseXplLWhlYWRlcnMKLS5PcCBGbCBlbmFibGUtY2hlY2tlciBPcCBBciBjaGVja2VyX25hbWUKLS5PcCBGbCBkaXNhYmxlLWNoZWNrZXIgT3AgQXIgY2hlY2tlcl9uYW1lCi0uT3AgRmwgRmwgaGVscAotLk9wIEZsIEZsIGhlbHAtY2hlY2tlcnMKLS5PcCBGbCBGbCBodG1sLXRpdGxlIE9wIEFyID10aXRsZQotLk9wIEZsIEZsIGtlZXAtZ29pbmcKLS5PcCBGbCBwbGlzdAotLk9wIEZsIHBsaXN0LWh0bWwKLS5PcCBGbCBGbCBzdGF0dXMtYnVncwotLk9wIEZsIEZsIHVzZS1jKysgT3AgQXIgPWNvbXBpbGVyX3BhdGgKLS5PcCBGbCBGbCB1c2UtY2MgT3AgQXIgPWNvbXBpbGVyX3BhdGgKLS5PcCBGbCBGbCB2aWV3Ci0uT3AgRmwgY29uc3RyYWludHMgT3AgQXIgbW9kZWwKLS5PcCBGbCBtYXhsb29wIEFyIE4KLS5PcCBGbCBuby1mYWlsdXJlLXJlcG9ydHMKLS5PcCBGbCBzdGF0cwotLk9wIEZsIHN0b3JlIE9wIEFyIG1vZGVsCi0uQXIgYnVpbGRfY29tbWFuZAotLk9wIGJ1aWxkX29wdGlvbnMKLS5cIgotLlwiIFNoIERFU0NSSVBUSU9OCi0uU2ggREVTQ1JJUFRJT04KLS5ObQotaXMgYSBQZXJsIHNjcmlwdCB0aGF0IGludm9rZXMgdGhlIENsYW5nIHN0YXRpYyBhbmFseXplci4gIE9wdGlvbnMgdXNlZCBieQotLk5tCi1vciBieSB0aGUgYW5hbHl6ZXIgYXBwZWFyIGZpcnN0LCBmb2xsb3dlZCBieSB0aGUKLS5BciBidWlsZF9jb21tYW5kCi1hbmQgYW55Ci0uQXIgYnVpbGRfb3B0aW9ucwotbm9ybWFsbHkgdXNlZCB0byBidWlsZCB0aGUgdGFyZ2V0IHN5c3RlbS4KLS5QcAotVGhlIHN0YXRpYyBhbmFseXplciBlbXBsb3lzIGEgbG9uZyBsaXN0IG9mIGNoZWNraW5nIGFsZ29yaXRobXMsIHNlZQotLlN4IENIRUNLRVJTIC4KLU91dHB1dCBjYW4gYmUgd3JpdHRlbiBpbiBzdGFuZGFyZAotLkxpIC5wbGlzdAotYW5kL29yIEhUTUwgZm9ybWF0LgotLlBwCi1UaGUgZm9sbG93aW5nIG9wdGlvbnMgYXJlIHN1cHBvcnRlZDoKLS5CbCAtdGFnIC13aWR0aCBpbmRlbnQKLS5JdCBGbCBhbmFseXplLWhlYWRlcnMKLUFsc28gYW5hbHl6ZSBmdW5jdGlvbnMgaW4gI2luY2x1ZGVkIGZpbGVzLgotLkl0IEZsIGVuYWJsZS1jaGVja2VyIEFyIGNoZWNrZXJfbmFtZSAsIEZsIGRpc2FibGUtY2hlY2tlciBBciBjaGVja2VyX25hbWUKLUVuYWJsZS9kaXNhYmxlCi0uQXIgY2hlY2tlcl9uYW1lIC4KLVNlZQotLlN4IENIRUNLRVJTIC4KLS5JdCBGbCBoICwgRmwgRmwgaGVscAotRGlzcGxheSB0aGlzIG1lc3NhZ2UuCi0uSXQgRmwgRmwgaGVscC1jaGVja2VycwotTGlzdCBkZWZhdWx0IGNoZWNrZXJzLCBzZWUKLS5TeCBDSEVDS0VSUyAuCi0uSXQgRmwgRmwgaHRtbC10aXRsZSBOcyBPcCA9IE5zIEFyIHRpdGxlCi1TcGVjaWZ5IHRoZSB0aXRsZSB1c2VkIG9uIGdlbmVyYXRlZCBIVE1MIHBhZ2VzLgotQSBkZWZhdWx0IHRpdGxlIGlzIGdlbmVyYXRlZCBpZgotLkFyIHRpdGxlCi1pcyBub3Qgc3BlY2lmaWVkLgotLkl0IEZsIGsgLCBGbCBGbCBrZWVwLWdvaW5nCi1BZGQgYQotLkRxIGtlZXAgb24gZ29pbmcKLW9wdGlvbiB0bwotLkFyIGJ1aWxkX2NvbW1hbmQgLgotQ3VycmVudGx5IHN1cHBvcnRzIG1ha2UgYW5kIHhjb2RlYnVpbGQuIFRoaXMgaXMgYSBjb252ZW5pZW5jZSBvcHRpb247Ci1vbmUgY2FuIHNwZWNpZnkgdGhpcyBiZWhhdmlvciBkaXJlY3RseSB1c2luZyBidWlsZCBvcHRpb25zLgotLkl0IEZsIG8KLVRhcmdldCBkaXJlY3RvcnkgZm9yIEhUTUwgcmVwb3J0IGZpbGVzLiAgU3ViZGlyZWN0b3JpZXMgd2lsbCBiZQotY3JlYXRlZCBhcyBuZWVkZWQgdG8gcmVwcmVzZW50IHNlcGFyYXRlIGludm9jYXRpb25zCi1vZiB0aGUgYW5hbHl6ZXIuICBJZiB0aGlzIG9wdGlvbiBpcyBub3Qgc3BlY2lmaWVkLCBhIGRpcmVjdG9yeSBpcwotY3JlYXRlZCBpbiAvdG1wIChUTVBESVIgb24gTWFjIE9TIFgpIHRvIHN0b3JlIHRoZSByZXBvcnRzLgotLkl0IEZsIHBsaXN0Ci1PdXRwdXQgdGhlIHJlc3VsdHMgYXMgYSBzZXQgb2YKLS5MaSAucGxpc3QKLWZpbGVzLiAoQnkgZGVmYXVsdCB0aGUgb3V0cHV0IG9mCi0uTm0KLWlzIGEgc2V0IG9mIEhUTUwgZmlsZXMuKQotLkl0IEZsIHBsaXN0LWh0bWwKLU91dHB1dCB0aGUgcmVzdWx0cyBhcyBhIHNldCBvZiBIVE1MIGFuZCAucGxpc3QgZmlsZXMKLS5JdCBGbCBGbCBzdGF0dXMtYnVncwotU2V0IGV4aXQgc3RhdHVzIHRvIDEgaWYgaXQgZm91bmQgcG90ZW50aWFsIGJ1Z3MgYW5kIDAgb3RoZXJ3aXNlLiBCeQotZGVmYXVsdCB0aGUgZXhpdCBzdGF0dXMgb2YKLS5ObQotaXMgdGhhdCByZXR1cm5lZCBieQotLkFyIGJ1aWxkX2NvbW1hbmQgLgotLkl0IEZsIEZsIHVzZS1jKysgTnMgT3AgPSBOcyBBciBjb21waWxlcl9wYXRoCi1HdWVzcyB0aGUgZGVmYXVsdCBjb21waWxlciBmb3IgeW91ciBDKysgYW5kIE9iamVjdGl2ZS1DKysgY29kZS4gVXNlIHRoaXMKLW9wdGlvbiB0byBzcGVjaWZ5IGFuIGFsdGVybmF0ZSBjb21waWxlci4KLS5JdCBGbCBGbCB1c2UtY2MgTnMgT3AgPSBOcyBBciBjb21waWxlcl9wYXRoCi1HdWVzcyB0aGUgZGVmYXVsdCBjb21waWxlciBmb3IgeW91ciBDIGFuZCBPYmplY3RpdmUtQyBjb2RlLiBVc2UgdGhpcwotb3B0aW9uIHRvIHNwZWNpZnkgYW4gYWx0ZXJuYXRlIGNvbXBpbGVyLgotLkl0IEZsIHYKLVZlcmJvc2Ugb3V0cHV0IGZyb20KLS5ObQotYW5kIHRoZSBhbmFseXplci4gQSBzZWNvbmQgYW5kCi10aGlyZAotLkFyIHYKLWluY3JlYXNlcyB2ZXJib3NpdHkuCi0uSXQgRmwgViAsIEZsIEZsIHZpZXcKLVZpZXcgYW5hbHlzaXMgcmVzdWx0cyBpbiBhIHdlYiBicm93c2VyIHdoZW4gdGhlIGJ1aWxkIGNvbXBsZXRlcy4KLS5JdCBGbCBjb25zdHJhaW50cyBPcCBBciBtb2RlbAotU3BlY2lmeSB0aGUgY29udHJhaW50IGVuZ2luZSB1c2VkIGJ5IHRoZSBhbmFseXplci4gIEJ5IGRlZmF1bHQgdGhlCi0uUWwgcmFuZ2UKLW1vZGVsIGlzIHVzZWQuICBTcGVjaWZ5aW5nCi0uUWwgYmFzaWMKLXVzZXMgYSBzaW1wbGVyLCBsZXNzIHBvd2VyZnVsIGNvbnN0cmFpbnQgbW9kZWwgdXNlZCBieSBjaGVja2VyLTAuMTYwCi1hbmQgZWFybGllci4KLS5JdCBGbCBtYXhsb29wIEFyIE4KLVNwZWNpZml5IHRoZSBudW1iZXIgb2YgdGltZXMgYSBibG9jayBjYW4gYmUgdmlzaXRlZCBiZWZvcmUgZ2l2aW5nCi11cC4gRGVmYXVsdCBpcyA0LiBJbmNyZWFzZSBmb3IgbW9yZSBjb21wcmVoZW5zaXZlIGNvdmVyYWdlIGF0IGEKLWNvc3Qgb2Ygc3BlZWQuCi0uSXQgRmwgbm8tZmFpbHVyZS1yZXBvcnRzCi1EbyBub3QgY3JlYXRlIGEKLS5RbCBmYWlsdXJlcwotc3ViZGlyZWN0b3J5IHRoYXQgaW5jbHVkZXMgYW5hbHl6ZXIgY3Jhc2ggcmVwb3J0cyBhbmQgcHJlcHJvY2Vzc2VkCi1zb3VyY2UgZmlsZXMuCi0uSXQgRmwgc3RhdHMKLUdlbmVyYXRlcyB2aXNpdGF0aW9uIHN0YXRpc3RpY3MgZm9yIHRoZSBwcm9qZWN0IGJlaW5nIGFuYWx5emVkLgotLkl0IEZsIHN0b3JlIE9wIEFyIG1vZGVsCi1TcGVjaWZ5IHRoZSBzdG9yZSBtb2RlbCB1c2VkIGJ5IHRoZSBhbmFseXplci4gQnkgZGVmYXVsdCwgdGhlCi0uUWwgcmVnaW9uCi1zdG9yZSBtb2RlbCBpcyB1c2VkLgotLlFsIHJlZ2lvbgotc3BlY2lmaWVzIGEgZmllbGQtCi1zZW5zaXRpdmUgc3RvcmUgbW9kZWwuIFVzZXJzIGNhbiBhbHNvIHNwZWNpZnkKLS5RbCBiYXNpYwotd2hpY2ggaXMgZmFyIGxlc3MgcHJlY2lzZSBidXQgY2FuIG1vcmUgcXVpY2tseSBhbmFseXplIGNvZGUuCi0uUWwgYmFzaWMKLXdhcyB0aGUgZGVmYXVsdCBzdG9yZSBtb2RlbCBmb3IgY2hlY2tlci0wLjIyMSBhbmQgZWFybGllci4KLS5cIgotLkVsCi0uU2ggRVhJVCBTVEFUVVMKLS5ObQotcmV0dXJucyB0aGUgdmFsdWUgcmV0dXJuZWQgYnkKLS5BciBidWlsZF9jb21tYW5kCi11bmxlc3MKLS5GbCBGbCBzdGF0dXMtYnVncwotb3IKLS5GbCBGbCBrZWVwLWdvaW5nCi1pcyB1c2VkLgotLlwiCi0uXCIgT3RoZXIgc2VjdGlvbnMgbm90IHlldCB1c2VkIC4uLgotLlwiIC5TaCBFTlZJUk9OTUVOVAotLlwiIC5TaCBGSUxFUwotLlwiIC5TaCBESUFHTk9TVElDUwotLlwiIC5TaCBDT01QQVRJQklMSVRZCi0uXCIgLlNoIEhJU1RPUlkKLS5cIiAuU2ggQlVHUwotLlwiCi0uU2ggQ0hFQ0tFUlMKLVRoZSBjaGVja2VycyBsaXN0ZWQgYmVsb3cgbWF5IGJlIGVuYWJsZWQvZGlzYWJsZWQgdXNpbmcgdGhlCi0uRmwgZW5hYmxlLWNoZWNrZXIKLWFuZAotLkZsIGRpc2FibGUtY2hlY2tlcgotb3B0aW9ucy4KLUEgZGVmYXVsdCBncm91cCBvZiBjaGVja2VycyBpcyBydW4gdW5sZXNzIGV4cGxpY2l0bHkgZGlzYWJsZWQuCi1FeGFjdGx5IHdoaWNoIGNoZWNrZXJzIGNvbnN0aXR1dGUgdGhlIGRlZmF1bHQgZ3JvdXAgaXMgYSBmdW5jdGlvbgotb2YgdGhlIG9wZXJhdGluZyBzeXN0ZW0gaW4gdXNlOyB0aGV5IGFyZSBsaXN0ZWQgd2l0aAotLkZsIEZsIGhlbHAtY2hlY2tlcnMgLgotLkJsIC10YWcgLXdpZHRoIGluZGVudC4KLS5JdCBjb3JlLkFkanVzdGVkUmV0dXJuVmFsdWUKLUNoZWNrIHRvIHNlZSBpZiB0aGUgcmV0dXJuIHZhbHVlIG9mIGEgZnVuY3Rpb24gY2FsbCBpcyBkaWZmZXJlbnQgdGhhbgotdGhlIGNhbGxlciBleHBlY3RzIChlLmcuLCBmcm9tIGNhbGxzIHRocm91Z2ggZnVuY3Rpb24gcG9pbnRlcnMpLgotLkl0IGNvcmUuQXR0cmlidXRlTm9uTnVsbAotQ2hlY2sgZm9yIG51bGwgcG9pbnRlcnMgcGFzc2VkIGFzIGFyZ3VtZW50cyB0byBhIGZ1bmN0aW9uIHdob3NlIGFyZ3VtZW50cyBhcmUgbWFya2VkIHdpdGggdGhlCi0uUWwgbm9ubnVsbAotYXR0cmlidXRlLgotLkl0IGNvcmUuQ2FsbEFuZE1lc3NhZ2UKLUNoZWNrIGZvciBsb2dpY2FsIGVycm9ycyBmb3IgZnVuY3Rpb24gY2FsbHMgYW5kIE9iamVjdGl2ZS1DIG1lc3NhZ2UgZXhwcmVzc2lvbnMgKGUuZy4sIHVuaW5pdGlhbGl6ZWQgYXJndW1lbnRzLCBudWxsIGZ1bmN0aW9uIHBvaW50ZXJzKS4KLS5JdCBjb3JlLkRpdmlkZVplcm8KLUNoZWNrIGZvciBkaXZpc2lvbiBieSB6ZXJvLgotLkl0IGNvcmUuTnVsbERlcmVmZXJlbmNlCi1DaGVjayBmb3IgZGVyZWZlcmVuY2VzIG9mIG51bGwgcG9pbnRlcnMuCi0uSXQgY29yZS5TdGFja0FkZHJlc3NFc2NhcGUKLUNoZWNrIHRoYXQgYWRkcmVzc2VzIHRvIHN0YWNrIG1lbW9yeSBkbyBub3QgZXNjYXBlIHRoZSBmdW5jdGlvbi4KLS5JdCBjb3JlLlVuZGVmaW5lZEJpbmFyeU9wZXJhdG9yUmVzdWx0Ci1DaGVjayBmb3IgdW5kZWZpbmVkIHJlc3VsdHMgb2YgYmluYXJ5IG9wZXJhdG9ycy4KLS5JdCBjb3JlLlZMQVNpemUKLUNoZWNrIGZvciBkZWNsYXJhdGlvbnMgb2YgVkxBIG9mIHVuZGVmaW5lZCBvciB6ZXJvIHNpemUuCi0uSXQgY29yZS5idWlsdGluLkJ1aWx0aW5GdW5jdGlvbnMKLUV2YWx1YXRlIGNvbXBpbGVyIGJ1aWx0aW4gZnVuY3Rpb25zLCBlLmcuCi0uRm4gYWxsb2NhIC4KLS5JdCBjb3JlLmJ1aWx0aW4uTm9SZXR1cm5GdW5jdGlvbnMKLUV2YWx1YXRlCi0uUWwgcGFuaWMKLWZ1bmN0aW9ucyB0aGF0IGFyZSBrbm93biB0byBub3QgcmV0dXJuIHRvIHRoZSBjYWxsZXIuCi0uSXQgY29yZS51bmluaXRpYWxpemVkLkFycmF5U3Vic2NyaXB0Ci1DaGVjayBmb3IgdW5pbml0aWFsaXplZCB2YWx1ZXMgdXNlZCBhcyBhcnJheSBzdWJzY3JpcHRzLgotLkl0IGNvcmUudW5pbml0aWFsaXplZC5Bc3NpZ24KLUNoZWNrIGZvciBhc3NpZ25pbmcgdW5pbml0aWFsaXplZCB2YWx1ZXMuCi0uSXQgY29yZS51bmluaXRpYWxpemVkLkJyYW5jaAotQ2hlY2sgZm9yIHVuaW5pdGlhbGl6ZWQgdmFsdWVzIHVzZWQgYXMgYnJhbmNoIGNvbmRpdGlvbnMuCi0uSXQgY29yZS51bmluaXRpYWxpemVkLkNhcHR1cmVkQmxvY2tWYXJpYWJsZQotQ2hlY2sgZm9yIGJsb2NrcyB0aGF0IGNhcHR1cmUgdW5pbml0aWFsaXplZCB2YWx1ZXMuCi0uSXQgY29yZS51bmluaXRpYWxpemVkLlVuZGVmUmV0dXJuCi1DaGVjayBmb3IgdW5pbml0aWFsaXplZCB2YWx1ZXMgYmVpbmcgcmV0dXJuZWQgdG8gdGhlIGNhbGxlci4KLS5JdCBkZWFkY29kZS5EZWFkU3RvcmVzCi1DaGVjayBmb3IgdmFsdWVzIHN0b3JlZCB0byB2YXJpYWJsZXMgdGhhdCBhcmUgbmV2ZXIgcmVhZCBhZnRlcndhcmRzLgotLkl0IGRlYnVnLkR1bXBDRkcKLURpc3BsYXkgQ29udHJvbC1GbG93IEdyYXBocy4KLS5JdCBkZWJ1Zy5EdW1wQ2FsbEdyYXBoCi1EaXNwbGF5IENhbGwgR3JhcGguCi0uSXQgZGVidWcuRHVtcERvbWluYXRvcnMKLVByaW50IHRoZSBkb21pbmFuY2UgdHJlZSBmb3IgYSBnaXZlbiBDb250cm9sLUZsb3cgR3JhcGguCi0uSXQgZGVidWcuRHVtcExpdmVWYXJzCi1QcmludCByZXN1bHRzIG9mIGxpdmUgdmFyaWFibGUgYW5hbHlzaXMuCi0uSXQgZGVidWcuU3RhdHMKLUVtaXQgd2FybmluZ3Mgd2l0aCBhbmFseXplciBzdGF0aXN0aWNzLgotLkl0IGRlYnVnLlRhaW50VGVzdAotTWFyayB0YWludGVkIHN5bWJvbHMgYXMgc3VjaC4KLS5JdCBkZWJ1Zy5WaWV3Q0ZHCi1WaWV3IENvbnRyb2wtRmxvdyBHcmFwaHMgdXNpbmcKLS5JYyBHcmFwaFZpeiAuCi0uSXQgZGVidWcuVmlld0NhbGxHcmFwaAotVmlldyBDYWxsIEdyYXBoIHVzaW5nCi0uSWMgR3JhcGhWaXogLgotLkl0IGxsdm0uQ29udmVudGlvbnMKLUNoZWNrIGNvZGUgZm9yIExMVk0gY29kZWJhc2UgY29udmVudGlvbnMuCi0uSXQgb3N4LkFQSQotQ2hlY2sgZm9yIHByb3BlciB1c2VzIG9mIHZhcmlvdXMgTWFjIE9TIFggQVBJcy4KLS5JdCBvc3guQXRvbWljQ0FTCi1FdmFsdWF0ZSBjYWxscyB0bwotLlZ0IE9TQXRvbWljCi1mdW5jdGlvbnMuCi0uSXQgb3N4LlNlY0tleWNoYWluQVBJCi1DaGVjayBmb3IgcHJvcGVyIHVzZXMgb2YgU2VjdXJlIEtleWNoYWluIEFQSXMuCi0uSXQgb3N4LmNvY29hLkF0U3luYwotQ2hlY2sgZm9yIG51bGwgcG9pbnRlcnMgdXNlZCBhcyBtdXRleGVzIGZvciBAc3luY2hyb25pemVkLgotLkl0IG9zeC5jb2NvYS5DbGFzc1JlbGVhc2UKLUNoZWNrIGZvciBzZW5kaW5nCi0uUWwgcmV0YWluICwKLS5RbCByZWxlYXNlLAotb3IKLS5RbCBhdXRvcmVsZWFzZQotZGlyZWN0bHkgdG8gYSBDbGFzcy4KLS5JdCBvc3guY29jb2EuSW5jb21wYXRpYmxlTWV0aG9kVHlwZXMKLVdhcm4gYWJvdXQgT2JqZWN0aXZlLUMgbWV0aG9kIHNpZ25hdHVyZXMgd2l0aCB0eXBlIGluY29tcGF0aWJpbGl0aWVzLgotLkl0IG9zeC5jb2NvYS5OU0F1dG9yZWxlYXNlUG9vbAotV2FybiBmb3Igc3Vib3B0aW1hbCB1c2VzIG9mCi0uVnQgTlNBdXRvcmVsZWFzZVBvb2wKLWluIE9iamVjdGl2ZS1DIEdDIG1vZGUuCi0uSXQgb3N4LmNvY29hLk5TRXJyb3IKLUNoZWNrIHVzYWdlIG9mIE5TRXJyb3IqKiBwYXJhbWV0ZXJzLgotLkl0IG9zeC5jb2NvYS5OaWxBcmcKLUNoZWNrIGZvciBwcm9oaWJpdGVkIG5pbCBhcmd1bWVudHMgdG8gT2JqZWN0aXZlLUMgbWV0aG9kIGNhbGxzLgotLkl0IG9zeC5jb2NvYS5SZXRhaW5Db3VudAotQ2hlY2sgZm9yIGxlYWtzIGFuZCBpbXByb3BlciByZWZlcmVuY2UgY291bnQgbWFuYWdlbWVudC4KLS5JdCBvc3guY29jb2EuU2VsZkluaXQKLUNoZWNrIHRoYXQKLS5RbCBzZWxmCi1pcyBwcm9wZXJseSBpbml0aWFsaXplZCBpbnNpZGUgYW4gaW5pdGlhbGl6ZXIgbWV0aG9kLgotLkl0IG9zeC5jb2NvYS5VbnVzZWRJdmFycwotV2FybiBhYm91dCBwcml2YXRlIGl2YXJzIHRoYXQgYXJlIG5ldmVyIHVzZWQuCi0uSXQgb3N4LmNvY29hLlZhcmlhZGljTWV0aG9kVHlwZXMKLUNoZWNrIGZvciBwYXNzaW5nIG5vbi1PYmplY3RpdmUtQyB0eXBlcyB0byB2YXJpYWRpYyBtZXRob2RzIHRoYXQgZXhwZWN0IG9ubHkgT2JqZWN0aXZlLUMgdHlwZXMuCi0uSXQgb3N4LmNvcmVGb3VuZGF0aW9uLkNGRXJyb3IKLUNoZWNrIHVzYWdlIG9mIENGRXJyb3JSZWYqIHBhcmFtZXRlcnMuCi0uSXQgb3N4LmNvcmVGb3VuZGF0aW9uLkNGTnVtYmVyCi1DaGVjayBmb3IgcHJvcGVyIHVzZXMgb2YKLS5GbiBDRk51bWJlckNyZWF0ZSAuCi0uSXQgb3N4LmNvcmVGb3VuZGF0aW9uLkNGUmV0YWluUmVsZWFzZQotQ2hlY2sgZm9yIG51bGwgYXJndW1lbnRzIHRvCi0uRm4gQ0ZSZXRhaW4gLAotLkZuIENGUmVsZWFzZSAsCi1hbmQKLS5GbiBDRk1ha2VDb2xsZWN0YWJsZSAuCi0uSXQgb3N4LmNvcmVGb3VuZGF0aW9uLmNvbnRhaW5lcnMuT3V0T2ZCb3VuZHMKLUNoZWNrcyBmb3IgaW5kZXggb3V0LW9mLWJvdW5kcyB3aGVuIHVzaW5nIHRoZQotLlZ0IENGQXJyYXkKLUFQSS4KLS5JdCBvc3guY29yZUZvdW5kYXRpb24uY29udGFpbmVycy5Qb2ludGVyU2l6ZWRWYWx1ZXMKLVdhcm5zIGlmCi0uVnQgQ0ZBcnJheSAsCi0uVnQgQ0ZEaWN0aW9uYXJ5ICwKLW9yCi0uVnQgQ0ZTZXQKLWFyZSBjcmVhdGVkIHdpdGggbm9uLXBvaW50ZXItc2l6ZSB2YWx1ZXMuCi0uSXQgc2VjdXJpdHkuRmxvYXRMb29wQ291bnRlcgotV2FybiBvbiB1c2luZyBhIGZsb2F0aW5nIHBvaW50IHZhbHVlIGFzIGEgbG9vcCBjb3VudGVyIChDRVJUOiBGTFAzMC1DLCBGTFAzMC1DUFApLgotLkl0IHNlY3VyaXR5Lmluc2VjdXJlQVBJLlVuY2hlY2tlZFJldHVybgotV2FybiBvbiB1c2VzIG9mIGZ1bmN0aW9ucyB3aG9zZSByZXR1cm4gdmFsdWVzIG11c3QgYmUgYWx3YXlzIGNoZWNrZWQuCi0uSXQgc2VjdXJpdHkuaW5zZWN1cmVBUEkuZ2V0cHcKLVdhcm4gb24gdXNlcyBvZgotLkZuIGdldHB3IC4KLS5JdCBzZWN1cml0eS5pbnNlY3VyZUFQSS5nZXRzCi1XYXJuIG9uIHVzZXMgb2YKLS5GbiBnZXRzIC4KLS5JdCBzZWN1cml0eS5pbnNlY3VyZUFQSS5ta3N0ZW1wCi1XYXJuIHdoZW4KLS5GbiBta3N0ZW1wCi1pcyBwYXNzZWQgZmV3ZXIgdGhhbiA2IFgncyBpbiB0aGUgZm9ybWF0IHN0cmluZy4KLS5JdCBzZWN1cml0eS5pbnNlY3VyZUFQSS5ta3RlbXAKLVdhcm4gb24gdXNlcyBvZgotLkZuIG1rdGVtcCAuCi0uSXQgc2VjdXJpdHkuaW5zZWN1cmVBUEkucmFuZAotV2FybiBvbiB1c2VzIG9mCi0uRm4gcmFuZCAsCi0uRm4gcmFuZG9tICwKLWFuZCByZWxhdGVkIGZ1bmN0aW9ucy4KLS5JdCBzZWN1cml0eS5pbnNlY3VyZUFQSS5zdHJjcHkKLVdhcm4gb24gdXNlcyBvZgotLkZuIHN0cmNweQotYW5kCi0uRm4gc3RyY2F0IC4KLS5JdCBzZWN1cml0eS5pbnNlY3VyZUFQSS52Zm9yawotV2FybiBvbiB1c2VzIG9mCi0uRm4gdmZvcmsgLgotLkl0IHVuaXguQVBJCi1DaGVjayBjYWxscyB0byB2YXJpb3VzIFVOSVgvUG9zaXggZnVuY3Rpb25zLgotLkl0IHVuaXguTWFsbG9jCi1DaGVjayBmb3IgbWVtb3J5IGxlYWtzLCBkb3VibGUgZnJlZSwgYW5kIHVzZS1hZnRlci1mcmVlLgotLkl0IHVuaXguY3N0cmluZy5CYWRTaXplQXJnCi1DaGVjayB0aGUgc2l6ZSBhcmd1bWVudCBwYXNzZWQgaW50byBDIHN0cmluZyBmdW5jdGlvbnMgZm9yIGNvbW1vbgotZXJyb25lb3VzIHBhdHRlcm5zLgotLkl0IHVuaXguY3N0cmluZy5OdWxsQXJnCi1DaGVjayBmb3IgbnVsbCBwb2ludGVycyBiZWluZyBwYXNzZWQgYXMgYXJndW1lbnRzIHRvIEMgc3RyaW5nIGZ1bmN0aW9ucy4KLS5FbAotLlwiCi0uU2ggRVhBTVBMRQotLkljIHNjYW4tYnVpbGQgLW8gL3RtcC9teWh0bWxkaXIgbWFrZSAtajQKLS5QcAotVGhlIGFib3ZlIGV4YW1wbGUgY2F1c2VzIGFuYWx5c2lzIHJlcG9ydHMgdG8gYmUgZGVwb3NpdGVkIGludG8KLWEgc3ViZGlyZWN0b3J5IG9mCi0uUGEgL3RtcC9teWh0bWxkaXIKLWFuZCB0byBydW4KLS5JYyBtYWtlCi13aXRoIHRoZQotLkZsIGo0Ci1vcHRpb24uCi1BIGRpZmZlcmVudCBzdWJkaXJlY3RvcnkgaXMgY3JlYXRlZCBlYWNoIHRpbWUKLS5ObQotYW5hbHl6ZXMgYSBwcm9qZWN0LgotVGhlIGFuYWx5emVyIHNob3VsZCBzdXBwb3J0IG1vc3QgcGFyYWxsZWwgYnVpbGRzLCBidXQgbm90IGRpc3RyaWJ1dGVkIGJ1aWxkcy4KLS5TaCBBVVRIT1JTCi0uTm0KLXdhcyB3cml0dGVuIGJ5Ci0uQW4gIlRlZCBLcmVtZW5layIgLgotRG9jdW1lbnRhdGlvbiBjb250cmlidXRlZCBieQotLkFuICJKYW1lcyBLLiBMb3dkZW4iIEFxIGprbG93ZGVuQHNjaGVtYW1hbmlhLm9yZyAuCmRpZmYgLS1naXQgYS9jbGFuZy0yNTc3MTEzL3Rvb2xzL3NjYW4tYnVpbGQvc2hhcmUvc2Nhbi1idWlsZC9zY2Fudmlldy5jc3MgYi9jbGFuZy0yNTc3MTEzL3Rvb2xzL3NjYW4tYnVpbGQvc2hhcmUvc2Nhbi1idWlsZC9zY2Fudmlldy5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNmOGE1YTYuLjAwMDAwMDAKLS0tIGEvY2xhbmctMjU3NzExMy90b29scy9zY2FuLWJ1aWxkL3NoYXJlL3NjYW4tYnVpbGQvc2NhbnZpZXcuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsNjIgKzAsMCBAQAotYm9keSB7IGNvbG9yOiMwMDAwMDA7IGJhY2tncm91bmQtY29sb3I6I2ZmZmZmZiB9Ci1ib2R5IHsgZm9udC1mYW1pbHk6IEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOjlwdCB9Ci1oMSB7IGZvbnQtc2l6ZTogMTRwdDsgfQotaDIgeyBmb250LXNpemU6IDEycHQ7IH0KLXRhYmxlIHsgZm9udC1zaXplOjlwdCB9Ci10YWJsZSB7IGJvcmRlci1zcGFjaW5nOiAwcHg7IGJvcmRlcjogMXB4IHNvbGlkIGJsYWNrIH0KLXRoLCB0YWJsZSB0aGVhZCB7Ci0gIGJhY2tncm91bmQtY29sb3I6I2VlZTsgY29sb3I6IzY2NjY2NjsKLSAgZm9udC13ZWlnaHQ6IGJvbGQ7IGN1cnNvcjogZGVmYXVsdDsKLSAgdGV4dC1hbGlnbjpjZW50ZXI7Ci0gIGZvbnQtd2VpZ2h0OiBib2xkOyBmb250LWZhbWlseTogVmVyZGFuYTsKLSAgd2hpdGUtc3BhY2U6bm93cmFwOwotfQotLlcgeyBmb250LXNpemU6MHB4IH0KLXRoLCB0ZCB7IHBhZGRpbmc6NXB4OyBwYWRkaW5nLWxlZnQ6OHB4OyB0ZXh0LWFsaWduOmxlZnQgfQotdGQuU1VNTV9ERVNDIHsgcGFkZGluZy1sZWZ0OjEycHggfQotdGQuREVTQyB7IHdoaXRlLXNwYWNlOnByZSB9Ci10ZC5RIHsgdGV4dC1hbGlnbjpyaWdodCB9Ci10ZCB7IHRleHQtYWxpZ246bGVmdCB9Ci10Ym9keS5zY3JvbGxDb250ZW50IHsgb3ZlcmZsb3c6YXV0byB9Ci0KLXRhYmxlLmZvcm1fZ3JvdXAgewotICAgIGJhY2tncm91bmQtY29sb3I6ICNjY2M7Ci0gICAgYm9yZGVyOiAxcHggc29saWQgIzMzMzsKLSAgICBwYWRkaW5nOiAycHg7Ci19Ci0KLXRhYmxlLmZvcm1faW5uZXJfZ3JvdXAgewotICAgIGJhY2tncm91bmQtY29sb3I6ICNjY2M7Ci0gICAgYm9yZGVyOiAxcHggc29saWQgIzMzMzsKLSAgICBwYWRkaW5nOiAwcHg7Ci19Ci0KLXRhYmxlLmZvcm0gewotICAgIGJhY2tncm91bmQtY29sb3I6ICM5OTk7Ci0gICAgYm9yZGVyOiAxcHggc29saWQgIzMzMzsKLSAgICBwYWRkaW5nOiAycHg7Ci19Ci0KLXRkLmZvcm1fbGFiZWwgewotICAgIHRleHQtYWxpZ246IHJpZ2h0OwotICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7Ci19Ci0vKiBGb3Igb25lIGxpbmUgZW50aXJlcyAqLwotdGQuZm9ybV9jbGFiZWwgewotICAgIHRleHQtYWxpZ246IHJpZ2h0OwotICAgIHZlcnRpY2FsLWFsaWduOiBjZW50ZXI7Ci19Ci10ZC5mb3JtX3ZhbHVlIHsKLSAgICB0ZXh0LWFsaWduOiBsZWZ0OwotICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7Ci19Ci10ZC5mb3JtX3N1Ym1pdCB7Ci0gICAgdGV4dC1hbGlnbjogcmlnaHQ7Ci0gICAgdmVydGljYWwtYWxpZ246IHRvcDsKLX0KLQotaDEuU3VibWl0RmFpbCB7Ci0gICAgY29sb3I6ICNmMDA7Ci19Ci1oMS5TdWJtaXRPayB7Ci19CmRpZmYgLS1naXQgYS9jbGFuZy0yNTc3MTEzL3Rvb2xzL3NjYW4tYnVpbGQvc2hhcmUvc2Nhbi1idWlsZC9zb3J0dGFibGUuanMgYi9jbGFuZy0yNTc3MTEzL3Rvb2xzL3NjYW4tYnVpbGQvc2hhcmUvc2Nhbi1idWlsZC9zb3J0dGFibGUuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMyZmFhMDcuLjAwMDAwMDAKLS0tIGEvY2xhbmctMjU3NzExMy90b29scy9zY2FuLWJ1aWxkL3NoYXJlL3NjYW4tYnVpbGQvc29ydHRhYmxlLmpzCisrKyAvZGV2L251bGwKQEAgLTEsNDkyICswLDAgQEAKLS8qCi0gIFNvcnRUYWJsZQotICB2ZXJzaW9uIDIKLSAgN3RoIEFwcmlsIDIwMDcKLSAgU3R1YXJ0IExhbmdyaWRnZSwgaHR0cDovL3d3dy5rcnlvZ2VuaXgub3JnL2NvZGUvYnJvd3Nlci9zb3J0dGFibGUvCi0KLSAgSW5zdHJ1Y3Rpb25zOgotICBEb3dubG9hZCB0aGlzIGZpbGUKLSAgQWRkIDxzY3JpcHQgc3JjPSJzb3J0dGFibGUuanMiPjwvc2NyaXB0PiB0byB5b3VyIEhUTUwKLSAgQWRkIGNsYXNzPSJzb3J0YWJsZSIgdG8gYW55IHRhYmxlIHlvdSdkIGxpa2UgdG8gbWFrZSBzb3J0YWJsZQotICBDbGljayBvbiB0aGUgaGVhZGVycyB0byBzb3J0Ci0KLSAgVGhhbmtzIHRvIG1hbnksIG1hbnkgcGVvcGxlIGZvciBjb250cmlidXRpb25zIGFuZCBzdWdnZXN0aW9ucy4KLSAgTGljZW5jZWQgYXMgWDExOiBodHRwOi8vd3d3LmtyeW9nZW5peC5vcmcvY29kZS9icm93c2VyL2xpY2VuY2UuaHRtbAotICBUaGlzIGJhc2ljYWxseSBtZWFuczogZG8gd2hhdCB5b3Ugd2FudCB3aXRoIGl0LgotKi8KLQotCi12YXIgc3RJc0lFID0gLypAY2Nfb24hQCovZmFsc2U7Ci0KLXNvcnR0YWJsZSA9IHsKLSAgaW5pdDogZnVuY3Rpb24oKSB7Ci0gICAgLy8gcXVpdCBpZiB0aGlzIGZ1bmN0aW9uIGhhcyBhbHJlYWR5IGJlZW4gY2FsbGVkCi0gICAgaWYgKGFyZ3VtZW50cy5jYWxsZWUuZG9uZSkgcmV0dXJuOwotICAgIC8vIGZsYWcgdGhpcyBmdW5jdGlvbiBzbyB3ZSBkb24ndCBkbyB0aGUgc2FtZSB0aGluZyB0d2ljZQotICAgIGFyZ3VtZW50cy5jYWxsZWUuZG9uZSA9IHRydWU7Ci0gICAgLy8ga2lsbCB0aGUgdGltZXIKLSAgICBpZiAoX3RpbWVyKSBjbGVhckludGVydmFsKF90aW1lcik7Ci0KLSAgICBpZiAoIWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQgfHwgIWRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKSByZXR1cm47Ci0KLSAgICBzb3J0dGFibGUuREFURV9SRSA9IC9eKFxkXGQ/KVtcL1wuLV0oXGRcZD8pW1wvXC4tXSgoXGRcZCk/XGRcZCkkLzsKLQotICAgIGZvckVhY2goZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3RhYmxlJyksIGZ1bmN0aW9uKHRhYmxlKSB7Ci0gICAgICBpZiAodGFibGUuY2xhc3NOYW1lLnNlYXJjaCgvXGJzb3J0YWJsZVxiLykgIT0gLTEpIHsKLSAgICAgICAgc29ydHRhYmxlLm1ha2VTb3J0YWJsZSh0YWJsZSk7Ci0gICAgICB9Ci0gICAgfSk7Ci0KLSAgfSwKLQotICBtYWtlU29ydGFibGU6IGZ1bmN0aW9uKHRhYmxlKSB7Ci0gICAgaWYgKHRhYmxlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCd0aGVhZCcpLmxlbmd0aCA9PSAwKSB7Ci0gICAgICAvLyB0YWJsZSBkb2Vzbid0IGhhdmUgYSB0SGVhZC4gU2luY2UgaXQgc2hvdWxkIGhhdmUsIGNyZWF0ZSBvbmUgYW5kCi0gICAgICAvLyBwdXQgdGhlIGZpcnN0IHRhYmxlIHJvdyBpbiBpdC4KLSAgICAgIHRoZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RoZWFkJyk7Ci0gICAgICB0aGUuYXBwZW5kQ2hpbGQodGFibGUucm93c1swXSk7Ci0gICAgICB0YWJsZS5pbnNlcnRCZWZvcmUodGhlLHRhYmxlLmZpcnN0Q2hpbGQpOwotICAgIH0KLSAgICAvLyBTYWZhcmkgZG9lc24ndCBzdXBwb3J0IHRhYmxlLnRIZWFkLCBzaWdoCi0gICAgaWYgKHRhYmxlLnRIZWFkID09IG51bGwpIHRhYmxlLnRIZWFkID0gdGFibGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3RoZWFkJylbMF07Ci0KLSAgICBpZiAodGFibGUudEhlYWQucm93cy5sZW5ndGggIT0gMSkgcmV0dXJuOyAvLyBjYW4ndCBjb3BlIHdpdGggdHdvIGhlYWRlciByb3dzCi0KLSAgICAvLyBTb3J0dGFibGUgdjEgcHV0IHJvd3Mgd2l0aCBhIGNsYXNzIG9mICJzb3J0Ym90dG9tIiBhdCB0aGUgYm90dG9tIChhcwotICAgIC8vICJ0b3RhbCIgcm93cywgZm9yIGV4YW1wbGUpLiBUaGlzIGlzIEImUiwgc2luY2Ugd2hhdCB5b3UncmUgc3VwcG9zZWQKLSAgICAvLyB0byBkbyBpcyBwdXQgdGhlbSBpbiBhIHRmb290LiBTbywgaWYgdGhlcmUgYXJlIHNvcnRib3R0b20gcm93cywKLSAgICAvLyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSwgbW92ZSB0aGVtIHRvIHRmb290IChjcmVhdGluZyBpdCBpZiBuZWVkZWQpLgotICAgIHNvcnRib3R0b21yb3dzID0gW107Ci0gICAgZm9yICh2YXIgaT0wOyBpPHRhYmxlLnJvd3MubGVuZ3RoOyBpKyspIHsKLSAgICAgIGlmICh0YWJsZS5yb3dzW2ldLmNsYXNzTmFtZS5zZWFyY2goL1xic29ydGJvdHRvbVxiLykgIT0gLTEpIHsKLSAgICAgICAgc29ydGJvdHRvbXJvd3Nbc29ydGJvdHRvbXJvd3MubGVuZ3RoXSA9IHRhYmxlLnJvd3NbaV07Ci0gICAgICB9Ci0gICAgfQotICAgIGlmIChzb3J0Ym90dG9tcm93cykgewotICAgICAgaWYgKHRhYmxlLnRGb290ID09IG51bGwpIHsKLSAgICAgICAgLy8gdGFibGUgZG9lc24ndCBoYXZlIGEgdGZvb3QuIENyZWF0ZSBvbmUuCi0gICAgICAgIHRmbyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3Rmb290Jyk7Ci0gICAgICAgIHRhYmxlLmFwcGVuZENoaWxkKHRmbyk7Ci0gICAgICB9Ci0gICAgICBmb3IgKHZhciBpPTA7IGk8c29ydGJvdHRvbXJvd3MubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgdGZvLmFwcGVuZENoaWxkKHNvcnRib3R0b21yb3dzW2ldKTsKLSAgICAgIH0KLSAgICAgIGRlbGV0ZSBzb3J0Ym90dG9tcm93czsKLSAgICB9Ci0KLSAgICAvLyB3b3JrIHRocm91Z2ggZWFjaCBjb2x1bW4gYW5kIGNhbGN1bGF0ZSBpdHMgdHlwZQotICAgIGhlYWRyb3cgPSB0YWJsZS50SGVhZC5yb3dzWzBdLmNlbGxzOwotICAgIGZvciAodmFyIGk9MDsgaTxoZWFkcm93Lmxlbmd0aDsgaSsrKSB7Ci0gICAgICAvLyBtYW51YWxseSBvdmVycmlkZSB0aGUgdHlwZSB3aXRoIGEgc29ydHRhYmxlX3R5cGUgYXR0cmlidXRlCi0gICAgICBpZiAoIWhlYWRyb3dbaV0uY2xhc3NOYW1lLm1hdGNoKC9cYnNvcnR0YWJsZV9ub3NvcnRcYi8pKSB7IC8vIHNraXAgdGhpcyBjb2wKLSAgICAgICAgbXRjaCA9IGhlYWRyb3dbaV0uY2xhc3NOYW1lLm1hdGNoKC9cYnNvcnR0YWJsZV8oW2EtejAtOV0rKVxiLyk7Ci0gICAgICAgIGlmIChtdGNoKSB7IG92ZXJyaWRlID0gbXRjaFsxXTsgfQotCSAgICAgIGlmIChtdGNoICYmIHR5cGVvZiBzb3J0dGFibGVbInNvcnRfIitvdmVycmlkZV0gPT0gJ2Z1bmN0aW9uJykgewotCSAgICAgICAgaGVhZHJvd1tpXS5zb3J0dGFibGVfc29ydGZ1bmN0aW9uID0gc29ydHRhYmxlWyJzb3J0XyIrb3ZlcnJpZGVdOwotCSAgICAgIH0gZWxzZSB7Ci0JICAgICAgICBoZWFkcm93W2ldLnNvcnR0YWJsZV9zb3J0ZnVuY3Rpb24gPSBzb3J0dGFibGUuZ3Vlc3NUeXBlKHRhYmxlLGkpOwotCSAgICAgIH0KLQkgICAgICAvLyBtYWtlIGl0IGNsaWNrYWJsZSB0byBzb3J0Ci0JICAgICAgaGVhZHJvd1tpXS5zb3J0dGFibGVfY29sdW1uaW5kZXggPSBpOwotCSAgICAgIGhlYWRyb3dbaV0uc29ydHRhYmxlX3Rib2R5ID0gdGFibGUudEJvZGllc1swXTsKLQkgICAgICBkZWFuX2FkZEV2ZW50KGhlYWRyb3dbaV0sImNsaWNrIiwgZnVuY3Rpb24oZSkgewotCi0gICAgICAgICAgaWYgKHRoaXMuY2xhc3NOYW1lLnNlYXJjaCgvXGJzb3J0dGFibGVfc29ydGVkXGIvKSAhPSAtMSkgewotICAgICAgICAgICAgLy8gaWYgd2UncmUgYWxyZWFkeSBzb3J0ZWQgYnkgdGhpcyBjb2x1bW4sIGp1c3QKLSAgICAgICAgICAgIC8vIHJldmVyc2UgdGhlIHRhYmxlLCB3aGljaCBpcyBxdWlja2VyCi0gICAgICAgICAgICBzb3J0dGFibGUucmV2ZXJzZSh0aGlzLnNvcnR0YWJsZV90Ym9keSk7Ci0gICAgICAgICAgICB0aGlzLmNsYXNzTmFtZSA9IHRoaXMuY2xhc3NOYW1lLnJlcGxhY2UoJ3NvcnR0YWJsZV9zb3J0ZWQnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzb3J0dGFibGVfc29ydGVkX3JldmVyc2UnKTsKLSAgICAgICAgICAgIHRoaXMucmVtb3ZlQ2hpbGQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NvcnR0YWJsZV9zb3J0ZndkaW5kJykpOwotICAgICAgICAgICAgc29ydHJldmluZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTsKLSAgICAgICAgICAgIHNvcnRyZXZpbmQuaWQgPSAic29ydHRhYmxlX3NvcnRyZXZpbmQiOwotICAgICAgICAgICAgc29ydHJldmluZC5pbm5lckhUTUwgPSBzdElzSUUgPyAnJm5ic3A8Zm9udCBmYWNlPSJ3ZWJkaW5ncyI+NTwvZm9udD4nIDogJyZuYnNwOyYjeDI1QjQ7JzsKLSAgICAgICAgICAgIHRoaXMuYXBwZW5kQ2hpbGQoc29ydHJldmluZCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgfQotICAgICAgICAgIGlmICh0aGlzLmNsYXNzTmFtZS5zZWFyY2goL1xic29ydHRhYmxlX3NvcnRlZF9yZXZlcnNlXGIvKSAhPSAtMSkgewotICAgICAgICAgICAgLy8gaWYgd2UncmUgYWxyZWFkeSBzb3J0ZWQgYnkgdGhpcyBjb2x1bW4gaW4gcmV2ZXJzZSwganVzdAotICAgICAgICAgICAgLy8gcmUtcmV2ZXJzZSB0aGUgdGFibGUsIHdoaWNoIGlzIHF1aWNrZXIKLSAgICAgICAgICAgIHNvcnR0YWJsZS5yZXZlcnNlKHRoaXMuc29ydHRhYmxlX3Rib2R5KTsKLSAgICAgICAgICAgIHRoaXMuY2xhc3NOYW1lID0gdGhpcy5jbGFzc05hbWUucmVwbGFjZSgnc29ydHRhYmxlX3NvcnRlZF9yZXZlcnNlJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc29ydHRhYmxlX3NvcnRlZCcpOwotICAgICAgICAgICAgdGhpcy5yZW1vdmVDaGlsZChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc29ydHRhYmxlX3NvcnRyZXZpbmQnKSk7Ci0gICAgICAgICAgICBzb3J0ZndkaW5kID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpOwotICAgICAgICAgICAgc29ydGZ3ZGluZC5pZCA9ICJzb3J0dGFibGVfc29ydGZ3ZGluZCI7Ci0gICAgICAgICAgICBzb3J0ZndkaW5kLmlubmVySFRNTCA9IHN0SXNJRSA/ICcmbmJzcDxmb250IGZhY2U9IndlYmRpbmdzIj42PC9mb250PicgOiAnJm5ic3A7JiN4MjVCRTsnOwotICAgICAgICAgICAgdGhpcy5hcHBlbmRDaGlsZChzb3J0ZndkaW5kKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICB9Ci0KLSAgICAgICAgICAvLyByZW1vdmUgc29ydHRhYmxlX3NvcnRlZCBjbGFzc2VzCi0gICAgICAgICAgdGhlYWRyb3cgPSB0aGlzLnBhcmVudE5vZGU7Ci0gICAgICAgICAgZm9yRWFjaCh0aGVhZHJvdy5jaGlsZE5vZGVzLCBmdW5jdGlvbihjZWxsKSB7Ci0gICAgICAgICAgICBpZiAoY2VsbC5ub2RlVHlwZSA9PSAxKSB7IC8vIGFuIGVsZW1lbnQKLSAgICAgICAgICAgICAgY2VsbC5jbGFzc05hbWUgPSBjZWxsLmNsYXNzTmFtZS5yZXBsYWNlKCdzb3J0dGFibGVfc29ydGVkX3JldmVyc2UnLCcnKTsKLSAgICAgICAgICAgICAgY2VsbC5jbGFzc05hbWUgPSBjZWxsLmNsYXNzTmFtZS5yZXBsYWNlKCdzb3J0dGFibGVfc29ydGVkJywnJyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfSk7Ci0gICAgICAgICAgc29ydGZ3ZGluZCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzb3J0dGFibGVfc29ydGZ3ZGluZCcpOwotICAgICAgICAgIGlmIChzb3J0ZndkaW5kKSB7IHNvcnRmd2RpbmQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChzb3J0ZndkaW5kKTsgfQotICAgICAgICAgIHNvcnRyZXZpbmQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc29ydHRhYmxlX3NvcnRyZXZpbmQnKTsKLSAgICAgICAgICBpZiAoc29ydHJldmluZCkgeyBzb3J0cmV2aW5kLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoc29ydHJldmluZCk7IH0KLQotICAgICAgICAgIHRoaXMuY2xhc3NOYW1lICs9ICcgc29ydHRhYmxlX3NvcnRlZCc7Ci0gICAgICAgICAgc29ydGZ3ZGluZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTsKLSAgICAgICAgICBzb3J0ZndkaW5kLmlkID0gInNvcnR0YWJsZV9zb3J0ZndkaW5kIjsKLSAgICAgICAgICBzb3J0ZndkaW5kLmlubmVySFRNTCA9IHN0SXNJRSA/ICcmbmJzcDxmb250IGZhY2U9IndlYmRpbmdzIj42PC9mb250PicgOiAnJm5ic3A7JiN4MjVCRTsnOwotICAgICAgICAgIHRoaXMuYXBwZW5kQ2hpbGQoc29ydGZ3ZGluZCk7Ci0KLQkgICAgICAgIC8vIGJ1aWxkIGFuIGFycmF5IHRvIHNvcnQuIFRoaXMgaXMgYSBTY2h3YXJ0emlhbiB0cmFuc2Zvcm0gdGhpbmcsCi0JICAgICAgICAvLyBpLmUuLCB3ZSAiZGVjb3JhdGUiIGVhY2ggcm93IHdpdGggdGhlIGFjdHVhbCBzb3J0IGtleSwKLQkgICAgICAgIC8vIHNvcnQgYmFzZWQgb24gdGhlIHNvcnQga2V5cywgYW5kIHRoZW4gcHV0IHRoZSByb3dzIGJhY2sgaW4gb3JkZXIKLQkgICAgICAgIC8vIHdoaWNoIGlzIGEgbG90IGZhc3RlciBiZWNhdXNlIHlvdSBvbmx5IGRvIGdldElubmVyVGV4dCBvbmNlIHBlciByb3cKLQkgICAgICAgIHJvd19hcnJheSA9IFtdOwotCSAgICAgICAgY29sID0gdGhpcy5zb3J0dGFibGVfY29sdW1uaW5kZXg7Ci0JICAgICAgICByb3dzID0gdGhpcy5zb3J0dGFibGVfdGJvZHkucm93czsKLQkgICAgICAgIGZvciAodmFyIGo9MDsgajxyb3dzLmxlbmd0aDsgaisrKSB7Ci0JICAgICAgICAgIHJvd19hcnJheVtyb3dfYXJyYXkubGVuZ3RoXSA9IFtzb3J0dGFibGUuZ2V0SW5uZXJUZXh0KHJvd3Nbal0uY2VsbHNbY29sXSksIHJvd3Nbal1dOwotCSAgICAgICAgfQotCSAgICAgICAgLyogSWYgeW91IHdhbnQgYSBzdGFibGUgc29ydCwgdW5jb21tZW50IHRoZSBmb2xsb3dpbmcgbGluZSAqLwotCSAgICAgICAgc29ydHRhYmxlLnNoYWtlcl9zb3J0KHJvd19hcnJheSwgdGhpcy5zb3J0dGFibGVfc29ydGZ1bmN0aW9uKTsKLQkgICAgICAgIC8qIGFuZCBjb21tZW50IG91dCB0aGlzIG9uZSAqLwotCSAgICAgICAgLy9yb3dfYXJyYXkuc29ydCh0aGlzLnNvcnR0YWJsZV9zb3J0ZnVuY3Rpb24pOwotCi0JICAgICAgICB0YiA9IHRoaXMuc29ydHRhYmxlX3Rib2R5OwotCSAgICAgICAgZm9yICh2YXIgaj0wOyBqPHJvd19hcnJheS5sZW5ndGg7IGorKykgewotCSAgICAgICAgICB0Yi5hcHBlbmRDaGlsZChyb3dfYXJyYXlbal1bMV0pOwotCSAgICAgICAgfQotCi0JICAgICAgICBkZWxldGUgcm93X2FycmF5OwotCSAgICAgIH0pOwotCSAgICB9Ci0gICAgfQotICB9LAotCi0gIGd1ZXNzVHlwZTogZnVuY3Rpb24odGFibGUsIGNvbHVtbikgewotICAgIC8vIGd1ZXNzIHRoZSB0eXBlIG9mIGEgY29sdW1uIGJhc2VkIG9uIGl0cyBmaXJzdCBub24tYmxhbmsgcm93Ci0gICAgc29ydGZuID0gc29ydHRhYmxlLnNvcnRfYWxwaGE7Ci0gICAgZm9yICh2YXIgaT0wOyBpPHRhYmxlLnRCb2RpZXNbMF0ucm93cy5sZW5ndGg7IGkrKykgewotICAgICAgdGV4dCA9IHNvcnR0YWJsZS5nZXRJbm5lclRleHQodGFibGUudEJvZGllc1swXS5yb3dzW2ldLmNlbGxzW2NvbHVtbl0pOwotICAgICAgaWYgKHRleHQgIT0gJycpIHsKLSAgICAgICAgaWYgKHRleHQubWF0Y2goL14tP1ujJKRdP1tcZCwuXSslPyQvKSkgewotICAgICAgICAgIHJldHVybiBzb3J0dGFibGUuc29ydF9udW1lcmljOwotICAgICAgICB9Ci0gICAgICAgIC8vIGNoZWNrIGZvciBhIGRhdGU6IGRkL21tL3l5eXkgb3IgZGQvbW0veXkKLSAgICAgICAgLy8gY2FuIGhhdmUgLyBvciAuIG9yIC0gYXMgc2VwYXJhdG9yCi0gICAgICAgIC8vIGNhbiBiZSBtbS9kZCBhcyB3ZWxsCi0gICAgICAgIHBvc3NkYXRlID0gdGV4dC5tYXRjaChzb3J0dGFibGUuREFURV9SRSkKLSAgICAgICAgaWYgKHBvc3NkYXRlKSB7Ci0gICAgICAgICAgLy8gbG9va3MgbGlrZSBhIGRhdGUKLSAgICAgICAgICBmaXJzdCA9IHBhcnNlSW50KHBvc3NkYXRlWzFdKTsKLSAgICAgICAgICBzZWNvbmQgPSBwYXJzZUludChwb3NzZGF0ZVsyXSk7Ci0gICAgICAgICAgaWYgKGZpcnN0ID4gMTIpIHsKLSAgICAgICAgICAgIC8vIGRlZmluaXRlbHkgZGQvbW0KLSAgICAgICAgICAgIHJldHVybiBzb3J0dGFibGUuc29ydF9kZG1tOwotICAgICAgICAgIH0gZWxzZSBpZiAoc2Vjb25kID4gMTIpIHsKLSAgICAgICAgICAgIHJldHVybiBzb3J0dGFibGUuc29ydF9tbWRkOwotICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBsb29rcyBsaWtlIGEgZGF0ZSwgYnV0IHdlIGNhbid0IHRlbGwgd2hpY2gsIHNvIGFzc3VtZQotICAgICAgICAgICAgLy8gdGhhdCBpdCdzIGRkL21tIChFbmdsaXNoIGltcGVyaWFsaXNtISkgYW5kIGtlZXAgbG9va2luZwotICAgICAgICAgICAgc29ydGZuID0gc29ydHRhYmxlLnNvcnRfZGRtbTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHNvcnRmbjsKLSAgfSwKLQotICBnZXRJbm5lclRleHQ6IGZ1bmN0aW9uKG5vZGUpIHsKLSAgICAvLyBnZXRzIHRoZSB0ZXh0IHdlIHdhbnQgdG8gdXNlIGZvciBzb3J0aW5nIGZvciBhIGNlbGwuCi0gICAgLy8gc3RyaXBzIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHdoaXRlc3BhY2UuCi0gICAgLy8gdGhpcyBpcyAqbm90KiBhIGdlbmVyaWMgZ2V0SW5uZXJUZXh0IGZ1bmN0aW9uOyBpdCdzIHNwZWNpYWwgdG8gc29ydHRhYmxlLgotICAgIC8vIGZvciBleGFtcGxlLCB5b3UgY2FuIG92ZXJyaWRlIHRoZSBjZWxsIHRleHQgd2l0aCBhIGN1c3RvbWtleSBhdHRyaWJ1dGUuCi0gICAgLy8gaXQgYWxzbyBnZXRzIC52YWx1ZSBmb3IgPGlucHV0PiBmaWVsZHMuCi0KLSAgICBoYXNJbnB1dHMgPSAodHlwZW9mIG5vZGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUgPT0gJ2Z1bmN0aW9uJykgJiYKLSAgICAgICAgICAgICAgICAgbm9kZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaW5wdXQnKS5sZW5ndGg7Ci0KLSAgICBpZiAobm9kZS5nZXRBdHRyaWJ1dGUoInNvcnR0YWJsZV9jdXN0b21rZXkiKSAhPSBudWxsKSB7Ci0gICAgICByZXR1cm4gbm9kZS5nZXRBdHRyaWJ1dGUoInNvcnR0YWJsZV9jdXN0b21rZXkiKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAodHlwZW9mIG5vZGUudGV4dENvbnRlbnQgIT0gJ3VuZGVmaW5lZCcgJiYgIWhhc0lucHV0cykgewotICAgICAgcmV0dXJuIG5vZGUudGV4dENvbnRlbnQucmVwbGFjZSgvXlxzK3xccyskL2csICcnKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAodHlwZW9mIG5vZGUuaW5uZXJUZXh0ICE9ICd1bmRlZmluZWQnICYmICFoYXNJbnB1dHMpIHsKLSAgICAgIHJldHVybiBub2RlLmlubmVyVGV4dC5yZXBsYWNlKC9eXHMrfFxzKyQvZywgJycpOwotICAgIH0KLSAgICBlbHNlIGlmICh0eXBlb2Ygbm9kZS50ZXh0ICE9ICd1bmRlZmluZWQnICYmICFoYXNJbnB1dHMpIHsKLSAgICAgIHJldHVybiBub2RlLnRleHQucmVwbGFjZSgvXlxzK3xccyskL2csICcnKTsKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICBzd2l0Y2ggKG5vZGUubm9kZVR5cGUpIHsKLSAgICAgICAgY2FzZSAzOgotICAgICAgICAgIGlmIChub2RlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT0gJ2lucHV0JykgewotICAgICAgICAgICAgcmV0dXJuIG5vZGUudmFsdWUucmVwbGFjZSgvXlxzK3xccyskL2csICcnKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgNDoKLSAgICAgICAgICByZXR1cm4gbm9kZS5ub2RlVmFsdWUucmVwbGFjZSgvXlxzK3xccyskL2csICcnKTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAxOgotICAgICAgICBjYXNlIDExOgotICAgICAgICAgIHZhciBpbm5lclRleHQgPSAnJzsKLSAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGUuY2hpbGROb2Rlcy5sZW5ndGg7IGkrKykgewotICAgICAgICAgICAgaW5uZXJUZXh0ICs9IHNvcnR0YWJsZS5nZXRJbm5lclRleHQobm9kZS5jaGlsZE5vZGVzW2ldKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIGlubmVyVGV4dC5yZXBsYWNlKC9eXHMrfFxzKyQvZywgJycpOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgIHJldHVybiAnJzsKLSAgICAgIH0KLSAgICB9Ci0gIH0sCi0KLSAgcmV2ZXJzZTogZnVuY3Rpb24odGJvZHkpIHsKLSAgICAvLyByZXZlcnNlIHRoZSByb3dzIGluIGEgdGJvZHkKLSAgICBuZXdyb3dzID0gW107Ci0gICAgZm9yICh2YXIgaT0wOyBpPHRib2R5LnJvd3MubGVuZ3RoOyBpKyspIHsKLSAgICAgIG5ld3Jvd3NbbmV3cm93cy5sZW5ndGhdID0gdGJvZHkucm93c1tpXTsKLSAgICB9Ci0gICAgZm9yICh2YXIgaT1uZXdyb3dzLmxlbmd0aC0xOyBpPj0wOyBpLS0pIHsKLSAgICAgICB0Ym9keS5hcHBlbmRDaGlsZChuZXdyb3dzW2ldKTsKLSAgICB9Ci0gICAgZGVsZXRlIG5ld3Jvd3M7Ci0gIH0sCi0KLSAgLyogc29ydCBmdW5jdGlvbnMKLSAgICAgZWFjaCBzb3J0IGZ1bmN0aW9uIHRha2VzIHR3byBwYXJhbWV0ZXJzLCBhIGFuZCBiCi0gICAgIHlvdSBhcmUgY29tcGFyaW5nIGFbMF0gYW5kIGJbMF0gKi8KLSAgc29ydF9udW1lcmljOiBmdW5jdGlvbihhLGIpIHsKLSAgICBhYSA9IHBhcnNlRmxvYXQoYVswXS5yZXBsYWNlKC9bXjAtOS4tXS9nLCcnKSk7Ci0gICAgaWYgKGlzTmFOKGFhKSkgYWEgPSAwOwotICAgIGJiID0gcGFyc2VGbG9hdChiWzBdLnJlcGxhY2UoL1teMC05Li1dL2csJycpKTsKLSAgICBpZiAoaXNOYU4oYmIpKSBiYiA9IDA7Ci0gICAgcmV0dXJuIGFhLWJiOwotICB9LAotICBzb3J0X2FscGhhOiBmdW5jdGlvbihhLGIpIHsKLSAgICBpZiAoYVswXT09YlswXSkgcmV0dXJuIDA7Ci0gICAgaWYgKGFbMF08YlswXSkgcmV0dXJuIC0xOwotICAgIHJldHVybiAxOwotICB9LAotICBzb3J0X2RkbW06IGZ1bmN0aW9uKGEsYikgewotICAgIG10Y2ggPSBhWzBdLm1hdGNoKHNvcnR0YWJsZS5EQVRFX1JFKTsKLSAgICB5ID0gbXRjaFszXTsgbSA9IG10Y2hbMl07IGQgPSBtdGNoWzFdOwotICAgIGlmIChtLmxlbmd0aCA9PSAxKSBtID0gJzAnK207Ci0gICAgaWYgKGQubGVuZ3RoID09IDEpIGQgPSAnMCcrZDsKLSAgICBkdDEgPSB5K20rZDsKLSAgICBtdGNoID0gYlswXS5tYXRjaChzb3J0dGFibGUuREFURV9SRSk7Ci0gICAgeSA9IG10Y2hbM107IG0gPSBtdGNoWzJdOyBkID0gbXRjaFsxXTsKLSAgICBpZiAobS5sZW5ndGggPT0gMSkgbSA9ICcwJyttOwotICAgIGlmIChkLmxlbmd0aCA9PSAxKSBkID0gJzAnK2Q7Ci0gICAgZHQyID0geSttK2Q7Ci0gICAgaWYgKGR0MT09ZHQyKSByZXR1cm4gMDsKLSAgICBpZiAoZHQxPGR0MikgcmV0dXJuIC0xOwotICAgIHJldHVybiAxOwotICB9LAotICBzb3J0X21tZGQ6IGZ1bmN0aW9uKGEsYikgewotICAgIG10Y2ggPSBhWzBdLm1hdGNoKHNvcnR0YWJsZS5EQVRFX1JFKTsKLSAgICB5ID0gbXRjaFszXTsgZCA9IG10Y2hbMl07IG0gPSBtdGNoWzFdOwotICAgIGlmIChtLmxlbmd0aCA9PSAxKSBtID0gJzAnK207Ci0gICAgaWYgKGQubGVuZ3RoID09IDEpIGQgPSAnMCcrZDsKLSAgICBkdDEgPSB5K20rZDsKLSAgICBtdGNoID0gYlswXS5tYXRjaChzb3J0dGFibGUuREFURV9SRSk7Ci0gICAgeSA9IG10Y2hbM107IGQgPSBtdGNoWzJdOyBtID0gbXRjaFsxXTsKLSAgICBpZiAobS5sZW5ndGggPT0gMSkgbSA9ICcwJyttOwotICAgIGlmIChkLmxlbmd0aCA9PSAxKSBkID0gJzAnK2Q7Ci0gICAgZHQyID0geSttK2Q7Ci0gICAgaWYgKGR0MT09ZHQyKSByZXR1cm4gMDsKLSAgICBpZiAoZHQxPGR0MikgcmV0dXJuIC0xOwotICAgIHJldHVybiAxOwotICB9LAotCi0gIHNoYWtlcl9zb3J0OiBmdW5jdGlvbihsaXN0LCBjb21wX2Z1bmMpIHsKLSAgICAvLyBBIHN0YWJsZSBzb3J0IGZ1bmN0aW9uIHRvIGFsbG93IG11bHRpLWxldmVsIHNvcnRpbmcgb2YgZGF0YQotICAgIC8vIHNlZTogaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Db2NrdGFpbF9zb3J0Ci0gICAgLy8gdGhhbmtzIHRvIEpvc2VwaCBOYWhtaWFzCi0gICAgdmFyIGIgPSAwOwotICAgIHZhciB0ID0gbGlzdC5sZW5ndGggLSAxOwotICAgIHZhciBzd2FwID0gdHJ1ZTsKLQotICAgIHdoaWxlKHN3YXApIHsKLSAgICAgICAgc3dhcCA9IGZhbHNlOwotICAgICAgICBmb3IodmFyIGkgPSBiOyBpIDwgdDsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoIGNvbXBfZnVuYyhsaXN0W2ldLCBsaXN0W2krMV0pID4gMCApIHsKLSAgICAgICAgICAgICAgICB2YXIgcSA9IGxpc3RbaV07IGxpc3RbaV0gPSBsaXN0W2krMV07IGxpc3RbaSsxXSA9IHE7Ci0gICAgICAgICAgICAgICAgc3dhcCA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gLy8gZm9yCi0gICAgICAgIHQtLTsKLQotICAgICAgICBpZiAoIXN3YXApIGJyZWFrOwotCi0gICAgICAgIGZvcih2YXIgaSA9IHQ7IGkgPiBiOyAtLWkpIHsKLSAgICAgICAgICAgIGlmICggY29tcF9mdW5jKGxpc3RbaV0sIGxpc3RbaS0xXSkgPCAwICkgewotICAgICAgICAgICAgICAgIHZhciBxID0gbGlzdFtpXTsgbGlzdFtpXSA9IGxpc3RbaS0xXTsgbGlzdFtpLTFdID0gcTsKLSAgICAgICAgICAgICAgICBzd2FwID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSAvLyBmb3IKLSAgICAgICAgYisrOwotCi0gICAgfSAvLyB3aGlsZShzd2FwKQotICB9Ci19Ci0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICAgU3VwcG9ydGluZyBmdW5jdGlvbnM6IGJ1bmRsZWQgaGVyZSB0byBhdm9pZCBkZXBlbmRpbmcgb24gYSBsaWJyYXJ5Ci0gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KLQotLy8gRGVhbiBFZHdhcmRzL01hdHRoaWFzIE1pbGxlci9Kb2huIFJlc2lnCi0KLS8qIGZvciBNb3ppbGxhL09wZXJhOSAqLwotaWYgKGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIpIHsKLSAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIiwgc29ydHRhYmxlLmluaXQsIGZhbHNlKTsKLX0KLQotLyogZm9yIEludGVybmV0IEV4cGxvcmVyICovCi0vKkBjY19vbiBAKi8KLS8qQGlmIChAX3dpbjMyKQotICAgIGRvY3VtZW50LndyaXRlKCI8c2NyaXB0IGlkPV9faWVfb25sb2FkIGRlZmVyIHNyYz1qYXZhc2NyaXB0OnZvaWQoMCk+PFwvc2NyaXB0PiIpOwotICAgIHZhciBzY3JpcHQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiX19pZV9vbmxvYWQiKTsKLSAgICBzY3JpcHQub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgIGlmICh0aGlzLnJlYWR5U3RhdGUgPT0gImNvbXBsZXRlIikgewotICAgICAgICAgICAgc29ydHRhYmxlLmluaXQoKTsgLy8gY2FsbCB0aGUgb25sb2FkIGhhbmRsZXIKLSAgICAgICAgfQotICAgIH07Ci0vKkBlbmQgQCovCi0KLS8qIGZvciBTYWZhcmkgKi8KLWlmICgvV2ViS2l0L2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSkgeyAvLyBzbmlmZgotICAgIHZhciBfdGltZXIgPSBzZXRJbnRlcnZhbChmdW5jdGlvbigpIHsKLSAgICAgICAgaWYgKC9sb2FkZWR8Y29tcGxldGUvLnRlc3QoZG9jdW1lbnQucmVhZHlTdGF0ZSkpIHsKLSAgICAgICAgICAgIHNvcnR0YWJsZS5pbml0KCk7IC8vIGNhbGwgdGhlIG9ubG9hZCBoYW5kbGVyCi0gICAgICAgIH0KLSAgICB9LCAxMCk7Ci19Ci0KLS8qIGZvciBvdGhlciBicm93c2VycyAqLwotd2luZG93Lm9ubG9hZCA9IHNvcnR0YWJsZS5pbml0OwotCi0vLyB3cml0dGVuIGJ5IERlYW4gRWR3YXJkcywgMjAwNQotLy8gd2l0aCBpbnB1dCBmcm9tIFRpbm8gWmlqZGVsLCBNYXR0aGlhcyBNaWxsZXIsIERpZWdvIFBlcmluaQotCi0vLyBodHRwOi8vZGVhbi5lZHdhcmRzLm5hbWUvd2VibG9nLzIwMDUvMTAvYWRkLWV2ZW50LwotCi1mdW5jdGlvbiBkZWFuX2FkZEV2ZW50KGVsZW1lbnQsIHR5cGUsIGhhbmRsZXIpIHsKLQlpZiAoZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKSB7Ci0JCWVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCBoYW5kbGVyLCBmYWxzZSk7Ci0JfSBlbHNlIHsKLQkJLy8gYXNzaWduIGVhY2ggZXZlbnQgaGFuZGxlciBhIHVuaXF1ZSBJRAotCQlpZiAoIWhhbmRsZXIuJCRndWlkKSBoYW5kbGVyLiQkZ3VpZCA9IGRlYW5fYWRkRXZlbnQuZ3VpZCsrOwotCQkvLyBjcmVhdGUgYSBoYXNoIHRhYmxlIG9mIGV2ZW50IHR5cGVzIGZvciB0aGUgZWxlbWVudAotCQlpZiAoIWVsZW1lbnQuZXZlbnRzKSBlbGVtZW50LmV2ZW50cyA9IHt9OwotCQkvLyBjcmVhdGUgYSBoYXNoIHRhYmxlIG9mIGV2ZW50IGhhbmRsZXJzIGZvciBlYWNoIGVsZW1lbnQvZXZlbnQgcGFpcgotCQl2YXIgaGFuZGxlcnMgPSBlbGVtZW50LmV2ZW50c1t0eXBlXTsKLQkJaWYgKCFoYW5kbGVycykgewotCQkJaGFuZGxlcnMgPSBlbGVtZW50LmV2ZW50c1t0eXBlXSA9IHt9OwotCQkJLy8gc3RvcmUgdGhlIGV4aXN0aW5nIGV2ZW50IGhhbmRsZXIgKGlmIHRoZXJlIGlzIG9uZSkKLQkJCWlmIChlbGVtZW50WyJvbiIgKyB0eXBlXSkgewotCQkJCWhhbmRsZXJzWzBdID0gZWxlbWVudFsib24iICsgdHlwZV07Ci0JCQl9Ci0JCX0KLQkJLy8gc3RvcmUgdGhlIGV2ZW50IGhhbmRsZXIgaW4gdGhlIGhhc2ggdGFibGUKLQkJaGFuZGxlcnNbaGFuZGxlci4kJGd1aWRdID0gaGFuZGxlcjsKLQkJLy8gYXNzaWduIGEgZ2xvYmFsIGV2ZW50IGhhbmRsZXIgdG8gZG8gYWxsIHRoZSB3b3JrCi0JCWVsZW1lbnRbIm9uIiArIHR5cGVdID0gaGFuZGxlRXZlbnQ7Ci0JfQotfTsKLS8vIGEgY291bnRlciB1c2VkIHRvIGNyZWF0ZSB1bmlxdWUgSURzCi1kZWFuX2FkZEV2ZW50Lmd1aWQgPSAxOwotCi1mdW5jdGlvbiByZW1vdmVFdmVudChlbGVtZW50LCB0eXBlLCBoYW5kbGVyKSB7Ci0JaWYgKGVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcikgewotCQllbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgaGFuZGxlciwgZmFsc2UpOwotCX0gZWxzZSB7Ci0JCS8vIGRlbGV0ZSB0aGUgZXZlbnQgaGFuZGxlciBmcm9tIHRoZSBoYXNoIHRhYmxlCi0JCWlmIChlbGVtZW50LmV2ZW50cyAmJiBlbGVtZW50LmV2ZW50c1t0eXBlXSkgewotCQkJZGVsZXRlIGVsZW1lbnQuZXZlbnRzW3R5cGVdW2hhbmRsZXIuJCRndWlkXTsKLQkJfQotCX0KLX07Ci0KLWZ1bmN0aW9uIGhhbmRsZUV2ZW50KGV2ZW50KSB7Ci0JdmFyIHJldHVyblZhbHVlID0gdHJ1ZTsKLQkvLyBncmFiIHRoZSBldmVudCBvYmplY3QgKElFIHVzZXMgYSBnbG9iYWwgZXZlbnQgb2JqZWN0KQotCWV2ZW50ID0gZXZlbnQgfHwgZml4RXZlbnQoKCh0aGlzLm93bmVyRG9jdW1lbnQgfHwgdGhpcy5kb2N1bWVudCB8fCB0aGlzKS5wYXJlbnRXaW5kb3cgfHwgd2luZG93KS5ldmVudCk7Ci0JLy8gZ2V0IGEgcmVmZXJlbmNlIHRvIHRoZSBoYXNoIHRhYmxlIG9mIGV2ZW50IGhhbmRsZXJzCi0JdmFyIGhhbmRsZXJzID0gdGhpcy5ldmVudHNbZXZlbnQudHlwZV07Ci0JLy8gZXhlY3V0ZSBlYWNoIGV2ZW50IGhhbmRsZXIKLQlmb3IgKHZhciBpIGluIGhhbmRsZXJzKSB7Ci0JCXRoaXMuJCRoYW5kbGVFdmVudCA9IGhhbmRsZXJzW2ldOwotCQlpZiAodGhpcy4kJGhhbmRsZUV2ZW50KGV2ZW50KSA9PT0gZmFsc2UpIHsKLQkJCXJldHVyblZhbHVlID0gZmFsc2U7Ci0JCX0KLQl9Ci0JcmV0dXJuIHJldHVyblZhbHVlOwotfTsKLQotZnVuY3Rpb24gZml4RXZlbnQoZXZlbnQpIHsKLQkvLyBhZGQgVzNDIHN0YW5kYXJkIGV2ZW50IG1ldGhvZHMKLQlldmVudC5wcmV2ZW50RGVmYXVsdCA9IGZpeEV2ZW50LnByZXZlbnREZWZhdWx0OwotCWV2ZW50LnN0b3BQcm9wYWdhdGlvbiA9IGZpeEV2ZW50LnN0b3BQcm9wYWdhdGlvbjsKLQlyZXR1cm4gZXZlbnQ7Ci19OwotZml4RXZlbnQucHJldmVudERlZmF1bHQgPSBmdW5jdGlvbigpIHsKLQl0aGlzLnJldHVyblZhbHVlID0gZmFsc2U7Ci19OwotZml4RXZlbnQuc3RvcFByb3BhZ2F0aW9uID0gZnVuY3Rpb24oKSB7Ci0gIHRoaXMuY2FuY2VsQnViYmxlID0gdHJ1ZTsKLX0KLQotLy8gRGVhbidzIGZvckVhY2g6IGh0dHA6Ly9kZWFuLmVkd2FyZHMubmFtZS9iYXNlL2ZvckVhY2guanMKLS8qCi0JZm9yRWFjaCwgdmVyc2lvbiAxLjAKLQlDb3B5cmlnaHQgMjAwNiwgRGVhbiBFZHdhcmRzCi0JTGljZW5zZTogaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9taXQtbGljZW5zZS5waHAKLSovCi0KLS8vIGFycmF5LWxpa2UgZW51bWVyYXRpb24KLWlmICghQXJyYXkuZm9yRWFjaCkgeyAvLyBtb3ppbGxhIGFscmVhZHkgc3VwcG9ydHMgdGhpcwotCUFycmF5LmZvckVhY2ggPSBmdW5jdGlvbihhcnJheSwgYmxvY2ssIGNvbnRleHQpIHsKLQkJZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkrKykgewotCQkJYmxvY2suY2FsbChjb250ZXh0LCBhcnJheVtpXSwgaSwgYXJyYXkpOwotCQl9Ci0JfTsKLX0KLQotLy8gZ2VuZXJpYyBlbnVtZXJhdGlvbgotRnVuY3Rpb24ucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbihvYmplY3QsIGJsb2NrLCBjb250ZXh0KSB7Ci0JZm9yICh2YXIga2V5IGluIG9iamVjdCkgewotCQlpZiAodHlwZW9mIHRoaXMucHJvdG90eXBlW2tleV0gPT0gInVuZGVmaW5lZCIpIHsKLQkJCWJsb2NrLmNhbGwoY29udGV4dCwgb2JqZWN0W2tleV0sIGtleSwgb2JqZWN0KTsKLQkJfQotCX0KLX07Ci0KLS8vIGNoYXJhY3RlciBlbnVtZXJhdGlvbgotU3RyaW5nLmZvckVhY2ggPSBmdW5jdGlvbihzdHJpbmcsIGJsb2NrLCBjb250ZXh0KSB7Ci0JQXJyYXkuZm9yRWFjaChzdHJpbmcuc3BsaXQoIiIpLCBmdW5jdGlvbihjaHIsIGluZGV4KSB7Ci0JCWJsb2NrLmNhbGwoY29udGV4dCwgY2hyLCBpbmRleCwgc3RyaW5nKTsKLQl9KTsKLX07Ci0KLS8vIGdsb2JhbGx5IHJlc29sdmUgZm9yRWFjaCBlbnVtZXJhdGlvbgotdmFyIGZvckVhY2ggPSBmdW5jdGlvbihvYmplY3QsIGJsb2NrLCBjb250ZXh0KSB7Ci0JaWYgKG9iamVjdCkgewotCQl2YXIgcmVzb2x2ZSA9IE9iamVjdDsgLy8gZGVmYXVsdAotCQlpZiAob2JqZWN0IGluc3RhbmNlb2YgRnVuY3Rpb24pIHsKLQkJCS8vIGZ1bmN0aW9ucyBoYXZlIGEgImxlbmd0aCIgcHJvcGVydHkKLQkJCXJlc29sdmUgPSBGdW5jdGlvbjsKLQkJfSBlbHNlIGlmIChvYmplY3QuZm9yRWFjaCBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB7Ci0JCQkvLyB0aGUgb2JqZWN0IGltcGxlbWVudHMgYSBjdXN0b20gZm9yRWFjaCBtZXRob2Qgc28gdXNlIHRoYXQKLQkJCW9iamVjdC5mb3JFYWNoKGJsb2NrLCBjb250ZXh0KTsKLQkJCXJldHVybjsKLQkJfSBlbHNlIGlmICh0eXBlb2Ygb2JqZWN0ID09ICJzdHJpbmciKSB7Ci0JCQkvLyB0aGUgb2JqZWN0IGlzIGEgc3RyaW5nCi0JCQlyZXNvbHZlID0gU3RyaW5nOwotCQl9IGVsc2UgaWYgKHR5cGVvZiBvYmplY3QubGVuZ3RoID09ICJudW1iZXIiKSB7Ci0JCQkvLyB0aGUgb2JqZWN0IGlzIGFycmF5LWxpa2UKLQkJCXJlc29sdmUgPSBBcnJheTsKLQkJfQotCQlyZXNvbHZlLmZvckVhY2gob2JqZWN0LCBibG9jaywgY29udGV4dCk7Ci0JfQotfTsKZGlmZiAtLWdpdCBhL2NsYW5nLTI1NzcxMTMvdG9vbHMvc2Nhbi12aWV3L0NNYWtlTGlzdHMudHh0IGIvY2xhbmctMjU3NzExMy90b29scy9zY2FuLXZpZXcvQ01ha2VMaXN0cy50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIzMDVjYTUuLjAwMDAwMDAKLS0tIGEvY2xhbmctMjU3NzExMy90b29scy9zY2FuLXZpZXcvQ01ha2VMaXN0cy50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi1vcHRpb24oQ0xBTkdfSU5TVEFMTF9TQ0FOVklFVyAiSW5zdGFsbCB0aGUgc2Nhbi12aWV3IHRvb2wiIE9OKQotCi1zZXQoQmluRmlsZXMKLSAgICAgIHNjYW4tdmlldykKLQotc2V0KFNoYXJlRmlsZXMKLSAgICAgIFNjYW5WaWV3LnB5Ci0gICAgICBSZXBvcnRlci5weQotICAgICAgc3RhcnRmaWxlLnB5Ci0gICAgICBGaWxlUmFkYXIuc2NwdAotICAgICAgR2V0UmFkYXJWZXJzaW9uLnNjcHQKLSAgICAgIGJ1Z2NhdGNoZXIuaWNvKQotCi1pZihDTEFOR19JTlNUQUxMX1NDQU5WSUVXKQotICBmb3JlYWNoKEJpbkZpbGUgJHtCaW5GaWxlc30pCi0gICAgYWRkX2N1c3RvbV9jb21tYW5kKE9VVFBVVCAke0NNQUtFX0JJTkFSWV9ESVJ9L2Jpbi8ke0JpbkZpbGV9Ci0gICAgICAgICAgICAgICAgICAgICAgIENPTU1BTkQgJHtDTUFLRV9DT01NQU5EfSAtRSBtYWtlX2RpcmVjdG9yeQotICAgICAgICAgICAgICAgICAgICAgICAgICR7Q01BS0VfQklOQVJZX0RJUn0vYmluCi0gICAgICAgICAgICAgICAgICAgICAgIENPTU1BTkQgJHtDTUFLRV9DT01NQU5EfSAtRSBjb3B5Ci0gICAgICAgICAgICAgICAgICAgICAgICAgJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L2Jpbi8ke0JpbkZpbGV9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgJHtDTUFLRV9CSU5BUllfRElSfS9iaW4vCi0gICAgICAgICAgICAgICAgICAgICAgIERFUEVORFMgJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L2Jpbi8ke0JpbkZpbGV9KQotICAgIGxpc3QoQVBQRU5EIERlcGVuZHMgJHtDTUFLRV9CSU5BUllfRElSfS9iaW4vJHtCaW5GaWxlfSkKLSAgICBpbnN0YWxsKFBST0dSQU1TIGJpbi8ke0JpbkZpbGV9IERFU1RJTkFUSU9OIGJpbikKLSAgZW5kZm9yZWFjaCgpCi0KLSAgZm9yZWFjaChTaGFyZUZpbGUgJHtTaGFyZUZpbGVzfSkKLSAgICBhZGRfY3VzdG9tX2NvbW1hbmQoT1VUUFVUICR7Q01BS0VfQklOQVJZX0RJUn0vc2hhcmUvc2Nhbi12aWV3LyR7U2hhcmVGaWxlfQotICAgICAgICAgICAgICAgICAgICAgICBDT01NQU5EICR7Q01BS0VfQ09NTUFORH0gLUUgbWFrZV9kaXJlY3RvcnkKLSAgICAgICAgICAgICAgICAgICAgICAgICAke0NNQUtFX0JJTkFSWV9ESVJ9L3NoYXJlL3NjYW4tdmlldwotICAgICAgICAgICAgICAgICAgICAgICBDT01NQU5EICR7Q01BS0VfQ09NTUFORH0gLUUgY29weQotICAgICAgICAgICAgICAgICAgICAgICAgICR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9zaGFyZS8ke1NoYXJlRmlsZX0KLSAgICAgICAgICAgICAgICAgICAgICAgICAke0NNQUtFX0JJTkFSWV9ESVJ9L3NoYXJlL3NjYW4tdmlldy8KLSAgICAgICAgICAgICAgICAgICAgICAgREVQRU5EUyAke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vc2hhcmUvJHtTaGFyZUZpbGV9KQotICAgIGxpc3QoQVBQRU5EIERlcGVuZHMgJHtDTUFLRV9CSU5BUllfRElSfS9zaGFyZS9zY2FuLXZpZXcvJHtTaGFyZUZpbGV9KQotICAgIGluc3RhbGwoRklMRVMgc2hhcmUvJHtTaGFyZUZpbGV9IERFU1RJTkFUSU9OIHNoYXJlL3NjYW4tdmlldykKLSAgZW5kZm9yZWFjaCgpCi0KLSAgYWRkX2N1c3RvbV90YXJnZXQoc2Nhbi12aWV3IEFMTCBERVBFTkRTICR7RGVwZW5kc30pCi0gIHNldF90YXJnZXRfcHJvcGVydGllcyhzY2FuLXZpZXcgUFJPUEVSVElFUyBGT0xERVIgIk1pc2MiKQotZW5kaWYoKQpkaWZmIC0tZ2l0IGEvY2xhbmctMjU3NzExMy90b29scy9zY2FuLXZpZXcvTWFrZWZpbGUgYi9jbGFuZy0yNTc3MTEzL3Rvb2xzL3NjYW4tdmlldy9NYWtlZmlsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzdlNDQwNC4uMDAwMDAwMAotLS0gYS9jbGFuZy0yNTc3MTEzL3Rvb2xzL3NjYW4tdmlldy9NYWtlZmlsZQorKysgL2Rldi9udWxsCkBAIC0xLDM3ICswLDAgQEAKLSMjPT09LSB0b29scy9zY2FuLXZpZXcvTWFrZWZpbGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSotIE1ha2VmaWxlIC0qLT09PSMjCi0jIAotIyAgICAgICAgICAgICAgICAgICAgIFRoZSBMTFZNIENvbXBpbGVyIEluZnJhc3RydWN0dXJlCi0jCi0jIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgVW5pdmVyc2l0eSBvZiBJbGxpbm9pcyBPcGVuIFNvdXJjZQotIyBMaWNlbnNlLiBTZWUgTElDRU5TRS5UWFQgZm9yIGRldGFpbHMuCi0jIAotIyM9PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09IyMKLQotQ0xBTkdfTEVWRUwgOj0gLi4vLi4KLQotaW5jbHVkZSAkKENMQU5HX0xFVkVMKS8uLi8uLi9NYWtlZmlsZS5jb25maWcKLWluY2x1ZGUgJChDTEFOR19MRVZFTCkvTWFrZWZpbGUKLQotQ0xBTkdfSU5TVEFMTF9TQ0FOVklFVyA/PSAxCi0KLWlmZXEgKCQoQ0xBTkdfSU5TVEFMTF9TQ0FOVklFVyksIDEpCi0gIEluc3RhbGxUYXJnZXRzIDo9ICQoVG9vbERpcikvc2Nhbi12aWV3IFwKLSAgICAgICAgICAgICAgICAgICAgJChTaGFyZURpcikvc2Nhbi12aWV3L1JlcG9ydGVyLnB5IFwKLSAgICAgICAgICAgICAgICAgICAgJChTaGFyZURpcikvc2Nhbi12aWV3L1NjYW5WaWV3LnB5IFwKLSAgICAgICAgICAgICAgICAgICAgJChTaGFyZURpcikvc2Nhbi12aWV3L3N0YXJ0ZmlsZS5weSBcCi0gICAgICAgICAgICAgICAgICAgICQoU2hhcmVEaXIpL3NjYW4tdmlldy9GaWxlUmFkYXIuc2NwdCBcCi0gICAgICAgICAgICAgICAgICAgICQoU2hhcmVEaXIpL3NjYW4tdmlldy9HZXRSYWRhclZlcnNpb24uc2NwdCBcCi0gICAgICAgICAgICAgICAgICAgICQoU2hhcmVEaXIpL3NjYW4tdmlldy9idWdjYXRjaGVyLmljbwotZW5kaWYKLQotYWxsOjogJChJbnN0YWxsVGFyZ2V0cykKLQotJChUb29sRGlyKS8lOiBiaW4vJSBNYWtlZmlsZSAkKFRvb2xEaXIpLy5kaXIKLQkkKEVjaG8pICJDb3B5aW5nICQobm90ZGlyICQ8KSB0byB0aGUgJ2JpbicgZGlyZWN0b3J5Li4uIgotCSQoVmVyYiljcCAkPCAkQAotCSQoVmVyYiljaG1vZCAreCAkQAotCi0kKFNoYXJlRGlyKS9zY2FuLXZpZXcvJTogc2hhcmUvJSBNYWtlZmlsZSAkKFNoYXJlRGlyKS9zY2FuLXZpZXcvLmRpcgotCSQoRWNobykgIkNvcHlpbmcgJChub3RkaXIgJDwpIHRvIHRoZSAnc2hhcmUnIGRpcmVjdG9yeS4uLiIKLQkkKFZlcmIpY3AgJDwgJEAKLQpkaWZmIC0tZ2l0IGEvY2xhbmctMjU3NzExMy90b29scy9zY2FuLXZpZXcvYmluL3NjYW4tdmlldyBiL2NsYW5nLTI1NzcxMTMvdG9vbHMvc2Nhbi12aWV3L2Jpbi9zY2FuLXZpZXcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDFiNmU4YmEuLjAwMDAwMDAKLS0tIGEvY2xhbmctMjU3NzExMy90b29scy9zY2FuLXZpZXcvYmluL3NjYW4tdmlldworKysgL2Rldi9udWxsCkBAIC0xLDE0MyArMCwwIEBACi0jIS91c3IvYmluL2VudiBweXRob24KLQotIiIiVGhlIGNsYW5nIHN0YXRpYyBhbmFseXplciByZXN1bHRzIHZpZXdlci4KLSIiIgotCi1pbXBvcnQgc3lzCi1pbXBvcnQgaW1wCi1pbXBvcnQgb3MKLWltcG9ydCBwb3NpeHBhdGgKLWltcG9ydCB0aHJlYWQKLWltcG9ydCB0aW1lCi1pbXBvcnQgdXJsbGliCi1pbXBvcnQgd2ViYnJvd3NlcgotCi0jIEhvdyBsb25nIHRvIHdhaXQgZm9yIHNlcnZlciB0byBzdGFydC4KLWtTbGVlcFRpbWVvdXQgPSAuMDUKLWtNYXhTbGVlcHMgPSBpbnQoNjAgLyBrU2xlZXBUaW1lb3V0KQotCi0jIERlZmF1bHQgc2VydmVyIHBhcmFtZXRlcnMKLQota0RlZmF1bHRIb3N0ID0gJzEyNy4wLjAuMScKLWtEZWZhdWx0UG9ydCA9IDgxODEKLWtNYXhQb3J0c1RvVHJ5ID0gMTAwCi0KLSMjIwotCi0KLWRlZiB1cmxfaXNfdXAodXJsKToKLSAgICB0cnk6Ci0gICAgICAgIG8gPSB1cmxsaWIudXJsb3Blbih1cmwpCi0gICAgZXhjZXB0IElPRXJyb3I6Ci0gICAgICAgIHJldHVybiBGYWxzZQotICAgIG8uY2xvc2UoKQotICAgIHJldHVybiBUcnVlCi0KLQotZGVmIHN0YXJ0X2Jyb3dzZXIocG9ydCwgb3B0aW9ucyk6Ci0gICAgaW1wb3J0IHVybGxpYgotICAgIGltcG9ydCB3ZWJicm93c2VyCi0KLSAgICB1cmwgPSAnaHR0cDovLyVzOiVkJyAlIChvcHRpb25zLmhvc3QsIHBvcnQpCi0KLSAgICAjIFdhaXQgZm9yIHNlcnZlciB0byBzdGFydC4uLgotICAgIGlmIG9wdGlvbnMuZGVidWc6Ci0gICAgICAgIHN5cy5zdGRlcnIud3JpdGUoJyVzOiBXYWl0aW5nIGZvciBzZXJ2ZXIuJyAlIHN5cy5hcmd2WzBdKQotICAgICAgICBzeXMuc3RkZXJyLmZsdXNoKCkKLSAgICBmb3IgaSBpbiByYW5nZShrTWF4U2xlZXBzKToKLSAgICAgICAgaWYgdXJsX2lzX3VwKHVybCk6Ci0gICAgICAgICAgICBicmVhawotICAgICAgICBpZiBvcHRpb25zLmRlYnVnOgotICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgnLicpCi0gICAgICAgICAgICBzeXMuc3RkZXJyLmZsdXNoKCkKLSAgICAgICAgdGltZS5zbGVlcChrU2xlZXBUaW1lb3V0KQotICAgIGVsc2U6Ci0gICAgICAgIHByaW50ID4+IHN5cy5zdGRlcnIsICdXQVJOSU5HOiBVbmFibGUgdG8gZGV0ZWN0IHRoYXQgc2VydmVyIHN0YXJ0ZWQuJwotCi0gICAgaWYgb3B0aW9ucy5kZWJ1ZzoKLSAgICAgICAgcHJpbnQgPj4gc3lzLnN0ZGVyciwgJyVzOiBTdGFydGluZyB3ZWJicm93c2VyLi4uJyAlIHN5cy5hcmd2WzBdCi0gICAgd2ViYnJvd3Nlci5vcGVuKHVybCkKLQotCi1kZWYgcnVuKHBvcnQsIG9wdGlvbnMsIHJvb3QpOgotICAgICMgUHJlZmVyIHRvIGxvb2sgcmVsYXRpdmUgdG8gdGhlIGluc3RhbGxlZCBiaW5hcnkKLSAgICBzaGFyZSA9IG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykgKyAiLy4uL3NoYXJlL3NjYW4tdmlldyIKLSAgICBpZiBub3Qgb3MucGF0aC5pc2RpcihzaGFyZSk6Ci0gICAgICAgICMgT3RoZXJ3aXNlIGxvb2sgcmVsYXRpdmUgdG8gdGhlIHNvdXJjZQotICAgICAgICBzaGFyZSA9IG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykgKyAiLy4uLy4uL3NjYW4tdmlldy9zaGFyZSIKLSAgICBzeXMucGF0aC5hcHBlbmQoc2hhcmUpCi0KLSAgICBpbXBvcnQgU2NhblZpZXcKLSAgICB0cnk6Ci0gICAgICAgIHByaW50ICdTdGFydGluZyBzY2FuLXZpZXcgYXQ6IGh0dHA6Ly8lczolZCcgJSAob3B0aW9ucy5ob3N0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcnQpCi0gICAgICAgIHByaW50ICcgIFVzZSBDdHJsLUMgdG8gZXhpdC4nCi0gICAgICAgIGh0dHBkID0gU2NhblZpZXcuY3JlYXRlX3NlcnZlcigob3B0aW9ucy5ob3N0LCBwb3J0KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMsIHJvb3QpCi0gICAgICAgIGh0dHBkLnNlcnZlX2ZvcmV2ZXIoKQotICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKLSAgICAgICAgcGFzcwotCi0KLWRlZiBwb3J0X2lzX29wZW4ocG9ydCk6Ci0gICAgaW1wb3J0IFNvY2tldFNlcnZlcgotICAgIHRyeToKLSAgICAgICAgdCA9IFNvY2tldFNlcnZlci5UQ1BTZXJ2ZXIoKGtEZWZhdWx0SG9zdCwgcG9ydCksIE5vbmUpCi0gICAgZXhjZXB0OgotICAgICAgICByZXR1cm4gRmFsc2UKLSAgICB0LnNlcnZlcl9jbG9zZSgpCi0gICAgcmV0dXJuIFRydWUKLQotCi1kZWYgbWFpbigpOgotICAgIGltcG9ydCBhcmdwYXJzZQotICAgIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKGRlc2NyaXB0aW9uPSJUaGUgY2xhbmcgc3RhdGljIGFuYWx5emVyICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVzdWx0cyB2aWV3ZXIuIikKLSAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCJyb290IiwgbWV0YXZhcj0iPHJlc3VsdHMgZGlyZWN0b3J5PiIsIHR5cGU9c3RyKQotICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCi0gICAgICAgICctLWhvc3QnLCBkZXN0PSJob3N0IiwgZGVmYXVsdD1rRGVmYXVsdEhvc3QsIHR5cGU9c3RyLAotICAgICAgICBoZWxwPSJIb3N0IGludGVyZmFjZSB0byBsaXN0ZW4gb24uIChkZWZhdWx0PSVzKSIgJSBrRGVmYXVsdEhvc3QpCi0gICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1wb3J0JywgZGVzdD0icG9ydCIsIGRlZmF1bHQ9Tm9uZSwgdHlwZT1pbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJQb3J0IHRvIGxpc3RlbiBvbi4gKGRlZmF1bHQ9JXMpIiAlIGtEZWZhdWx0UG9ydCkKLSAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCItLWRlYnVnIiwgZGVzdD0iZGVidWciLCBkZWZhdWx0PTAsCi0gICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249ImNvdW50IiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IlByaW50IGFkZGl0aW9uYWwgZGVidWdnaW5nIGluZm9ybWF0aW9uLiIpCi0gICAgcGFyc2VyLmFkZF9hcmd1bWVudCgiLS1hdXRvLXJlbG9hZCIsIGRlc3Q9ImF1dG9SZWxvYWQiLCBkZWZhdWx0PUZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSJzdG9yZV90cnVlIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IkF1dG9tYXRpY2FsbHkgdXBkYXRlIG1vZHVsZSBmb3IgZWFjaCByZXF1ZXN0LiIpCi0gICAgcGFyc2VyLmFkZF9hcmd1bWVudCgiLS1uby1icm93c2VyIiwgZGVzdD0ic3RhcnRCcm93c2VyIiwgZGVmYXVsdD1UcnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSJzdG9yZV9mYWxzZSIsCi0gICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJEb24ndCBvcGVuIGEgd2ViYnJvd3NlciBvbiBzdGFydHVwLiIpCi0gICAgcGFyc2VyLmFkZF9hcmd1bWVudCgiLS1hbGxvdy1hbGwtaG9zdHMiLCBkZXN0PSJvbmx5U2VydmVMb2NhbCIsCi0gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PVRydWUsIGFjdGlvbj0ic3RvcmVfZmFsc2UiLAotICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nQWxsb3cgY29ubmVjdGlvbnMgZnJvbSBhbnkgaG9zdCAoYWNjZXNzICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Jlc3RyaWN0ZWQgdG8gIjEyNy4wLjAuMSIgYnkgZGVmYXVsdCknKQotICAgIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncygpCi0KLSAgICAjIE1ha2Ugc3VyZSB0aGlzIGRpcmVjdG9yeSBpcyBpbiBhIHJlYXNvbmFibGUgc3RhdGUgdG8gdmlldy4KLSAgICBpZiBub3QgcG9zaXhwYXRoLmV4aXN0cyhwb3NpeHBhdGguam9pbihhcmdzLnJvb3QsICdpbmRleC5odG1sJykpOgotICAgICAgICBwYXJzZXIuZXJyb3IoJ0ludmFsaWQgZGlyZWN0b3J5LCBhbmFseXNpcyByZXN1bHRzIG5vdCBmb3VuZCEnKQotCi0gICAgIyBGaW5kIGFuIG9wZW4gcG9ydC4gV2UgYXJlbid0IHBhcnRpY3VsYXJseSB3b3JyaWVkIGFib3V0IHJhY2UKLSAgICAjIGNvbmRpdGlvbnMgaGVyZS4gTm90ZSB0aGF0IGlmIHRoZSB1c2VyIHNwZWNpZmllZCBhIHBvcnQgd2Ugb25seQotICAgICMgdXNlIHRoYXQgb25lLgotICAgIGlmIGFyZ3MucG9ydCBpcyBub3QgTm9uZToKLSAgICAgICAgcG9ydCA9IGFyZ3MucG9ydAotICAgIGVsc2U6Ci0gICAgICAgIGZvciBpIGluIHJhbmdlKGtNYXhQb3J0c1RvVHJ5KToKLSAgICAgICAgICAgIGlmIHBvcnRfaXNfb3BlbihrRGVmYXVsdFBvcnQgKyBpKToKLSAgICAgICAgICAgICAgICBwb3J0ID0ga0RlZmF1bHRQb3J0ICsgaQotICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBwYXJzZXIuZXJyb3IoJ1VuYWJsZSB0byBmaW5kIHVzYWJsZSBwb3J0IGluIFslZCwlZCknICUKLSAgICAgICAgICAgICAgICAgICAgICAgICAoa0RlZmF1bHRQb3J0LCBrRGVmYXVsdFBvcnQra01heFBvcnRzVG9UcnkpKQotCi0gICAgIyBLaWNrIG9mZiB0aHJlYWQgdG8gd2FpdCBmb3Igc2VydmVyIGFuZCBzdGFydCB3ZWIgYnJvd3NlciwgaWYKLSAgICAjIHJlcXVlc3RlZC4KLSAgICBpZiBhcmdzLnN0YXJ0QnJvd3NlcjoKLSAgICAgICAgdCA9IHRocmVhZC5zdGFydF9uZXdfdGhyZWFkKHN0YXJ0X2Jyb3dzZXIsIChwb3J0LCBhcmdzKSkKLQotICAgIHJ1bihwb3J0LCBhcmdzLCBhcmdzLnJvb3QpCi0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgbWFpbigpCmRpZmYgLS1naXQgYS9jbGFuZy0yNTc3MTEzL3Rvb2xzL3NjYW4tdmlldy9zaGFyZS9GaWxlUmFkYXIuc2NwdCBiL2NsYW5nLTI1NzcxMTMvdG9vbHMvc2Nhbi12aWV3L3NoYXJlL0ZpbGVSYWRhci5zY3B0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYzc0NTUyLi4wMDAwMDAwCi0tLSBhL2NsYW5nLTI1NzcxMTMvdG9vbHMvc2Nhbi12aWV3L3NoYXJlL0ZpbGVSYWRhci5zY3B0CisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY2xhbmctMjU3NzExMy90b29scy9zY2FuLXZpZXcvc2hhcmUvR2V0UmFkYXJWZXJzaW9uLnNjcHQgYi9jbGFuZy0yNTc3MTEzL3Rvb2xzL3NjYW4tdmlldy9zaGFyZS9HZXRSYWRhclZlcnNpb24uc2NwdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTY5ZGUyOS4uMDAwMDAwMAotLS0gYS9jbGFuZy0yNTc3MTEzL3Rvb2xzL3NjYW4tdmlldy9zaGFyZS9HZXRSYWRhclZlcnNpb24uc2NwdAorKysgL2Rldi9udWxsCmRpZmYgLS1naXQgYS9jbGFuZy0yNTc3MTEzL3Rvb2xzL3NjYW4tdmlldy9zaGFyZS9SZXBvcnRlci5weSBiL2NsYW5nLTI1NzcxMTMvdG9vbHMvc2Nhbi12aWV3L3NoYXJlL1JlcG9ydGVyLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOTRlMDViLi4wMDAwMDAwCi0tLSBhL2NsYW5nLTI1NzcxMTMvdG9vbHMvc2Nhbi12aWV3L3NoYXJlL1JlcG9ydGVyLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMjQ4ICswLDAgQEAKLSIiIk1ldGhvZHMgZm9yIHJlcG9ydGluZyBidWdzLiIiIgotCi1pbXBvcnQgc3VicHJvY2Vzcywgc3lzLCBvcwotCi1fX2FsbF9fID0gWydSZXBvcnRGYWlsdXJlJywgJ0J1Z1JlcG9ydCcsICdnZXRSZXBvcnRlcnMnXQotCi0jCi0KLWNsYXNzIFJlcG9ydEZhaWx1cmUoRXhjZXB0aW9uKToKLSAgICAiIiJHZW5lcmljIGV4Y2VwdGlvbiBmb3IgZmFpbHVyZXMgaW4gYnVnIHJlcG9ydGluZy4iIiIKLSAgICBkZWYgX19pbml0X18oc2VsZiwgdmFsdWUpOiAgICAgICAgCi0gICAgICAgIHNlbGYudmFsdWUgPSB2YWx1ZQotCi0jIENvbGxlY3QgaW5mb3JtYXRpb24gYWJvdXQgYSBidWcuCi0KLWNsYXNzIEJ1Z1JlcG9ydDoKLSAgICBkZWYgX19pbml0X18oc2VsZiwgdGl0bGUsIGRlc2NyaXB0aW9uLCBmaWxlcyk6Ci0gICAgICAgIHNlbGYudGl0bGUgPSB0aXRsZQotICAgICAgICBzZWxmLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb24KLSAgICAgICAgc2VsZi5maWxlcyA9IGZpbGVzCi0KLSMgUmVwb3J0ZXIgaW50ZXJmYWNlcy4KLQotaW1wb3J0IG9zCi0KLWltcG9ydCBlbWFpbCwgbWltZXR5cGVzLCBzbXRwbGliCi1mcm9tIGVtYWlsIGltcG9ydCBlbmNvZGVycwotZnJvbSBlbWFpbC5tZXNzYWdlIGltcG9ydCBNZXNzYWdlCi1mcm9tIGVtYWlsLm1pbWUuYmFzZSBpbXBvcnQgTUlNRUJhc2UKLWZyb20gZW1haWwubWltZS5tdWx0aXBhcnQgaW1wb3J0IE1JTUVNdWx0aXBhcnQKLWZyb20gZW1haWwubWltZS50ZXh0IGltcG9ydCBNSU1FVGV4dAotCi0jPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09IwotIyBSZXBvcnRlclBhcmFtZXRlcgotIz09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PSMKLQotY2xhc3MgUmVwb3J0ZXJQYXJhbWV0ZXI6Ci0gIGRlZiBfX2luaXRfXyhzZWxmLCBuKToKLSAgICBzZWxmLm5hbWUgPSBuCi0gIGRlZiBnZXROYW1lKHNlbGYpOgotICAgIHJldHVybiBzZWxmLm5hbWUKLSAgZGVmIGdldFZhbHVlKHNlbGYscixidWd0eXBlLGdldENvbmZpZ09wdGlvbik6Ci0gICAgIHJldHVybiBnZXRDb25maWdPcHRpb24oci5nZXROYW1lKCksc2VsZi5nZXROYW1lKCkpCi0gIGRlZiBzYXZlQ29uZmlnVmFsdWUoc2VsZik6Ci0gICAgcmV0dXJuIFRydWUKLQotY2xhc3MgVGV4dFBhcmFtZXRlciAoUmVwb3J0ZXJQYXJhbWV0ZXIpOgotICBkZWYgZ2V0SFRNTChzZWxmLHIsYnVndHlwZSxnZXRDb25maWdPcHRpb24pOgotICAgIHJldHVybiAiIiJcCi08dHI+Ci08dGQgY2xhc3M9ImZvcm1fY2xhYmVsIj4lczo8L3RkPgotPHRkIGNsYXNzPSJmb3JtX3ZhbHVlIj48aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iJXNfJXMiIHZhbHVlPSIlcyI+PC90ZD4KLTwvdHI+IiIiJShzZWxmLmdldE5hbWUoKSxyLmdldE5hbWUoKSxzZWxmLmdldE5hbWUoKSxzZWxmLmdldFZhbHVlKHIsYnVndHlwZSxnZXRDb25maWdPcHRpb24pKQotCi1jbGFzcyBTZWxlY3Rpb25QYXJhbWV0ZXIgKFJlcG9ydGVyUGFyYW1ldGVyKToKLSAgZGVmIF9faW5pdF9fKHNlbGYsIG4sIHZhbHVlcyk6Ci0gICAgUmVwb3J0ZXJQYXJhbWV0ZXIuX19pbml0X18oc2VsZixuKQotICAgIHNlbGYudmFsdWVzID0gdmFsdWVzCi0gICAgCi0gIGRlZiBnZXRIVE1MKHNlbGYscixidWd0eXBlLGdldENvbmZpZ09wdGlvbik6Ci0gICAgZGVmYXVsdCA9IHNlbGYuZ2V0VmFsdWUocixidWd0eXBlLGdldENvbmZpZ09wdGlvbikKLSAgICByZXR1cm4gIiIiXAotPHRyPgotPHRkIGNsYXNzPSJmb3JtX2NsYWJlbCI+JXM6PC90ZD48dGQgY2xhc3M9ImZvcm1fdmFsdWUiPjxzZWxlY3QgbmFtZT0iJXNfJXMiPgotJXMKLTwvc2VsZWN0PjwvdGQ+IiIiJShzZWxmLmdldE5hbWUoKSxyLmdldE5hbWUoKSxzZWxmLmdldE5hbWUoKSwnXG4nLmpvaW4oWyIiIlwKLTxvcHRpb24gdmFsdWU9IiVzIiVzPiVzPC9vcHRpb24+IiIiJShvWzBdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9bMF0gPT0gZGVmYXVsdCBhbmQgJyBzZWxlY3RlZD0ic2VsZWN0ZWQiJyBvciAnJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvWzFdKSBmb3IgbyBpbiBzZWxmLnZhbHVlc10pKQotCi0jPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09IwotIyBSZXBvcnRlcnMKLSM9PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0jCi0KLWNsYXNzIEVtYWlsUmVwb3J0ZXI6Ci0gICAgZGVmIGdldE5hbWUoc2VsZik6Ci0gICAgICAgIHJldHVybiAnRW1haWwnCi0KLSAgICBkZWYgZ2V0UGFyYW1ldGVycyhzZWxmKToKLSAgICAgICAgcmV0dXJuIG1hcChsYW1iZGEgeDpUZXh0UGFyYW1ldGVyKHgpLFsnVG8nLCAnRnJvbScsICdTTVRQIFNlcnZlcicsICdTTVRQIFBvcnQnXSkKLQotICAgICMgTGlmdGVkIGZyb20gcHl0aG9uIGVtYWlsIG1vZHVsZSBleGFtcGxlcy4KLSAgICBkZWYgYXR0YWNoRmlsZShzZWxmLCBvdXRlciwgcGF0aCk6Ci0gICAgICAgICMgR3Vlc3MgdGhlIGNvbnRlbnQgdHlwZSBiYXNlZCBvbiB0aGUgZmlsZSdzIGV4dGVuc2lvbi4gIEVuY29kaW5nCi0gICAgICAgICMgd2lsbCBiZSBpZ25vcmVkLCBhbHRob3VnaCB3ZSBzaG91bGQgY2hlY2sgZm9yIHNpbXBsZSB0aGluZ3MgbGlrZQotICAgICAgICAjIGd6aXAnZCBvciBjb21wcmVzc2VkIGZpbGVzLgotICAgICAgICBjdHlwZSwgZW5jb2RpbmcgPSBtaW1ldHlwZXMuZ3Vlc3NfdHlwZShwYXRoKQotICAgICAgICBpZiBjdHlwZSBpcyBOb25lIG9yIGVuY29kaW5nIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgIyBObyBndWVzcyBjb3VsZCBiZSBtYWRlLCBvciB0aGUgZmlsZSBpcyBlbmNvZGVkIChjb21wcmVzc2VkKSwgc28KLSAgICAgICAgICAgICMgdXNlIGEgZ2VuZXJpYyBiYWctb2YtYml0cyB0eXBlLgotICAgICAgICAgICAgY3R5cGUgPSAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJwotICAgICAgICBtYWludHlwZSwgc3VidHlwZSA9IGN0eXBlLnNwbGl0KCcvJywgMSkKLSAgICAgICAgaWYgbWFpbnR5cGUgPT0gJ3RleHQnOgotICAgICAgICAgICAgZnAgPSBvcGVuKHBhdGgpCi0gICAgICAgICAgICAjIE5vdGU6IHdlIHNob3VsZCBoYW5kbGUgY2FsY3VsYXRpbmcgdGhlIGNoYXJzZXQKLSAgICAgICAgICAgIG1zZyA9IE1JTUVUZXh0KGZwLnJlYWQoKSwgX3N1YnR5cGU9c3VidHlwZSkKLSAgICAgICAgICAgIGZwLmNsb3NlKCkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGZwID0gb3BlbihwYXRoLCAncmInKQotICAgICAgICAgICAgbXNnID0gTUlNRUJhc2UobWFpbnR5cGUsIHN1YnR5cGUpCi0gICAgICAgICAgICBtc2cuc2V0X3BheWxvYWQoZnAucmVhZCgpKQotICAgICAgICAgICAgZnAuY2xvc2UoKQotICAgICAgICAgICAgIyBFbmNvZGUgdGhlIHBheWxvYWQgdXNpbmcgQmFzZTY0Ci0gICAgICAgICAgICBlbmNvZGVycy5lbmNvZGVfYmFzZTY0KG1zZykKLSAgICAgICAgIyBTZXQgdGhlIGZpbGVuYW1lIHBhcmFtZXRlcgotICAgICAgICBtc2cuYWRkX2hlYWRlcignQ29udGVudC1EaXNwb3NpdGlvbicsICdhdHRhY2htZW50JywgZmlsZW5hbWU9b3MucGF0aC5iYXNlbmFtZShwYXRoKSkKLSAgICAgICAgb3V0ZXIuYXR0YWNoKG1zZykKLQotICAgIGRlZiBmaWxlUmVwb3J0KHNlbGYsIHJlcG9ydCwgcGFyYW1ldGVycyk6Ci0gICAgICAgIG1haW5Nc2cgPSAiIiJcCi1CVUcgUkVQT1JUCi0tLS0KLVRpdGxlOiAlcwotRGVzY3JpcHRpb246ICVzCi0iIiIlKHJlcG9ydC50aXRsZSwgcmVwb3J0LmRlc2NyaXB0aW9uKQotCi0gICAgICAgIGlmIG5vdCBwYXJhbWV0ZXJzLmdldCgnVG8nKToKLSAgICAgICAgICAgIHJhaXNlIFJlcG9ydEZhaWx1cmUoJ05vICJUbyIgYWRkcmVzcyBzcGVjaWZpZWQuJykKLSAgICAgICAgaWYgbm90IHBhcmFtZXRlcnMuZ2V0KCdGcm9tJyk6Ci0gICAgICAgICAgICByYWlzZSBSZXBvcnRGYWlsdXJlKCdObyAiRnJvbSIgYWRkcmVzcyBzcGVjaWZpZWQuJykKLQotICAgICAgICBtc2cgPSBNSU1FTXVsdGlwYXJ0KCkKLSAgICAgICAgbXNnWydTdWJqZWN0J10gPSAnQlVHIFJFUE9SVDogJXMnJShyZXBvcnQudGl0bGUpCi0gICAgICAgICMgRklYTUU6IEdldCBjb25maWcgcGFyYW1ldGVycwotICAgICAgICBtc2dbJ1RvJ10gPSBwYXJhbWV0ZXJzLmdldCgnVG8nKQotICAgICAgICBtc2dbJ0Zyb20nXSA9IHBhcmFtZXRlcnMuZ2V0KCdGcm9tJykKLSAgICAgICAgbXNnLnByZWFtYmxlID0gbWFpbk1zZwotCi0gICAgICAgIG1zZy5hdHRhY2goTUlNRVRleHQobWFpbk1zZywgX3N1YnR5cGU9J3RleHQvcGxhaW4nKSkKLSAgICAgICAgZm9yIGZpbGUgaW4gcmVwb3J0LmZpbGVzOgotICAgICAgICAgICAgc2VsZi5hdHRhY2hGaWxlKG1zZywgZmlsZSkKLQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzID0gc210cGxpYi5TTVRQKGhvc3Q9cGFyYW1ldGVycy5nZXQoJ1NNVFAgU2VydmVyJyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcnQ9cGFyYW1ldGVycy5nZXQoJ1NNVFAgUG9ydCcpKQotICAgICAgICAgICAgcy5zZW5kbWFpbChtc2dbJ0Zyb20nXSwgbXNnWydUbyddLCBtc2cuYXNfc3RyaW5nKCkpCi0gICAgICAgICAgICBzLmNsb3NlKCkKLSAgICAgICAgZXhjZXB0OgotICAgICAgICAgICAgcmFpc2UgUmVwb3J0RmFpbHVyZSgnVW5hYmxlIHRvIHNlbmQgbWVzc2FnZSB2aWEgU01UUC4nKQotCi0gICAgICAgIHJldHVybiAiTWVzc2FnZSBzZW50ISIKLQotY2xhc3MgQnVnemlsbGFSZXBvcnRlcjoKLSAgICBkZWYgZ2V0TmFtZShzZWxmKToKLSAgICAgICAgcmV0dXJuICdCdWd6aWxsYScKLSAgICAKLSAgICBkZWYgZ2V0UGFyYW1ldGVycyhzZWxmKToKLSAgICAgICAgcmV0dXJuIG1hcChsYW1iZGEgeDpUZXh0UGFyYW1ldGVyKHgpLFsnVVJMJywnUHJvZHVjdCddKQotCi0gICAgZGVmIGZpbGVSZXBvcnQoc2VsZiwgcmVwb3J0LCBwYXJhbWV0ZXJzKToKLSAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgotIAotCi1jbGFzcyBSYWRhckNsYXNzaWZpY2F0aW9uUGFyYW1ldGVyKFNlbGVjdGlvblBhcmFtZXRlcik6Ci0gIGRlZiBfX2luaXRfXyhzZWxmKToKLSAgICBTZWxlY3Rpb25QYXJhbWV0ZXIuX19pbml0X18oc2VsZiwiQ2xhc3NpZmljYXRpb24iLAotICAgICAgICAgICAgW1snMScsICdTZWN1cml0eSddLCBbJzInLCAnQ3Jhc2gvSGFuZy9EYXRhIExvc3MnXSwKLSAgICAgICAgICAgICBbJzMnLCAnUGVyZm9ybWFuY2UnXSwgWyc0JywgJ1VJL1VzYWJpbGl0eSddLCAKLSAgICAgICAgICAgICBbJzYnLCAnU2VyaW91cyBCdWcnXSwgWyc3JywgJ090aGVyJ11dKQotCi0gIGRlZiBzYXZlQ29uZmlnVmFsdWUoc2VsZik6Ci0gICAgcmV0dXJuIEZhbHNlCi0gICAgCi0gIGRlZiBnZXRWYWx1ZShzZWxmLHIsYnVndHlwZSxnZXRDb25maWdPcHRpb24pOgotICAgIGlmIGJ1Z3R5cGUuZmluZCgibGVhayIpICE9IC0xOgotICAgICAgcmV0dXJuICczJwotICAgIGVsaWYgYnVndHlwZS5maW5kKCJkZXJlZmVyZW5jZSIpICE9IC0xOgotICAgICAgcmV0dXJuICcyJwotICAgIGVsaWYgYnVndHlwZS5maW5kKCJtaXNzaW5nIGl2YXIgcmVsZWFzZSIpICE9IC0xOgotICAgICAgcmV0dXJuICczJwotICAgIGVsc2U6Ci0gICAgICByZXR1cm4gJzcnCi0KLWNsYXNzIFJhZGFyUmVwb3J0ZXI6Ci0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBpc0F2YWlsYWJsZSgpOgotICAgICAgICAjIEZJWE1FOiBGaW5kIHRoaXMgLnNjcHQgYmV0dGVyCi0gICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwnLi4vc2hhcmUvc2Nhbi12aWV3L0dldFJhZGFyVmVyc2lvbi5zY3B0JykKLSAgICAgICAgdHJ5OgotICAgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFsnb3Nhc2NyaXB0JyxwYXRoXSwgCi0gICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSkKLSAgICAgICAgZXhjZXB0OgotICAgICAgICAgICAgcmV0dXJuIEZhbHNlCi0gICAgICAgIGRhdGEsZXJyID0gcC5jb21tdW5pY2F0ZSgpCi0gICAgICAgIHJlcyA9IHAud2FpdCgpCi0gICAgICAgICMgRklYTUU6IENoZWNrIHZlcnNpb24/IENoZWNrIGZvciBubyBlcnJvcnM/Ci0gICAgICAgIHJldHVybiByZXMgPT0gMAotCi0gICAgZGVmIGdldE5hbWUoc2VsZik6Ci0gICAgICAgIHJldHVybiAnUmFkYXInCi0KLSAgICBkZWYgZ2V0UGFyYW1ldGVycyhzZWxmKToKLSAgICAgICAgcmV0dXJuIFsgVGV4dFBhcmFtZXRlcignQ29tcG9uZW50JyksIFRleHRQYXJhbWV0ZXIoJ0NvbXBvbmVudCBWZXJzaW9uJyksCi0gICAgICAgICAgICAgICAgIFJhZGFyQ2xhc3NpZmljYXRpb25QYXJhbWV0ZXIoKSBdCi0KLSAgICBkZWYgZmlsZVJlcG9ydChzZWxmLCByZXBvcnQsIHBhcmFtZXRlcnMpOgotICAgICAgICBjb21wb25lbnQgPSBwYXJhbWV0ZXJzLmdldCgnQ29tcG9uZW50JywgJycpCi0gICAgICAgIGNvbXBvbmVudFZlcnNpb24gPSBwYXJhbWV0ZXJzLmdldCgnQ29tcG9uZW50IFZlcnNpb24nLCAnJykKLSAgICAgICAgY2xhc3NpZmljYXRpb24gPSBwYXJhbWV0ZXJzLmdldCgnQ2xhc3NpZmljYXRpb24nLCAnJykKLSAgICAgICAgcGVyc29uSUQgPSAiIgotICAgICAgICBkaWFnbm9zaXMgPSAiIgotICAgICAgICBjb25maWcgPSAiIgotCi0gICAgICAgIGlmIG5vdCBjb21wb25lbnQuc3RyaXAoKToKLSAgICAgICAgICAgIGNvbXBvbmVudCA9ICdCdWdzIGZvdW5kIGJ5IGNsYW5nIEFuYWx5emVyJwotICAgICAgICBpZiBub3QgY29tcG9uZW50VmVyc2lvbi5zdHJpcCgpOgotICAgICAgICAgICAgY29tcG9uZW50VmVyc2lvbiA9ICdYJwotCi0gICAgICAgIHNjcmlwdCA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pLCcuLi9zaGFyZS9zY2FuLXZpZXcvRmlsZVJhZGFyLnNjcHQnKQotICAgICAgICBhcmdzID0gWydvc2FzY3JpcHQnLCBzY3JpcHQsIGNvbXBvbmVudCwgY29tcG9uZW50VmVyc2lvbiwgY2xhc3NpZmljYXRpb24sIHBlcnNvbklELCByZXBvcnQudGl0bGUsCi0gICAgICAgICAgICAgICAgcmVwb3J0LmRlc2NyaXB0aW9uLCBkaWFnbm9zaXMsIGNvbmZpZ10gKyBtYXAob3MucGF0aC5hYnNwYXRoLCByZXBvcnQuZmlsZXMpCi0jICAgICAgICBwcmludCA+PnN5cy5zdGRlcnIsIGFyZ3MKLSAgICAgICAgdHJ5OgotICAgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKGFyZ3MsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUpCi0gICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgIHJhaXNlIFJlcG9ydEZhaWx1cmUoIlVuYWJsZSB0byBmaWxlIHJhZGFyIChBcHBsZVNjcmlwdCBmYWlsdXJlKS4iKQotICAgICAgICBkYXRhLCBlcnIgPSBwLmNvbW11bmljYXRlKCkKLSAgICAgICAgcmVzID0gcC53YWl0KCkKLQotICAgICAgICBpZiByZXM6Ci0gICAgICAgICAgICByYWlzZSBSZXBvcnRGYWlsdXJlKCJVbmFibGUgdG8gZmlsZSByYWRhciAoQXBwbGVTY3JpcHQgZmFpbHVyZSkuIikKLQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICB2YWx1ZXMgPSBldmFsKGRhdGEpCi0gICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgIHJhaXNlIFJlcG9ydEZhaWx1cmUoIlVuYWJsZSB0byBwcm9jZXNzIHJhZGFyIHJlc3VsdHMuIikKLQotICAgICAgICAjIFdlIGV4cGVjdCAoaW50OiBidWdJRCwgc3RyOiBtZXNzYWdlKQotICAgICAgICBpZiBsZW4odmFsdWVzKSAhPSAyIG9yIG5vdCBpc2luc3RhbmNlKHZhbHVlc1swXSwgaW50KToKLSAgICAgICAgICAgIHJhaXNlIFJlcG9ydEZhaWx1cmUoIlVuYWJsZSB0byBwcm9jZXNzIHJhZGFyIHJlc3VsdHMuIikKLQotICAgICAgICBidWdJRCxtZXNzYWdlID0gdmFsdWVzCi0gICAgICAgIGJ1Z0lEID0gaW50KGJ1Z0lEKQotICAgICAgICAKLSAgICAgICAgaWYgbm90IGJ1Z0lEOgotICAgICAgICAgICAgcmFpc2UgUmVwb3J0RmFpbHVyZShtZXNzYWdlKQotICAgICAgICAKLSAgICAgICAgcmV0dXJuICJGaWxlZDogPGEgaHJlZj1cInJkYXI6Ly8lZC9cIj4lZDwvYT4iJShidWdJRCxidWdJRCkKLQotIyMjCi0KLWRlZiBnZXRSZXBvcnRlcnMoKToKLSAgICByZXBvcnRlcnMgPSBbXQotICAgIGlmIFJhZGFyUmVwb3J0ZXIuaXNBdmFpbGFibGUoKToKLSAgICAgICAgcmVwb3J0ZXJzLmFwcGVuZChSYWRhclJlcG9ydGVyKCkpCi0gICAgcmVwb3J0ZXJzLmFwcGVuZChFbWFpbFJlcG9ydGVyKCkpCi0gICAgcmV0dXJuIHJlcG9ydGVycwotCmRpZmYgLS1naXQgYS9jbGFuZy0yNTc3MTEzL3Rvb2xzL3NjYW4tdmlldy9zaGFyZS9TY2FuVmlldy5weSBiL2NsYW5nLTI1NzcxMTMvdG9vbHMvc2Nhbi12aWV3L3NoYXJlL1NjYW5WaWV3LnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZGMwMzUxLi4wMDAwMDAwCi0tLSBhL2NsYW5nLTI1NzcxMTMvdG9vbHMvc2Nhbi12aWV3L3NoYXJlL1NjYW5WaWV3LnB5CisrKyAvZGV2L251bGwKQEAgLTEsNzY3ICswLDAgQEAKLWltcG9ydCBCYXNlSFRUUFNlcnZlcgotaW1wb3J0IFNpbXBsZUhUVFBTZXJ2ZXIKLWltcG9ydCBvcwotaW1wb3J0IHN5cwotaW1wb3J0IHVybGxpYiwgdXJscGFyc2UKLWltcG9ydCBwb3NpeHBhdGgKLWltcG9ydCBTdHJpbmdJTwotaW1wb3J0IHJlCi1pbXBvcnQgc2h1dGlsCi1pbXBvcnQgdGhyZWFkaW5nCi1pbXBvcnQgdGltZQotaW1wb3J0IHNvY2tldAotaW1wb3J0IGl0ZXJ0b29scwotCi1pbXBvcnQgUmVwb3J0ZXIKLWltcG9ydCBDb25maWdQYXJzZXIKLQotIyMjCi0jIFZhcmlvdXMgcGF0dGVybnMgbWF0Y2hlZCBvciByZXBsYWNlZCBieSBzZXJ2ZXIuCi0KLWtSZXBvcnRGaWxlUkUgPSByZS5jb21waWxlKCcoLiovKT9yZXBvcnQtKC4qKVxcLmh0bWwnKQotCi1rQnVnS2V5VmFsdWVSRSA9IHJlLmNvbXBpbGUoJzwhLS0gQlVHKFteIF0qKSAoLiopIC0tPicpCi0KLSMgIDwhLS0gUkVQT1JUUFJPQkxFTSBmaWxlPSJjcmFzaGVzL2NsYW5nX2NyYXNoX25kU0dGOS5taSIgc3RkZXJyPSJjcmFzaGVzL2NsYW5nX2NyYXNoX25kU0dGOS5taS5zdGRlcnIudHh0IiBpbmZvPSJjcmFzaGVzL2NsYW5nX2NyYXNoX25kU0dGOS5taS5pbmZvIiAtLT4KLQota1JlcG9ydENyYXNoRW50cnlSRSA9IHJlLmNvbXBpbGUoJzwhLS0gUkVQT1JUUFJPQkxFTSAoLio/KS0tPicpCi1rUmVwb3J0Q3Jhc2hFbnRyeUtleVZhbHVlUkUgPSByZS5jb21waWxlKCcgPyhbXj1dKyk9IiguKj8pIicpCi0KLWtSZXBvcnRSZXBsYWNlbWVudHMgPSBbXQotCi0jIEFkZCBjdXN0b20gamF2YXNjcmlwdC4KLWtSZXBvcnRSZXBsYWNlbWVudHMuYXBwZW5kKChyZS5jb21waWxlKCc8IS0tIFNVTU1BUllFTkRIRUFEIC0tPicpLCAiIiJcCi08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotZnVuY3Rpb24gbG9hZCh1cmwpIHsKLSAgaWYgKHdpbmRvdy5YTUxIdHRwUmVxdWVzdCkgewotICAgIHJlcSA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOwotICB9IGVsc2UgaWYgKHdpbmRvdy5BY3RpdmVYT2JqZWN0KSB7Ci0gICAgcmVxID0gbmV3IEFjdGl2ZVhPYmplY3QoIk1pY3Jvc29mdC5YTUxIVFRQIik7Ci0gIH0KLSAgaWYgKHJlcSAhPSB1bmRlZmluZWQpIHsKLSAgICByZXEub3BlbigiR0VUIiwgdXJsLCB0cnVlKTsKLSAgICByZXEuc2VuZCgiIik7Ci0gIH0KLX0KLTwvc2NyaXB0PiIiIikpCi0KLSMgSW5zZXJ0IGFkZGl0aW9uYWwgY29sdW1ucy4KLWtSZXBvcnRSZXBsYWNlbWVudHMuYXBwZW5kKChyZS5jb21waWxlKCc8IS0tIFJFUE9SVEJVR0NPTCAtLT4nKSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJzx0ZD48L3RkPjx0ZD48L3RkPicpKQotCi0jIEluc2VydCByZXBvcnQgYnVnIGFuZCBvcGVuIGZpbGUgbGlua3MuCi1rUmVwb3J0UmVwbGFjZW1lbnRzLmFwcGVuZCgocmUuY29tcGlsZSgnPCEtLSBSRVBPUlRCVUcgaWQ9InJlcG9ydC0oLiopXFwuaHRtbCIgLS0+JyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKCc8dGQgY2xhc3M9IkJ1dHRvbiI+PGEgaHJlZj0icmVwb3J0L1xcMSI+UmVwb3J0IEJ1ZzwvYT48L3RkPicgKyAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzx0ZCBjbGFzcz0iQnV0dG9uIj48YSBocmVmPSJqYXZhc2NyaXB0OmxvYWQoXCdvcGVuL1xcMVwnKSI+T3BlbiBGaWxlPC9hPjwvdGQ+JykpKQotCi1rUmVwb3J0UmVwbGFjZW1lbnRzLmFwcGVuZCgocmUuY29tcGlsZSgnPCEtLSBSRVBPUlRIRUFERVIgLS0+JyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPGgzPjxhIGhyZWY9Ii8iPlN1bW1hcnk8L2E+ID4gUmVwb3J0ICUocmVwb3J0KXM8L2gzPicpKQotCi1rUmVwb3J0UmVwbGFjZW1lbnRzLmFwcGVuZCgocmUuY29tcGlsZSgnPCEtLSBSRVBPUlRTVU1NQVJZRVhUUkEgLS0+JyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJzx0ZCBjbGFzcz0iQnV0dG9uIj48YSBocmVmPSJyZXBvcnQvJShyZXBvcnQpcyI+UmVwb3J0IEJ1ZzwvYT48L3RkPicpKQotCi0jIEluc2VydCByZXBvcnQgY3Jhc2hlcyBsaW5rLgotCi0jIERpc2FibGVkIGZvciB0aGUgdGltZSBiZWluZyB1bnRpbCB3ZSBkZWNpZGUgZXhhY3RseSB3aGVuIHRoaXMgc2hvdWxkCi0jIGJlIGVuYWJsZWQuIEFsc28gdGhlIHJhZGFyIHJlcG9ydGVyIG5lZWRzIHRvIGJlIGZpeGVkIHRvIHJlcG9ydAotIyBtdWx0aXBsZSBmaWxlcy4KLQotI2tSZXBvcnRSZXBsYWNlbWVudHMuYXBwZW5kKChyZS5jb21waWxlKCc8IS0tIFJFUE9SVENSQVNIRVMgLS0+JyksCi0jICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8YnI+VGhlc2UgZmlsZXMgd2lsbCBhdXRvbWF0aWNhbGx5IGJlIGF0dGFjaGVkIHRvICcgKwotIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAncmVwb3J0cyBmaWxlZCBoZXJlOiA8YSBocmVmPSJyZXBvcnRfY3Jhc2hlcyI+UmVwb3J0IENyYXNoZXM8L2E+LicpKQotCi0jIyMKLSMgT3RoZXIgc2ltcGxlIHBhcmFtZXRlcnMKLQota1NoYXJlID0gcG9zaXhwYXRoLmpvaW4ocG9zaXhwYXRoLmRpcm5hbWUoX19maWxlX18pLCAnLi4vc2hhcmUvc2Nhbi12aWV3JykKLWtDb25maWdQYXRoID0gb3MucGF0aC5leHBhbmR1c2VyKCd+Ly5zY2Fudmlldy5jZmcnKQotCi0jIyMKLQotX192ZXJzaW9uX18gPSAiMC4xIgotCi1fX2FsbF9fID0gWyJjcmVhdGVfc2VydmVyIl0KLQotY2xhc3MgUmVwb3J0ZXJUaHJlYWQodGhyZWFkaW5nLlRocmVhZCk6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHJlcG9ydCwgcmVwb3J0ZXIsIHBhcmFtZXRlcnMsIHNlcnZlcik6Ci0gICAgICAgIHRocmVhZGluZy5UaHJlYWQuX19pbml0X18oc2VsZikKLSAgICAgICAgc2VsZi5yZXBvcnQgPSByZXBvcnQKLSAgICAgICAgc2VsZi5zZXJ2ZXIgPSBzZXJ2ZXIKLSAgICAgICAgc2VsZi5yZXBvcnRlciA9IHJlcG9ydGVyCi0gICAgICAgIHNlbGYucGFyYW1ldGVycyA9IHBhcmFtZXRlcnMKLSAgICAgICAgc2VsZi5zdWNjZXNzID0gRmFsc2UKLSAgICAgICAgc2VsZi5zdGF0dXMgPSBOb25lCi0KLSAgICBkZWYgcnVuKHNlbGYpOgotICAgICAgICByZXN1bHQgPSBOb25lCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGlmIHNlbGYuc2VydmVyLm9wdGlvbnMuZGVidWc6Ci0gICAgICAgICAgICAgICAgcHJpbnQgPj5zeXMuc3RkZXJyLCAiJXM6IFNFUlZFUjogc3VibWl0dGluZyBidWcuIiUoc3lzLmFyZ3ZbMF0sKQotICAgICAgICAgICAgc2VsZi5zdGF0dXMgPSBzZWxmLnJlcG9ydGVyLmZpbGVSZXBvcnQoc2VsZi5yZXBvcnQsIHNlbGYucGFyYW1ldGVycykKLSAgICAgICAgICAgIHNlbGYuc3VjY2VzcyA9IFRydWUKLSAgICAgICAgICAgIHRpbWUuc2xlZXAoMykKLSAgICAgICAgICAgIGlmIHNlbGYuc2VydmVyLm9wdGlvbnMuZGVidWc6Ci0gICAgICAgICAgICAgICAgcHJpbnQgPj5zeXMuc3RkZXJyLCAiJXM6IFNFUlZFUjogc3VibWlzc2lvbiBjb21wbGV0ZS4iJShzeXMuYXJndlswXSwpCi0gICAgICAgIGV4Y2VwdCBSZXBvcnRlci5SZXBvcnRGYWlsdXJlLGU6Ci0gICAgICAgICAgICBzZWxmLnN0YXR1cyA9IGUudmFsdWUKLSAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbixlOgotICAgICAgICAgICAgcyA9IFN0cmluZ0lPLlN0cmluZ0lPKCkKLSAgICAgICAgICAgIGltcG9ydCB0cmFjZWJhY2sKLSAgICAgICAgICAgIHByaW50ID4+cywnPGI+VW5oYW5kbGVkIEV4Y2VwdGlvbjwvYj48YnI+PHByZT4nCi0gICAgICAgICAgICB0cmFjZWJhY2sucHJpbnRfZXhjKGUsZmlsZT1zKQotICAgICAgICAgICAgcHJpbnQgPj5zLCc8L3ByZT4nCi0gICAgICAgICAgICBzZWxmLnN0YXR1cyA9IHMuZ2V0dmFsdWUoKQotCi1jbGFzcyBTY2FuVmlld1NlcnZlcihCYXNlSFRUUFNlcnZlci5IVFRQU2VydmVyKToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgYWRkcmVzcywgaGFuZGxlciwgcm9vdCwgcmVwb3J0ZXJzLCBvcHRpb25zKToKLSAgICAgICAgQmFzZUhUVFBTZXJ2ZXIuSFRUUFNlcnZlci5fX2luaXRfXyhzZWxmLCBhZGRyZXNzLCBoYW5kbGVyKQotICAgICAgICBzZWxmLnJvb3QgPSByb290Ci0gICAgICAgIHNlbGYucmVwb3J0ZXJzID0gcmVwb3J0ZXJzCi0gICAgICAgIHNlbGYub3B0aW9ucyA9IG9wdGlvbnMgICAgICAgIAotICAgICAgICBzZWxmLmhhbHRlZCA9IEZhbHNlCi0gICAgICAgIHNlbGYuY29uZmlnID0gTm9uZQotICAgICAgICBzZWxmLmxvYWRfY29uZmlnKCkKLQotICAgIGRlZiBsb2FkX2NvbmZpZyhzZWxmKToKLSAgICAgICAgc2VsZi5jb25maWcgPSBDb25maWdQYXJzZXIuUmF3Q29uZmlnUGFyc2VyKCkKLQotICAgICAgICAjIEFkZCBkZWZhdWx0cwotICAgICAgICBzZWxmLmNvbmZpZy5hZGRfc2VjdGlvbignU2NhblZpZXcnKQotICAgICAgICBmb3IgciBpbiBzZWxmLnJlcG9ydGVyczoKLSAgICAgICAgICAgIHNlbGYuY29uZmlnLmFkZF9zZWN0aW9uKHIuZ2V0TmFtZSgpKQotICAgICAgICAgICAgZm9yIHAgaW4gci5nZXRQYXJhbWV0ZXJzKCk6Ci0gICAgICAgICAgICAgIGlmIHAuc2F2ZUNvbmZpZ1ZhbHVlKCk6Ci0gICAgICAgICAgICAgICAgc2VsZi5jb25maWcuc2V0KHIuZ2V0TmFtZSgpLCBwLmdldE5hbWUoKSwgJycpCi0KLSAgICAgICAgIyBJZ25vcmUgcGFyc2UgZXJyb3JzCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHNlbGYuY29uZmlnLnJlYWQoW2tDb25maWdQYXRoXSkKLSAgICAgICAgZXhjZXB0OgotICAgICAgICAgICAgcGFzcwotCi0gICAgICAgICMgU2F2ZSBvbiBleGl0Ci0gICAgICAgIGltcG9ydCBhdGV4aXQKLSAgICAgICAgYXRleGl0LnJlZ2lzdGVyKGxhbWJkYTogc2VsZi5zYXZlX2NvbmZpZygpKQotICAgICAgICAKLSAgICBkZWYgc2F2ZV9jb25maWcoc2VsZik6Ci0gICAgICAgICMgSWdub3JlIGVycm9ycyAob25seSBjYWxsZWQgb24gZXhpdCkuCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGYgPSBvcGVuKGtDb25maWdQYXRoLCd3JykKLSAgICAgICAgICAgIHNlbGYuY29uZmlnLndyaXRlKGYpCi0gICAgICAgICAgICBmLmNsb3NlKCkKLSAgICAgICAgZXhjZXB0OgotICAgICAgICAgICAgcGFzcwotICAgICAgICAKLSAgICBkZWYgaGFsdChzZWxmKToKLSAgICAgICAgc2VsZi5oYWx0ZWQgPSBUcnVlCi0gICAgICAgIGlmIHNlbGYub3B0aW9ucy5kZWJ1ZzoKLSAgICAgICAgICAgIHByaW50ID4+c3lzLnN0ZGVyciwgIiVzOiBTRVJWRVI6IGhhbHRpbmcuIiAlIChzeXMuYXJndlswXSwpCi0KLSAgICBkZWYgc2VydmVfZm9yZXZlcihzZWxmKToKLSAgICAgICAgd2hpbGUgbm90IHNlbGYuaGFsdGVkOgotICAgICAgICAgICAgaWYgc2VsZi5vcHRpb25zLmRlYnVnID4gMToKLSAgICAgICAgICAgICAgICBwcmludCA+PnN5cy5zdGRlcnIsICIlczogU0VSVkVSOiB3YWl0aW5nLi4uIiAlIChzeXMuYXJndlswXSwpCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgc2VsZi5oYW5kbGVfcmVxdWVzdCgpCi0gICAgICAgICAgICBleGNlcHQgT1NFcnJvcixlOgotICAgICAgICAgICAgICAgIHByaW50ICdPU0Vycm9yJyxlLmVycm5vCi0KLSAgICBkZWYgZmluaXNoX3JlcXVlc3Qoc2VsZiwgcmVxdWVzdCwgY2xpZW50X2FkZHJlc3MpOgotICAgICAgICBpZiBzZWxmLm9wdGlvbnMuYXV0b1JlbG9hZDoKLSAgICAgICAgICAgIGltcG9ydCBTY2FuVmlldwotICAgICAgICAgICAgc2VsZi5SZXF1ZXN0SGFuZGxlckNsYXNzID0gcmVsb2FkKFNjYW5WaWV3KS5TY2FuVmlld1JlcXVlc3RIYW5kbGVyCi0gICAgICAgIEJhc2VIVFRQU2VydmVyLkhUVFBTZXJ2ZXIuZmluaXNoX3JlcXVlc3Qoc2VsZiwgcmVxdWVzdCwgY2xpZW50X2FkZHJlc3MpCi0KLSAgICBkZWYgaGFuZGxlX2Vycm9yKHNlbGYsIHJlcXVlc3QsIGNsaWVudF9hZGRyZXNzKToKLSAgICAgICAgIyBJZ25vcmUgc29ja2V0IGVycm9ycwotICAgICAgICBpbmZvID0gc3lzLmV4Y19pbmZvKCkKLSAgICAgICAgaWYgaW5mbyBhbmQgaXNpbnN0YW5jZShpbmZvWzFdLCBzb2NrZXQuZXJyb3IpOgotICAgICAgICAgICAgaWYgc2VsZi5vcHRpb25zLmRlYnVnID4gMToKLSAgICAgICAgICAgICAgICBwcmludCA+PnN5cy5zdGRlcnIsICIlczogU0VSVkVSOiBpZ25vcmVkIHNvY2tldCBlcnJvci4iICUgKHN5cy5hcmd2WzBdLCkKLSAgICAgICAgICAgIHJldHVybgotICAgICAgICBCYXNlSFRUUFNlcnZlci5IVFRQU2VydmVyLmhhbmRsZV9lcnJvcihzZWxmLCByZXF1ZXN0LCBjbGllbnRfYWRkcmVzcykKLQotIyBCb3Jyb3dlZCBmcm9tIFF1aXhvdGUsIHdpdGggc2ltcGxpZmljYXRpb25zLgotZGVmIHBhcnNlX3F1ZXJ5KHFzLCBmaWVsZHM9Tm9uZSk6Ci0gICAgaWYgZmllbGRzIGlzIE5vbmU6Ci0gICAgICAgIGZpZWxkcyA9IHt9Ci0gICAgZm9yIGNodW5rIGluIGZpbHRlcihOb25lLCBxcy5zcGxpdCgnJicpKToKLSAgICAgICAgaWYgJz0nIG5vdCBpbiBjaHVuazoKLSAgICAgICAgICAgIG5hbWUgPSBjaHVuawotICAgICAgICAgICAgdmFsdWUgPSAnJwotICAgICAgICBlbHNlOgotICAgICAgICAgICAgbmFtZSwgdmFsdWUgPSBjaHVuay5zcGxpdCgnPScsIDEpCi0gICAgICAgIG5hbWUgPSB1cmxsaWIudW5xdW90ZShuYW1lLnJlcGxhY2UoJysnLCAnICcpKQotICAgICAgICB2YWx1ZSA9IHVybGxpYi51bnF1b3RlKHZhbHVlLnJlcGxhY2UoJysnLCAnICcpKQotICAgICAgICBpdGVtID0gZmllbGRzLmdldChuYW1lKQotICAgICAgICBpZiBpdGVtIGlzIE5vbmU6Ci0gICAgICAgICAgICBmaWVsZHNbbmFtZV0gPSBbdmFsdWVdCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBpdGVtLmFwcGVuZCh2YWx1ZSkKLSAgICByZXR1cm4gZmllbGRzCi0KLWNsYXNzIFNjYW5WaWV3UmVxdWVzdEhhbmRsZXIoU2ltcGxlSFRUUFNlcnZlci5TaW1wbGVIVFRQUmVxdWVzdEhhbmRsZXIpOgotICAgIHNlcnZlcl92ZXJzaW9uID0gIlNjYW5WaWV3U2VydmVyLyIgKyBfX3ZlcnNpb25fXwotICAgIGR5bmFtaWNfbXRpbWUgPSB0aW1lLnRpbWUoKQotCi0gICAgZGVmIGRvX0hFQUQoc2VsZik6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIFNpbXBsZUhUVFBTZXJ2ZXIuU2ltcGxlSFRUUFJlcXVlc3RIYW5kbGVyLmRvX0hFQUQoc2VsZikKLSAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbixlOgotICAgICAgICAgICAgc2VsZi5oYW5kbGVfZXhjZXB0aW9uKGUpCi0gICAgICAgICAgICAKLSAgICBkZWYgZG9fR0VUKHNlbGYpOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBTaW1wbGVIVFRQU2VydmVyLlNpbXBsZUhUVFBSZXF1ZXN0SGFuZGxlci5kb19HRVQoc2VsZikKLSAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbixlOgotICAgICAgICAgICAgc2VsZi5oYW5kbGVfZXhjZXB0aW9uKGUpCi0gICAgICAgICAgICAKLSAgICBkZWYgZG9fUE9TVChzZWxmKToKLSAgICAgICAgIiIiU2VydmUgYSBQT1NUIHJlcXVlc3QuIiIiCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGxlbmd0aCA9IHNlbGYuaGVhZGVycy5nZXRoZWFkZXIoJ2NvbnRlbnQtbGVuZ3RoJykgb3IgIjAiCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgbGVuZ3RoID0gaW50KGxlbmd0aCkKLSAgICAgICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgICAgICBsZW5ndGggPSAwCi0gICAgICAgICAgICBjb250ZW50ID0gc2VsZi5yZmlsZS5yZWFkKGxlbmd0aCkKLSAgICAgICAgICAgIGZpZWxkcyA9IHBhcnNlX3F1ZXJ5KGNvbnRlbnQpCi0gICAgICAgICAgICBmID0gc2VsZi5zZW5kX2hlYWQoZmllbGRzKQotICAgICAgICAgICAgaWYgZjoKLSAgICAgICAgICAgICAgICBzZWxmLmNvcHlmaWxlKGYsIHNlbGYud2ZpbGUpCi0gICAgICAgICAgICAgICAgZi5jbG9zZSgpCi0gICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sZToKLSAgICAgICAgICAgIHNlbGYuaGFuZGxlX2V4Y2VwdGlvbihlKSAgICAgICAgICAgIAotCi0gICAgZGVmIGxvZ19tZXNzYWdlKHNlbGYsIGZvcm1hdCwgKmFyZ3MpOgotICAgICAgICBpZiBzZWxmLnNlcnZlci5vcHRpb25zLmRlYnVnOgotICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiJXM6IFNFUlZFUjogJXMgLSAtIFslc10gJXNcbiIgJQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3lzLmFyZ3ZbMF0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFkZHJlc3Nfc3RyaW5nKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxvZ19kYXRlX3RpbWVfc3RyaW5nKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQlYXJncykpCi0KLSAgICBkZWYgbG9hZF9yZXBvcnQoc2VsZiwgcmVwb3J0KToKLSAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbihzZWxmLnNlcnZlci5yb290LCAncmVwb3J0LSVzLmh0bWwnJXJlcG9ydCkKLSAgICAgICAgZGF0YSA9IG9wZW4ocGF0aCkucmVhZCgpCi0gICAgICAgIGtleXMgPSB7fQotICAgICAgICBmb3IgaXRlbSBpbiBrQnVnS2V5VmFsdWVSRS5maW5kaXRlcihkYXRhKToKLSAgICAgICAgICAgIGssdiA9IGl0ZW0uZ3JvdXBzKCkKLSAgICAgICAgICAgIGtleXNba10gPSB2Ci0gICAgICAgIHJldHVybiBrZXlzCi0KLSAgICBkZWYgbG9hZF9jcmFzaGVzKHNlbGYpOgotICAgICAgICBwYXRoID0gcG9zaXhwYXRoLmpvaW4oc2VsZi5zZXJ2ZXIucm9vdCwgJ2luZGV4Lmh0bWwnKQotICAgICAgICBkYXRhID0gb3BlbihwYXRoKS5yZWFkKCkKLSAgICAgICAgcHJvYmxlbXMgPSBbXQotICAgICAgICBmb3IgaXRlbSBpbiBrUmVwb3J0Q3Jhc2hFbnRyeVJFLmZpbmRpdGVyKGRhdGEpOgotICAgICAgICAgICAgZmllbGREYXRhID0gaXRlbS5ncm91cCgxKQotICAgICAgICAgICAgZmllbGRzID0gZGljdChbaS5ncm91cHMoKSBmb3IgaSBpbiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGtSZXBvcnRDcmFzaEVudHJ5S2V5VmFsdWVSRS5maW5kaXRlcihmaWVsZERhdGEpXSkKLSAgICAgICAgICAgIHByb2JsZW1zLmFwcGVuZChmaWVsZHMpCi0gICAgICAgIHJldHVybiBwcm9ibGVtcwotCi0gICAgZGVmIGhhbmRsZV9leGNlcHRpb24oc2VsZiwgZXhjKToKLSAgICAgICAgaW1wb3J0IHRyYWNlYmFjawotICAgICAgICBzID0gU3RyaW5nSU8uU3RyaW5nSU8oKQotICAgICAgICBwcmludCA+PnMsICJJTlRFUk5BTCBFUlJPUlxuIgotICAgICAgICB0cmFjZWJhY2sucHJpbnRfZXhjKGV4YywgcykKLSAgICAgICAgZiA9IHNlbGYuc2VuZF9zdHJpbmcocy5nZXR2YWx1ZSgpLCAndGV4dC9wbGFpbicpCi0gICAgICAgIGlmIGY6Ci0gICAgICAgICAgICBzZWxmLmNvcHlmaWxlKGYsIHNlbGYud2ZpbGUpCi0gICAgICAgICAgICBmLmNsb3NlKCkgICAgICAgIAotICAgICAgICAgICAgCi0gICAgZGVmIGdldF9zY2FsYXJfZmllbGQoc2VsZiwgbmFtZSk6Ci0gICAgICAgIGlmIG5hbWUgaW4gc2VsZi5maWVsZHM6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5maWVsZHNbbmFtZV1bMF0KLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJldHVybiBOb25lCi0KLSAgICBkZWYgc3VibWl0X2J1ZyhzZWxmLCBjKToKLSAgICAgICAgdGl0bGUgPSBzZWxmLmdldF9zY2FsYXJfZmllbGQoJ3RpdGxlJykKLSAgICAgICAgZGVzY3JpcHRpb24gPSBzZWxmLmdldF9zY2FsYXJfZmllbGQoJ2Rlc2NyaXB0aW9uJykKLSAgICAgICAgcmVwb3J0ID0gc2VsZi5nZXRfc2NhbGFyX2ZpZWxkKCdyZXBvcnQnKQotICAgICAgICByZXBvcnRlckluZGV4ID0gc2VsZi5nZXRfc2NhbGFyX2ZpZWxkKCdyZXBvcnRlcicpCi0gICAgICAgIGZpbGVzID0gW10KLSAgICAgICAgZm9yIGZpbGVJRCBpbiBzZWxmLmZpZWxkcy5nZXQoJ2ZpbGVzJyxbXSk6Ci0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgaSA9IGludChmaWxlSUQpCi0gICAgICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICAgICAgaSA9IE5vbmUKLSAgICAgICAgICAgIGlmIGkgaXMgTm9uZSBvciBpPDAgb3IgaT49bGVuKGMuZmlsZXMpOgotICAgICAgICAgICAgICAgIHJldHVybiAoRmFsc2UsICdJbnZhbGlkIGZpbGUgSUQnKQotICAgICAgICAgICAgZmlsZXMuYXBwZW5kKGMuZmlsZXNbaV0pCi0gICAgICAgIAotICAgICAgICBpZiBub3QgdGl0bGU6Ci0gICAgICAgICAgICByZXR1cm4gKEZhbHNlLCAiTWlzc2luZyB0aXRsZS4iKQotICAgICAgICBpZiBub3QgZGVzY3JpcHRpb246Ci0gICAgICAgICAgICByZXR1cm4gKEZhbHNlLCAiTWlzc2luZyBkZXNjcmlwdGlvbi4iKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICByZXBvcnRlckluZGV4ID0gaW50KHJlcG9ydGVySW5kZXgpCi0gICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgIHJldHVybiAoRmFsc2UsICJJbnZhbGlkIHJlcG9ydCBtZXRob2QuIikKLSAgICAgICAgCi0gICAgICAgICMgR2V0IHRoZSByZXBvcnRlciBhbmQgcGFyYW1ldGVycy4KLSAgICAgICAgcmVwb3J0ZXIgPSBzZWxmLnNlcnZlci5yZXBvcnRlcnNbcmVwb3J0ZXJJbmRleF0KLSAgICAgICAgcGFyYW1ldGVycyA9IHt9Ci0gICAgICAgIGZvciBvIGluIHJlcG9ydGVyLmdldFBhcmFtZXRlcnMoKToKLSAgICAgICAgICAgIG5hbWUgPSAnJXNfJXMnJShyZXBvcnRlci5nZXROYW1lKCksby5nZXROYW1lKCkpCi0gICAgICAgICAgICBpZiBuYW1lIG5vdCBpbiBzZWxmLmZpZWxkczoKLSAgICAgICAgICAgICAgICByZXR1cm4gKEZhbHNlLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICdNaXNzaW5nIGZpZWxkICIlcyIgZm9yICVzIHJlcG9ydCBtZXRob2QuJyUobmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3J0ZXIuZ2V0TmFtZSgpKSkKLSAgICAgICAgICAgIHBhcmFtZXRlcnNbby5nZXROYW1lKCldID0gc2VsZi5nZXRfc2NhbGFyX2ZpZWxkKG5hbWUpCi0KLSAgICAgICAgIyBVcGRhdGUgY29uZmlnIGRlZmF1bHRzLgotICAgICAgICBpZiByZXBvcnQgIT0gJ05vbmUnOgotICAgICAgICAgICAgc2VsZi5zZXJ2ZXIuY29uZmlnLnNldCgnU2NhblZpZXcnLCAncmVwb3J0ZXInLCByZXBvcnRlckluZGV4KQotICAgICAgICAgICAgZm9yIG8gaW4gcmVwb3J0ZXIuZ2V0UGFyYW1ldGVycygpOgotICAgICAgICAgICAgICBpZiBvLnNhdmVDb25maWdWYWx1ZSgpOgotICAgICAgICAgICAgICAgIG5hbWUgPSBvLmdldE5hbWUoKQotICAgICAgICAgICAgICAgIHNlbGYuc2VydmVyLmNvbmZpZy5zZXQocmVwb3J0ZXIuZ2V0TmFtZSgpLCBuYW1lLCBwYXJhbWV0ZXJzW25hbWVdKQotCi0gICAgICAgICMgQ3JlYXRlIHRoZSByZXBvcnQuCi0gICAgICAgIGJ1ZyA9IFJlcG9ydGVyLkJ1Z1JlcG9ydCh0aXRsZSwgZGVzY3JpcHRpb24sIGZpbGVzKQotCi0gICAgICAgICMgS2ljayBvZmYgYSByZXBvcnRpbmcgdGhyZWFkLgotICAgICAgICB0ID0gUmVwb3J0ZXJUaHJlYWQoYnVnLCByZXBvcnRlciwgcGFyYW1ldGVycywgc2VsZi5zZXJ2ZXIpCi0gICAgICAgIHQuc3RhcnQoKQotCi0gICAgICAgICMgV2FpdCBmb3IgdGhyZWFkIHRvIGRpZS4uLgotICAgICAgICB3aGlsZSB0LmlzQWxpdmUoKToKLSAgICAgICAgICAgIHRpbWUuc2xlZXAoLjI1KQotICAgICAgICBzdWJtaXRTdGF0dXMgPSB0LnN0YXR1cwotCi0gICAgICAgIHJldHVybiAodC5zdWNjZXNzLCB0LnN0YXR1cykKLQotICAgIGRlZiBzZW5kX3JlcG9ydF9zdWJtaXQoc2VsZik6Ci0gICAgICAgIHJlcG9ydCA9IHNlbGYuZ2V0X3NjYWxhcl9maWVsZCgncmVwb3J0JykKLSAgICAgICAgYyA9IHNlbGYuZ2V0X3JlcG9ydF9jb250ZXh0KHJlcG9ydCkKLSAgICAgICAgaWYgYy5yZXBvcnRTb3VyY2UgaXMgTm9uZToKLSAgICAgICAgICAgIHJlcG9ydGluZ0ZvciA9ICJSZXBvcnQgQ3Jhc2hlcyA+ICIKLSAgICAgICAgICAgIGZpbGVCdWcgPSAiIiJcCi08YSBocmVmPSIvcmVwb3J0X2NyYXNoZXMiPkZpbGUgQnVnPC9hPiA+ICIiIiVsb2NhbHMoKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmVwb3J0aW5nRm9yID0gJzxhIGhyZWY9Ii8lcyI+UmVwb3J0ICVzPC9hPiA+ICcgJSAoYy5yZXBvcnRTb3VyY2UsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9ydCkKLSAgICAgICAgICAgIGZpbGVCdWcgPSAnPGEgaHJlZj0iL3JlcG9ydC8lcyI+RmlsZSBCdWc8L2E+ID4gJyAlIHJlcG9ydAotICAgICAgICB0aXRsZSA9IHNlbGYuZ2V0X3NjYWxhcl9maWVsZCgndGl0bGUnKQotICAgICAgICBkZXNjcmlwdGlvbiA9IHNlbGYuZ2V0X3NjYWxhcl9maWVsZCgnZGVzY3JpcHRpb24nKQotCi0gICAgICAgIHJlcyxtZXNzYWdlID0gc2VsZi5zdWJtaXRfYnVnKGMpCi0KLSAgICAgICAgaWYgcmVzOgotICAgICAgICAgICAgc3RhdHVzQ2xhc3MgPSAnU3VibWl0T2snCi0gICAgICAgICAgICBzdGF0dXNOYW1lID0gJ1N1Y2NlZWRlZCcKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHN0YXR1c0NsYXNzID0gJ1N1Ym1pdEZhaWwnCi0gICAgICAgICAgICBzdGF0dXNOYW1lID0gJ0ZhaWxlZCcKLQotICAgICAgICByZXN1bHQgPSAiIiIKLTxoZWFkPgotICA8dGl0bGU+QnVnIFN1Ym1pc3Npb248L3RpdGxlPgotICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSIvc2NhbnZpZXcuY3NzIiAvPgotPC9oZWFkPgotPGJvZHk+Ci08aDM+Ci08YSBocmVmPSIvIj5TdW1tYXJ5PC9hPiA+IAotJShyZXBvcnRpbmdGb3IpcwotJShmaWxlQnVnKXMKLVN1Ym1pdDwvaDM+Ci08Zm9ybSBuYW1lPSJmb3JtIiBhY3Rpb249IiI+Ci08dGFibGUgY2xhc3M9ImZvcm0iPgotPHRyPjx0ZD4KLTx0YWJsZSBjbGFzcz0iZm9ybV9ncm91cCI+Ci08dHI+Ci0gIDx0ZCBjbGFzcz0iZm9ybV9jbGFiZWwiPlRpdGxlOjwvdGQ+Ci0gIDx0ZCBjbGFzcz0iZm9ybV92YWx1ZSI+Ci0gICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9InRpdGxlIiBzaXplPSI1MCIgdmFsdWU9IiUodGl0bGUpcyIgZGlzYWJsZWQ+Ci0gIDwvdGQ+Ci08L3RyPgotPHRyPgotICA8dGQgY2xhc3M9ImZvcm1fbGFiZWwiPkRlc2NyaXB0aW9uOjwvdGQ+Ci0gIDx0ZCBjbGFzcz0iZm9ybV92YWx1ZSI+Ci08dGV4dGFyZWEgcm93cz0iMTAiIGNvbHM9IjgwIiBuYW1lPSJkZXNjcmlwdGlvbiIgZGlzYWJsZWQ+Ci0lKGRlc2NyaXB0aW9uKXMKLTwvdGV4dGFyZWE+Ci0gIDwvdGQ+Ci08L3RhYmxlPgotPC90ZD48L3RyPgotPC90YWJsZT4KLTwvZm9ybT4KLTxoMSBjbGFzcz0iJShzdGF0dXNDbGFzcylzIj5TdWJtaXNzaW9uICUoc3RhdHVzTmFtZSlzPC9oMT4KLSUobWVzc2FnZSlzCi08cD4KLTxocj4KLTxhIGhyZWY9Ii8iPlJldHVybiB0byBTdW1tYXJ5PC9hPgotPC9ib2R5PgotPC9odG1sPiIiIiVsb2NhbHMoKQotICAgICAgICByZXR1cm4gc2VsZi5zZW5kX3N0cmluZyhyZXN1bHQpCi0KLSAgICBkZWYgc2VuZF9vcGVuX3JlcG9ydChzZWxmLCByZXBvcnQpOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBrZXlzID0gc2VsZi5sb2FkX3JlcG9ydChyZXBvcnQpCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYuc2VuZF9lcnJvcig0MDAsICdJbnZhbGlkIHJlcG9ydC4nKQotCi0gICAgICAgIGZpbGUgPSBrZXlzLmdldCgnRklMRScpCi0gICAgICAgIGlmIG5vdCBmaWxlIG9yIG5vdCBwb3NpeHBhdGguZXhpc3RzKGZpbGUpOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYuc2VuZF9lcnJvcig0MDAsICdGaWxlIGRvZXMgbm90IGV4aXN0OiAiJXMiJyAlIGZpbGUpCi0KLSAgICAgICAgaW1wb3J0IHN0YXJ0ZmlsZQotICAgICAgICBpZiBzZWxmLnNlcnZlci5vcHRpb25zLmRlYnVnOgotICAgICAgICAgICAgcHJpbnQgPj5zeXMuc3RkZXJyLCAnJXM6IFNFUlZFUjogb3BlbmluZyAiJXMiJyUoc3lzLmFyZ3ZbMF0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlKQotCi0gICAgICAgIHN0YXR1cyA9IHN0YXJ0ZmlsZS5vcGVuKGZpbGUpCi0gICAgICAgIGlmIHN0YXR1czoKLSAgICAgICAgICAgIHJlcyA9ICdPcGVuZWQ6ICIlcyInICUgZmlsZQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmVzID0gJ09wZW4gZmFpbGVkOiAiJXMiJyAlIGZpbGUKLQotICAgICAgICByZXR1cm4gc2VsZi5zZW5kX3N0cmluZyhyZXMsICd0ZXh0L3BsYWluJykKLQotICAgIGRlZiBnZXRfcmVwb3J0X2NvbnRleHQoc2VsZiwgcmVwb3J0KToKLSAgICAgICAgY2xhc3MgQ29udGV4dDoKLSAgICAgICAgICAgIHBhc3MKLSAgICAgICAgaWYgcmVwb3J0IGlzIE5vbmUgb3IgcmVwb3J0ID09ICdOb25lJzoKLSAgICAgICAgICAgIGRhdGEgPSBzZWxmLmxvYWRfY3Jhc2hlcygpCi0gICAgICAgICAgICAjIERvbid0IGFsbG93IGVtcHR5IHJlcG9ydHMuCi0gICAgICAgICAgICBpZiBub3QgZGF0YToKLSAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yLCAnTm8gY3Jhc2hlcyBkZXRlY3RlZCEnCi0gICAgICAgICAgICBjID0gQ29udGV4dCgpCi0gICAgICAgICAgICBjLnRpdGxlID0gJ2NsYW5nIHN0YXRpYyBhbmFseXplciBmYWlsdXJlcycKLQotICAgICAgICAgICAgc3RkZXJyU3VtbWFyeSA9ICIiCi0gICAgICAgICAgICBmb3IgaXRlbSBpbiBkYXRhOgotICAgICAgICAgICAgICAgIGlmICdzdGRlcnInIGluIGl0ZW06Ci0gICAgICAgICAgICAgICAgICAgIHBhdGggPSBwb3NpeHBhdGguam9pbihzZWxmLnNlcnZlci5yb290LCBpdGVtWydzdGRlcnInXSkKLSAgICAgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMocGF0aCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBsbnMgPSBpdGVydG9vbHMuaXNsaWNlKG9wZW4ocGF0aCksIDAsIDEwKQotICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyU3VtbWFyeSArPSAnJXNcbi0tXG4lcycgJSAoaXRlbS5nZXQoJ3NyYycsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzx1bmtub3duPicpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJycuam9pbihsbnMpKQotCi0gICAgICAgICAgICBjLmRlc2NyaXB0aW9uID0gIiIiXAotVGhlIGNsYW5nIHN0YXRpYyBhbmFseXplciBmYWlsZWQgb24gdGhlc2UgaW5wdXRzOgotJXMKLQotU1RERVJSIFN1bW1hcnkKLS0tLS0tLS0tLS0tLS0tCi0lcwotIiIiICUgKCdcbicuam9pbihbaXRlbS5nZXQoJ3NyYycsJzx1bmtub3duPicpIGZvciBpdGVtIGluIGRhdGFdKSwKLSAgICAgICBzdGRlcnJTdW1tYXJ5KQotICAgICAgICAgICAgYy5yZXBvcnRTb3VyY2UgPSBOb25lCi0gICAgICAgICAgICBjLm5hdk1hcmt1cCA9ICJSZXBvcnQgQ3Jhc2hlcyA+ICIKLSAgICAgICAgICAgIGMuZmlsZXMgPSBbXQotICAgICAgICAgICAgZm9yIGl0ZW0gaW4gZGF0YTogICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgYy5maWxlcy5hcHBlbmQoaXRlbS5nZXQoJ3NyYycsJycpKQotICAgICAgICAgICAgICAgIGMuZmlsZXMuYXBwZW5kKHBvc2l4cGF0aC5qb2luKHNlbGYuc2VydmVyLnJvb3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5nZXQoJ2ZpbGUnLCcnKSkpCi0gICAgICAgICAgICAgICAgYy5maWxlcy5hcHBlbmQocG9zaXhwYXRoLmpvaW4oc2VsZi5zZXJ2ZXIucm9vdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLmdldCgnY2xhbmdmaWxlJywnJykpKQotICAgICAgICAgICAgICAgIGMuZmlsZXMuYXBwZW5kKHBvc2l4cGF0aC5qb2luKHNlbGYuc2VydmVyLnJvb3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5nZXQoJ3N0ZGVycicsJycpKSkKLSAgICAgICAgICAgICAgICBjLmZpbGVzLmFwcGVuZChwb3NpeHBhdGguam9pbihzZWxmLnNlcnZlci5yb290LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uZ2V0KCdpbmZvJywnJykpKQotICAgICAgICAgICAgIyBKdXN0IGluIGNhc2Ugc29tZXRoaW5nIGZhaWxlZCwgaWdub3JlIGZpbGVzIHdoaWNoIGRvbid0Ci0gICAgICAgICAgICAjIGV4aXN0LgotICAgICAgICAgICAgYy5maWxlcyA9IFtmIGZvciBmIGluIGMuZmlsZXMKLSAgICAgICAgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoZikgYW5kIG9zLnBhdGguaXNmaWxlKGYpXQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgIyBDaGVjayB0aGF0IHRoaXMgaXMgYSB2YWxpZCByZXBvcnQuICAgICAgICAgICAgCi0gICAgICAgICAgICBwYXRoID0gcG9zaXhwYXRoLmpvaW4oc2VsZi5zZXJ2ZXIucm9vdCwgJ3JlcG9ydC0lcy5odG1sJyAlIHJlcG9ydCkKLSAgICAgICAgICAgIGlmIG5vdCBwb3NpeHBhdGguZXhpc3RzKHBhdGgpOgotICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IsICdJbnZhbGlkIHJlcG9ydCBJRCcKLSAgICAgICAgICAgIGtleXMgPSBzZWxmLmxvYWRfcmVwb3J0KHJlcG9ydCkKLSAgICAgICAgICAgIGMgPSBDb250ZXh0KCkKLSAgICAgICAgICAgIGMudGl0bGUgPSBrZXlzLmdldCgnREVTQycsJ2NsYW5nIGVycm9yICh1bnJlY29nbml6ZWQnKQotICAgICAgICAgICAgYy5kZXNjcmlwdGlvbiA9ICIiIlwKLUJ1ZyByZXBvcnRlZCBieSB0aGUgY2xhbmcgc3RhdGljIGFuYWx5emVyLgotCi1EZXNjcmlwdGlvbjogJXMKLUZpbGU6ICVzCi1MaW5lOiAlcwotIiIiJShjLnRpdGxlLCBrZXlzLmdldCgnRklMRScsJzx1bmtub3duPicpLCBrZXlzLmdldCgnTElORScsICc8dW5rbm93bj4nKSkKLSAgICAgICAgICAgIGMucmVwb3J0U291cmNlID0gJ3JlcG9ydC0lcy5odG1sJyAlIHJlcG9ydAotICAgICAgICAgICAgYy5uYXZNYXJrdXAgPSAiIiI8YSBocmVmPSIvJXMiPlJlcG9ydCAlczwvYT4gPiAiIiIgJSAoYy5yZXBvcnRTb3VyY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBvcnQpCi0KLSAgICAgICAgICAgIGMuZmlsZXMgPSBbcGF0aF0KLSAgICAgICAgcmV0dXJuIGMKLQotICAgIGRlZiBzZW5kX3JlcG9ydChzZWxmLCByZXBvcnQsIGNvbmZpZ092ZXJyaWRlcz1Ob25lKToKLSAgICAgICAgZGVmIGdldENvbmZpZ09wdGlvbihzZWN0aW9uLCBmaWVsZCk6ICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoY29uZmlnT3ZlcnJpZGVzIGlzIG5vdCBOb25lIGFuZAotICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gY29uZmlnT3ZlcnJpZGVzIGFuZAotICAgICAgICAgICAgICAgIGZpZWxkIGluIGNvbmZpZ092ZXJyaWRlc1tzZWN0aW9uXSk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGNvbmZpZ092ZXJyaWRlc1tzZWN0aW9uXVtmaWVsZF0KLSAgICAgICAgICAgIHJldHVybiBzZWxmLnNlcnZlci5jb25maWcuZ2V0KHNlY3Rpb24sIGZpZWxkKQotCi0gICAgICAgICMgcmVwb3J0IGlzIE5vbmUgaXMgdXNlZCBmb3IgY3Jhc2hlcwotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBjID0gc2VsZi5nZXRfcmVwb3J0X2NvbnRleHQocmVwb3J0KQotICAgICAgICBleGNlcHQgVmFsdWVFcnJvciwgZToKLSAgICAgICAgICAgIHJldHVybiBzZWxmLnNlbmRfZXJyb3IoNDAwLCBlLm1lc3NhZ2UpCi0KLSAgICAgICAgdGl0bGUgPSBjLnRpdGxlCi0gICAgICAgIGRlc2NyaXB0aW9uPSBjLmRlc2NyaXB0aW9uCi0gICAgICAgIHJlcG9ydGluZ0ZvciA9IGMubmF2TWFya3VwCi0gICAgICAgIGlmIGMucmVwb3J0U291cmNlIGlzIE5vbmU6Ci0gICAgICAgICAgICBleHRyYUlGcmFtZSA9ICIiCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBleHRyYUlGcmFtZSA9ICIiIlwKLTxpZnJhbWUgc3JjPSIvJXMiIHdpZHRoPSIxMDAlJSIgaGVpZ2h0PSI0MCUlIgotICAgICAgICBzY3JvbGxpbmc9ImF1dG8iIGZyYW1lYm9yZGVyPSIxIj4KLSAgPGEgaHJlZj0iLyVzIj5WaWV3IEJ1ZyBSZXBvcnQ8L2E+Ci08L2lmcmFtZT4iIiIgJSAoYy5yZXBvcnRTb3VyY2UsIGMucmVwb3J0U291cmNlKQotCi0gICAgICAgIHJlcG9ydGVyU2VsZWN0aW9ucyA9IFtdCi0gICAgICAgIHJlcG9ydGVyT3B0aW9ucyA9IFtdCi0KLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgYWN0aXZlID0gaW50KGdldENvbmZpZ09wdGlvbignU2NhblZpZXcnLCdyZXBvcnRlcicpKQotICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICBhY3RpdmUgPSAwCi0gICAgICAgIGZvciBpLHIgaW4gZW51bWVyYXRlKHNlbGYuc2VydmVyLnJlcG9ydGVycyk6Ci0gICAgICAgICAgICBzZWxlY3RlZCA9IChpID09IGFjdGl2ZSkKLSAgICAgICAgICAgIGlmIHNlbGVjdGVkOgotICAgICAgICAgICAgICAgIHNlbGVjdGVkU3RyID0gJyBzZWxlY3RlZCcKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgc2VsZWN0ZWRTdHIgPSAnJwotICAgICAgICAgICAgcmVwb3J0ZXJTZWxlY3Rpb25zLmFwcGVuZCgnPG9wdGlvbiB2YWx1ZT0iJWQiJXM+JXM8L29wdGlvbj4nJShpLHNlbGVjdGVkU3RyLHIuZ2V0TmFtZSgpKSkKLSAgICAgICAgICAgIG9wdGlvbnMgPSAnXG4nLmpvaW4oWyBvLmdldEhUTUwocix0aXRsZSxnZXRDb25maWdPcHRpb24pIGZvciBvIGluIHIuZ2V0UGFyYW1ldGVycygpXSkKLSAgICAgICAgICAgIGRpc3BsYXkgPSAoJ25vbmUnLCcnKVtzZWxlY3RlZF0KLSAgICAgICAgICAgIHJlcG9ydGVyT3B0aW9ucy5hcHBlbmQoIiIiXAotPHRyIGlkPSIlc1JlcG9ydGVyT3B0aW9ucyIgc3R5bGU9ImRpc3BsYXk6JXMiPgotICA8dGQgY2xhc3M9ImZvcm1fbGFiZWwiPiVzIE9wdGlvbnM8L3RkPgotICA8dGQgY2xhc3M9ImZvcm1fdmFsdWUiPgotICAgIDx0YWJsZSBjbGFzcz0iZm9ybV9pbm5lcl9ncm91cCI+Ci0lcwotICAgIDwvdGFibGU+Ci0gIDwvdGQ+Ci08L3RyPgotIiIiJShyLmdldE5hbWUoKSxkaXNwbGF5LHIuZ2V0TmFtZSgpLG9wdGlvbnMpKQotICAgICAgICByZXBvcnRlclNlbGVjdGlvbnMgPSAnXG4nLmpvaW4ocmVwb3J0ZXJTZWxlY3Rpb25zKQotICAgICAgICByZXBvcnRlck9wdGlvbnNEaXZzID0gJ1xuJy5qb2luKHJlcG9ydGVyT3B0aW9ucykKLSAgICAgICAgcmVwb3J0ZXJzQXJyYXkgPSAnWyVzXSclKCcsJy5qb2luKFtgci5nZXROYW1lKClgIGZvciByIGluIHNlbGYuc2VydmVyLnJlcG9ydGVyc10pKQotCi0gICAgICAgIGlmIGMuZmlsZXM6Ci0gICAgICAgICAgICBmaWVsZFNpemUgPSBtaW4oNSwgbGVuKGMuZmlsZXMpKQotICAgICAgICAgICAgYXR0YWNoRmlsZU9wdGlvbnMgPSAnXG4nLmpvaW4oWyIiIlwKLTxvcHRpb24gdmFsdWU9IiVkIiBzZWxlY3RlZD4lczwvb3B0aW9uPiIiIiAlIChpLHYpIGZvciBpLHYgaW4gZW51bWVyYXRlKGMuZmlsZXMpXSkKLSAgICAgICAgICAgIGF0dGFjaEZpbGVSb3cgPSAiIiJcCi08dHI+Ci0gIDx0ZCBjbGFzcz0iZm9ybV9sYWJlbCI+QXR0YWNoOjwvdGQ+Ci0gIDx0ZCBjbGFzcz0iZm9ybV92YWx1ZSI+Ci08c2VsZWN0IHN0eWxlPSJ3aWR0aDoxMDAlJSIgbmFtZT0iZmlsZXMiIG11bHRpcGxlIHNpemU9JWQ+Ci0lcwotPC9zZWxlY3Q+Ci0gIDwvdGQ+Ci08L3RyPgotIiIiICUgKG1pbig1LCBsZW4oYy5maWxlcykpLCBhdHRhY2hGaWxlT3B0aW9ucykKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGF0dGFjaEZpbGVSb3cgPSAiIgotCi0gICAgICAgIHJlc3VsdCA9ICIiIjxodG1sPgotPGhlYWQ+Ci0gIDx0aXRsZT5GaWxlIEJ1ZzwvdGl0bGU+Ci0gIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Ii9zY2Fudmlldy5jc3MiIC8+Ci08L2hlYWQ+Ci08c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotdmFyIHJlcG9ydGVycyA9ICUocmVwb3J0ZXJzQXJyYXkpczsKLWZ1bmN0aW9uIHVwZGF0ZVJlcG9ydGVyT3B0aW9ucygpIHsKLSAgaW5kZXggPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmVwb3J0ZXInKS5zZWxlY3RlZEluZGV4OwotICBmb3IgKHZhciBpPTA7IGkgPCByZXBvcnRlcnMubGVuZ3RoOyArK2kpIHsKLSAgICBvID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQocmVwb3J0ZXJzW2ldICsgIlJlcG9ydGVyT3B0aW9ucyIpOwotICAgIGlmIChpID09IGluZGV4KSB7Ci0gICAgICBvLnN0eWxlLmRpc3BsYXkgPSAiIjsKLSAgICB9IGVsc2UgewotICAgICAgby5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwotICAgIH0KLSAgfQotfQotPC9zY3JpcHQ+Ci08Ym9keSBvbkxvYWQ9InVwZGF0ZVJlcG9ydGVyT3B0aW9ucygpIj4KLTxoMz4KLTxhIGhyZWY9Ii8iPlN1bW1hcnk8L2E+ID4gCi0lKHJlcG9ydGluZ0ZvcilzCi1GaWxlIEJ1ZzwvaDM+Ci08Zm9ybSBuYW1lPSJmb3JtIiBhY3Rpb249Ii9yZXBvcnRfc3VibWl0IiBtZXRob2Q9InBvc3QiPgotPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0icmVwb3J0IiB2YWx1ZT0iJShyZXBvcnQpcyI+Ci0KLTx0YWJsZSBjbGFzcz0iZm9ybSI+Ci08dHI+PHRkPgotPHRhYmxlIGNsYXNzPSJmb3JtX2dyb3VwIj4KLTx0cj4KLSAgPHRkIGNsYXNzPSJmb3JtX2NsYWJlbCI+VGl0bGU6PC90ZD4KLSAgPHRkIGNsYXNzPSJmb3JtX3ZhbHVlIj4KLSAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0idGl0bGUiIHNpemU9IjUwIiB2YWx1ZT0iJSh0aXRsZSlzIj4KLSAgPC90ZD4KLTwvdHI+Ci08dHI+Ci0gIDx0ZCBjbGFzcz0iZm9ybV9sYWJlbCI+RGVzY3JpcHRpb246PC90ZD4KLSAgPHRkIGNsYXNzPSJmb3JtX3ZhbHVlIj4KLTx0ZXh0YXJlYSByb3dzPSIxMCIgY29scz0iODAiIG5hbWU9ImRlc2NyaXB0aW9uIj4KLSUoZGVzY3JpcHRpb24pcwotPC90ZXh0YXJlYT4KLSAgPC90ZD4KLTwvdHI+Ci0KLSUoYXR0YWNoRmlsZVJvdylzCi0KLTwvdGFibGU+Ci08YnI+Ci08dGFibGUgY2xhc3M9ImZvcm1fZ3JvdXAiPgotPHRyPgotICA8dGQgY2xhc3M9ImZvcm1fY2xhYmVsIj5NZXRob2Q6PC90ZD4KLSAgPHRkIGNsYXNzPSJmb3JtX3ZhbHVlIj4KLSAgICA8c2VsZWN0IGlkPSJyZXBvcnRlciIgbmFtZT0icmVwb3J0ZXIiIG9uQ2hhbmdlPSJ1cGRhdGVSZXBvcnRlck9wdGlvbnMoKSI+Ci0gICAgJShyZXBvcnRlclNlbGVjdGlvbnMpcwotICAgIDwvc2VsZWN0PgotICA8L3RkPgotPC90cj4KLSUocmVwb3J0ZXJPcHRpb25zRGl2cylzCi08L3RhYmxlPgotPGJyPgotPC90ZD48L3RyPgotPHRyPjx0ZCBjbGFzcz0iZm9ybV9zdWJtaXQiPgotICA8aW5wdXQgYWxpZ249InJpZ2h0IiB0eXBlPSJzdWJtaXQiIG5hbWU9IlN1Ym1pdCIgdmFsdWU9IlN1Ym1pdCI+Ci08L3RkPjwvdHI+Ci08L3RhYmxlPgotPC9mb3JtPgotCi0lKGV4dHJhSUZyYW1lKXMKLQotPC9ib2R5PgotPC9odG1sPiIiIiVsb2NhbHMoKQotCi0gICAgICAgIHJldHVybiBzZWxmLnNlbmRfc3RyaW5nKHJlc3VsdCkKLQotICAgIGRlZiBzZW5kX2hlYWQoc2VsZiwgZmllbGRzPU5vbmUpOgotICAgICAgICBpZiAoc2VsZi5zZXJ2ZXIub3B0aW9ucy5vbmx5U2VydmVMb2NhbCBhbmQKLSAgICAgICAgICAgIHNlbGYuY2xpZW50X2FkZHJlc3NbMF0gIT0gJzEyNy4wLjAuMScpOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYuc2VuZF9lcnJvcig0MDEsICdVbmF1dGhvcml6ZWQgaG9zdC4nKQotCi0gICAgICAgIGlmIGZpZWxkcyBpcyBOb25lOgotICAgICAgICAgICAgZmllbGRzID0ge30KLSAgICAgICAgc2VsZi5maWVsZHMgPSBmaWVsZHMKLQotICAgICAgICBvID0gdXJscGFyc2UudXJscGFyc2Uoc2VsZi5wYXRoKQotICAgICAgICBzZWxmLmZpZWxkcyA9IHBhcnNlX3F1ZXJ5KG8ucXVlcnksIGZpZWxkcykKLSAgICAgICAgcGF0aCA9IHBvc2l4cGF0aC5ub3JtcGF0aCh1cmxsaWIudW5xdW90ZShvLnBhdGgpKQotCi0gICAgICAgICMgU3BsaXQgdGhlIGNvbXBvbmVudHMgYW5kIHN0cmlwIHRoZSByb290IHByZWZpeC4KLSAgICAgICAgY29tcG9uZW50cyA9IHBhdGguc3BsaXQoJy8nKVsxOl0KLSAgICAgICAgCi0gICAgICAgICMgU3BlY2lhbCBjYXNlIHNvbWUgdG9wLWxldmVsIGVudHJpZXMuCi0gICAgICAgIGlmIGNvbXBvbmVudHM6Ci0gICAgICAgICAgICBuYW1lID0gY29tcG9uZW50c1swXQotICAgICAgICAgICAgaWYgbGVuKGNvbXBvbmVudHMpPT0yOgotICAgICAgICAgICAgICAgIGlmIG5hbWU9PSdyZXBvcnQnOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5zZW5kX3JlcG9ydChjb21wb25lbnRzWzFdKQotICAgICAgICAgICAgICAgIGVsaWYgbmFtZT09J29wZW4nOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5zZW5kX29wZW5fcmVwb3J0KGNvbXBvbmVudHNbMV0pCi0gICAgICAgICAgICBlbGlmIGxlbihjb21wb25lbnRzKT09MToKLSAgICAgICAgICAgICAgICBpZiBuYW1lPT0ncXVpdCc6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuc2VydmVyLmhhbHQoKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5zZW5kX3N0cmluZygnR29vZGJ5ZS4nLCAndGV4dC9wbGFpbicpCi0gICAgICAgICAgICAgICAgZWxpZiBuYW1lPT0ncmVwb3J0X3N1Ym1pdCc6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnNlbmRfcmVwb3J0X3N1Ym1pdCgpCi0gICAgICAgICAgICAgICAgZWxpZiBuYW1lPT0ncmVwb3J0X2NyYXNoZXMnOgotICAgICAgICAgICAgICAgICAgICBvdmVycmlkZXMgPSB7ICdTY2FuVmlldycgOiB7fSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnUmFkYXInIDoge30sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0VtYWlsJyA6IHt9IH0KLSAgICAgICAgICAgICAgICAgICAgZm9yIGksciBpbiBlbnVtZXJhdGUoc2VsZi5zZXJ2ZXIucmVwb3J0ZXJzKToKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIHIuZ2V0TmFtZSgpID09ICdSYWRhcic6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcnJpZGVzWydTY2FuVmlldyddWydyZXBvcnRlciddID0gaQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICAgICAgICAgIG92ZXJyaWRlc1snUmFkYXInXVsnQ29tcG9uZW50J10gPSAnbGx2bSAtIGNoZWNrZXInCi0gICAgICAgICAgICAgICAgICAgIG92ZXJyaWRlc1snUmFkYXInXVsnQ29tcG9uZW50IFZlcnNpb24nXSA9ICdYJwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5zZW5kX3JlcG9ydChOb25lLCBvdmVycmlkZXMpCi0gICAgICAgICAgICAgICAgZWxpZiBuYW1lPT0nZmF2aWNvbi5pY28nOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5zZW5kX3BhdGgocG9zaXhwYXRoLmpvaW4oa1NoYXJlLCdidWdjYXRjaGVyLmljbycpKQotICAgICAgICAKLSAgICAgICAgIyBNYXRjaCBkaXJlY3RvcnkgZW50cmllcy4KLSAgICAgICAgaWYgY29tcG9uZW50c1stMV0gPT0gJyc6Ci0gICAgICAgICAgICBjb21wb25lbnRzWy0xXSA9ICdpbmRleC5odG1sJwotCi0gICAgICAgIHJlbHBhdGggPSAnLycuam9pbihjb21wb25lbnRzKQotICAgICAgICBwYXRoID0gcG9zaXhwYXRoLmpvaW4oc2VsZi5zZXJ2ZXIucm9vdCwgcmVscGF0aCkKLQotICAgICAgICBpZiBzZWxmLnNlcnZlci5vcHRpb25zLmRlYnVnID4gMToKLSAgICAgICAgICAgIHByaW50ID4+c3lzLnN0ZGVyciwgJyVzOiBTRVJWRVI6IHNlbmRpbmcgcGF0aCAiJXMiJyUoc3lzLmFyZ3ZbMF0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGgpCi0gICAgICAgIHJldHVybiBzZWxmLnNlbmRfcGF0aChwYXRoKQotCi0gICAgZGVmIHNlbmRfNDA0KHNlbGYpOgotICAgICAgICBzZWxmLnNlbmRfZXJyb3IoNDA0LCAiRmlsZSBub3QgZm91bmQiKQotICAgICAgICByZXR1cm4gTm9uZQotCi0gICAgZGVmIHNlbmRfcGF0aChzZWxmLCBwYXRoKToKLSAgICAgICAgIyBJZiB0aGUgcmVxdWVzdGVkIHBhdGggaXMgb3V0c2lkZSB0aGUgcm9vdCBkaXJlY3RvcnksIGRvIG5vdCBvcGVuIGl0Ci0gICAgICAgIHJlbCA9IG9zLnBhdGguYWJzcGF0aChwYXRoKQotICAgICAgICBpZiBub3QgcmVsLnN0YXJ0c3dpdGgob3MucGF0aC5hYnNwYXRoKHNlbGYuc2VydmVyLnJvb3QpKToKLSAgICAgICAgICByZXR1cm4gc2VsZi5zZW5kXzQwNCgpCi0gICAgICAgIAotICAgICAgICBjdHlwZSA9IHNlbGYuZ3Vlc3NfdHlwZShwYXRoKQotICAgICAgICBpZiBjdHlwZS5zdGFydHN3aXRoKCd0ZXh0LycpOgotICAgICAgICAgICAgIyBQYXRjaCBmaWxlIGluc3RlYWQKLSAgICAgICAgICAgIHJldHVybiBzZWxmLnNlbmRfcGF0Y2hlZF9maWxlKHBhdGgsIGN0eXBlKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgbW9kZSA9ICdyYicKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgZiA9IG9wZW4ocGF0aCwgbW9kZSkKLSAgICAgICAgZXhjZXB0IElPRXJyb3I6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5zZW5kXzQwNCgpCi0gICAgICAgIHJldHVybiBzZWxmLnNlbmRfZmlsZShmLCBjdHlwZSkKLQotICAgIGRlZiBzZW5kX2ZpbGUoc2VsZiwgZiwgY3R5cGUpOgotICAgICAgICAjIFBhdGNoIGZpbGVzIHRvIGFkZCBsaW5rcywgYnV0IHNraXAgYmluYXJ5IGZpbGVzLgotICAgICAgICBzZWxmLnNlbmRfcmVzcG9uc2UoMjAwKQotICAgICAgICBzZWxmLnNlbmRfaGVhZGVyKCJDb250ZW50LXR5cGUiLCBjdHlwZSkKLSAgICAgICAgZnMgPSBvcy5mc3RhdChmLmZpbGVubygpKQotICAgICAgICBzZWxmLnNlbmRfaGVhZGVyKCJDb250ZW50LUxlbmd0aCIsIHN0cihmc1s2XSkpCi0gICAgICAgIHNlbGYuc2VuZF9oZWFkZXIoIkxhc3QtTW9kaWZpZWQiLCBzZWxmLmRhdGVfdGltZV9zdHJpbmcoZnMuc3RfbXRpbWUpKQotICAgICAgICBzZWxmLmVuZF9oZWFkZXJzKCkKLSAgICAgICAgcmV0dXJuIGYKLQotICAgIGRlZiBzZW5kX3N0cmluZyhzZWxmLCBzLCBjdHlwZT0ndGV4dC9odG1sJywgaGVhZGVycz1UcnVlLCBtdGltZT1Ob25lKToKLSAgICAgICAgaWYgaGVhZGVyczoKLSAgICAgICAgICAgIHNlbGYuc2VuZF9yZXNwb25zZSgyMDApCi0gICAgICAgICAgICBzZWxmLnNlbmRfaGVhZGVyKCJDb250ZW50LXR5cGUiLCBjdHlwZSkKLSAgICAgICAgICAgIHNlbGYuc2VuZF9oZWFkZXIoIkNvbnRlbnQtTGVuZ3RoIiwgc3RyKGxlbihzKSkpCi0gICAgICAgICAgICBpZiBtdGltZSBpcyBOb25lOgotICAgICAgICAgICAgICAgIG10aW1lID0gc2VsZi5keW5hbWljX210aW1lCi0gICAgICAgICAgICBzZWxmLnNlbmRfaGVhZGVyKCJMYXN0LU1vZGlmaWVkIiwgc2VsZi5kYXRlX3RpbWVfc3RyaW5nKG10aW1lKSkKLSAgICAgICAgICAgIHNlbGYuZW5kX2hlYWRlcnMoKQotICAgICAgICByZXR1cm4gU3RyaW5nSU8uU3RyaW5nSU8ocykKLQotICAgIGRlZiBzZW5kX3BhdGNoZWRfZmlsZShzZWxmLCBwYXRoLCBjdHlwZSk6Ci0gICAgICAgICMgQWxsb3cgYSB2ZXJ5IGxpbWl0ZWQgc2V0IG9mIHZhcmlhYmxlcy4gVGhpcyBpcyBwcmV0dHkgZ3Jvc3MuCi0gICAgICAgIHZhcmlhYmxlcyA9IHt9Ci0gICAgICAgIHZhcmlhYmxlc1sncmVwb3J0J10gPSAnJwotICAgICAgICBtID0ga1JlcG9ydEZpbGVSRS5tYXRjaChwYXRoKQotICAgICAgICBpZiBtOgotICAgICAgICAgICAgdmFyaWFibGVzWydyZXBvcnQnXSA9IG0uZ3JvdXAoMikKLQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBmID0gb3BlbihwYXRoLCdyJykKLSAgICAgICAgZXhjZXB0IElPRXJyb3I6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5zZW5kXzQwNCgpCi0gICAgICAgIGZzID0gb3MuZnN0YXQoZi5maWxlbm8oKSkKLSAgICAgICAgZGF0YSA9IGYucmVhZCgpCi0gICAgICAgIGZvciBhLGIgaW4ga1JlcG9ydFJlcGxhY2VtZW50czoKLSAgICAgICAgICAgIGRhdGEgPSBhLnN1YihiICUgdmFyaWFibGVzLCBkYXRhKQotICAgICAgICByZXR1cm4gc2VsZi5zZW5kX3N0cmluZyhkYXRhLCBjdHlwZSwgbXRpbWU9ZnMuc3RfbXRpbWUpCi0KLQotZGVmIGNyZWF0ZV9zZXJ2ZXIoYWRkcmVzcywgb3B0aW9ucywgcm9vdCk6Ci0gICAgaW1wb3J0IFJlcG9ydGVyCi0KLSAgICByZXBvcnRlcnMgPSBSZXBvcnRlci5nZXRSZXBvcnRlcnMoKQotCi0gICAgcmV0dXJuIFNjYW5WaWV3U2VydmVyKGFkZHJlc3MsIFNjYW5WaWV3UmVxdWVzdEhhbmRsZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHJvb3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9ydGVycywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucykKZGlmZiAtLWdpdCBhL2NsYW5nLTI1NzcxMTMvdG9vbHMvc2Nhbi12aWV3L3NoYXJlL2J1Z2NhdGNoZXIuaWNvIGIvY2xhbmctMjU3NzExMy90b29scy9zY2FuLXZpZXcvc2hhcmUvYnVnY2F0Y2hlci5pY28KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIyZDM5YjUuLjAwMDAwMDAKLS0tIGEvY2xhbmctMjU3NzExMy90b29scy9zY2FuLXZpZXcvc2hhcmUvYnVnY2F0Y2hlci5pY28KKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jbGFuZy0yNTc3MTEzL3Rvb2xzL3NjYW4tdmlldy9zaGFyZS9zdGFydGZpbGUucHkgYi9jbGFuZy0yNTc3MTEzL3Rvb2xzL3NjYW4tdmlldy9zaGFyZS9zdGFydGZpbGUucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU4ZmJlMmQuLjAwMDAwMDAKLS0tIGEvY2xhbmctMjU3NzExMy90b29scy9zY2FuLXZpZXcvc2hhcmUvc3RhcnRmaWxlLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMjAzICswLDAgQEAKLSIiIlV0aWxpdHkgZm9yIG9wZW5pbmcgYSBmaWxlIHVzaW5nIHRoZSBkZWZhdWx0IGFwcGxpY2F0aW9uIGluIGEgY3Jvc3MtcGxhdGZvcm0KLW1hbm5lci4gTW9kaWZpZWQgZnJvbSBodHRwOi8vY29kZS5hY3RpdmVzdGF0ZS5jb20vcmVjaXBlcy81MTE0NDMvLgotIiIiCi0KLV9fdmVyc2lvbl9fID0gJzEuMXgnCi1fX2FsbF9fID0gWydvcGVuJ10KLQotaW1wb3J0IG9zCi1pbXBvcnQgc3lzCi1pbXBvcnQgd2ViYnJvd3NlcgotaW1wb3J0IHN1YnByb2Nlc3MKLQotX2NvbnRyb2xsZXJzID0ge30KLV9vcGVuID0gTm9uZQotCi0KLWNsYXNzIEJhc2VDb250cm9sbGVyKG9iamVjdCk6Ci0gICAgJycnQmFzZSBjbGFzcyBmb3Igb3BlbiBwcm9ncmFtIGNvbnRyb2xsZXJzLicnJwotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUpOgotICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCi0KLSAgICBkZWYgb3BlbihzZWxmLCBmaWxlbmFtZSk6Ci0gICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKLQotCi1jbGFzcyBDb250cm9sbGVyKEJhc2VDb250cm9sbGVyKToKLSAgICAnJydDb250cm9sbGVyIGZvciBhIGdlbmVyaWMgb3BlbiBwcm9ncmFtLicnJwotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzKToKLSAgICAgICAgc3VwZXIoQ29udHJvbGxlciwgc2VsZikuX19pbml0X18ob3MucGF0aC5iYXNlbmFtZShhcmdzWzBdKSkKLSAgICAgICAgc2VsZi5hcmdzID0gbGlzdChhcmdzKQotCi0gICAgZGVmIF9pbnZva2Uoc2VsZiwgY21kbGluZSk6Ci0gICAgICAgIGlmIHN5cy5wbGF0Zm9ybVs6M10gPT0gJ3dpbic6Ci0gICAgICAgICAgICBjbG9zZWZkcyA9IEZhbHNlCi0gICAgICAgICAgICBzdGFydHVwaW5mbyA9IHN1YnByb2Nlc3MuU1RBUlRVUElORk8oKQotICAgICAgICAgICAgc3RhcnR1cGluZm8uZHdGbGFncyB8PSBzdWJwcm9jZXNzLlNUQVJURl9VU0VTSE9XV0lORE9XCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBjbG9zZWZkcyA9IFRydWUKLSAgICAgICAgICAgIHN0YXJ0dXBpbmZvID0gTm9uZQotCi0gICAgICAgIGlmIChvcy5lbnZpcm9uLmdldCgnRElTUExBWScpIG9yIHN5cy5wbGF0Zm9ybVs6M10gPT0gJ3dpbicgb3IKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXMucGxhdGZvcm0gPT0gJ2RhcndpbicpOgotICAgICAgICAgICAgaW5vdXQgPSBmaWxlKG9zLmRldm51bGwsICdyKycpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAjIGZvciBUVFkgcHJvZ3JhbXMsIHdlIG5lZWQgc3RkaW4vb3V0Ci0gICAgICAgICAgICBpbm91dCA9IE5vbmUKLQotICAgICAgICAjIGlmIHBvc3NpYmxlLCBwdXQgdGhlIGNoaWxkIHByZWNlc3MgaW4gc2VwYXJhdGUgcHJvY2VzcyBncm91cCwKLSAgICAgICAgIyBzbyBrZXlib2FyZCBpbnRlcnJ1cHRzIGRvbid0IGFmZmVjdCBjaGlsZCBwcmVjZXNzIGFzIHdlbGwgYXMKLSAgICAgICAgIyBQeXRob24KLSAgICAgICAgc2V0c2lkID0gZ2V0YXR0cihvcywgJ3NldHNpZCcsIE5vbmUpCi0gICAgICAgIGlmIG5vdCBzZXRzaWQ6Ci0gICAgICAgICAgICBzZXRzaWQgPSBnZXRhdHRyKG9zLCAnc2V0cGdycCcsIE5vbmUpCi0KLSAgICAgICAgcGlwZSA9IHN1YnByb2Nlc3MuUG9wZW4oY21kbGluZSwgc3RkaW49aW5vdXQsIHN0ZG91dD1pbm91dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPWlub3V0LCBjbG9zZV9mZHM9Y2xvc2VmZHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWV4ZWNfZm49c2V0c2lkLCBzdGFydHVwaW5mbz1zdGFydHVwaW5mbykKLQotICAgICAgICAjIEl0IGlzIGFzc3VtZWQgdGhhdCB0aGlzIGtpbmQgb2YgdG9vbHMgKGdub21lLW9wZW4sIGtmbWNsaWVudCwKLSAgICAgICAgIyBleG8tb3BlbiwgeGRnLW9wZW4gYW5kIG9wZW4gZm9yIE9TWCkgaW1tZWRpYXRlbHkgZXhpdCBhZnRlciBsYXVjaGluZwotICAgICAgICAjIHRoZSBzcGVjaWZpYyBhcHBsaWNhdGlvbgotICAgICAgICByZXR1cm5jb2RlID0gcGlwZS53YWl0KCkKLSAgICAgICAgaWYgaGFzYXR0cihzZWxmLCAnZml4cmV0dXJuY29kZScpOgotICAgICAgICAgICAgcmV0dXJuY29kZSA9IHNlbGYuZml4cmV0dXJuY29kZShyZXR1cm5jb2RlKQotICAgICAgICByZXR1cm4gbm90IHJldHVybmNvZGUKLQotICAgIGRlZiBvcGVuKHNlbGYsIGZpbGVuYW1lKToKLSAgICAgICAgaWYgaXNpbnN0YW5jZShmaWxlbmFtZSwgYmFzZXN0cmluZyk6Ci0gICAgICAgICAgICBjbWRsaW5lID0gc2VsZi5hcmdzICsgW2ZpbGVuYW1lXQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgIyBhc3N1bWUgaXQgaXMgYSBzZXF1ZW5jZQotICAgICAgICAgICAgY21kbGluZSA9IHNlbGYuYXJncyArIGZpbGVuYW1lCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHJldHVybiBzZWxmLl9pbnZva2UoY21kbGluZSkKLSAgICAgICAgZXhjZXB0IE9TRXJyb3I6Ci0gICAgICAgICAgICByZXR1cm4gRmFsc2UKLQotCi0jIFBsYXRmb3JtIHN1cHBvcnQgZm9yIFdpbmRvd3MKLWlmIHN5cy5wbGF0Zm9ybVs6M10gPT0gJ3dpbic6Ci0KLSAgICBjbGFzcyBTdGFydChCYXNlQ29udHJvbGxlcik6Ci0gICAgICAgICcnJ0NvbnRyb2xsZXIgZm9yIHRoZSB3aW4zMiBzdGFydCBwcm9nYW0gdGhyb3VnaCBvcy5zdGFydGZpbGUuJycnCi0KLSAgICAgICAgZGVmIG9wZW4oc2VsZiwgZmlsZW5hbWUpOgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIG9zLnN0YXJ0ZmlsZShmaWxlbmFtZSkKLSAgICAgICAgICAgIGV4Y2VwdCBXaW5kb3dzRXJyb3I6Ci0gICAgICAgICAgICAgICAgIyBbRXJyb3IgMjJdIE5vIGFwcGxpY2F0aW9uIGlzIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3BlY2lmaWVkCi0gICAgICAgICAgICAgICAgIyBmaWxlIGZvciB0aGlzIG9wZXJhdGlvbjogJzxVUkw+JwotICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQotCi0gICAgX2NvbnRyb2xsZXJzWyd3aW5kb3dzLWRlZmF1bHQnXSA9IFN0YXJ0KCdzdGFydCcpCi0gICAgX29wZW4gPSBfY29udHJvbGxlcnNbJ3dpbmRvd3MtZGVmYXVsdCddLm9wZW4KLQotCi0jIFBsYXRmb3JtIHN1cHBvcnQgZm9yIE1hY09TCi1lbGlmIHN5cy5wbGF0Zm9ybSA9PSAnZGFyd2luJzoKLSAgICBfY29udHJvbGxlcnNbJ29wZW4nXT0gQ29udHJvbGxlcignb3BlbicpCi0gICAgX29wZW4gPSBfY29udHJvbGxlcnNbJ29wZW4nXS5vcGVuCi0KLQotIyBQbGF0Zm9ybSBzdXBwb3J0IGZvciBVbml4Ci1lbHNlOgotCi0gICAgaW1wb3J0IGNvbW1hbmRzCi0KLSAgICAjIEBXQVJOSU5HOiB1c2UgdGhlIHByaXZhdGUgQVBJIG9mIHRoZSB3ZWJicm93c2VyIG1vZHVsZQotICAgIGZyb20gd2ViYnJvd3NlciBpbXBvcnQgX2lzY29tbWFuZAotCi0gICAgY2xhc3MgS2ZtQ2xpZW50KENvbnRyb2xsZXIpOgotICAgICAgICAnJydDb250cm9sbGVyIGZvciB0aGUgS0RFIGtmbWNsaWVudCBwcm9ncmFtLicnJwotCi0gICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBrZm1jbGllbnQ9J2tmbWNsaWVudCcpOgotICAgICAgICAgICAgc3VwZXIoS2ZtQ2xpZW50LCBzZWxmKS5fX2luaXRfXyhrZm1jbGllbnQsICdleGVjJykKLSAgICAgICAgICAgIHNlbGYua2RlX3ZlcnNpb24gPSBzZWxmLmRldGVjdF9rZGVfdmVyc2lvbigpCi0KLSAgICAgICAgZGVmIGRldGVjdF9rZGVfdmVyc2lvbihzZWxmKToKLSAgICAgICAgICAgIGtkZV92ZXJzaW9uID0gTm9uZQotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGluZm8gPSBjb21tYW5kcy5nZXRvdXRwdXQoJ2tkZS1jb25maWcgLS12ZXJzaW9uJykKLQotICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIGluZm8uc3BsaXRsaW5lcygpOgotICAgICAgICAgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJ0tERScpOgotICAgICAgICAgICAgICAgICAgICAgICAga2RlX3ZlcnNpb24gPSBsaW5lLnNwbGl0KCc6JylbLTFdLnN0cmlwKCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICBleGNlcHQgKE9TRXJyb3IsIFJ1bnRpbWVFcnJvcik6Ci0gICAgICAgICAgICAgICAgcGFzcwotCi0gICAgICAgICAgICByZXR1cm4ga2RlX3ZlcnNpb24KLQotICAgICAgICBkZWYgZml4cmV0dXJuY29kZShzZWxmLCByZXR1cm5jb2RlKToKLSAgICAgICAgICAgIGlmIHJldHVybmNvZGUgaXMgbm90IE5vbmUgYW5kIHNlbGYua2RlX3ZlcnNpb24gPiAnMy41LjQnOgotICAgICAgICAgICAgICAgIHJldHVybiByZXR1cm5jb2RlCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJldHVybiBvcy5FWF9PSwotCi0gICAgZGVmIGRldGVjdF9kZXNrdG9wX2Vudmlyb25tZW50KCk6Ci0gICAgICAgICcnJ0NoZWNrcyBmb3Iga25vd24gZGVza3RvcCBlbnZpcm9ubWVudHMKLQotICAgICAgICBSZXR1cm4gdGhlIGRlc2t0b3AgZW52aXJvbm1lbnRzIG5hbWUsIGxvd2VyY2FzZSAoa2RlLCBnbm9tZSwgeGZjZSkKLSAgICAgICAgb3IgImdlbmVyaWMiCi0KLSAgICAgICAgJycnCi0KLSAgICAgICAgZGVza3RvcF9lbnZpcm9ubWVudCA9ICdnZW5lcmljJwotCi0gICAgICAgIGlmIG9zLmVudmlyb24uZ2V0KCdLREVfRlVMTF9TRVNTSU9OJykgPT0gJ3RydWUnOgotICAgICAgICAgICAgZGVza3RvcF9lbnZpcm9ubWVudCA9ICdrZGUnCi0gICAgICAgIGVsaWYgb3MuZW52aXJvbi5nZXQoJ0dOT01FX0RFU0tUT1BfU0VTU0lPTl9JRCcpOgotICAgICAgICAgICAgZGVza3RvcF9lbnZpcm9ubWVudCA9ICdnbm9tZScKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBpbmZvID0gY29tbWFuZHMuZ2V0b3V0cHV0KCd4cHJvcCAtcm9vdCBfRFRfU0FWRV9NT0RFJykKLSAgICAgICAgICAgICAgICBpZiAnID0gInhmY2U0IicgaW4gaW5mbzoKLSAgICAgICAgICAgICAgICAgICAgZGVza3RvcF9lbnZpcm9ubWVudCA9ICd4ZmNlJwotICAgICAgICAgICAgZXhjZXB0IChPU0Vycm9yLCBSdW50aW1lRXJyb3IpOgotICAgICAgICAgICAgICAgIHBhc3MKLQotICAgICAgICByZXR1cm4gZGVza3RvcF9lbnZpcm9ubWVudAotCi0KLSAgICBkZWYgcmVnaXN0ZXJfWF9jb250cm9sbGVycygpOgotICAgICAgICBpZiBfaXNjb21tYW5kKCdrZm1jbGllbnQnKToKLSAgICAgICAgICAgIF9jb250cm9sbGVyc1sna2RlLW9wZW4nXSA9IEtmbUNsaWVudCgpCi0KLSAgICAgICAgZm9yIGNvbW1hbmQgaW4gKCdnbm9tZS1vcGVuJywgJ2V4by1vcGVuJywgJ3hkZy1vcGVuJyk6Ci0gICAgICAgICAgICBpZiBfaXNjb21tYW5kKGNvbW1hbmQpOgotICAgICAgICAgICAgICAgIF9jb250cm9sbGVyc1tjb21tYW5kXSA9IENvbnRyb2xsZXIoY29tbWFuZCkKLQotICAgIGRlZiBnZXQoKToKLSAgICAgICAgY29udHJvbGxlcnNfbWFwID0gewotICAgICAgICAgICAgJ2dub21lJzogJ2dub21lLW9wZW4nLAotICAgICAgICAgICAgJ2tkZSc6ICdrZGUtb3BlbicsCi0gICAgICAgICAgICAneGZjZSc6ICdleG8tb3BlbicsCi0gICAgICAgIH0KLQotICAgICAgICBkZXNrdG9wX2Vudmlyb25tZW50ID0gZGV0ZWN0X2Rlc2t0b3BfZW52aXJvbm1lbnQoKQotCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGNvbnRyb2xsZXJfbmFtZSA9IGNvbnRyb2xsZXJzX21hcFtkZXNrdG9wX2Vudmlyb25tZW50XQotICAgICAgICAgICAgcmV0dXJuIF9jb250cm9sbGVyc1tjb250cm9sbGVyX25hbWVdLm9wZW4KLQotICAgICAgICBleGNlcHQgS2V5RXJyb3I6Ci0gICAgICAgICAgICBpZiBfY29udHJvbGxlcnMuaGFzX2tleSgneGRnLW9wZW4nKToKLSAgICAgICAgICAgICAgICByZXR1cm4gX2NvbnRyb2xsZXJzWyd4ZGctb3BlbiddLm9wZW4KLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHdlYmJyb3dzZXIub3BlbgotCi0KLSAgICBpZiBvcy5lbnZpcm9uLmdldCgiRElTUExBWSIpOgotICAgICAgICByZWdpc3Rlcl9YX2NvbnRyb2xsZXJzKCkKLSAgICBfb3BlbiA9IGdldCgpCi0KLQotZGVmIG9wZW4oZmlsZW5hbWUpOgotICAgICcnJ09wZW4gYSBmaWxlIG9yIGFuIFVSTCBpbiB0aGUgcmVnaXN0ZXJlZCBkZWZhdWx0IGFwcGxpY2F0aW9uLicnJwotCi0gICAgcmV0dXJuIF9vcGVuKGZpbGVuYW1lKQo=